0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

8ECz_icstudy 来源:lp 2019-03-26 10:56 次阅读

这一篇文章聊一聊CRC算法硬件电路实现:串行电路和并行电路。

下面的内容还是IC君的朋友文武写的,IC君稍微做了优化排版和少量的编辑工作提升大家的阅读体验。

1

CRC硬件电路的实现很简单,下图给出教科书上任意生成多项式G(X)=gnXn+gn-1Xn-1+···+g1X+g0的电路结构:

为什么从右边输入data?

因为CRC是除余数,所以从右边输入数据,相当于把信息位data先左移位。

以简单的CRC8举例,多项式G(x)=X8 +X7 +X6 +X4 +X2 +1 的电路示意图如下:

对应的Verilog code代码如下:

上面的Verilog code上用了LFSR这种变量声明,有没有感到奇怪?

LFSR(线性移位寄存器)和CRC的算法很像的,有兴趣的可去看看LFSR的相关知识。

一位串行输入的CRC电路实现方法很简单,每周期的组合逻辑链路简单延时短。它的缺点是输入位宽只有一位,所以一个clock周期只能算一位,如果是64bit的信息位就要64个clock周期。如果需要传输的位数比较多,会对系统的性能产生比较大的影响。

假设要把输入位宽变成8位(byte)输入,电路将是什么样的呢?并行的CRC其实也简单,可以用提前抽取的概念来实现。

用下图来解释一下,CRCM有M个校验位就是有M个寄存器,现在把输入变成N位。

提前抽取就是通过关系函数得到下一个clock寄存器的输入nxt_crc[M-1:0]:

关系函数CN如下:

nxt_crc=CN(crc_out,data),

crc_out是前一个clock的寄存器输出;

data是当前的输入数据;

函数CN就是一个组合逻辑网络,也可叫做所谓的scramble。怎样得出这个CN呢?如果数字信号处理学的好,可以去推导一下。网上有各种算法,很多很多。下面介绍一种方法。

2

以CRC8,G(x)=X8 +X7 +X6 +X4 +X2 +1为例子产生一个CRC8_8的CN,下面直接给出CRC8_8的Verilog code,后面讲怎么得到这个CN。

上面的Verilog code 的代码是由下面的矩阵得出的

把N_in作为数据,M_in作为CRC的上一个clock的值就有:

LFSR_S[0] =DATA[0]^DATA[1]^DATA[3]^DATA[6]^DATA[7]^LFSR_N[0]^LFSR_N[1]^LFSR_N[3]^LFSR_N[6]^LFSR_N[7];

怎么获得这个矩阵呢?

CRCM_N(M_in,N_in)= CRCM_N(M_in,0)+ CRCM_N(0,N_in)

可以用crc8_parallel(N_in):输入data_in 的是8‘b00000001,得到crc8的值,就是H1的第一行8’hd5;输入data_in 的是8‘b00000010,得到crc8的值,就是H1的第二行8’h7f;以此类推。计算出上面矩阵H1=[]NxM。计算H2=[]MxM的方法和H1是一样的。

有上面的矩阵就有CN函数。有了CN就可很容易得出CRC硬件电路了。上面的方法其实可写成一个脚本,实现任意多项式任意位宽输入的并行CRC硬件电路。www.OutputLogic.com 有自动生成器,不过大家最好自己写一写。提醒:上面有LSB和MSB谁先输入到并行CRC里面去的问题?琢磨一下吧!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    31

    文章

    5308

    浏览量

    119977
  • CRC算法
    +关注

    关注

    0

    文章

    15

    浏览量

    8847
  • 串行电路
    +关注

    关注

    0

    文章

    2

    浏览量

    6339

原文标题:CRC算法的硬件电路实现:串行电路和并行电路

文章出处:【微信号:icstudy,微信公众号:跟IC君一起学习集成电路】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    从焊接角度,设计PCB的5个建议

    完成电路板,需要PCB工程师、焊接工艺、焊接工人等诸多环节的把控。今天通过定位孔、MARK点、留边、焊盘过孔、辅助工具这五个方面从画板的角度跟大家
    的头像 发表于 02-06 10:31 1967次阅读
    从焊接角度<b class='flag-5'>聊</b><b class='flag-5'>一</b><b class='flag-5'>聊</b>,设计PCB的5个建议

    stm32的低功耗调试

    前言:物联网的大部分设备都是电池供电的,设备本身低功耗对延长设备使用至关重要,今天就实际调试总结stm32的低功耗调试。1、stm32在运行状态下的功耗上图截图自stm32l15x手册
    发表于 08-11 08:18

    平衡小车代码的实现

    前言今天代码,只有直立功能的代码。代码总体思路给定个目标值,单片机通过IIC和mpu6050通信,得知数据后,根据角度环计算出个P
    发表于 01-14 08:29

    串行 并行环路报警电路

    串行 并行环路报警电路 两个SCR分别与两个传感器环路相连
    的头像 发表于 09-04 11:57 1770次阅读
    <b class='flag-5'>串行</b> <b class='flag-5'>并行</b>环路报警<b class='flag-5'>电路</b>

    Xmodem协议中CRC算法的FPAG实现

    基于解决Xmodem协议中CRC校验的目的,以经典的LFSR硬件电路为基础,采用了按字节并行运算CRC校验码,以及多字节
    发表于 05-07 15:29 47次下载
    Xmodem协议中<b class='flag-5'>CRC</b><b class='flag-5'>算法</b>的FPAG<b class='flag-5'>实现</b>

    基于SATAⅡ协议的CRC32并行算法的研究

    在介绍CRC校验原理和传统CRC32串行比特算法的基础上,由串行比特型算法推导出
    发表于 11-07 16:19 54次下载
    基于SATAⅡ协议的<b class='flag-5'>CRC</b>32<b class='flag-5'>并行算法</b>的研究

    种基于矩阵的并行CRC校验算法

    串行编码原理得到8 位并行数据的CRC 校验矩阵,之后对矩阵进行迭代简化,得到32 位并行数据的参数矩阵,此参数矩阵作为该CRC
    发表于 10-30 16:39 3次下载
    <b class='flag-5'>一</b>种基于矩阵的<b class='flag-5'>并行</b><b class='flag-5'>CRC</b>校验<b class='flag-5'>算法</b>

    基于FPGA的并行CRC算法的UART控制器

    基于串行异步收发器(UART)的通信中经常用到循环冗余校验(CRC),常见的CRC校验电路多为串行校验,校验所需时钟周期较多,基于查找表或输
    发表于 11-18 11:24 2039次阅读
    基于FPGA的<b class='flag-5'>并行</b><b class='flag-5'>CRC</b><b class='flag-5'>算法</b>的UART控制器

    使用FPGA实现高速CRC并行算法的设计研究

    环冗余校验码作为种检出概率高并且易于实现的检错码,被广泛应用于通信及测控领域。本文首先简要介绍了循环冗余校验的基本原理,然后从CRC串行实现
    发表于 03-23 15:44 13次下载
    使用FPGA<b class='flag-5'>实现</b>高速<b class='flag-5'>CRC</b><b class='flag-5'>并行算法</b>的设计研究

    并行CRC电路HDL代码的快速生成

    CRC校验的实现基于串行位移寄存器,如果要处理并行数据,需要对电路进行改进。本文介绍了
    发表于 03-28 09:29 16次下载
    <b class='flag-5'>并行</b><b class='flag-5'>CRC</b><b class='flag-5'>电路</b>HDL代码的快速生成

    USB数据传输中CRC校验码的并行算法实现

    文章介绍了用于 USB 总线数据传输的CRC 校验的原理和算法,并且采用并行电路实现 USB2.0 中的
    发表于 03-28 09:32 11次下载
    USB数据传输中<b class='flag-5'>CRC</b>校验码的<b class='flag-5'>并行算法</b><b class='flag-5'>实现</b>

    CRC校验码并行计算的FPGA实现

    用软件实现 CRC 校验码计算很难满足高速数据通信的要求 ,基于硬件实现方法中 ,有串行经典算法
    发表于 03-28 09:34 30次下载
    <b class='flag-5'>CRC</b>校验码<b class='flag-5'>并行</b>计算的FPGA<b class='flag-5'>实现</b>

    FPGA中的彩色转灰度的算法

    大家好,又到了每日学习的时间了,今天我们来FPGA学习中可以遇到的算法,今天就
    的头像 发表于 04-15 15:47 1924次阅读

    并行CRC计算的通用算法及其实现

    摘要:本文从已提出的通用数学表达式出发,研究了并行循环冗余校验(CRC)计算的新算法,该算法
    发表于 02-21 09:45 0次下载

    芯片设计的NDR是什么?

    今天突然想route相关的问题,讲讲NDR是什么,我也梳理总结下我对NDR的认识。
    的头像 发表于 12-06 15:14 1792次阅读