?? crc16.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 + -