首页 > 其他分享 >(笔记)VHDL/Verilog之CRC(循环冗余校验)计算

(笔记)VHDL/Verilog之CRC(循环冗余校验)计算

时间:2022-12-01 13:22:35浏览次数:63  
标签:VHDL 校验 CRC Verilog newcrc Data

 

背景:我们在使用VHDL或Verilog进行FPGA开发时,经常会遇到CRC校验计算的情况,如校验公式为

G(x) = X8 + X4 + X3 + X2 + 1 G(x)=X3 +X+1

 

那使用VHDL或Verilog语言该如何进行设计呢?下方是总结分享。

 

1、首先推荐一个CRC循环冗余校验的在线计算工具

网址:CRC(循环冗余校验)在线计算_ip33.com    http://www.ip33.com/crc.html

 

 

 该在线工具可用于验证代码是否有效,如上图是基于“G(x) = X8 + X4 + X3 + X2 + 1”方式对数据“3E 03 00 EF DF”进行校验,结果是0x35。

 

2、推荐一个CRC代码自动生成平台,非常好用,可自动根据公式生成VHDL或Verilog代码

网址:Easics CRC Tool  http://crctool.easics.be/

 

 

 生成后的代码如下:

module CRC8_D8;

  // polynomial: x^8 + x^4 + x^3 + x^2 + 1
  // data width: 8
  // convention: the first serial bit is D[7]
  function [7:0] nextCRC8_D8;

    input [7:0] Data;
    input [7:0] crc;
    reg [7:0] d;
    reg [7:0] c;
    reg [7:0] newcrc;
  begin
    d = Data;
    c = crc;

    newcrc[0] = d[6] ^ d[5] ^ d[4] ^ d[0] ^ c[0] ^ c[4] ^ c[5] ^ c[6];
    newcrc[1] = d[7] ^ d[6] ^ d[5] ^ d[1] ^ c[1] ^ c[5] ^ c[6] ^ c[7];
    newcrc[2] = d[7] ^ d[5] ^ d[4] ^ d[2] ^ d[0] ^ c[0] ^ c[2] ^ c[4] ^ c[5] ^ c[7];
    newcrc[3] = d[4] ^ d[3] ^ d[1] ^ d[0] ^ c[0] ^ c[1] ^ c[3] ^ c[4];
    newcrc[4] = d[6] ^ d[2] ^ d[1] ^ d[0] ^ c[0] ^ c[1] ^ c[2] ^ c[6];
    newcrc[5] = d[7] ^ d[3] ^ d[2] ^ d[1] ^ c[1] ^ c[2] ^ c[3] ^ c[7];
    newcrc[6] = d[4] ^ d[3] ^ d[2] ^ c[2] ^ c[3] ^ c[4];
    newcrc[7] = d[5] ^ d[4] ^ d[3] ^ c[3] ^ c[4] ^ c[5];
    nextCRC8_D8 = newcrc;
  end
  endfunction
endmodule

  

3、如果需要仔细研究计算,可参考如下:

表示形式:多项式G(x):G(x) = X4+X3+1

假设:输入数据 Data,选定的多项式G(x)是x4 + x3 + 1.
所以G(M) = 11001.
CRC = Data mod G
注:CRC的位数要始终比G少1位,因为余数肯定比除数小且只小1位,高位为0不能省略。

CRC校验码的产生方式:模2除法

示例:

 

 

  • 发送端通过CRC校验码将Data转换成NewData发送;
  • 接收端接收到NewData对同样的G(M)进行模2运算,若没有余数,则数据正确传输,否则传输出现错误。

 

标签:VHDL,校验,CRC,Verilog,newcrc,Data
From: https://www.cnblogs.com/tdyizhen1314/p/16941123.html

相关文章

  • 数字逻辑实验 9 FPGA数字钟(Verilog)
    目录实验9FPGA数字钟实验分析:实现思路:硬件支持:硬件描述语言代码编写:1顶层模块2时钟分频,(正/倒)计时器模块3输入处理模块in_out.v5......
  • 基于FPGA的正弦PWM产生系统verilog实现
    目录一、理论基础二、案例背景三、部分FPGA仿真四、仿真结论分析五、参考文献一、理论基础根据如下公式,首先建立simulink仿真模型:   这里,主要需要设计cos模块......
  • 基于FPGA的AD7303/ADCS7476模拟数字转换VHDL开发
    目录一、理论基础二、核心程序三、测试结果 一、理论基础在AlteraNIOS板上设计和实现一个格式转换系统,该系统读取模拟输入,将其转换为数字数据,然后将其反向转换为......
  • 【FPGA & Verilog】手把手教你实现一个DDS信号发生器
    信号发⽣器的设计与实现1.输出波形:⽅波(占空⽐50%)、锯⻮波、三⻆波、脉冲信号(占空⽐连续可调)、正弦波、任意波等2.输出频率:100KHz3.波形选择:使⽤拨码开关选择 思路......
  • 学fpga(从verilog到hls)
            hls,全称为highlevelsynthesis。也就是说从更高一级的语言来完成电路的综合。从前,编写fpga只有一个方法,都是编写verilog类似的硬件语言。但是如何用c、c++......
  • 学fpga(在线verilog编程)
        很多编程不方便的同学,可以利用在线工具进行编程。比如现在,https://hdlbits.01xz.net/wiki/Main_Page这个网站就非常不错,适合暂时还没有安装quartus、vivado的同......
  • scrcpy macos 编译安装最新版 1.2.4
    概况:看官网发布日志,新版加了还少新的特性。尝试了直接用brewinstall,upgrade 等方法,都没有装成。查了一下原因homebrew 目前只提供1.18的版本。要装新的目前只能......
  • Verilog语法入门
    VerilogHDL是一种硬件描述语言(HDL:HardwareDescriptionLanguage),以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑......
  • 基于VScode搭建Verilog自动格式化
    基于VScode搭建Verilog自动格式化插件Verilog-HDL/SystemVerilog/BluespecSystemVerilogSystemVerilogandVerilogFormatter工具https://github.com/googl......
  • 【读书笔记】《Verilog HDL数字设计与综合(第二版 本科教学版)》第一章:Verilog HDL数字
    一、数字电路CAD技术的发展历史真空管晶体管,集成电路(IntegratedCircuit,IC)小规模集成电路(SmallScaleIntegrated,SSI):逻辑门数量很少中规模集成电路(MediumScaleI......