精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

關于CRC硬件并行化運算的實現方法的探討

冬至子 ? 來源:Bug記錄 ? 作者:woodfan ? 2023-06-20 15:27 ? 次閱讀

數據校驗的基礎運算原理是模2運算,也就是異或運算。

簡單講述一下CRC的原理, CRC校準首先要確定一個多項式M(x), 例如

1.jpg

根據這個多項式的最高系數5, 在數據后補充5位0. 然后對新增0的數據進行模2除法。例如數據0010, 根據上式, M(x)可以寫成 110101。那么模2的最終結果為 11111,那么把這個運算結果替換為原先補充的5位0,這就是用于校驗的冗余碼。這樣輸出傳輸后,接收方利用同樣的多項式運算,得到的結果是0, 即數據沒有傳輸錯誤。

圖片

更多的CRC內容介紹可以網上查詢資料,此處不再贅述。

那么在高速通信中,數據以串行傳輸的方式在外部傳輸,但是在內部數據處理還是以并行數據為主。如何實現CRC硬件計算的并行化處理呢?

第一種方法,把運算過程實現,也就是輸入與對應的位數做異或。然后多次并行例化這個過程,把上一輪計算的結果作為下一次計算的輸入。運算結果的流程如下圖:

圖片

轉成Verilog如下,僅作為一個例子,未仿真驗證過:

reg [5:0] lsfr_tmp [3:0] ;

genvar i;
generate for (i = 0; i < 4; i = i + 1) begin: cdc_cal
always @ (posedge clk or posedge rst) begin
if (rst) begin
lsfr_tmp[i] <= 'd0;
end
else if (i != 0) begin
lsfr_tmp[i][0] <= lsfr_tmp[i-1][4] ^ data[3-i];
lsfr_tmp[i][1] <= lsfr_tmp[i-1][0] ;
lsfr_tmp[i][2] <= lsfr_tmp[i-1][4] ^ data[3-i] ^ lsfr_tmp[i-1][1];
lsfr_tmp[i][3] <= lsfr_tmp[i-1][2] ;
lsfr_tmp[i][4] <= lsfr_tmp[i-1][4] ^ data[3-i] ^ lsfr_tmp[i-1][3];
end
else begin
lsfr_tmp[0] <= 'd0;
lsfr_tmp[0][0] <= data_in[3] ;
lsfr_tmp[0][2] <= data_in[3] ;
lsfr_tmp[0][4] <= data_in[3] ;
end
end
end
endgenerate

assign crc_out = lsfr_tmp[3] ;

這種方法確實可行,在中間插入流水線的話,數據的吞吐率應該也不小。

但我們還有第二種方法,根據多項式的LSFR,推導參考資料[1]可以自動生成Verilog代碼如下,得出最終的冗余碼與輸入和多項式之間的映射關系。

還是以4 bits的數據輸入和上面的多項式為例,根據得到的verilog CRC并行化代碼如下,它的輸出與上一次的CRC冗余碼也存在關系:

//-----------------------------------------------------------------------------
// CRC module for data[3:0] , crc[4:0]=1+x^2+x^4+x^5;
//-----------------------------------------------------------------------------
module crc(
input [3:0] data_in,
input crc_en,
output [4:0] crc_out,
input rst,
input clk);

reg [4:0] lfsr_q,lfsr_c;

assign crc_out = lfsr_q;

always @(*) begin
lfsr_c[0] = lfsr_q[1] ^ lfsr_q[2] ^ lfsr_q[3] ^ data_in[0] ^ data_in[1] ^ data_in[2];
lfsr_c[1] = lfsr_q[2] ^ lfsr_q[3] ^ lfsr_q[4] ^ data_in[1] ^ data_in[2] ^ data_in[3];
lfsr_c[2] = lfsr_q[1] ^ lfsr_q[2] ^ lfsr_q[4] ^ data_in[0] ^ data_in[1] ^ data_in[3];
lfsr_c[3] = lfsr_q[2] ^ lfsr_q[3] ^ data_in[1] ^ data_in[2];
lfsr_c[4] = lfsr_q[0] ^ lfsr_q[1] ^ lfsr_q[2] ^ lfsr_q[4] ^ data_in[0] ^ data_in[1] ^ data_in[3];

end // always

always @(posedge clk, posedge rst) begin
if(rst) begin
lfsr_q <= {5{1'b1}};
end
else begin
lfsr_q <= crc_en ? lfsr_c : lfsr_q;
end
end // always
endmodule // crc

那么它們之間的關系是如何得出的呢?根據參考資料2 提供的資料來看,關系的得出如下。

首先,輸入的數據以及多項式的值會影響輸出的結果。

其次,整個過程是模2運算,也就是非0即1。那么,可以把輸入數據和多項式對數據結果的影響分開計算,最后整合。且我們可以用獨熱碼的形式計算輸入的每一位對輸出的影響。

因此,首先考慮輸入數據對結果的影響,將多項式的初始數值設為0;輸入數據分別設為0001, 0010, 0100, 1000. 帶入到上圖的LFSR中計算,最后得到的輸出數據為:

1.jpg

然后,設輸入數據為0000, 多項式的初始數值為00001, 00010, 00100, 01000, 10000;帶入LFSR中計算,得到的輸出數據為:

1.jpg

根據上述的兩表,可得out[0]跟輸入數據0,1,2 bit以及多項式的1,2,3bit有關。因此做異或運算;然后依次類推,得到了所有的映射關系。然后就可以得到上述Verilog中lfsr的運算關系了。

當然,如果你的CRC的多項式初始數值默認為0,即與之前的CRC校驗冗余碼無關,那么其實可以不用計算多項式數值的情況,只看第一個表。現在拿第一個表的對應關系,計算下0010的冗余碼。就是11111.

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • CRC校驗
    +關注

    關注

    0

    文章

    84

    瀏覽量

    15188
  • Verilog語言
    +關注

    關注

    0

    文章

    113

    瀏覽量

    8214
  • LSFR算法
    +關注

    關注

    0

    文章

    2

    瀏覽量

    1053
收藏 人收藏

    評論

    相關推薦

    Verilog并行CRC校驗

    Verilog并行CRC校驗
    發表于 08-20 21:52

    在Virtex-5 FPGA中使用CRC硬模塊

    作為硬莫塊提供的CRC模塊可加速檢錯進程 CRC計算所依據的原理,并且探討用線性反饋移位寄存器實現硬件
    發表于 06-18 10:04 ?21次下載

    Xmodem協議中CRC算法的FPAG實現

    基于解決Xmodem協議中CRC校驗的目的,以經典的LFSR硬件電路為基礎,采用了按字節并行運算CRC校驗碼,以及多字節CRC算法的
    發表于 05-07 15:29 ?47次下載
    Xmodem協議中<b class='flag-5'>CRC</b>算法的FPAG<b class='flag-5'>實現</b>

    一種基于矩陣的并行CRC校驗算法

    串行編碼原理得到8 位并行數據的CRC 校驗矩陣,之后對矩陣進行迭代簡化,得到32 位并行數據的參數矩陣,此參數矩陣作為該CRC 算法的核心實現
    發表于 10-30 16:39 ?3次下載
    一種基于矩陣的<b class='flag-5'>并行</b><b class='flag-5'>CRC</b>校驗算法

    基于CRC-32并行在千兆以太網中應用

    CRC實現方式分為串行方式和并行方式,由于并行方式一個時鐘周期內可以處理8個bit,與千兆以太網的C;MIl接口協議相符合,故千兆以太網的CRC
    發表于 11-13 14:20 ?12次下載
    基于<b class='flag-5'>CRC</b>-32<b class='flag-5'>并行</b>在千兆以太網中應用

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

    基于串行異步收發器(UART)的通信中經常用到循環冗余校驗(CRC),常見的CRC校驗電路多為串行校驗,校驗所需時鐘周期較多,基于查找表或輸入矩陣轉換的并行算法,需要存儲余數表,占用大量的硬件
    發表于 11-18 11:24 ?2041次閱讀
    基于FPGA的<b class='flag-5'>并行</b><b class='flag-5'>CRC</b>算法的UART控制器

    基于Matlab和GPU的BESO方法的全流程并行計算策略

    針對傳統并行計算方法實現結構拓撲優化快速計算的硬件成本高、程序開發效率低的問題,提出了一種基于Matlab和圖形處理器(GPU)的雙向漸進結構優化(BESO)方法的全流程
    發表于 12-21 15:04 ?2次下載
    基于Matlab和GPU的BESO<b class='flag-5'>方法</b>的全流程<b class='flag-5'>并行</b>計算策略

    如何使用FPGA實現32位并行數據的CRC16編碼器

    在數據通信中, 提高數據在通信中的可靠性,以及快速的數據處理能力一直是人們所追求的,循環冗余校驗CRC就是一種廣泛采用的差錯控制方法,也是一種最常用的信道編碼方法。在介紹CRC碼原理之
    發表于 03-10 15:50 ?14次下載
    如何使用FPGA<b class='flag-5'>實現</b>32位<b class='flag-5'>并行</b>數據的<b class='flag-5'>CRC</b>16編碼器

    使用FPGA實現高速CRC并行算法的設計研究

    的高速CRC并行吏現遞推公式,可適用于并行處理位寬小于等于生成多項式階數和大于生成多項式階數條件下的并行幀校驗應用。最后分別設計了這2種條件下的硬件
    發表于 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校驗的實現基于串行位移寄存器,如果要處理并行數據,需要對電路進行改進。本文介紹了一種并行CRC電路HDL代碼的快速生成鐘算法,只需要帶
    發表于 03-28 09:29 ?16次下載
    <b class='flag-5'>并行</b><b class='flag-5'>CRC</b>電路HDL代碼的快速生成

    USB數據傳輸中CRC校驗碼的并行算法實現

    文章介紹了用于 USB 總線數據傳輸的CRC 校驗的原理和算法,并且采用并行電路實現 USB2.0 中的 CRC產生和CRC校驗,與傳統的串
    發表于 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 校驗碼計算很難滿足高速數據通信的要求 ,基于硬件實現方法中 ,有串行經典算法 LFSR 電路 以及由軟件算法推導出來的
    發表于 03-28 09:34 ?30次下載
    <b class='flag-5'>CRC</b>校驗碼<b class='flag-5'>并行</b>計算的FPGA<b class='flag-5'>實現</b>

    關于STM32F4xx的硬件CRC32校驗

    關于STM32F4xx的硬件CRC32校驗一、概述前段時間由于項目所需,要對MCU上某些數據進行CRC32校驗,MCU選用的是STM32F4系列,以前看到過STM32有
    發表于 12-03 15:51 ?19次下載
    <b class='flag-5'>關于</b>STM32F4xx的<b class='flag-5'>硬件</b><b class='flag-5'>CRC</b>32校驗

    一種并行CRC計算的通用算法及其實現

    摘要:本文從一已提出的通用數學表達式出發,研究了一種并行循環冗余校驗(CRC)計算的新算法,該算法是一種迭代算法,可以逐步更新校驗序列,適用于CRC計算的各種參數選擇。這一算法適合硬件
    發表于 02-21 09:45 ?0次下載

    N32G45x硬件CRC計算Modbus的CRC16

    以前都是使用軟件CRC,浪費計算時間,有硬件CRC不用,真是可惜。本次使用硬件CRC對ModBus的CR
    的頭像 發表于 10-16 15:01 ?1066次閱讀
    N32G45x<b class='flag-5'>硬件</b><b class='flag-5'>CRC</b>計算Modbus的<b class='flag-5'>CRC</b>16