⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 crc16_8bit.v.txt

📁 利用verilog硬件描述语言编写的8为并行输入的常crc校验模块。hdlc子模块
💻 TXT
字号:
`timescale 1ns / 100ps
/******************************************************************************
 * crc16_8bit.v
 * the crc16 algrithm with initial code 0xffff and X16+X12+X5+1.
 *
 * Copyright (C) 2008-2010 bjay.
 * Email: bjaytop@gmail.com
 *
 * 2008.01.11 created and owner by bjay
 *
 *****************************************************************************/

module crc16_8bit(clk, init, enable, initial_data, data, crc);
  input   clk, init, enable;
  input   [7:0] data;
  input   [15:0] initial_data;
  
//  output  crc_enable;
  output  [15:0] crc;
  
  reg     [15:0] crc_temp;
//  reg     enable_d1;
  
  wire    [7:0] crc_next, in_bit;
  wire    [15:0] crc_xor;

//  assign crc =~crc_temp;
//  assign crc_enable =(~enable) &enable_d1;

  assign crc[15] =~(crc_temp[8]);
  assign crc[14] =~(crc_temp[9]);
  assign crc[13] =~(crc_temp[10]);
  assign crc[12] =~(crc_temp[11]);
  assign crc[11] =~(crc_temp[12]);
  assign crc[10] =~(crc_temp[13]);
  assign crc[9] =~(crc_temp[14]);
  assign crc[8] =~(crc_temp[15]);
  assign crc[7] =~(crc_temp[0]);
  assign crc[6] =~(crc_temp[1]);
  assign crc[5] =~(crc_temp[2]);
  assign crc[4] =~(crc_temp[3]);
  assign crc[3] =~(crc_temp[4]);
  assign crc[2] =~(crc_temp[5]);
  assign crc[1] =~(crc_temp[6]);
  assign crc[0] =~(crc_temp[7]);
  
  assign in_bit[7] =data[0];
  assign in_bit[6] =data[1];
  assign in_bit[5] =data[2];
  assign in_bit[4] =data[3];
  assign in_bit[3] =data[4];
  assign in_bit[2] =data[5];
  assign in_bit[1] =data[6];
  assign in_bit[0] =data[7];
  
  assign crc_next[7] =crc_temp[15] ^in_bit[7];
  assign crc_next[6] =crc_temp[14] ^in_bit[6];
  assign crc_next[5] =crc_temp[13] ^in_bit[5];
  assign crc_next[4] =crc_temp[12] ^in_bit[4];
  assign crc_next[3] =crc_temp[15] ^in_bit[7] ^crc_temp[11] ^in_bit[3];
  assign crc_next[2] =crc_temp[14] ^in_bit[6] ^crc_temp[10] ^in_bit[2];
  assign crc_next[1] =crc_temp[13] ^in_bit[5] ^crc_temp[9] ^in_bit[1];
  assign crc_next[0] =crc_temp[12] ^in_bit[4] ^crc_temp[8] ^in_bit[0];
  
  assign crc_xor =(crc_next[7] ? 16'h1080 :16'h0000) ^
                  (crc_next[6] ? 16'h0840 :16'h0000) ^
                  (crc_next[5] ? 16'h0420 :16'h0000) ^
                  (crc_next[4] ? 16'h0210 :16'h0000) ^
                  (crc_next[3] ? 16'h8108 :16'h0000) ^
                  (crc_next[2] ? 16'h4084 :16'h0000) ^
                  (crc_next[1] ? 16'h2042 :16'h0000) ^
                  (crc_next[0] ? 16'h1021 :16'h0000);
  
  always@(posedge clk)
    if (init)
      crc_temp <=initial_data;
    else if (enable)
      crc_temp <={crc_temp[7:0],8'h00} ^crc_xor;
    else
      crc_temp <=crc_temp;

/*  always@(posedge clk)
    enable_d1 <=enable;
*/
endmodule

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -