随手记录一下最近写的一个crc16bit校验、封装小模块。主要包括1、对接收数据帧进行校验处理提取一帧数据中的16bitcrc校验码并进行校验随后输出数据帧以及校验标志信号(校验成功标志信号为0校验失败标志信号为1)。仿真图2、对发送数据帧进行封装处理得到一帧数据的16bitcrc校验码随后输出数据帧16bitcrc校验码。仿真图3、对一帧数据进行处理得到16bitcrc校验码。仿真图模块顶层代码module crc16_test( input i_clk ,input i_rst_n //接收/发送 ,input i_io_select //1:接收/0:发送 //data interface //接收 ,input [7:0] i_rx_data //接收数据 ,input i_rx_data_valid //接收数据有效信号 ,output o_rx_data_error //对数据进行校验0数据校验成功/1数据校验失败 //发送 ,output [7:0] o_tx_data //发送数据 ,output o_tx_data_valid //发送数据有效信号 ); //-------------------------------------------------------------------------------- //-------------------------------------------------------------------------------- //接收 wire [7:0] w_rx_data ; wire w_rx_data_valid ; wire w_rx_data_error ; //发送 wire [7:0] w_tx_data ; wire w_tx_data_valid ; //-------------------------------------------------------------------------------- //-------------------------------------------------------------------------------- assign o_rx_data_error i_io_select ? w_rx_data_error : 1b0 ; assign o_tx_data i_io_select ? w_rx_data : w_tx_data ; assign o_tx_data_valid i_io_select ? w_rx_data_valid : w_tx_data_valid ; //接收 rx U_crx ( .i_clk (i_clk ) ,.i_rst_n (i_rst_n ) ,.i_io_select (i_io_select ) ,.i_rx_data (i_rx_data ) ,.i_rx_data_valid (i_rx_data_valid ) ,.o_rx_data (w_rx_data ) ,.o_rx_data_valid (w_rx_data_valid ) ,.o_rx_data_error (w_rx_data_error ) ); //发送 tx U_tx ( .i_clk (i_clk ) ,.i_rst_n (i_rst_n ) ,.i_io_select (i_io_select ) ,.i_rx_data (i_rx_data ) ,.i_rx_data_valid (i_rx_data_valid ) ,.o_tx_data (w_tx_data ) ,.o_tx_data_valid (w_tx_data_valid ) ); endmodule
CRC16bit校验、封装
随手记录一下最近写的一个crc16bit校验、封装小模块。主要包括1、对接收数据帧进行校验处理提取一帧数据中的16bitcrc校验码并进行校验随后输出数据帧以及校验标志信号(校验成功标志信号为0校验失败标志信号为1)。仿真图2、对发送数据帧进行封装处理得到一帧数据的16bitcrc校验码随后输出数据帧16bitcrc校验码。仿真图3、对一帧数据进行处理得到16bitcrc校验码。仿真图模块顶层代码module crc16_test( input i_clk ,input i_rst_n //接收/发送 ,input i_io_select //1:接收/0:发送 //data interface //接收 ,input [7:0] i_rx_data //接收数据 ,input i_rx_data_valid //接收数据有效信号 ,output o_rx_data_error //对数据进行校验0数据校验成功/1数据校验失败 //发送 ,output [7:0] o_tx_data //发送数据 ,output o_tx_data_valid //发送数据有效信号 ); //-------------------------------------------------------------------------------- //-------------------------------------------------------------------------------- //接收 wire [7:0] w_rx_data ; wire w_rx_data_valid ; wire w_rx_data_error ; //发送 wire [7:0] w_tx_data ; wire w_tx_data_valid ; //-------------------------------------------------------------------------------- //-------------------------------------------------------------------------------- assign o_rx_data_error i_io_select ? w_rx_data_error : 1b0 ; assign o_tx_data i_io_select ? w_rx_data : w_tx_data ; assign o_tx_data_valid i_io_select ? w_rx_data_valid : w_tx_data_valid ; //接收 rx U_crx ( .i_clk (i_clk ) ,.i_rst_n (i_rst_n ) ,.i_io_select (i_io_select ) ,.i_rx_data (i_rx_data ) ,.i_rx_data_valid (i_rx_data_valid ) ,.o_rx_data (w_rx_data ) ,.o_rx_data_valid (w_rx_data_valid ) ,.o_rx_data_error (w_rx_data_error ) ); //发送 tx U_tx ( .i_clk (i_clk ) ,.i_rst_n (i_rst_n ) ,.i_io_select (i_io_select ) ,.i_rx_data (i_rx_data ) ,.i_rx_data_valid (i_rx_data_valid ) ,.o_tx_data (w_tx_data ) ,.o_tx_data_valid (w_tx_data_valid ) ); endmodule