0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

聊一聊CRC算法的硬件電路實(shí)現(xiàn):串行電路和并行電路

8ECz_icstudy ? 來源:lp ? 2019-03-26 10:56 ? 次閱讀

這一篇文章聊一聊CRC算法硬件電路實(shí)現(xiàn):串行電路和并行電路。

下面的內(nèi)容還是IC君的朋友文武寫的,IC君稍微做了優(yōu)化排版和少量的編輯工作提升大家的閱讀體驗(yàn)。

1

CRC硬件電路的實(shí)現(xiàn)很簡(jiǎn)單,下圖給出教科書上任意生成多項(xiàng)式G(X)=gnXn+gn-1Xn-1+···+g1X+g0的電路結(jié)構(gòu):

為什么從右邊輸入data?

因?yàn)镃RC是除余數(shù),所以從右邊輸入數(shù)據(jù),相當(dāng)于把信息位data先左移位。

以簡(jiǎn)單的CRC8舉例,多項(xiàng)式G(x)=X8 +X7 +X6 +X4 +X2 +1 的電路示意圖如下:

對(duì)應(yīng)的Verilog code代碼如下:

上面的Verilog code上用了LFSR這種變量聲明,有沒有感到奇怪?

LFSR(線性移位寄存器)和CRC的算法很像的,有興趣的可去看看LFSR的相關(guān)知識(shí)。

一位串行輸入的CRC電路實(shí)現(xiàn)方法很簡(jiǎn)單,每周期的組合邏輯鏈路簡(jiǎn)單延時(shí)短。它的缺點(diǎn)是輸入位寬只有一位,所以一個(gè)clock周期只能算一位,如果是64bit的信息位就要64個(gè)clock周期。如果需要傳輸?shù)奈粩?shù)比較多,會(huì)對(duì)系統(tǒng)的性能產(chǎn)生比較大的影響。

假設(shè)要把輸入位寬變成8位(byte)輸入,電路將是什么樣的呢?并行的CRC其實(shí)也簡(jiǎn)單,可以用提前抽取的概念來實(shí)現(xiàn)。

用下圖來解釋一下,CRCM有M個(gè)校驗(yàn)位就是有M個(gè)寄存器,現(xiàn)在把輸入變成N位。

提前抽取就是通過關(guān)系函數(shù)得到下一個(gè)clock寄存器的輸入nxt_crc[M-1:0]:

關(guān)系函數(shù)CN如下:

nxt_crc=CN(crc_out,data),

crc_out是前一個(gè)clock的寄存器輸出;

data是當(dāng)前的輸入數(shù)據(jù);

函數(shù)CN就是一個(gè)組合邏輯網(wǎng)絡(luò),也可叫做所謂的scramble。怎樣得出這個(gè)CN呢?如果數(shù)字信號(hào)處理學(xué)的好,可以去推導(dǎo)一下。網(wǎng)上有各種算法,很多很多。下面介紹一種方法。

2

以CRC8,G(x)=X8 +X7 +X6 +X4 +X2 +1為例子產(chǎn)生一個(gè)CRC8_8的CN,下面直接給出CRC8_8的Verilog code,后面講怎么得到這個(gè)CN。

上面的Verilog code 的代碼是由下面的矩陣得出的

把N_in作為數(shù)據(jù),M_in作為CRC的上一個(gè)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];

怎么獲得這個(gè)矩陣呢?

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;以此類推。計(jì)算出上面矩陣H1=[]NxM。計(jì)算H2=[]MxM的方法和H1是一樣的。

有上面的矩陣就有CN函數(shù)。有了CN就可很容易得出CRC硬件電路了。上面的方法其實(shí)可寫成一個(gè)腳本,實(shí)現(xiàn)任意多項(xiàng)式任意位寬輸入的并行CRC硬件電路。www.OutputLogic.com 有自動(dòng)生成器,不過大家最好自己寫一寫。提醒:上面有LSB和MSB誰先輸入到并行CRC里面去的問題?琢磨一下吧!

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5294

    瀏覽量

    119814
  • CRC算法
    +關(guān)注

    關(guān)注

    0

    文章

    15

    瀏覽量

    8842
  • 串行電路
    +關(guān)注

    關(guān)注

    0

    文章

    2

    瀏覽量

    6337

原文標(biāo)題:CRC算法的硬件電路實(shí)現(xiàn):串行電路和并行電路

文章出處:【微信號(hào):icstudy,微信公眾號(hào):跟IC君一起學(xué)習(xí)集成電路】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    從焊接角度,設(shè)計(jì)PCB的5個(gè)建議

    完成個(gè)電路板,需要PCB工程師、焊接工藝、焊接工人等諸多環(huán)節(jié)的把控。今天通過定位孔、MARK點(diǎn)、留邊、焊盤過孔、輔助工具這五個(gè)方面從畫板的角度跟大家
    的頭像 發(fā)表于 02-06 10:31 ?1946次閱讀
    從焊接角度<b class='flag-5'>聊</b><b class='flag-5'>一</b><b class='flag-5'>聊</b>,設(shè)計(jì)PCB的5個(gè)建議

    stm32的低功耗調(diào)試

    前言:物聯(lián)網(wǎng)的大部分設(shè)備都是電池供電的,設(shè)備本身低功耗對(duì)延長(zhǎng)設(shè)備使用至關(guān)重要,今天就實(shí)際調(diào)試總結(jié)stm32的低功耗調(diào)試。1、stm32在運(yùn)行狀態(tài)下的功耗上圖截圖自stm32l15x手冊(cè)
    發(fā)表于 08-11 08:18

    平衡小車代碼的實(shí)現(xiàn)

    前言今天代碼,只有直立功能的代碼。代碼總體思路給定個(gè)目標(biāo)值,單片機(jī)通過IIC和mpu6050通信,得知數(shù)據(jù)后,根據(jù)角度環(huán)計(jì)算出個(gè)P
    發(fā)表于 01-14 08:29

    串行 并行環(huán)路報(bào)警電路

    串行 并行環(huán)路報(bào)警電路 兩個(gè)SCR分別與兩個(gè)傳感器環(huán)路相連
    的頭像 發(fā)表于 09-04 11:57 ?1765次閱讀
    <b class='flag-5'>串行</b> <b class='flag-5'>并行</b>環(huán)路報(bào)警<b class='flag-5'>電路</b>

    Xmodem協(xié)議中CRC算法的FPAG實(shí)現(xiàn)

    基于解決Xmodem協(xié)議中CRC校驗(yàn)的目的,以經(jīng)典的LFSR硬件電路為基礎(chǔ),采用了按字節(jié)并行運(yùn)算CRC校驗(yàn)碼,以及多字節(jié)
    發(fā)表于 05-07 15:29 ?47次下載
    Xmodem協(xié)議中<b class='flag-5'>CRC</b><b class='flag-5'>算法</b>的FPAG<b class='flag-5'>實(shí)現(xiàn)</b>

    基于SATAⅡ協(xié)議的CRC32并行算法的研究

    在介紹CRC校驗(yàn)原理和傳統(tǒng)CRC32串行比特算法的基礎(chǔ)上,由串行比特型算法推導(dǎo)出
    發(fā)表于 11-07 16:19 ?54次下載
    基于SATAⅡ協(xié)議的<b class='flag-5'>CRC</b>32<b class='flag-5'>并行算法</b>的研究

    種基于矩陣的并行CRC校驗(yàn)算法

    串行編碼原理得到8 位并行數(shù)據(jù)的CRC 校驗(yàn)矩陣,之后對(duì)矩陣進(jìn)行迭代簡(jiǎn)化,得到32 位并行數(shù)據(jù)的參數(shù)矩陣,此參數(shù)矩陣作為該CRC
    發(fā)表于 10-30 16:39 ?3次下載
    <b class='flag-5'>一</b>種基于矩陣的<b class='flag-5'>并行</b><b class='flag-5'>CRC</b>校驗(yàn)<b class='flag-5'>算法</b>

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

    基于串行異步收發(fā)器(UART)的通信中經(jīng)常用到循環(huán)冗余校驗(yàn)(CRC),常見的CRC校驗(yàn)電路多為串行校驗(yàn),校驗(yàn)所需時(shí)鐘周期較多,基于查找表或輸
    發(fā)表于 11-18 11:24 ?2032次閱讀
    基于FPGA的<b class='flag-5'>并行</b><b class='flag-5'>CRC</b><b class='flag-5'>算法</b>的UART控制器

    使用FPGA實(shí)現(xiàn)高速CRC并行算法的設(shè)計(jì)研究

    環(huán)冗余校驗(yàn)碼作為種檢出概率高并且易于實(shí)現(xiàn)的檢錯(cuò)碼,被廣泛應(yīng)用于通信及測(cè)控領(lǐng)域。本文首先簡(jiǎn)要介紹了循環(huán)冗余校驗(yàn)的基本原理,然后從CRC串行實(shí)現(xiàn)
    發(fā)表于 03-23 15:44 ?13次下載
    使用FPGA<b class='flag-5'>實(shí)現(xiàn)</b>高速<b class='flag-5'>CRC</b><b class='flag-5'>并行算法</b>的設(shè)計(jì)研究

    并行CRC電路HDL代碼的快速生成

    CRC校驗(yàn)的實(shí)現(xiàn)基于串行位移寄存器,如果要處理并行數(shù)據(jù),需要對(duì)電路進(jìn)行改進(jìn)。本文介紹了
    發(fā)表于 03-28 09:29 ?16次下載
    <b class='flag-5'>并行</b><b class='flag-5'>CRC</b><b class='flag-5'>電路</b>HDL代碼的快速生成

    USB數(shù)據(jù)傳輸中CRC校驗(yàn)碼的并行算法實(shí)現(xiàn)

    文章介紹了用于 USB 總線數(shù)據(jù)傳輸?shù)?b class='flag-5'>CRC 校驗(yàn)的原理和算法,并且采用并行電路實(shí)現(xiàn) USB2.0 中的
    發(fā)表于 03-28 09:32 ?11次下載
    USB數(shù)據(jù)傳輸中<b class='flag-5'>CRC</b>校驗(yàn)碼的<b class='flag-5'>并行算法</b><b class='flag-5'>實(shí)現(xiàn)</b>

    CRC校驗(yàn)碼并行計(jì)算的FPGA實(shí)現(xiàn)

    用軟件實(shí)現(xiàn) CRC 校驗(yàn)碼計(jì)算很難滿足高速數(shù)據(jù)通信的要求 ,基于硬件實(shí)現(xiàn)方法中 ,有串行經(jīng)典算法
    發(fā)表于 03-28 09:34 ?30次下載
    <b class='flag-5'>CRC</b>校驗(yàn)碼<b class='flag-5'>并行</b>計(jì)算的FPGA<b class='flag-5'>實(shí)現(xiàn)</b>

    FPGA中的彩色轉(zhuǎn)灰度的算法

    大家好,又到了每日學(xué)習(xí)的時(shí)間了,今天我們來FPGA學(xué)習(xí)中可以遇到的算法,今天就
    的頭像 發(fā)表于 04-15 15:47 ?1919次閱讀

    并行CRC計(jì)算的通用算法及其實(shí)現(xiàn)

    摘要:本文從已提出的通用數(shù)學(xué)表達(dá)式出發(fā),研究了并行循環(huán)冗余校驗(yàn)(CRC)計(jì)算的新算法,該算法
    發(fā)表于 02-21 09:45 ?0次下載

    芯片設(shè)計(jì)的NDR是什么?

    今天突然想route相關(guān)的問題,講講NDR是什么,我也梳理總結(jié)下我對(duì)NDR的認(rèn)識(shí)。
    的頭像 發(fā)表于 12-06 15:14 ?1689次閱讀