亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于FPGA的高速eMMC磁盤陣列控制器設(shè)計

        2021-11-18 12:14:18曹劍鋒陜西秦泰陽光電力工程有限公司
        品牌研究 2021年5期
        關(guān)鍵詞:磁盤陣列命令時鐘

        文/曹劍鋒(陜西秦泰陽光電力工程有限公司)

        一、整體結(jié)構(gòu)

        整體上,系統(tǒng)由FPGA芯片、eMMC芯片、電源及周邊電路、上位機(jī)等部分組成。本設(shè)計采用4片支持eMMC5.1標(biāo)準(zhǔn)的eMMC芯片組成磁盤陣列,4片eMMC芯片單獨連接至FPGA。FPGA內(nèi)部實現(xiàn)了eMMC磁盤陣列控制器用于控制eMMC磁盤陣列。為了對設(shè)計的控制器進(jìn)行測試驗證,F(xiàn)PGA內(nèi)部還實現(xiàn)了一個萬兆網(wǎng)模塊,通過光模塊與具備萬兆網(wǎng)卡的上位機(jī)連接,編寫了上位機(jī)軟件用于讀寫eMMC磁盤陣列。本文介紹的是設(shè)計eMMC磁盤陣列控制器的設(shè)計思想。

        二、eMMC陣列控制器

        eMMC磁盤陣列控制器主要由同步傳輸控制模塊和4個eMMC驅(qū)動模塊組成。4個eMMC驅(qū)動模塊分別連接4個eMMC芯片。

        圖1 系統(tǒng)結(jié)構(gòu)圖

        eMMC驅(qū)動模塊直接和eMMC芯片打交道,該模塊實現(xiàn)對其所連接的eMMC芯片進(jìn)行初始化和讀寫操作等功能。該模塊向下連接eMMC芯片,向上連接同步傳輸控制模塊。執(zhí)行同步傳輸控制模塊發(fā)來的命令,控制eMMC作出相應(yīng)的動作;讀取eMMC反饋的狀態(tài)信息,向同步傳輸控制模塊發(fā)送運行狀態(tài)信息。同時,當(dāng)執(zhí)行讀操作時,從eMMC獲取數(shù)據(jù),向同步傳輸控制模塊發(fā)送數(shù)據(jù);當(dāng)執(zhí)行寫操作時,獲取同步傳輸控制模塊發(fā)來的數(shù)據(jù),發(fā)送給eMMC寫入。

        同步傳輸控制模塊實現(xiàn)了4片eMMC芯片數(shù)據(jù)的同步讀寫、同步控制、提供統(tǒng)一對外接口等功能。同步傳輸控制模塊向下連接4個eMMC驅(qū)動模塊,向上形成eMMC磁盤陣列控制器的對外接口,用于連接萬兆網(wǎng)模塊。連接萬兆網(wǎng)模塊的接口包括數(shù)據(jù)接口和控制接口,數(shù)據(jù)接口采用標(biāo)準(zhǔn)AXI-stream接口,控制接口包括命令和狀態(tài)信號。

        eMMC驅(qū)動模塊連接eMMC的信號包括8位數(shù)據(jù)信號、命令信號、時鐘信號等;同步傳輸控制模塊連接每個eMMC驅(qū)動模塊的接口包括數(shù)據(jù)接口和控制接口,其中數(shù)據(jù)接口信號包括8位讀數(shù)據(jù)信號、8位寫數(shù)據(jù)信號,控制接口包括命令信號和狀態(tài)信號。

        (一)同步傳輸控制模塊

        同步傳輸控制模塊主要包括數(shù)據(jù)FIFO和狀態(tài)控制模塊。數(shù)據(jù)FIFO建立了萬兆網(wǎng)模塊與eMMC驅(qū)動模塊之間的數(shù)據(jù)通道。當(dāng)進(jìn)行寫操作時,數(shù)據(jù)從萬兆網(wǎng)模塊通過寫數(shù)據(jù)FIFO傳送到eMMC驅(qū)動模塊。當(dāng)進(jìn)行數(shù)據(jù)讀取操作時,數(shù)據(jù)由eMMC驅(qū)動通過讀數(shù)據(jù)FIFO傳送到萬兆網(wǎng)模塊。

        狀態(tài)控制模塊收集各個模塊的工作狀態(tài)和來自上位機(jī)的命令,控制各個模塊協(xié)同工作,完成讀寫傳輸操作。

        狀態(tài)控制模塊連接著萬兆網(wǎng)模塊的控制接口,能夠接收萬兆網(wǎng)模塊發(fā)來的來自上位機(jī)的命令,并能夠?qū)MMC磁盤陣列控制器的工作狀態(tài)傳輸給萬兆網(wǎng)模塊,進(jìn)而上報上位機(jī),實現(xiàn)對eMMC磁盤陣列控制器的操作。

        狀態(tài)控制模塊連接著4個eMMC驅(qū)動模塊的控制接口,能夠獲取eMMC驅(qū)動模塊報告的工作狀態(tài);能夠向eMMC驅(qū)動模塊下發(fā)命令,控制eMMC驅(qū)動模塊的讀寫等操作。

        狀態(tài)控制模塊連接著讀數(shù)據(jù)FIFO和寫數(shù)據(jù)FIFO,能夠獲取各個FIFO的工作狀態(tài),能夠根據(jù)萬兆網(wǎng)模塊來的命令和eMMC驅(qū)動模塊的工作狀態(tài)控制各個FIFO的工作狀態(tài),從而實現(xiàn)數(shù)據(jù)的同步讀寫傳輸操作。

        (二)eMMC驅(qū)動模塊結(jié)構(gòu)

        eMMC驅(qū)動模塊具體實現(xiàn)了對eMMC芯片的各種操作。eMMC驅(qū)動模塊由命令接口模塊、數(shù)據(jù)接口模塊、初始化模塊和讀寫控制模塊等組成。

        圖2 eMMC陣列控制器結(jié)構(gòu)圖

        命令接口模塊用于在CMD信號線上發(fā)送命令和接收響應(yīng)。該模塊形成eMMC標(biāo)準(zhǔn)命令格式的48位命令數(shù)據(jù),將命令數(shù)據(jù)轉(zhuǎn)換為串行數(shù)據(jù),并通過CMD信號線發(fā)送給eMMC芯片;通過CMD信號線接收eMMC芯片返回的響應(yīng)數(shù)據(jù),并將串行數(shù)據(jù)轉(zhuǎn)化為并行數(shù)據(jù),然后解析eMMC芯片的響應(yīng)數(shù)據(jù),以便判斷命令是否成功執(zhí)行,獲取eMMC芯片的工作狀態(tài)等。命令接口由狀態(tài)控制模塊、命令形成模塊、響應(yīng)解析模塊等部分組成。

        數(shù)據(jù)接口模塊用于在eMMC芯片數(shù)據(jù)線上發(fā)送和接收數(shù)據(jù)。數(shù)據(jù)接口模塊由發(fā)送數(shù)據(jù)模塊和接收數(shù)據(jù)模塊組成。本設(shè)計采用HS400工作模式,數(shù)據(jù)會在時鐘的上升沿和下降沿傳輸。當(dāng)發(fā)送數(shù)據(jù)時,發(fā)送數(shù)據(jù)模塊按照eMMC標(biāo)準(zhǔn)規(guī)定的數(shù)據(jù)格式在8根數(shù)據(jù)線上送出數(shù)據(jù)包,即1個周期的開始信號、256個時鐘周期共512字節(jié)數(shù)據(jù)、16個周期的CRC數(shù)據(jù)和一個結(jié)束信號;當(dāng)接收數(shù)據(jù)時,接收數(shù)據(jù)模塊接收8根數(shù)據(jù)線上的數(shù)據(jù)包,即1個周期的開始信號、256個周期共512字節(jié)數(shù)據(jù)、16個周期的CRC數(shù)據(jù)和一個結(jié)束信號。在接收256個時鐘周期的數(shù)據(jù)時計算CRC,在接收完數(shù)據(jù)包后將計算的CRC與接收到的CRC比較,若相同則接收成功,若不同則接收失敗。

        初始化模塊用于對eMMC芯片進(jìn)行初始化,使其進(jìn)入傳輸模式,以便進(jìn)行讀寫操作。同時,初始化模塊用于監(jiān)控eMMC的工作狀態(tài),當(dāng)出現(xiàn)故障時,初始化模塊重新對eMMC芯片執(zhí)行初始化操作。初始化模塊還向同步傳輸模塊報告eMMC芯片的工作狀態(tài)。初始化模塊包括初始化狀態(tài)機(jī)模塊和狀態(tài)監(jiān)測模塊。初始化狀態(tài)機(jī)用于執(zhí)行eMMC標(biāo)準(zhǔn)規(guī)定的初始化流程,狀態(tài)監(jiān)測模塊用于監(jiān)測eMMC工作狀態(tài)。初始化模塊接收同步傳輸模塊發(fā)來的命令,向命令接口模塊發(fā)送需要發(fā)送的命令,并接收命令接口模塊報告的eMMC工作狀態(tài)。

        讀寫控制模塊用于實現(xiàn)對eMMC芯片的讀、寫、擦除等操作功能。讀寫控制模塊包括讀控制模塊、寫控制模塊、擦除控制模塊等部分。當(dāng)讀寫控制模塊收到同步傳輸控制模塊發(fā)來的命令時,根據(jù)指令執(zhí)行不同的操作流程。讀寫控制模塊向命令接口模塊發(fā)送命令,使所連接的eMMC芯片進(jìn)入讀、寫或者擦除的工作狀態(tài);讀寫控制模塊接收命令接口模塊回報的狀態(tài),即所連接的eMMC芯片進(jìn)入的讀、寫或擦除狀態(tài)后,控制數(shù)據(jù)接口模塊進(jìn)行讀、寫數(shù)據(jù)操作。

        (三)命令接口模塊設(shè)計

        命令接口模塊的作用主要是向eMMC芯片發(fā)送串行命令和接收eMMC芯片的響應(yīng)。命令接口模塊依據(jù)初始化模塊或者讀寫控制模塊發(fā)來的命令生成符合eMMC規(guī)范的命令包,發(fā)送給eMMC芯片;解析eMMC芯片發(fā)回的響應(yīng),判斷命令是否成功執(zhí)行,并向上返回狀態(tài)。

        在命令接口模塊發(fā)送命令的時候遵循一定的流程進(jìn)行。一般情況下,命令接口模塊處于IDLE狀態(tài),等待新命令。

        當(dāng)初始化模塊或者讀寫控制模塊向命令接口模塊下發(fā)新命令時,命令接口模塊狀態(tài)轉(zhuǎn)化為START,在此狀態(tài)下,向CMD信號線發(fā)送開始信號。隨后狀態(tài)轉(zhuǎn)換為DIR狀態(tài),向CMD信號線發(fā)送方向信號。接著狀態(tài)切換到CMD狀態(tài),向CMD信號線發(fā)送6個時鐘周期的CMD數(shù)據(jù)。隨后是PARA狀態(tài),向CMD信號線發(fā)送32位參數(shù)數(shù)據(jù)。在發(fā)送從START到PARA的數(shù)據(jù)過程中計算7位CRC,在發(fā)送完P(guān)ARA數(shù)據(jù)后轉(zhuǎn)換為CRC狀態(tài)并發(fā)送計算的CRC數(shù)據(jù),最后轉(zhuǎn)化為END狀態(tài)并發(fā)送結(jié)束位。這樣就完成了一個命令的發(fā)送操作。

        當(dāng)命令發(fā)送完成后,模塊接收eMMC芯片的響應(yīng)。命令接口模塊狀態(tài)轉(zhuǎn)換為START狀態(tài),并在這一狀態(tài)等待CMD信號線上出現(xiàn)開始信號。當(dāng)開始信號出現(xiàn)后,狀態(tài)轉(zhuǎn)換為DIR狀態(tài),接收方向信號。然后轉(zhuǎn)換為CMD狀態(tài)接收6位命令碼,并確認(rèn)接收到的6位命令碼是剛才發(fā)送命令的響應(yīng)。隨后轉(zhuǎn)換為PARA狀態(tài)接收32位參數(shù),此參數(shù)可以包括eMMC當(dāng)前的工作狀態(tài)數(shù)據(jù)等,由此可以判斷命令是否成功執(zhí)行。接收上述數(shù)據(jù)時計算CRC。接收完P(guān)ARA數(shù)據(jù)后轉(zhuǎn)換為CRC狀態(tài),接收CRC數(shù)據(jù),然后轉(zhuǎn)換為END狀態(tài),并在這一狀態(tài)驗證CRC以判斷響應(yīng)是否正確接收。由此即可完成一次響應(yīng)的接收。

        (四)數(shù)據(jù)接口模塊設(shè)計

        數(shù)據(jù)接口模塊的作用是向eMMC芯片發(fā)送數(shù)據(jù)和接收eMMC發(fā)來的數(shù)據(jù)。數(shù)據(jù)接口模塊依照eMMC 5.1標(biāo)準(zhǔn)中HS400工作模式形成數(shù)據(jù)包和解析接收到的數(shù)據(jù)。數(shù)據(jù)接口模塊接收讀寫控制模塊傳來的數(shù)據(jù),按照發(fā)送流程發(fā)送給eMMC芯片,并檢查寫入是否成功;接收eMMC芯片發(fā)來的數(shù)據(jù),并檢查接收到的數(shù)據(jù)是否存在錯誤,成功接收后將數(shù)據(jù)上傳讀寫控制模塊。

        發(fā)送數(shù)據(jù)時,當(dāng)讀寫控制模塊準(zhǔn)備好數(shù)據(jù)后,向命令接口模塊和數(shù)據(jù)接口模塊發(fā)送寫數(shù)據(jù)命令。數(shù)據(jù)接口模塊從IDLE狀態(tài)轉(zhuǎn)換為START狀態(tài),在此狀態(tài)下在8位數(shù)據(jù)線上發(fā)送1個時鐘周期的開始信號,然后轉(zhuǎn)化為DATA狀態(tài)。在DATA狀態(tài)下,發(fā)送256個時鐘周期的數(shù)據(jù)信號,數(shù)據(jù)信號在時鐘的上升沿和下降沿發(fā)送,一個時鐘周期發(fā)送2字節(jié)數(shù)據(jù),共發(fā)送512字節(jié)數(shù)據(jù)。在發(fā)送數(shù)據(jù)時計算CRC,當(dāng)完成發(fā)送數(shù)據(jù)時狀態(tài)轉(zhuǎn)化為CRC,此時發(fā)送16個時鐘周期的CRC數(shù)據(jù),然后轉(zhuǎn)化為CHECK狀態(tài)。在CHECK下檢查eMMC是否寫入成功,若寫入成功,則轉(zhuǎn)入IDLE狀態(tài)等待下一個寫數(shù)據(jù)命令;若寫入失敗,則轉(zhuǎn)入START狀態(tài)重復(fù)以上流程重新寫入當(dāng)前數(shù)據(jù)。

        接收數(shù)據(jù)時,當(dāng)讀寫控制模塊需要讀取數(shù)據(jù)時,向命令接口模塊和數(shù)據(jù)接口模塊發(fā)送讀數(shù)據(jù)命令。數(shù)據(jù)接口模塊從IDLE狀態(tài)轉(zhuǎn)換為START狀態(tài),等待eMMC數(shù)據(jù)線上出現(xiàn)開始信號。當(dāng)?shù)却_始信號超時時,數(shù)據(jù)接口模塊狀態(tài)返回IDLE狀態(tài)并向讀寫控制模塊報告狀態(tài),等待下一次命令。當(dāng)eMMC數(shù)據(jù)線上出現(xiàn)開始信號后,狀態(tài)轉(zhuǎn)化為DATA,開始接收256個時鐘周期的數(shù)據(jù)。每個時鐘周期的上升沿和下降沿都會傳輸數(shù)據(jù),共接收512字節(jié)數(shù)據(jù)。在接收數(shù)據(jù)的同時計算CRC。當(dāng)接收數(shù)據(jù)完成后,狀態(tài)轉(zhuǎn)換為CRC狀態(tài),接收16個時鐘的CRC數(shù)據(jù)。接收完CRC后轉(zhuǎn)換為CHECK狀態(tài),將計算得到的CRC和接收到的CRC比較,若一致,則接收成功,否則接收失敗,向讀寫控制模塊報告狀態(tài)后返回IDLE狀態(tài),完成接收。

        (五)初始化模塊

        初始化模塊的作用是初始化eMMC芯片,使其進(jìn)入傳輸模式,準(zhǔn)備好進(jìn)行讀寫等操作。對于eMMC的初始化,模塊遵循eMMC5.1標(biāo)準(zhǔn)中的初始化流程進(jìn)行。

        初始化模塊通過向命令接口模塊發(fā)送命令,控制命令接口模塊將指定的初始化命令發(fā)送給eMMC芯片;同時獲取命令接口模塊回報的發(fā)送結(jié)果。

        當(dāng)系統(tǒng)上電后,初始化模塊首先發(fā)送CMD0,對eMMC芯片進(jìn)行軟復(fù)位,使其進(jìn)入IDLE狀態(tài)。隨后發(fā)送CMD1,當(dāng)eMMC芯片準(zhǔn)備完成后進(jìn)入READY狀態(tài)。此時發(fā)送CMD2獲取芯片的CID,使其進(jìn)入IDENTFICATION狀態(tài)。然后發(fā)送CMD3為芯片設(shè)置地址,芯片進(jìn)入STANDBY狀態(tài)。然后發(fā)送CMD7選中該芯片,進(jìn)入SETBW狀態(tài)。接著發(fā)送CMD6設(shè)置位寬為8位,進(jìn)入SETHS400狀態(tài)。最后發(fā)送CMD6設(shè)置工作模式為HS400模式,進(jìn)入DONE狀態(tài)。這樣就完成了eMMC芯片的初始化。當(dāng)在任何狀態(tài)下出現(xiàn)發(fā)送錯誤時,系統(tǒng)均進(jìn)入ERROR狀態(tài),在此狀態(tài)下發(fā)送CMD0復(fù)位eMMC芯片,使其進(jìn)入IDLE狀態(tài),重復(fù)以上過程,直到初始化成功。

        在芯片成功完成初始化后,芯片就可以接收讀寫控制命令進(jìn)行數(shù)據(jù)傳輸?shù)炔僮髁?。初始化模塊會監(jiān)控芯片的工作狀態(tài),當(dāng)出現(xiàn)異常狀態(tài)時,可以對芯片重新初始化。

        (六)讀寫控制模塊

        讀寫控制模塊實現(xiàn)了對eMMC芯片的數(shù)據(jù)讀取、寫入和擦除操作。讀寫控制模塊接收上級傳來的命令,并按照eMMC5.1標(biāo)準(zhǔn)中的讀、寫、擦除操作流程進(jìn)行工作。

        當(dāng)沒有操作命令時,模塊處于空閑狀態(tài)。當(dāng)收到新的操作命令后,根據(jù)命令進(jìn)行相應(yīng)的讀取、寫入或者擦除操作。

        當(dāng)收到讀取數(shù)據(jù)命令時,模塊狀態(tài)從空閑轉(zhuǎn)入讀取狀態(tài)。首先設(shè)置塊長,通過命令接口模塊發(fā)送CMD16設(shè)置此次要讀取的數(shù)據(jù)塊長度,對于HS400,只支持512字節(jié)塊長;然后設(shè)置塊數(shù),發(fā)送CMD23設(shè)置需要讀取的數(shù)據(jù)塊個數(shù);然后發(fā)送多塊讀命令,發(fā)送CMD18開始讀取數(shù)據(jù);在讀數(shù)據(jù)狀態(tài)向數(shù)據(jù)接口模塊發(fā)送讀取數(shù)據(jù)命令,等待數(shù)據(jù)讀取完成。當(dāng)讀取完成后進(jìn)入檢查狀態(tài),檢查讀取是否成功,并向上返回狀態(tài)。讀取完成后進(jìn)入空閑狀態(tài)等待下一個命令。

        當(dāng)收到寫入數(shù)據(jù)命令時,模塊從空閑狀態(tài)轉(zhuǎn)入寫入狀態(tài)。首先設(shè)置塊長和設(shè)置塊數(shù),與讀數(shù)據(jù)命令相同,也是通過命令接口模塊發(fā)送CMD16和CMD23完成。然后發(fā)送多塊寫命令,發(fā)送CMD25開始寫入數(shù)據(jù);在寫數(shù)據(jù)狀態(tài)向數(shù)據(jù)接口模塊發(fā)送寫入數(shù)據(jù)命令,等待數(shù)據(jù)寫入完成。當(dāng)寫入完成后進(jìn)入檢查狀態(tài),檢查寫入是否成功,并向上返回狀態(tài)。寫入完成后進(jìn)入空閑狀態(tài)等待下一個命令。

        當(dāng)收到擦除命令時,模塊從空閑狀態(tài)轉(zhuǎn)入擦除狀態(tài)。首先通過命令接口模塊發(fā)送CMD35設(shè)置需要擦除數(shù)據(jù)的起始地址,然后發(fā)送CMD36設(shè)置結(jié)束地址,最后發(fā)送CMD38開始擦除數(shù)據(jù),狀態(tài)進(jìn)入檢查狀態(tài),等待擦除完成。當(dāng)擦除完成后向上返回狀態(tài),并進(jìn)入空閑狀態(tài)等待下一個命令。

        三、總結(jié)

        通過一段時間的編寫調(diào)試,成功地完成了該eMMC磁盤陣列控制器的設(shè)計。通過使用上位機(jī)軟件測試,該控制器能夠以超過1GB每秒的速度讀取eMMC中的數(shù)據(jù),實現(xiàn)了高速讀寫eMMC芯片的設(shè)計目標(biāo)。

        猜你喜歡
        磁盤陣列命令時鐘
        只聽主人的命令
        別樣的“時鐘”
        古代的時鐘
        更換磁盤陣列磁盤
        移防命令下達(dá)后
        有趣的時鐘
        時鐘會開“花”
        這是人民的命令
        電視播出機(jī)房磁盤陣列預(yù)防性維護(hù)
        藍(lán)色命令
        人人妻人人澡人人爽人人精品av | 亚洲国产成人av第一二三区| 欧美成人形色生活片| 亚洲色中文字幕无码av| 国产一区二区三免费视频| 91尤物在线看| 一本久道久久综合婷婷五月| 免费a级毛片18以上观看精品| 东北熟妇露脸25分钟| 丰满少妇一区二区三区专区| 国产午夜精品理论片| 艳妇臀荡乳欲伦交换在线播放| 曰韩内射六十七十老熟女影视| 亚洲av日韩aⅴ无码电影 | 欧美黑寡妇特a级做爰| 精品亚洲第一区二区三区 | 精品欧美一区二区在线观看| 精品无码国产自产拍在线观看蜜| 蜜桃av噜噜一区二区三区9| 国产色婷亚洲99精品av网站| 欧美成人高清手机在线视频| 国产免费又色又爽又黄软件| 爆乳熟妇一区二区三区霸乳 | 人妻AV无码一区二区三区奥田咲| 真人直播 免费视频| 日韩精品久久无码中文字幕| 精品国产精品久久一区免费式| 日本高清成人一区二区三区 | av资源在线永久免费观看| 精品欧洲AV无码一区二区免费| 日本高清视频www| 欧美高清精品一区二区| 中国亚洲av第一精品| 一区二区免费国产a在亚洲| 国产国拍亚洲精品福利| 91社区视频在线观看| 中文字幕精品一区二区精品| 国产精品成人一区二区不卡| 在线不卡精品免费视频| 九色精品国产亚洲av麻豆一| 久久精品中文字幕久久|