📄 crc16_8bit.v.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 + -