女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

3天內不再提示

使用C語言和VHDL語言在高速大容量固態存儲器實現ECC算法

電子設計 ? 來源:電子科技 ? 作者:賈紅恩,劉瑞竹, ? 2020-03-29 08:01 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

評價存儲器的一個重要指標就是它的可靠性,在一般的數據存儲中,幾個位的錯誤可能不是很關鍵的問題,如果但是發生在某個敏感的數據上,這個小小的故障可能會導致嚴重的后果。因此,必須采取一些措施來及時檢出并糾正出錯的數據。目前常用的方法有:奇偶校驗、CRC校驗、重復碼校驗等。

ECC校驗是在奇偶校驗的基礎上發展而來的,它將數據塊看作一個矩陣,利用矩陣的行、列奇偶信息生成ECC校驗碼。它能夠檢測并糾正單比特錯誤和檢測雙比特錯誤,但對雙比特以上的錯誤不能保證檢測。它克服了傳統奇偶校驗只能檢出奇數位出錯、校驗碼冗長、不能糾錯的局限性。文中在高速大容量固態存儲器的硬件結構基礎上,詳細介紹了ECC校驗碼的生成規則以及ECC校驗流程,并用C語言和VHDL語言兩種方法實現了該算法。

1、 存儲器的硬件結構及芯片介紹

本存儲器是以FPGA為控制核心,用64片Flash芯片構成存儲陣列,采用CPCI接口實現數據的高速率存儲。Flash存儲陣列分為16組,每組4片,每組Flash芯片共用數據和控制總線。該存儲器的硬件結構圖,如圖1所示。

使用C語言和VHDL語言在高速大容量固態存儲器實現ECC算法

存儲板上的存儲芯片用的是Samsung公司的高速大容量固態存儲芯片K9W8G08U1 M Nand Flash Memory,其容量為1 G×8 bit,分為8 192個塊,每個塊又分為64頁,1頁有(2 k+64)Byte,其中一頁有64 bit的空閑區。存儲板上的控制芯片是Ahera公司的高端FPGA芯片EP3SE110F1152C4,它負責數據的緩沖和整個存儲器的時序控制,并負責以頁為單位生成校驗碼,并把校驗碼存人到頁的空閑區內。下面以1頁2 048 bit為單位介紹校驗碼的生成以及校驗流程。

2 、EGG算法分析及校驗流程

2.1 EGG校驗碼生成規則

Flash在讀寫數據的時候是以頁為單位進行的,一頁有2 048個數據,所以可以以2 048 bit為單位生成校驗碼。每個數據有8位信息組成,可以把這2 048個數據看成2 048×8的矩陣,這樣就可以分別生成行校驗碼和列校驗碼來分別校驗。ECC校驗中,每2 048個數據生成4個字節的校驗碼,這32位的校驗碼分成3個部分:6位的列校驗信息,22位的行校驗信息,其余的4位置1,ECC校驗碼組成,如表1所示。

使用C語言和VHDL語言在高速大容量固態存儲器實現ECC算法

其中P4_l,P4_2,P2_1,P2_2,P1_1,P1_2是列校驗碼,而P8_1,P8_2,P16_1,P16_2,P32_1,P32_2,P64_1,P64_2,P128_1,P128_2,P256_1,P256_2, P512_1,P512_2,P1024_1,P1 024_2, P2 048_1, P2 048_2, P4 096_1,P4096_2,P8192_1,P8192_2是行校驗碼。行列校驗碼生成表,如表2所示。

使用C語言和VHDL語言在高速大容量固態存儲器實現ECC算法

使用C語言和VHDL語言在高速大容量固態存儲器實現ECC算法

使用C語言和VHDL語言在高速大容量固態存儲器實現ECC算法

使用C語言和VHDL語言在高速大容量固態存儲器實現ECC算法

使用C語言和VHDL語言在高速大容量固態存儲器實現ECC算法

2.2 ECC校驗流程

當向NAND Flash的頁中寫入數據的時候,每2 048 bit生成4 bit的ECC校驗碼,稱之為寫ECC校驗碼,保存到每一頁的空閑數據區中。

當從NAND Flash中讀取數據的時候,每2 048 bit生成4 bit的ECC校驗碼,稱之為讀ECC校驗碼。校驗的時候,根據上述ECC生成原理不難推斷:將從頁空閑區中讀出的寫ECC校驗碼和讀ECC校驗碼按位異或,若結果為0,則表示不存在錯;若4 bit的異或結果中存在14 bit為1,表示存在1 bit錯誤,且可糾正;若4個bit的異或結果中只存在1 bit為1,表示空閑區中的校驗碼出錯;其他情況均表示出現了無法糾正的錯誤,校驗流程圖,如圖2所示。

使用C語言和VHDL語言在高速大容量固態存儲器實現ECC算法

3、 ECC算法的實現

3.1 C語言實現ECC算法

以一頁數據2 048個字節作為測試數據產生ECC校驗碼,數據是0x00~0xFF,循環8次產生2048個數據,數據序列,如圖3所示。

使用C語言和VHDL語言在高速大容量固態存儲器實現ECC算法

按前面的ECC校驗碼生成規則,2 048個數據應該生成4個校驗碼,生成的校驗碼,如圖4所示,其中ecccode1,ecccode2,ecccode3,ecccode4是生成的4個校驗碼。

使用C語言和VHDL語言在高速大容量固態存儲器實現ECC算法

現在假設讀出的數據中有一位數據發生了翻轉,出現了一位數據錯誤的情況,即假設數據的第2 bit的最低位發生了翻轉,0×0l變成了O×00,此時讀出的數據序列,如圖5所示。

使用C語言和VHDL語言在高速大容量固態存儲器實現ECC算法

3.2 利用VHDL語言實現EGG算法

文中以0x00~OxFF循環8次產生2 048個數據,利用VHDL語言編程,在QuartusII7.2下進行了仿真,得到了如圖7所示的校驗碼。其中ecccodel =00000000,ecccode2=00000000,ecccode3=11000000,ecccode4=000000ll是生成的4個校驗碼,從圖中可以看到利用VHDL語言得到的校驗碼和用C語言得到的ECC校驗碼是相同的。

使用C語言和VHDL語言在高速大容量固態存儲器實現ECC算法

使用C語言和VHDL語言在高速大容量固態存儲器實現ECC算法

4 、結束語

文中介紹了ECC算法的一種實現方法,說明了ECC的校驗流程,最后用兩種方法實現ECC校驗算法。ECC校驗算法簡單,軟硬件均能實現,它能夠檢測并糾正單比特錯誤和檢測雙比特錯誤,所以可以為數據存儲和通信系統提供一種強有力的差錯檢測手段。

責任編輯:t

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

    關注

    1645

    文章

    22046

    瀏覽量

    618277
  • 存儲器
    +關注

    關注

    38

    文章

    7649

    瀏覽量

    167346
  • vhdl
    +關注

    關注

    30

    文章

    820

    瀏覽量

    129937
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    應用VHDL語言的FFT算法實現

    應用VHDL語言的FFT算法實現
    發表于 08-20 20:17

    請問VHDL語言和verilog語言有什么區別?

    VHDL語言和verilog語言有何區別
    發表于 03-28 06:52

    請問VHDL語言和verilog語言有什么區別?

    VHDL語言和verilog語言有何區別
    發表于 03-29 07:55

    如何利用固態存儲器進行ECC算法分析與實現?

    特錯誤和檢測雙比特錯誤,但對雙比特以上的錯誤不能保證檢測。它克服了傳統奇偶校驗只能檢出奇數位出錯、校驗碼冗長、不能糾錯的局限性。文中高速容量固態
    發表于 07-31 06:47

    單片機C語言和普通的C語言有什么區別

    是一門通用計算機編程語言,廣泛應用于底層開發。C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的編程
    發表于 11-30 06:49

    vhdl語言ppt

    VHDL的定義和功能VHDL的發展概況程序編程語言和硬件描述語言的對比引入硬件描述語言對系統進
    發表于 09-03 12:58 ?39次下載
    <b class='flag-5'>vhdl</b><b class='flag-5'>語言</b>ppt

    容量固態存儲設備的FPGA實現

    采用大容量固態Flash作為存儲介質,用FPGA作為存儲陣列的控制,設計了高速
    發表于 12-08 17:25 ?29次下載

    C語言和匯編語言混合編程方法和C語言中斷處理方法

    C語言和匯編語言混合編程方法和C語言中斷處理方法,new
    發表于 01-06 14:36 ?36次下載

    vhdl語言和c語言區別大嗎?差異性體現在哪兒

    相信對vhdl語言和c語言區別也有了一定的了解,并且它們兩者之間的區別還是挺大的,下面我們詳細細數一下它們的區別。
    發表于 11-09 16:06 ?2.1w次閱讀
    <b class='flag-5'>vhdl</b><b class='flag-5'>語言和</b><b class='flag-5'>c</b><b class='flag-5'>語言</b>區別大嗎?差異性體現在哪兒

    單片機C語言和C語言為什么有差異?

    許多小伙伴在學完C語言后想入門單片機,但學著學著發現明明都是C語言,為什么單片機C語言和我當初學
    發表于 09-01 16:39 ?3984次閱讀

    使用單片機實現I2C存儲器設計的中文硬件字庫應用的C語言實例

    本文檔的主要內容詳細介紹的是使用單片機實現I2C存儲器設計的中文硬件字庫應用的C語言實例。
    發表于 03-31 14:45 ?2次下載

    [ 愛找茬 ]都是C語言,單片機C語言和普通的C語言究竟有什么差異呢?

    是一門通用計算機編程語言,廣泛應用于底層開發。C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的編程
    發表于 11-20 19:36 ?31次下載
    [ 愛找茬 ]都是<b class='flag-5'>C</b><b class='flag-5'>語言</b>,單片機<b class='flag-5'>C</b><b class='flag-5'>語言和</b>普通的<b class='flag-5'>C</b><b class='flag-5'>語言</b>究竟有什么差異呢?

    如何選擇創建c語言和c++

    選擇創建 C 語言和 C++ 都需要綜合考慮多個因素。決定使用哪種語言之前,我們需要對這兩種語言
    的頭像 發表于 11-27 15:58 ?970次閱讀

    vb語言和c++語言的區別

    VB語言和C++語言是兩種不同的編程語言,雖然它們都屬于高級編程語言,但在設計和用途上有很多區別。下面將詳細比較VB
    的頭像 發表于 02-01 10:20 ?3329次閱讀

    PLC編程語言和C語言的區別

    工業自動化和計算機編程領域中,PLC(可編程邏輯控制)編程語言和C語言各自扮演著重要的角色。盡管兩者都是編程
    的頭像 發表于 06-14 17:11 ?4729次閱讀