Trung tâm đào tạo thiết kế vi mạch Semicon


  • ĐĂNG KÝ TÀI KHOẢN ĐỂ TRUY CẬP NHIỀU TÀI LIỆU HƠN!
  • Đăng ký
    *
    *
    *
    *
    *
    Fields marked with an asterisk (*) are required.
semicon_lab.jpg

Ví dụ về Verilog - CRC song song

Email In PDF.

 

Đ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
    Lần cập nhật cuối ( Thứ ba, 13 Tháng 5 2014 09:20 )  
    Chat Zalo