专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 硬件开发

verilog crc小程序有关问题

发布时间:2010-06-13 21:36:47 文章来源:www.iduyao.cn 采编人员:星星草
verilog crc小程序问题
1.verilog如何把 INPUT [7:0]DATA的 八位数据中统计出1的个数,能用while循环实现吗?我试了好久。。。总出错。。。
2. 我的程序如下 问题我用红线标出
module crc_unit_16 (clk,ready,indata,reset,crc);
  
 input clk;  
 input ready;
 input [7:0]indata;
 
 input reset;
 output [15:0] crc; //CRC checksum
   
//Registers for CRC
reg d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11, d12, d13, d14, d15, d16;
reg num;
reg temp;
reg [7:0]ini;

wire xor1, xor2, xor3; 

assign xor1 = temp^ d16;
assign xor2 = d5 ^ xor1;
assign xor3 = d12 ^ xor1;

assign crc[0] = d1;
assign crc[1] = d2;
assign crc[2] = d3;
 assign crc[3] = d4;
assign crc[4] = d5;
assign crc[5] = d6;
 assign crc[6] = d7;
 assign crc[7] = d8;
assign crc[8] = d9;
assign crc[9] = d10;
 assign crc[10] = d11;
 assign crc[11] = d12;
assign crc[12] = d13;
 assign crc[13] = d14;
 assign crc[14] = d15;
 assign crc[15] = d16;


always @ (posedge clk or posedge reset) begin
  if (reset) begin
  d1 <= 0;
  d2 <= 0;
  d3 <= 0;
  d4 <= 0;
  d5 <= 0;
  d6 <= 0;
  d7 <= 0; 
  d8 <= 0;
  d9 <= 0;
  d10 <= 0;
  d11 <= 0;
  d12 <= 0;
  d13 <= 0;
  d14 <= 0; 
  d15 <= 0;
  d16 <= 0; 
  end  

if(ready) begin 

ini=8'b10000000;
num=4'b1000;
   
while(num!=0)begin
if(ini&indata!=0)temp=1;//我测试过,运行进不了循环。。。
else temp=0;
  d1 <= xor1;
  d2 <= d1;
  d3 <= d2;
  d4 <= d3;
  d5 <= d4;
  d6 <= xor2;
  d7 <= d6; 
  d8 <= d7;
  d9 <= d8;
  d10 <= d9;
  d11 <= d10;
  d12 <= d11;
  d13 <= xor3;
  d14 <= d13; 
  d15 <= d14;
  d16 <= d15;
 
ini=ini>>1;
 
end
end 
 
  end

 endmodule
最后的crc码。。。总是0000000000..0
是循环出了问题?还是赋值出了问题啊?

------解决方案--------------------
Verilog is not C!

Hardware is parallel in its nature. You can't use while loop here. To implement CRC, all you need is a LFSR. You can use "generate" in verilog language to implement a flexible LFSR.
------解决方案--------------------
再看看书吧,我估计没有哪本书写的 while可综合吧
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: