IC君的第43篇原创文章

之前有一篇文章讲了CRC串行和并行电路的实现:CRC算法的硬件电路实现:串行电路和并行电路。

有做过类似设计的同学问:有没有办法轻松愉快地生成任意CRC多项式的电路?我们在设计一开始时,CRC的长度确实可能是不确定的。假如一开始用固定的方式做死电路,后面改起来可能有点小麻烦。

如果我们设计的CRC多项式代码,只要改变一些参数就可以得到任意长度CRC电路,那我们设计的灵活度会大大提升。

接下来,让我们来看看具体的做法吧。

1

IC君的想法是通过verilog的task来实现任意CRC多项式 ,为了task的完整性,采用class类来封装这个task,所以就选择system Verilog实现代码。

代码的注释如下:

  • 3行声明一个参数TBT=128是CRC 最大的长度,设置值越大占得内存也多;

  • 4行声明一个logic变量用于存放CRC的多项式的系数,数字表示形式。如G(X)=X3+X+1,('b1011二进制数字表示法);

  • 5行声明一个logic变量用于存放CRC开始计算时初始值;

  • 6行声明一个logic变量用于存放计算CRC的结果;

  • 8-10行声明一个task: set_gseed( 输入是in_seed), 这个task设定CRC多项式;

  • 12-14行声明一个task: set_00_data( 没有输入), 这个task设定开始计算时初始值为全0,相当于下图CRC计算电路的寄存器一开始都会被reset到0;

  • 16-18行声明一个task: set_ff_data( 没有输入), 这个task设定开始计算时初始值为全1,相当于下图CRC计算电路的寄存器一开始都会被reset到1;

  • 20-40行声明一个task是get_crc (输入是 data)计算CRC。

图 CRC 计算电路

这个CRC task的使用方法如下:

建立一个testbench包含module test,声明一个TK_crc的类,

代码的注释如下:

  • 51行在initial中初始TK_crc类中的变量;

  • 57行设定这个CRC的多项式是G(X)=X8+X7+X6+X4+X2+1;

  • 58行设定CRC初始值全0;

  • 64-68行对一个8位data_in计算CRC,高位(MSB)先进;

  • 69行将算出的CRC结果赋值到crc_data;

下图为CRC的仿真结果:

剩余的一些代码:

代码的注释如下:

  • 52-74行是正常的CRC算法;

  • 94-114行是开始计算时初始值为全1的情况,相比正常的CRC,data_in=j^8'b1111_1111即105行;

  • 52-74行的CRC和94-114行的CRC是相等的。

思考:如果把62行或者104行注释掉是什么情况?

仿真结果如下:

写一篇原创文章非常不容易,麻烦大家转发、分享、点“看”哦,谢谢!

往期精彩回顾

CRC算法的硬件电路实现:串行电路和并行电路

想知道数据传输的正确性?CRC算法来检查

Verdi使用技巧——非连续有效信号量测方法

crc生成多项式怎么算_利用system Verilog生成任意CRC多项式相关推荐

  1. python批量生成图片_利用Python批量生成任意尺寸的图片

    实现效果 通过源图片,在当前工作目录的/img目录下生成1000张,分别从1*1到1000*1000像素的图片. 效果如下: 目录结构 实现示例 # -*- coding: utf-8 -*- imp ...

  2. python批量生成图_利用Python批量生成任意尺寸的图片

    实现效果 通过源图片,在当前工作目录的/img目录下生成1000张,分别从1*1到1000*1000像素的图片. 效果如下: 目录结构 实现示例 # -*- coding: utf-8 -*- imp ...

  3. tcp中的crc检验算法原理_在数据传输过程中的CRC 算法的简单说明

    CRC校验(循环冗余校验)是数据通讯中最常采用的校验方式.在嵌入式软件开发中,经常要用到CRC 算法对各种数据进行校验.因此,掌握基本的CRC算法应是嵌入式程序员的基本技能.可是,我认识的嵌入式程序员 ...

  4. gerber文件怎么导贴片坐标_利用Gerber文件生成贴片坐标及元件位置图的方法技巧...

    利用 Gerber 文件生成贴片坐标及元件位置图的方法技巧 利用 Gerber 文件生成贴片坐标及元件位置图的方法技 巧 2010-10-11 21:59 Gerber 文件是所有电路设计软件都可以产 ...

  5. 常用crc查表法_请教查表法计算CRC的原理

    自己写过的, 希望对你有帮助 Cyclic Redundancy Check(CRC) 原理及实现 /// 1: 需求 在数据传送过程中,为了能够进行错误检测, 往往在数据后追加一些检测码, 当接受方 ...

  6. python利用什么写模板_利用python自动生成verilog模块例化模板

    一.前言 初入职场,一直忙着熟悉工作,就没什么时间更新博客.今天受"利奇马"的影响,只好宅在家中,写写技术文章.芯片设计规模日益庞大,编写脚本成了芯片开发人员必要的软技能.模块端口 ...

  7. python乘法符号手写_利用Python自动生成小学生加减乘除口算考试题卷,不再为手写算术题烦恼!...

    还在为给孩子抄各种各样的口算题而烦恼?孩子上小学一年级之后,加减乘除的口算就要开始练习了,老师肯定会让家长出题.所以我们当家长的,要提前准备一下,就利用Python开发了一套自动生成小学生口算题的小应 ...

  8. python ks值计算_利用Python计算KS的实例详解

    在金融领域中,我们的y值和预测得到的违约概率刚好是两个分布未知的两个分布.好的信用风控模型一般从准确性.稳定性和可解释性来评估模型.sOf免费资源网 一般来说.好人样本的分布同坏人样本的分布应该是有很 ...

  9. 将java编译成so库_利用android studio 生成 JNI需要的动态库so文件

    JNI:  Java Native Interface,  提供了java语言和其他语言(例如c和c++)进行相互调用的方式. 本文是用java调用c生成的so模式.其中,编译so文件过程如下: 1) ...

最新文章

  1. 物联网、自动化的冲击下未来20年职场六大趋势
  2. 百万并发中间件系统的内核设计看Java并发性能优化
  3. python 内置方法赋值_Python内置函数
  4. centos中python2.7被覆盖,yum,python重新安装
  5. jsp实现mysql存储过程_JSP调用MySQL存储过程收藏
  6. OpenGL ES 2兼容函数列表
  7. CSS基础(part16)--CSS用户界面样式
  8. 方舟服务器制作修改,ARK方舟:生存进化服务器禁止物品制造的修改方法
  9. Asterisk文件目录
  10. 贷款利润最大化——利用随机森林和逻辑回归
  11. Jmeter(GUI模式)教程
  12. java 8流在另一个流_Java 8流图
  13. Struts2之入门
  14. Java-----Excel转HTML
  15. php mysql日期转换成时间戳_php日期转时间戳,指定日期转换成时间戳【转】
  16. 鸿蒙不是手机系统?智慧屏曝光,华为将布局“贾维斯”智能时代
  17. Win11找不到xinput1_3.dll怎么办?
  18. uart硬件一些小知识
  19. 乒乓球发旋转球的关键是什么?
  20. 腾讯优图api接口+Python SDK(1)

热门文章

  1. 一个 Java 对象到底有多大?
  2. Loki 2.0.0 发布,ELK之外的优秀日志聚合系统!
  3. Spring Boot 2.x基础教程:MyBatis的多数据源配置
  4. 如何利用 Arthas 热更新线上代码
  5. Java开发人员最常犯的10个错误,你犯过几个?
  6. 2017 Q3 ,互联网人的薪资发生了哪些变化?
  7. java如何获取明天的时间_java获取各种格式的时间,获取昨天明天日期,获取一天的开始结束时间...
  8. 帝国cms上传大图片分片大视频大文件webuploader插件
  9. CMAKE_MAKE_PROGRAM is not set
  10. PP-YOLOv2开源,你的目标检测器又该升级了!性能超越YOLOv5且推理耗时保持不变