蜗牛

一起交流,共同进步
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

CRC16效验Verilog源代码

Posted on 2009-06-17 14:19  路漫漫...  阅读(7330)  评论(4编辑  收藏  举报

 

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