CRC16效验代码,可用于对SD卡的写操作中。
1 module crc_unit_16 (clk,ready,indata,reset,crc);
2
3 input clk;
4 input ready;
5 input indata;
6 input reset;
7 output [15:0] crc; //CRC checksum
8
9 //Registers for CRC
10 reg d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11, d12, d13, d14, d15, d16;
11
12 wire xor1, xor2, xor3;
13
14 assign xor1 = indata ^ d16;
15 assign xor2 = d5 ^ xor1;
16 assign xor3 = d12 ^ xor1;
17
18 assign crc[0] = d1;
19 assign crc[1] = d2;
20 assign crc[2] = d3;
21 assign crc[3] = d4;
22 assign crc[4] = d5;
23 assign crc[5] = d6;
24 assign crc[6] = d7;
25 assign crc[7] = d8;
26 assign crc[8] = d9;
27 assign crc[9] = d10;
28 assign crc[10] = d11;
29 assign crc[11] = d12;
30 assign crc[12] = d13;
31 assign crc[13] = d14;
32 assign crc[14] = d15;
33 assign crc[15] = d16;
34
35
36 always @ (posedge clk or posedge reset) begin
37 if (reset) begin
38 d1 <= 0;
39 d2 <= 0;
40 d3 <= 0;
41 d4 <= 0;
42 d5 <= 0;
43 d6 <= 0;
44 d7 <= 0;
45 d8 <= 0;
46 d9 <= 0;
47 d10 <= 0;
48 d11 <= 0;
49 d12 <= 0;
50 d13 <= 0;
51 d14 <= 0;
52 d15 <= 0;
53 d16 <= 0;
54 end
55 else if (ready) begin
56 d1 <= xor1;
57 d2 <= d1;
58 d3 <= d2;
59 d4 <= d3;
60 d5 <= d4;
61 d6 <= xor2;
62 d7 <= d6;
63 d8 <= d7;
64 d9 <= d8;
65 d10 <= d9;
66 d11 <= d10;
67 d12 <= d11;
68 d13 <= xor3;
69 d14 <= d13;
70 d15 <= d14;
71 d16 <= d15;
72 end
73 end
74
75 endmodule
76
2
3 input clk;
4 input ready;
5 input indata;
6 input reset;
7 output [15:0] crc; //CRC checksum
8
9 //Registers for CRC
10 reg d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11, d12, d13, d14, d15, d16;
11
12 wire xor1, xor2, xor3;
13
14 assign xor1 = indata ^ d16;
15 assign xor2 = d5 ^ xor1;
16 assign xor3 = d12 ^ xor1;
17
18 assign crc[0] = d1;
19 assign crc[1] = d2;
20 assign crc[2] = d3;
21 assign crc[3] = d4;
22 assign crc[4] = d5;
23 assign crc[5] = d6;
24 assign crc[6] = d7;
25 assign crc[7] = d8;
26 assign crc[8] = d9;
27 assign crc[9] = d10;
28 assign crc[10] = d11;
29 assign crc[11] = d12;
30 assign crc[12] = d13;
31 assign crc[13] = d14;
32 assign crc[14] = d15;
33 assign crc[15] = d16;
34
35
36 always @ (posedge clk or posedge reset) begin
37 if (reset) begin
38 d1 <= 0;
39 d2 <= 0;
40 d3 <= 0;
41 d4 <= 0;
42 d5 <= 0;
43 d6 <= 0;
44 d7 <= 0;
45 d8 <= 0;
46 d9 <= 0;
47 d10 <= 0;
48 d11 <= 0;
49 d12 <= 0;
50 d13 <= 0;
51 d14 <= 0;
52 d15 <= 0;
53 d16 <= 0;
54 end
55 else if (ready) begin
56 d1 <= xor1;
57 d2 <= d1;
58 d3 <= d2;
59 d4 <= d3;
60 d5 <= d4;
61 d6 <= xor2;
62 d7 <= d6;
63 d8 <= d7;
64 d9 <= d8;
65 d10 <= d9;
66 d11 <= d10;
67 d12 <= d11;
68 d13 <= xor3;
69 d14 <= d13;
70 d15 <= d14;
71 d16 <= d15;
72 end
73 end
74
75 endmodule
76