介绍两个CRC源码生成工具,可生成Verilog和VHDL

一、在线网页生成工具

打开http://www.easics.com/webtools/crctool,根据需要设置CRC的多项式参数,点击生成就可以了。

二、命令行生成工具

点此下载

内有使用说明。

三、代码分析比较

1、网页在线生成代码

1 module CRC5_D8;
2
3 // polynomial: (0 2 5)
4 // data 8
5 // convention: the first serial bit is D[7]
6   function [4:0] nextCRC5_D8;
7
8 input [7:0] Data;
9 input [4:0] crc;
10 reg [7:0] d;
11 reg [4:0] c;
12 reg [4:0] newcrc;
13 begin
14 d = Data;
15 c = crc;
16
17 newcrc[0] = d[6] ^ d[5] ^ d[3] ^ d[0] ^ c[0] ^ c[2] ^ c[3];
18 newcrc[1] = d[7] ^ d[6] ^ d[4] ^ d[1] ^ c[1] ^ c[3] ^ c[4];
19 newcrc[2] = d[7] ^ d[6] ^ d[3] ^ d[2] ^ d[0] ^ c[0] ^ c[3] ^ c[4];
20 newcrc[3] = d[7] ^ d[4] ^ d[3] ^ d[1] ^ c[0] ^ c[1] ^ c[4];
21 newcrc[4] = d[5] ^ d[4] ^ d[2] ^ c[1] ^ c[2];
22 nextCRC5_D8 = newcrc;
23 end
24 endfunction
25  endmodule
26  

2、命令行方式生成代码

1 // CRC module for
2  // data[7:0]
3  // crc[4:0]=1+x^2+x^5;
4  //
5 module crc(
6 input [7:0] data_in,
7 input crc_en,
8 output [4:0] crc_out,
9 input rst,
10 input clk);
11
12 reg [4:0] lfsr_q,
13 lfsr_c;
14 assign crc_out = lfsr_q;
15 always @(*) begin
16 lfsr_c[0] = lfsr_q[0] ^ lfsr_q[2] ^ lfsr_q[3] ^ data_in[0] ^ dat
17 a_in[3] ^ data_in[5] ^ data_in[6];
18 lfsr_c[1] = lfsr_q[1] ^ lfsr_q[3] ^ lfsr_q[4] ^ data_in[1] ^ dat
19 a_in[4] ^ data_in[6] ^ data_in[7];
20 lfsr_c[2] = lfsr_q[0] ^ lfsr_q[3] ^ lfsr_q[4] ^ data_in[0] ^ dat
21 a_in[2] ^ data_in[3] ^ data_in[6] ^ data_in[7];
22 lfsr_c[3] = lfsr_q[0] ^ lfsr_q[1] ^ lfsr_q[4] ^ data_in[1] ^ dat
23 a_in[3] ^ data_in[4] ^ data_in[7];
24 lfsr_c[4] = lfsr_q[1] ^ lfsr_q[2] ^ data_in[2] ^ data_in[4] ^ da
25 ta_in[5];
26
27
28 end // always
29
30 always @(posedge clk, posedge rst) begin
31 if(rst) begin
32 lfsr_q <= {5{1'b1}};
33 end
34 else begin
35 lfsr_q <= crc_en ? lfsr_c : lfsr_q;
36 end
37 end // always
38 endmodule // crc
39
原文地址:https://www.cnblogs.com/nios_ii/p/1942565.html