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

📄 crc16.v

📁 16bit CRC for 8bits data
💻 V
字号:
///////////////////////////////////////////////////////////////////////////////
//                                                                           //
//                      FileName: "crc16.v"                                  //
//                                                                           //
//  Description: This block is used for Cyclic Redundancy Code 16            //
//  It can complete CRC in one clock cycle to 8 bits paralled data           //
//  Generator polynomial G(x)=x^16+x^12+x^5+1;                               //
//   Author       : Well.yu                                                  //
//                                                                           //
//                                                                           //
//   Revision History                                                        //
//                                                                           //
//                                                                           //
///////////////////////////////////////////////////////////////////////////////

`timescale 1ns/10ps
module crc16_8bit (
clk,
rst_n,
rst_s,
crc_clr,

data_in,
data_in_vld,
crc16
);
/////////////////////////         Ports         /////////////////////////////////
input         clk ;           // clock
input         rst_n ;         // '0' active
input         rst_s ;         // '0' active

input  [7:0]  data_in ;       // 8 bits paralled input data for crc
input         data_in_vld ;   // data input valid ,'1' active

input         crc_clr ;       // clear crc_result ,'1' active
output [15:0] crc16 ;         // 16 bits CRC result output    

/////////////////////////        Signals        /////////////////////////////////
wire   [15:0] crc16 ;
reg    [15:0] crc_result ;




/////////////////////////////////////////////////////////////////////////////////
always @(posedge clk or negedge rst_n)
begin
	if(!rst_n)
	  crc_result <= #1 16'h0000 ;
	else if(!rst_s || crc_clr)
	  crc_result <= #1 16'h0000 ;
	else if(data_in_vld)
	  crc_result <= #1 {crc_result[15]^crc_result[11]^crc_result[7]^data_in[7]^data_in[3],                            //crc_result[15]
	                    crc_result[14]^crc_result[10]^crc_result[6]^data_in[6]^data_in[2],                            //crc_result[14]
	                    crc_result[13]^crc_result[9]^crc_result[5]^data_in[5]^data_in[1],                             //crc_result[13]
	                    crc_result[15]^crc_result[12]^crc_result[8]^crc_result[4]^data_in[7]^data_in[4]^data_in[0],   //crc_result[12]
	                    crc_result[14]^crc_result[3]^data_in[6],                                                      //crc_result[11]
	                    crc_result[13]^crc_result[2]^data_in[5],                                                      //crc_result[10]
	                    crc_result[12]^crc_result[1]^data_in[4],                                                      //crc_result[9]
	                    crc_result[15]^crc_result[11]^crc_result[0]^data_in[7]^data_in[3],                            //crc_result[8]
	                    crc_result[15]^crc_result[14]^crc_result[10]^data_in[7]^data_in[6]^data_in[2],                //crc_result[7]
	                    crc_result[14]^crc_result[13]^crc_result[9]^data_in[6]^data_in[5]^data_in[1],                 //crc_result[6]
	                    crc_result[13]^crc_result[12]^crc_result[8]^data_in[5]^data_in[4]^data_in[0],                 //crc_result[5]
	                    crc_result[12]^data_in[4],                                                                    //crc_result[4]
	                    crc_result[15]^crc_result[11]^data_in[7]^data_in[3],                                          //crc_result[3]
	                    crc_result[14]^crc_result[10]^data_in[6]^data_in[2],                                          //crc_result[2]
	                    crc_result[13]^crc_result[9]^data_in[5]^data_in[1],                                           //crc_result[1]
	                    crc_result[12]^crc_result[8]^data_in[4]^data_in[0]                                            //crc_result[0]
	                    };	  
end
assign crc16 = crc_result ;




endmodule

⌨️ 快捷键说明

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