当前位置: 首页 > news >正文

做高仿表网站容易被k吗郴州市地图高清版大图

做高仿表网站容易被k吗,郴州市地图高清版大图,成免费crm软件排名,无锡设计一、概念 CRC校验#xff0c;中文翻译过来是#xff1a;循环冗余校验#xff0c;英文全称是#xff1a;Cyclic Redundancy Check。是一种通过对数据产生固定位数的校验码#xff0c;以检验数据是否存在错误的技术。 其主要特点是检错能力强、开销小#xff0c;易于电路实…一、概念 CRC校验中文翻译过来是循环冗余校验英文全称是Cyclic Redundancy Check。是一种通过对数据产生固定位数的校验码以检验数据是否存在错误的技术。 其主要特点是检错能力强、开销小易于电路实现。像网络通信上就使用了CRC32进行数据校验。 1.1 CRC的数学基础 其数学基础是使用除法求余数。 1、将K位的信息码写成如下多项式形式 2、将信息码左移R位变成如下多项式形式 3、将移位后的信息码除以指定的生成多项式最后得到的余数即为CRC校验值。 转换成二进制信息表述如下 1、K位的信息码右移R位得到新的KR位的信息码 2、将新的KR位的信息码除以指定的二进制数得到的余数即为CRC校验值。 当然此处采用的是模2运算即没有借位。实质上在运行加减法的时候采用的是异或运算。 1.2 其他重要概念 CRC 校验的核心是模2除法运算但是还存在一些其他的规则描述如下 初始值给CRC一个计算初始值可以是0也可以为其他值会将待计算的信息码的值与初始值进行异或。网上大部分关于CRC的校验计算初始值都是默认取0但是实际应用中比如CRC32其初始值是0xFFFFFFFF 结果异或值将计算结果与结果异或值进行异或运算后输出目的是防止全0数据的CRC一直为0, 数据反转CRC中数据 反转指的是一个字节的数据中高bit变低bit低bit变高bit。 比如0x55经过数据反转后变为0xAA。 生成多项式模2除法中的除数根据多项式可以生成二进制除数不同的CRC校验有不同的多项式。 1.3 CRC校验的标准流程 1、初始值赋值给crc_reg 2、判断信息码是否需要反转若需要则进行数据反转不需要则保持不变结果赋值给crc_reg 3、信息码或者反转后的信息码左移R位即信息码后面补上R个二进制的0R为校验码的位宽同时也是生成多项式的最高次幂 4、crc_reg与补0后的信息码高位进行异或运算并赋值给crc_reg 5、crc_reg与信息码进行模2除法运算运算的余数结果赋值给crc_reg 6、判断输出结果是否需要反转若需要则进行数据反转不需要则保持不变结果赋值给crc_reg 7、crc_reg与结果异或值进行异或运算得到最终的校验值。 二、CRC32 2.1 CRC32相关信息 最近在考虑使用FPGA实现UDP协议就研究到了CRC32校验像赛灵思提供的MAC核内部就实现了CRC32校验方式。于是我就抱着学习的态度研究了一下CRC32。关于CRC8、CRC16等等其余的CRC校验方式此处就不赘述了。 CRC32校验里面提到了几个概念 1、生成多项式generator polynomial CRC32X32X26X23X22X16X12X11X10X8X7X5X4X2X11。 二进制可以表示为33b1_0000_0100_1100_0001_0001_1101_1011_0111。 十六进制表示为32‘h104C11DB7。 生成多项式即为除数。 2、待校验的数据 待校验的数据即为被除数即上面描述的信息码。 最终获得的结果即为CRC校验值。 2.2 CRC32校验流程 具体的操作流程 1、初始值赋值给crc_reg 2、判断信息码是否需要反转若需要则进行数据反转不需要则保持不变结果赋值给crc_reg 3、信息码或者反转后的信息码左移32位即信息码后面补上32个二进制的0 4、crc_reg与补0后的信息码高32位进行异或运算并赋值给crc_reg 5、crc_reg与信息码进行模2除法运算运算的余数结果赋值给crc_reg 6、判断输出结果是否需要反转若需要则进行数据反转不需要则保持不变结果赋值给crc_reg 7、crc_reg与结果异或值进行异或运算得到最终的校验值。 按照C语言编写了此CRC32校验流程在VScode中进行测试。设置不同的反转信息、初始值、结果异或值输出结果与CRC计算工具相一致。 CRC计算器工具 CRC循环冗余校验在线计算_ip33.comhttp://www.ip33.com/crc.html //8位数据反转 uint8_t invertuint8(uint8_t data) {uint8_t tmp;tmp 0;for(int i 0; i8;i){if(data (1i) ){tmp | 1 (7-i);}}return tmp; }//32位数据反转 uint32_t invertuint32(uint32_t data) {uint32_t tmp;tmp 0;for(int i 0; i32;i){if(data (1i) ){tmp | 1 (31-i);}}return tmp; }uint32_t CRC32(uint8_t data) {uint8_t in_reverse_en 1; //输入数据是否反转uint8_t out_reverse_en 1;//输出数据是否反转uint32_t poly 0x04C11DB7; //生成多项式0x1_04C11DB7 ,仅取低32位最高为1通过左移直接处理uint32_t init_value 0xFFFFFFFF;//初始值uint32_t out_xor_value 0xFFFFFFFF;//结果异或值uint32_t crc_reg;uint32_t data_reg;uint32_t data_shift;//第一步赋初值crc_reg init_value; //第二步输入是否反转if(in_reverse_en 1)data_reg invertuint8(data);else data_reg data;printf(data:%x\n,data);printf(data_reg:%x\n,data_reg);//第三步信息码左移32位赋值。由于字宽限制仅左移24位,实际上8次移位异或运算后其余数与原有运算相一致。data_shift (data_reg 24); //第四步初始值与数据异或操作crc_reg crc_reg ^ data_shift; //第五步模2除法for(int i0;i8;i){if(crc_reg 0x80000000)//最高位是1时crc_reg (crc_reg 1) ^ poly; //左移将生成多项式的第32bits处理掉相当于异或elsecrc_reg crc_reg 1;} // //第六步输出是否反转if(out_reverse_en 1)crc_reg invertuint32(crc_reg); //第七步与结果异或值进行异或运算crc_reg crc_reg^out_xor_value;return crc_reg; }int main(int argc, char *argv[]) {uint8_t data 0x55;uint32_t CRC_result;CRC_result CRC32(data);printf(CRC_result:%x\n,CRC_result);getchar();return 0; }三、CRC32的FPGA实现 原理已经清楚了按照上述流程就可以实现CRC32。但是FPGA有更简易的实现形式。就属于找规律的范畴了。对于CRC32上一个校验值或者初始值进行CRC校验的时候CRC校验的单个bits的校验结果固定与上一个校验值的某几个bits有关。 所以可以直接采用bit运算的方式输出CRC校验结果。具体找规律这里不再分析直接上示例代码正点原子的代码。也有现成的CRC FPGA代码生成工具可以直接调用。 CRC代码生成工具一Easics CRC Toolhttp://crctool.easics.be/ CRC代码生成工具二OutputLogic.com » CRC Generatorhttp://outputlogic.com/?page_id321 module crc32_d8(input clk , //时钟信号input rst_n , //复位信号低电平有效input [7:0] data , //输入待校验8位数据input crc_en , //crc使能开始校验标志input crc_clr , //crc数据复位信号 output reg [31:0] crc_data, //CRC校验数据output [31:0] crc_next //CRC下次校验完成数据);//***************************************************** //** main code //*****************************************************//输入待校验8位数据,需要先将高低位互换 wire [7:0] data_t;assign data_t {data[0],data[1],data[2],data[3],data[4],data[5],data[6],data[7]};//CRC32的生成多项式为G(x) x^32 x^26 x^23 x^22 x^16 x^12 x^11 // x^10 x^8 x^7 x^5 x^4 x^2 x^1 1assign crc_next[0] crc_data[24] ^ crc_data[30] ^ data_t[0] ^ data_t[6]; assign crc_next[1] crc_data[24] ^ crc_data[25] ^ crc_data[30] ^ crc_data[31] ^ data_t[0] ^ data_t[1] ^ data_t[6] ^ data_t[7]; assign crc_next[2] crc_data[24] ^ crc_data[25] ^ crc_data[26] ^ crc_data[30] ^ crc_data[31] ^ data_t[0] ^ data_t[1] ^ data_t[2] ^ data_t[6] ^ data_t[7]; assign crc_next[3] crc_data[25] ^ crc_data[26] ^ crc_data[27] ^ crc_data[31] ^ data_t[1] ^ data_t[2] ^ data_t[3] ^ data_t[7]; assign crc_next[4] crc_data[24] ^ crc_data[26] ^ crc_data[27] ^ crc_data[28] ^ crc_data[30] ^ data_t[0] ^ data_t[2] ^ data_t[3] ^ data_t[4] ^ data_t[6]; assign crc_next[5] crc_data[24] ^ crc_data[25] ^ crc_data[27] ^ crc_data[28] ^ crc_data[29] ^ crc_data[30] ^ crc_data[31] ^ data_t[0] ^ data_t[1] ^ data_t[3] ^ data_t[4] ^ data_t[5] ^ data_t[6] ^ data_t[7]; assign crc_next[6] crc_data[25] ^ crc_data[26] ^ crc_data[28] ^ crc_data[29] ^ crc_data[30] ^ crc_data[31] ^ data_t[1] ^ data_t[2] ^ data_t[4] ^ data_t[5] ^ data_t[6] ^ data_t[7]; assign crc_next[7] crc_data[24] ^ crc_data[26] ^ crc_data[27] ^ crc_data[29] ^ crc_data[31] ^ data_t[0] ^ data_t[2] ^ data_t[3] ^ data_t[5] ^ data_t[7]; assign crc_next[8] crc_data[0] ^ crc_data[24] ^ crc_data[25] ^ crc_data[27] ^ crc_data[28] ^ data_t[0] ^ data_t[1] ^ data_t[3] ^ data_t[4]; assign crc_next[9] crc_data[1] ^ crc_data[25] ^ crc_data[26] ^ crc_data[28] ^ crc_data[29] ^ data_t[1] ^ data_t[2] ^ data_t[4] ^ data_t[5]; assign crc_next[10] crc_data[2] ^ crc_data[24] ^ crc_data[26] ^ crc_data[27] ^ crc_data[29] ^ data_t[0] ^ data_t[2] ^ data_t[3] ^ data_t[5]; assign crc_next[11] crc_data[3] ^ crc_data[24] ^ crc_data[25] ^ crc_data[27] ^ crc_data[28] ^ data_t[0] ^ data_t[1] ^ data_t[3] ^ data_t[4]; assign crc_next[12] crc_data[4] ^ crc_data[24] ^ crc_data[25] ^ crc_data[26] ^ crc_data[28] ^ crc_data[29] ^ crc_data[30] ^ data_t[0] ^ data_t[1] ^ data_t[2] ^ data_t[4] ^ data_t[5] ^ data_t[6]; assign crc_next[13] crc_data[5] ^ crc_data[25] ^ crc_data[26] ^ crc_data[27] ^ crc_data[29] ^ crc_data[30] ^ crc_data[31] ^ data_t[1] ^ data_t[2] ^ data_t[3] ^ data_t[5] ^ data_t[6] ^ data_t[7]; assign crc_next[14] crc_data[6] ^ crc_data[26] ^ crc_data[27] ^ crc_data[28] ^ crc_data[30] ^ crc_data[31] ^ data_t[2] ^ data_t[3] ^ data_t[4]^ data_t[6] ^ data_t[7]; assign crc_next[15] crc_data[7] ^ crc_data[27] ^ crc_data[28] ^ crc_data[29]^ crc_data[31] ^ data_t[3] ^ data_t[4] ^ data_t[5] ^ data_t[7]; assign crc_next[16] crc_data[8] ^ crc_data[24] ^ crc_data[28] ^ crc_data[29] ^ data_t[0] ^ data_t[4] ^ data_t[5]; assign crc_next[17] crc_data[9] ^ crc_data[25] ^ crc_data[29] ^ crc_data[30] ^ data_t[1] ^ data_t[5] ^ data_t[6]; assign crc_next[18] crc_data[10] ^ crc_data[26] ^ crc_data[30] ^ crc_data[31] ^ data_t[2] ^ data_t[6] ^ data_t[7]; assign crc_next[19] crc_data[11] ^ crc_data[27] ^ crc_data[31] ^ data_t[3] ^ data_t[7]; assign crc_next[20] crc_data[12] ^ crc_data[28] ^ data_t[4]; assign crc_next[21] crc_data[13] ^ crc_data[29] ^ data_t[5]; assign crc_next[22] crc_data[14] ^ crc_data[24] ^ data_t[0]; assign crc_next[23] crc_data[15] ^ crc_data[24] ^ crc_data[25] ^ crc_data[30] ^ data_t[0] ^ data_t[1] ^ data_t[6]; assign crc_next[24] crc_data[16] ^ crc_data[25] ^ crc_data[26] ^ crc_data[31] ^ data_t[1] ^ data_t[2] ^ data_t[7]; assign crc_next[25] crc_data[17] ^ crc_data[26] ^ crc_data[27] ^ data_t[2] ^ data_t[3]; assign crc_next[26] crc_data[18] ^ crc_data[24] ^ crc_data[27] ^ crc_data[28] ^ crc_data[30] ^ data_t[0] ^ data_t[3] ^ data_t[4] ^ data_t[6]; assign crc_next[27] crc_data[19] ^ crc_data[25] ^ crc_data[28] ^ crc_data[29] ^ crc_data[31] ^ data_t[1] ^ data_t[4] ^ data_t[5] ^ data_t[7]; assign crc_next[28] crc_data[20] ^ crc_data[26] ^ crc_data[29] ^ crc_data[30] ^ data_t[2] ^ data_t[5] ^ data_t[6]; assign crc_next[29] crc_data[21] ^ crc_data[27] ^ crc_data[30] ^ crc_data[31] ^ data_t[3] ^ data_t[6] ^ data_t[7]; assign crc_next[30] crc_data[22] ^ crc_data[28] ^ crc_data[31] ^ data_t[4] ^ data_t[7]; assign crc_next[31] crc_data[23] ^ crc_data[29] ^ data_t[5];always (posedge clk or negedge rst_n) beginif(!rst_n)crc_data 32hff_ff_ff_ff;else if(crc_clr) //CRC校验值复位crc_data 32hff_ff_ff_ff;else if(crc_en)crc_data crc_next;else; endendmodule
http://www.zqtcl.cn/news/106650/

相关文章:

  • 电脑怎么做网站赚钱柳州柳北建设局网站
  • 农村服务建设有限公司网站设计基础网站推荐
  • 做网站的编程语言组合ppt模板免费的网站推荐
  • 泰安企业建站公司流程上海营销型网站报价
  • 网站承载量怎么做福州公交集团网站建设
  • 新吴区住房和建设交通局网站小程序商城哪家好排行榜
  • 中小学网站建站模板长春火车站咨询电话
  • c2c网站特点公司网站建设亚运村
  • 邢台wap网站建设费用黑帽seo之搜索引擎
  • 如何用阿里云做网站刷题网站怎么做
  • 织梦制作手机网站上海猎头公司名单
  • 免费生成图片的网站wordpress 购物
  • 江西建设部网站国际新闻最新消息今天2023
  • 怎么做网站啊wordpress英文显示改中文
  • 建筑专业网站有哪些网站标题seo外包优化
  • 浙江建设厅网站施工员报名中国建设协会官网站
  • 网站建设优化是干嘛上海今天最新的新闻
  • 网站大全浏览器软文的概念
  • 盐山做网站价格莱芜征婚吧
  • 具有品牌的微网站建设网站设计培训班前台
  • 网站推广工具推荐html网站地图在线生成
  • 成都本地网站建设青岛电子商务的网站建设
  • 北京网站开发培训河南省百城建设提质工程网站
  • 郑州专业建网站南通网站建设技术支持
  • 简约网站程序网络营销方式较为单一
  • 绍兴企业自助建站123房产网
  • 科技类网站设计特点备案 网站首页地址
  • 做兼职网站网站建设培训速成
  • 开源的网站管理系统商务网站设计与建设实训
  • 东莞三合一网站制作江阴做网站的公司有