趙志勇 ,呂玉祥*,趙曉龍,馬維青*
(1.太原理工大學(xué)物理與光電工程學(xué)院,太原 030024;2.山西省電力公司陽泉供電分公司,山西陽泉0 45000)
目前,在圖像、視頻和音頻處理以及信息家電的實際應(yīng)用中都需要存儲大量的數(shù)據(jù),針對以往ATA接口控制器工作時需要CPU的控制訪問不符合低成本、高速度的數(shù)據(jù)傳輸要求。本研究將通常由主機實現(xiàn)的ATA控制流程提取出來,選取其中的UltraDMA方式,實現(xiàn)一種脫離主機的硬盤訪問系統(tǒng),這樣可以有效節(jié)省處理器和內(nèi)存資源,提高數(shù)據(jù)存儲速度[1]。
目前市場上的ATA IP核都是面向IC設(shè)計的,不利于在FPGA上集成,因此本研究基于Virtex-II FPGA實現(xiàn)的可獨立工作的UltraDMA控制器IP核,對國內(nèi)邏輯IP核的發(fā)展起到了推動作用[2]。
本文所設(shè)計的數(shù)據(jù)傳輸控制器包括了以下3個模塊,分別是UltraDMA讀寫控制模塊、發(fā)送緩沖模塊以及接收緩沖模塊。UltraDMA讀寫控制模塊實現(xiàn)對硬盤寄存器的訪問和用戶數(shù)據(jù)的傳輸,是整個讀寫控制器中最重要的部分。接收/發(fā)送緩沖模塊采用雙端口RAM技術(shù)分別用來緩存用戶發(fā)送的數(shù)據(jù)和接收的數(shù)據(jù)。總體架構(gòu)如圖1所示。
圖1 總體架構(gòu)
ATA技術(shù)是一個關(guān)于IDE(Integrated Device Electronics)的技術(shù)規(guī)范族。在ATA協(xié)議中,主機和ATA硬盤互聯(lián)的物理、電氣特性,信號傳輸以及相關(guān)命令的規(guī)范都有著明確的定義。ATA的傳輸模式主要包括以下3種:PIO模式、MDMA模式和Ultra?DMA模式。PIO模式是一種通過CPU執(zhí)行I/O端口指令來進(jìn)行數(shù)據(jù)的讀寫的數(shù)據(jù)交換模式,傳輸速率只能達(dá)到16.7 Mbyte/s,對處理器資源的占用量極大,目前應(yīng)用已經(jīng)較少;MDMA模式在傳輸速率上和PIO模式同樣達(dá)到了16.7 Mbyte/s,但是已經(jīng)可以有效地減少對處理器資源的占用;UltraDMA模式傳輸速率可以達(dá)到133 Mbyte/s,已經(jīng)能夠明顯超越PIO模式和MDMA模式,成為了目前主流的硬盤傳輸方式[3]。
UltraDMA在決定開始數(shù)據(jù)傳輸之前會對硬盤寄存器進(jìn)行訪問,通過寄存器的狀態(tài)對硬盤的當(dāng)前狀態(tài)進(jìn)行一次判斷,從而決定是否開始傳輸數(shù)據(jù)。主機對硬盤的讀寫操作是通過向硬盤中的寄存器發(fā)送讀寫等命令來實現(xiàn)的[4]。與UltraDMA相關(guān)的寄存器如表1所示。
表1 寄存器組
ATA接口一共有40個引腳,其中DDI(15:0)為雙向數(shù)據(jù)引腳;CBLID、DASP、ddmardy_dstrobe、dmarq、intrq和iordy控制硬盤數(shù)據(jù)進(jìn)入主機,CS(1∶0)、DA(2∶0)、CSEL、dmack-out、hdmardy_hstrobe、reset和stop控制數(shù)據(jù)進(jìn)入硬盤,共16個控制線。圖2所示為RTL頂層封裝圖,圖2顯示了ATA協(xié)議中所需要的主要引腳位置,該封裝為VHDL代碼經(jīng)ISE綜合而成[5]。
圖2 接口定義
UltraDMA的執(zhí)行過程可以分為3個階段:連接初始化、數(shù)據(jù)傳輸和連接終止。UltraDMA數(shù)據(jù)輸入(主機讀)的初始化過程:首先硬盤向主機發(fā)出DMA的請求,主機會在Tui的時間內(nèi)將DMACK置1,stop置0,HDMARDY置1,硬盤主機準(zhǔn)備接受數(shù)據(jù),等待第1個DSTROBE的跳變,第1組數(shù)據(jù)通過數(shù)據(jù)總線(dd(15∶0))傳輸給主機,初始化結(jié)束。
當(dāng)所有數(shù)據(jù)傳輸結(jié)束時,進(jìn)入連接終止階段。主機和硬盤均可終止連接,硬盤端啟動終止連接程序:首先硬盤端使DMA請求信號無效;主機端檢測到DMARQ無效后,在Tli時間內(nèi)置高STOP信號、復(fù)位HDMARDY信號;硬盤在收到STOP跳變后的Tli時間內(nèi)置高DSTROBE信號,表明此后沒有數(shù)據(jù)等待傳輸;此后主機端產(chǎn)生DMACK-跳變沿,同時將CRC校驗傳入數(shù)據(jù)總線,硬盤收到校驗結(jié)果與自己的校驗值進(jìn)行比較,以此判斷傳輸是否錯誤[6]。
用VHDL實現(xiàn)UltraDMA控制器時,主要采用狀態(tài)機來控制整個讀/寫流程,定義的狀態(tài)轉(zhuǎn)移圖如圖3所示,在每個狀態(tài)執(zhí)行固定操作,這樣思路清晰易于實現(xiàn)。
圖3 UltraDMA狀態(tài)轉(zhuǎn)移圖
(1)st_idle 空閑狀態(tài);
(2)st_readst1 讀狀態(tài)寄存器;查看是否硬盤空閑來決定是否繼續(xù)訪問硬盤;
(3)st_selectdev 設(shè)備選擇狀態(tài);寫設(shè)備/磁頭寄存器對將要訪問的設(shè)備進(jìn)行選擇;
(4)st_readst2 讀狀態(tài)寄存器;讀取硬盤狀態(tài),空閑進(jìn)入下一狀態(tài),否則保持;
(5)st_setfeature 設(shè)置接口特性;01000寫入扇區(qū)寄存器高5位,設(shè)置接口為UltraDMA模式,010寫入低3位,選擇模式2;
(6)st_readst3 讀狀態(tài)寄存器;
(7)st_weparameter 寫命令參數(shù);扇區(qū)數(shù)寄存器存儲本次需要傳輸數(shù)據(jù)所占扇區(qū)數(shù);
(8)st_wec 寫命令;C8H為讀操作,CAH為寫操作;
(9)st_initiate UltraDMA初始化;
(10)st_transdata 數(shù)據(jù)傳輸狀態(tài);
(11)st_crc 終止連接和發(fā)送CRC校驗值;
(12)st_readst4 讀狀態(tài)寄存器;
(13)St_err狀態(tài) 錯誤狀態(tài)。當(dāng)有錯誤發(fā)生時進(jìn)入此狀態(tài)。
本文選擇的編譯環(huán)境為ISE10.1,編程語言選擇使用VHDL,通過編譯、綜合和布局布線,最后下載到開發(fā)板上進(jìn)行了驗證。圖4~圖7為在UltraDMA控制器讀寫硬盤時用Chipscope軟件抓取的數(shù)據(jù)情況。
本文首先進(jìn)行了UltraDMA讀(data_in)硬盤的驗證。硬盤讀取數(shù)據(jù)的過程可以總結(jié)為如下過程:數(shù)據(jù)讀初始化、數(shù)據(jù)讀取、數(shù)據(jù)讀取終止。UltraD?MA硬盤讀取的初始化過程如圖4所示,硬盤發(fā)出請求,通過DMACK,stop和hdmardy的響應(yīng),主機做好接收數(shù)據(jù)的準(zhǔn)備。隨著第一組16位數(shù)據(jù)的傳輸,DSTROBE引腳發(fā)生一次跳變,結(jié)束數(shù)據(jù)傳輸初始化過程。圖5顯示了數(shù)據(jù)傳輸終止過程的時序圖,引導(dǎo)區(qū)標(biāo)記數(shù)據(jù)為AA55,CRC校驗值為F445。在DMACK發(fā)生跳變時,該校驗值傳給硬盤,由此判斷數(shù)據(jù)傳輸是否正確[7]。
圖4 UltraDMA data_in初始化
圖5 UltraDMA data_in終止
圖6 UltraDMA data_out初始化
圖7 UltraDMA data_out終止
本文同樣驗證了UltraDMA寫(data_out)硬盤的功能。設(shè)定向硬盤寫入0 000 h-00 FFh共256個512 byte(一個扇區(qū))數(shù)據(jù),此數(shù)據(jù)預(yù)先存入發(fā)送緩沖區(qū)。圖6為data_out初始化階段,硬盤與控制器“握手”完成后,由控制器產(chǎn)生第1個HSTROBE跳變,同時把第一個數(shù)據(jù)(0 000 h)傳入數(shù)據(jù)總線,此后數(shù)據(jù)按順序傳輸[8]。圖7為傳輸結(jié)束階段,硬盤首先使ddmardy(低電平有效)和dmarq無效,主控制器端則產(chǎn)生stop信號,并在最后一個HSTROBE跳變沿傳輸最后兩字節(jié)數(shù)據(jù)(00 FFh)。用戶數(shù)據(jù)傳輸完后在DMACK跳變沿將CRC校驗值(8 985 h)傳給硬盤。
整個驗證過程在無CPU環(huán)境下進(jìn)行,控制器的讀/寫由各自使能信號控制完成,因此該控制器可以作為一個獨立的模塊應(yīng)用于系統(tǒng)中[9]。
本文采用FPGA實現(xiàn)符合ATA標(biāo)準(zhǔn)的UltraD?MA讀寫控制器,在無CPU的情況下,能夠獨立完成對硬盤的讀寫操作。經(jīng)測試,本控制器與希捷、邁拓、三星等公司的多種型號硬盤連接均能正常工作。若對控制器稍加改動,如配合相應(yīng)文件系統(tǒng),如FAT32或者EXT,將可用于嵌入式設(shè)備中,實現(xiàn)海量數(shù)據(jù)存儲,使系統(tǒng)具有更好的實用性。
[1]于明喆,李暉,申婷.Nios系統(tǒng)基礎(chǔ)上的UltraDMA數(shù)據(jù)傳輸模式[J].單片機與嵌入式系統(tǒng)應(yīng)用,2006(2):32-35.
[2]孫偉,郭寶龍,武曉玥.等.DSP視頻存儲關(guān)鍵技術(shù)研究及實現(xiàn)[J].電視技術(shù),2009,33(6):30-32.
[3]Information Tichnology-AT Attachment with Packet Interface-7(ATA/ATAPI-7)(S):2003.
[4]胡偉,慕德俊,劉航,等.嵌入式ATA主機控制器IP核設(shè)計[J].計算機測量與控制,2009,17(1):192-194.
[5]于祥鳳,劉學(xué)斌,胡炳樑,等.UDMA突發(fā)數(shù)據(jù)傳輸中CRC的應(yīng)用[J].電子器件,2008,31(5):10-31.
[6]Bo Li,Yu Peng,Liu Da tong.A High Speed DMA Transaction Method for PCI Express Devices[J].Journal Of Electronic Science And Technology Of China,2009,7(4):380-384.
[7]于磊,孟令軍,張園,等.基于FPGA的PCI-Express接口卡設(shè)計[J].計算機測量與控制,2014,22(1):152-154.
[8]楊立成,劉丹峰,史繼輝.基于DMA的大批量數(shù)據(jù)快速傳輸模塊設(shè)計[J].電子科技,2012,25(12):49-51.
[9]何瓊,陳鐵,程鑫.DMA在高速實時數(shù)據(jù)采集系統(tǒng)中的應(yīng)用[J].儀表技術(shù)與傳感器,2012(3):49-52.
趙志勇(1988-),男,漢族,山西省呂梁市人,碩士研究生,研究方向為電子設(shè)備的研發(fā),zhaozhiyong217@163.com;
呂玉祥(1964-),男,漢族,山西省太原市人,太原理工大學(xué)教授,主要研究領(lǐng)域為光電子技術(shù)及電力電子設(shè)備的研究,lyx823@126.com。