发个以太网4-bit MAC层的并行CRC32 verilog代码,项目已验证
可用于需要FPGA硬件处理以太网MAC层包,比如打时间戳等等。//4-bit parallal crc generation block for ethernet package
//resource utilization: 45LEs
module CRC(
clk, //clock input
reset_n, //reset synced at rising edge of clk
en_i, //crc block enable signal. en_i will be checked on rising edge
in_i, //4-bit input data. change on falling edge of clk.
crc32_o//32-bit crc result. change on rising edge of clk
);
input clk;
input reset_n;
input en_i;
input in_i;
output crc32_o;
reg crc_o;
wire crc_in;
wire P0;
wire P1;
wire P2;
wire P3;
assign crc32_o=~crc_o;
assign crc32_o=~crc_o;
assign crc32_o=~crc_o;
assign crc32_o=~crc_o;
assign crc32_o=~crc_o;
assign crc32_o=~crc_o;
assign crc32_o=~crc_o;
assign crc32_o=~crc_o;
assign crc32_o=~crc_o;
assign crc32_o=~crc_o;
assign crc32_o=~crc_o;
assign crc32_o=~crc_o;
assign crc32_o=~crc_o;
assign crc32_o=~crc_o;
assign crc32_o=~crc_o;
assign crc32_o=~crc_o;
assign crc32_o=~crc_o;
assign crc32_o=~crc_o;
assign crc32_o=~crc_o;
assign crc32_o=~crc_o;
assign crc32_o=~crc_o;
assign crc32_o=~crc_o;
assign crc32_o=~crc_o;
assign crc32_o=~crc_o;
assign crc32_o=~crc_o;
assign crc32_o=~crc_o;
assign crc32_o=~crc_o;
assign crc32_o=~crc_o;
assign crc32_o=~crc_o;
assign crc32_o=~crc_o;
assign crc32_o=~crc_o;
assign crc32_o=~crc_o;
assign P0=crc_o^in_i;
assign P1=crc_o^in_i;
assign P2=crc_o^in_i;
assign P3=crc_o^in_i;
assign crc_in=P3;
assign crc_in=P2^P3;
assign crc_in=P1^P2^P3;
assign crc_in=P0^P1^P2;
assign crc_in=crc_o^P0^P1^P3;
assign crc_in=crc_o^P0^P2^P3;
assign crc_in=crc_o^P1^P2;
assign crc_in=crc_o^P0^P1^P3;
assign crc_in=crc_o^P0^P2^P3;
assign crc_in=crc_o^P1^P2;
assign crc_in=crc_o^P0^P1^P3;
assign crc_in=crc_o^P0^P2^P3;
assign crc_in=crc_o^P1^P2^P3;
assign crc_in=crc_o^P0^P1^P2;
assign crc_in=crc_o^P0^P1;
assign crc_in=crc_o^P0;
assign crc_in=crc_o^P3;
assign crc_in=crc_o^P2;
assign crc_in=crc_o^P1;
assign crc_in=crc_o^P0;
assign crc_in=crc_o;
assign crc_in=crc_o;
assign crc_in=crc_o^P3;
assign crc_in=crc_o^P2^P3;
assign crc_in=crc_o^P1^P2;
assign crc_in=crc_o^P0^P1;
assign crc_in=crc_o^P0^P3;
assign crc_in=crc_o^P2;
assign crc_in=crc_o^P1;
assign crc_in=crc_o^P0;
assign crc_in=crc_o;
assign crc_in=crc_o;
always@(posedge clk)begin
if(!reset_n)
crc_o<=32'b11111111111111111111111111111111;
else if(en_i)begin
crc_o<=crc_in;
end
end
endmodule ganxiefenxiang 感谢分享~~~~目前还没进入fpga{:lol:}{:lol:}{:lol:}{:lol:} CRC32的硬件实现 tjuspring001 发表于 2015-11-17 21:50
CRC32的硬件实现
网上有很多都是1-bit那种的,我花了两天时间推导出来这个每次4-bit的并行crc32。 谢谢分享,以后可能会玩玩fpga。 能不能把算法的数学原理分享一下,处理速度需要参考设计需求,1bit比较常用 MARK!!!!!! 非常有实用价值
页:
[1]