集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 5490|回复: 6

差分曼彻斯特码解码的verilog代码

[复制链接]
老怪甲 该用户已被删除
老怪甲 发表于 2010-5-18 10:58:36 | 显示全部楼层 |阅读模式
差分曼彻斯特码解码的verilog代码

我的代码:
module m_decode(clk,clk2,rst,mdi,machester);//实际的数据mdi为2046bit

input clk,clk2,rst;//时钟clk的频率是mdi的频率
input mdi;//差分曼彻斯特码的数据

output machester;


parameter size=1023;
parameter dsize=2046;

reg[dsize-1:0] temp;//存储mdi确定是正确的data位后,再进行解码
reg[size-1:0] even_data,odd_data;
reg[10:0] i;
reg[9:0] n,bit,x;
reg true,machester;
reg en_n,stop;//stop为全部数据异或完之后,或者是中间发现异或值为0停止


always @(posedge clk )//接收mdi,并存储
begin
  
  if(rst)
  begin

    temp<=0;
    i<=0;
    en_n<=0;
   
  end

  else
  begin

    if(i==dsize)
      begin
         
        i<=dsize;
        en_n<=1;
        
      end
    else
      begin
         
        temp<=mdi;
        i<=i+1;
        
      end
      
  end

end

always @(posedge clk ) //把temp的奇偶位上的数据分别存储,以便下一步操作
begin
   
  if(!en_n)
    begin   
            
    n<=0;
    even_data<=0;   
    odd_data<=0;

  end
    else
  begin
      
    if(n==size-1)
      n<=size-1;
    else
    begin
      
      n<=n+1;   
      even_data[n]<=temp[2*n];
      odd_data[n]<=temp[2*n+1];
   
    end

  end

end     

always @(posedge clk2 ) //先进行异或判断取奇数的数组,还是偶数的数组 ;由于解码后输出的数据频率应该是差分曼码的2倍,故用了个2倍的时钟        
begin

if(n==size-1)
begin
  if(stop==0)
  begin

    if(true==1)
    begin

      if(bit==size-1)
      begin
      
        stop<=1;
        bit<=size-1;
        if(x==size-1)
          x<=size-1;
        else
        begin

          machester<=even_data[x]~^even_data[x+1];//同或,就是最后的解码电平
          x<=x+1;
      
        end      

      end
      else
      begin
      
        x<=0;
        true<=even_data[bit]^odd_data[bit];
        bit<=bit+1;         

      end
   
    end
    else
    begin
      
      if(x==size-1)
        x<=size-1;
      else
      begin

        machester<=odd_data[x]~^odd_data[x+1];//同或
        x<=x+1;
      
      end
   
    end
  
    end

end
else
begin
  
  bit<=0;
  machester<=1&#39;bz;
  stop<=0;
  true<=1;

end

end
   
endmodule
Sunlife 发表于 2016-7-30 17:33:42 | 显示全部楼层
                              谢谢分享
zhiweiqiang33 发表于 2017-4-28 15:32:22 | 显示全部楼层
谢谢飞翔 看看
d643189658 发表于 2017-8-17 18:43:58 | 显示全部楼层
谢谢楼主分享
雷磊 发表于 2021-6-21 15:40:18 | 显示全部楼层
差分曼彻斯特码解码的verilog代码
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2025-6-17 13:19 , Processed in 0.097109 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表