09-06-2014, 03:32 PM | #1 |
Nhập môn đệ tử
Tham gia ngày: Mar 2014
Bài gửi: 8
: |
Ví dụ về Verilog - CRC song song
Đoạn mã bên dưới là hỗ trợ CRC-CCITT 16-bit với chức năng sau:
Độ rông = 16 bitsĐa thức bị chia nhỏ = 0x1021 Giá trị ban đầu = 0xFFFF Dữ liệu ngõ vào không phản ánh CRC ngõ ra không được phản ánh Không có XOR được thực hiện trên CRC ngõ ra 1 //----------------------------------------------------- 2 // Design Name : parallel_crc_ccitt 3 // File Name : parallel_crc.v 4 // Function : CCITT Parallel CRC 5 // Coder : - 6 //----------------------------------------------------- 7 module parallel_crc_ccitt ( 8 clk , 9 reset , 10 enable , 11 init , 12 data_in , 13 crc_out 14 ); 15 //-----------Input Ports--------------- 16 input clk ; 17 input reset ; 18 input enable ; 19 input init ; 20 input [7:0] data_in ; 21 //-----------Output Ports--------------- 22 output [15:0] crc_out; 23 //------------Internal Variables-------- 24 reg [15:0] crc_reg; 25 wire [15:0] next_crc; 26 //-------------Code Start----------------- 27 assign crc_out = crc_reg; 28 // CRC Control logic 29 always @ (posedge clk) 30 if (reset) begin 31 crc_reg <= 16'hFFFF; 32 end else if (enable) begin 33 if (init) begin 34 crc_reg <= 16'hFFFF; 35 end else begin 36 crc_reg <= next_crc; 37 end 38 end 39 // Parallel CRC calculation 40 assign next_crc[0] = data_in[7] ^ data_in[0] ^ crc_reg[4] ^ crc_reg[11]; 41 assign next_crc[1] = data_in[1] ^ crc_reg[5]; 42 assign next_crc[2] = data_in[2] ^ crc_reg[6]; 43 assign next_crc[3] = data_in[3] ^ crc_reg[7]; 44 assign next_crc[4] = data_in[4] ^ crc_reg[8]; 45 assign next_crc[5] = data_in[7] ^ data_in[5] ^ data_in[0] ^ crc_reg[4] ^ crc_reg[9] ^ crc_reg[11]; 46 assign next_crc[6] = data_in[6] ^ data_in[1] ^ crc_reg[5] ^ crc_reg[10]; 47 assign next_crc[7] = data_in[7] ^ data_in[2] ^ crc_reg[6] ^ crc_reg[11]; 48 assign next_crc[8] = data_in[3] ^ crc_reg[0] ^ crc_reg[7]; 49 assign next_crc[9] = data_in[4] ^ crc_reg[1] ^ crc_reg[8]; 50 assign next_crc[10] = data_in[5] ^ crc_reg[2] ^ crc_reg[9]; 51 assign next_crc[11] = data_in[6] ^ crc_reg[3] ^ crc_reg[10]; 52 53 endmodule SEMICON |
|
|