集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 7442|回复: 19

哪位高手看得懂这段CRC编码?是不是一个除法器的实现?

[复制链接]
ngtim 发表于 2010-6-27 23:34:05 | 显示全部楼层 |阅读模式
主要是主体部分的那段看不懂,是不是一个除法器的实现?
module crc(crc_reg,crc,d,calc,init,d_valid,clk,reset);
output[15:0] crc_reg;
output[7:0] crc;
input[7:0] d;
input calc;
input init;
input d_valid;
input clk;
input reset;
reg[15:0] crc_reg;
reg[7:0] crc;
wire[15:0] next_crc;
always @(posedge clk or posedge reset)
begin
if (reset)
begin
crc_reg <= 16'h0000;
crc <= 8'h00;
end
else if (init)
begin
crc_reg <= 16'h0000;
crc <= 8'h00;
end
else if (calc & d_valid)
begin

crc_reg <= next_crc;
crc <= ~{next_crc[8], next_crc[9], next_crc[10], next_crc[11],
next_crc[12], next_crc[13], next_crc[14], next_crc[15]};
end
else if (~calc & d_valid)
begin
crc_reg <= {crc_reg[7:0], 8'h00};
crc <= ~{crc_reg[0], crc_reg[1], crc_reg[2], crc_reg[3],
crc_reg[4], crc_reg[5], crc_reg[6], crc_reg[7]};
end
end
assign next_crc[0] = crc_reg[12] ^ d[7] ^ crc_reg[8] ^ d[3];
assign next_crc[1] = crc_reg[13] ^ d[6] ^ d[2] ^ crc_reg[9];
assign next_crc[2] = d[5] ^ crc_reg[14] ^ d[1] ^ crc_reg[10];
assign next_crc[3] = d[4] ^ crc_reg[15] ^ d[0] ^ crc_reg[11];
assign next_crc[4] = crc_reg[12] ^ d[3];
assign next_crc[5]=crc_reg[12]^crc_reg[13]^d[7]^crc_reg[8]^d[2]^d[3];
assign next_crc[6] = crc_reg[13] ^ d[6] ^ crc_reg[14] ^ d[1] ^ d[2] ^
crc_reg[9];
assign next_crc[7] = d[5] ^ crc_reg[14] ^ crc_reg[15] ^ d[0] ^ d[1] ^
crc_reg[10];
assign next_crc[8] = d[4] ^ crc_reg[15] ^ d[0] ^ crc_reg[0] ^ crc_reg[11];
assign next_crc[9] = crc_reg[12] ^ crc_reg[1] ^ d[3];
assign next_crc[10] = crc_reg[13] ^ d[2] ^ crc_reg[2];
assign next_crc[11] = crc_reg[3] ^ crc_reg[14] ^ d[1];
assign next_crc[12] = crc_reg[12] ^ crc_reg[4] ^ d[7] ^ crc_reg[15]
^ d[0] ^ crc_reg[8] ^ d[3];
assign next_crc[13] = crc_reg[13] ^ d[6] ^ crc_reg[5] ^ d[2] ^ crc_reg[9];
assign next_crc[14] = d[5] ^ crc_reg[14] ^ crc_reg[6] ^ d[1] ^ crc_reg[10];
assign next_crc[15] = d[4] ^ crc_reg[15] ^ d[0] ^ crc_reg[7] ^ crc_reg[11];
endmodule
usb 发表于 2010-6-28 00:12:36 | 显示全部楼层
这什么代码啊?<br>
连一点注释都没有!
ATA 发表于 2010-6-28 01:56:54 | 显示全部楼层
就是没有注释阿,否则就不会那么费劲了。这是从网上下的CRC编码,从输入输出端口上看是把8位的输入数据编成32位的CRC码,可主体部分的代码风格跟编码原理很不一样,不知其中用了什么技巧,哪位高手做过CRC编码?
CHAN 发表于 2010-6-28 02:25:56 | 显示全部楼层
crc做过,看这个东西先从特例算起,假如只有一位的话是什么情况<br>
<br>
还有知道不知是什么crc多项式?
tim 发表于 2010-6-28 02:40:51 | 显示全部楼层
楼上做过CRC?知道主体那段异或是用来实现什么吗?我看出用来计算每位next_crc的crc_reg和d的位数编号相加都等于15,估计是实现多项式的相乘,不知道是不是这样。另外,这段程序没有给出生成多项式,不知是不是直接把编码和生成多项式的实现合并一起了,还请高手不吝赐教!
CCIE 发表于 2010-6-28 03:52:32 | 显示全部楼层
这个是并行CRC的实现.
CHAN 发表于 2010-6-28 04:08:26 | 显示全部楼层
楼上的高手能不能说得详细一点,谢谢!
encounter 发表于 2010-6-28 04:49:41 | 显示全部楼层
我来看看。看有没有用。
FFT 发表于 2010-6-28 05:38:57 | 显示全部楼层
这是XILLLINX的CRC编码并行实现,应该是CRC32啊,
CHANG 发表于 2010-6-28 07:05:41 | 显示全部楼层
好象是矩阵运算啥的
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

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

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

GMT+8, 2024-12-27 01:27 , Processed in 0.149599 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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