|
发表于 2015-11-30 20:36:03
|
显示全部楼层
回复 57# topggmq
现在配置问题解决了,wireshark也能抓上数,但是CRC32貌似计算的不对,用labview写的接收程序也收不到数,
我的CRC是4bit并行的,
module CRC32_4gen(
input Initialize,
input [3:0] Data,
input crc_en,
output reg[31:0]Crc,
output crc_out_en,
input rst_n,
input Clk
);
reg Enable;
always @(posedge Clk)
Enable <= crc_en;
assign crc_out_en = (!(Enable & crc_en))&Enable;
wire [31:0] CrcNext;
assign CrcNext[0] = (Enable & crc_en) & (Data[0] ^ Crc[28]);
assign CrcNext[1] = (Enable & crc_en) & (Data[1] ^ Data[0] ^ Crc[28] ^ Crc[29]);
assign CrcNext[2] = (Enable & crc_en) & (Data[2] ^ Data[1] ^ Data[0] ^ Crc[28] ^ Crc[29] ^ Crc[30]);
assign CrcNext[3] = (Enable & crc_en) & (Data[3] ^ Data[2] ^ Data[1] ^ Crc[29] ^ Crc[30] ^ Crc[31]);
assign CrcNext[4] = ((Enable & crc_en) & (Data[3] ^ Data[2] ^ Data[0] ^ Crc[28] ^ Crc[30] ^ Crc[31])) ^ Crc[0];
assign CrcNext[5] = ((Enable & crc_en) & (Data[3] ^ Data[1] ^ Data[0] ^ Crc[28] ^ Crc[29] ^ Crc[31])) ^ Crc[1];
assign CrcNext[6] = ((Enable & crc_en) & (Data[2] ^ Data[1] ^ Crc[29] ^ Crc[30])) ^ Crc[ 2];
assign CrcNext[7] = ((Enable & crc_en) & (Data[3] ^ Data[2] ^ Data[0] ^ Crc[28] ^ Crc[30] ^ Crc[31])) ^ Crc[3];
assign CrcNext[8] = ((Enable & crc_en) & (Data[3] ^ Data[1] ^ Data[0] ^ Crc[28] ^ Crc[29] ^ Crc[31])) ^ Crc[4];
assign CrcNext[9] = ((Enable & crc_en) & (Data[2] ^ Data[1] ^ Crc[29] ^ Crc[30])) ^ Crc[5];
assign CrcNext[10] = ((Enable & crc_en) & (Data[3] ^ Data[2] ^ Data[0] ^ Crc[28] ^ Crc[30] ^ Crc[31])) ^ Crc[6];
assign CrcNext[11] = ((Enable & crc_en) & (Data[3] ^ Data[1] ^ Data[0] ^ Crc[28] ^ Crc[29] ^ Crc[31])) ^ Crc[7];
assign CrcNext[12] = ((Enable & crc_en) & (Data[2] ^ Data[1] ^ Data[0] ^ Crc[28] ^ Crc[29] ^ Crc[30])) ^ Crc[8];
assign CrcNext[13] = ((Enable & crc_en) & (Data[3] ^ Data[2] ^ Data[1] ^ Crc[29] ^ Crc[30] ^ Crc[31])) ^ Crc[9];
assign CrcNext[14] = ((Enable & crc_en) & (Data[3] ^ Data[2] ^ Crc[30] ^ Crc[31])) ^ Crc[10];
assign CrcNext[15] = ((Enable & crc_en) & (Data[3] ^ Crc[31])) ^ Crc[11];
assign CrcNext[16] = ((Enable & crc_en) & (Data[0] ^ Crc[28])) ^ Crc[12];
assign CrcNext[17] = ((Enable & crc_en) & (Data[1] ^ Crc[29])) ^ Crc[13];
assign CrcNext[18] = ((Enable & crc_en) & (Data[2] ^ Crc[30])) ^ Crc[14];
assign CrcNext[19] = ((Enable & crc_en) & (Data[3] ^ Crc[31])) ^ Crc[15];
assign CrcNext[20] = Crc[16];
assign CrcNext[21] = Crc[17];
assign CrcNext[22] = ((Enable & crc_en) & (Data[0] ^ Crc[28])) ^ Crc[18];
assign CrcNext[23] = ((Enable & crc_en) & (Data[1] ^ Data[0] ^ Crc[29] ^ Crc[28])) ^ Crc[19];
assign CrcNext[24] = ((Enable & crc_en) & (Data[2] ^ Data[1] ^ Crc[30] ^ Crc[29])) ^ Crc[20];
assign CrcNext[25] = ((Enable & crc_en) & (Data[3] ^ Data[2] ^ Crc[31] ^ Crc[30])) ^ Crc[21];
assign CrcNext[26] = ((Enable & crc_en) & (Data[3] ^ Data[0] ^ Crc[31] ^ Crc[28])) ^ Crc[22];
assign CrcNext[27] = ((Enable & crc_en) & (Data[1] ^ Crc[29])) ^ Crc[23];
assign CrcNext[28] = ((Enable & crc_en) & (Data[2] ^ Crc[30])) ^ Crc[24];
assign CrcNext[29] = ((Enable & crc_en) & (Data[3] ^ Crc[31])) ^ Crc[25];
assign CrcNext[30] = Crc[26];
assign CrcNext[31] = Crc[27];
always @ (posedge Clk or negedge rst_n)
begin
if (~rst_n)
Crc <= 2'hffffffff;
else
if(Initialize)
Crc <= 32'hffffffff;
else if(Enable & crc_en)
Crc <= CrcNext;
else
Crc <= 32'hffffffff;
end
但是算出的数据和计算机软件算出来的不一样。我也注意了输入模块的数据顺序,但是依然算的不一样。
希望指点一二 |
|