韓東澤,張 剛,張起貴
(太原理工大學信息工程學院,太原 030024)
一種可堆疊存儲介質(zhì)的設(shè)計
韓東澤,張 剛,張起貴
(太原理工大學信息工程學院,太原 030024)
參考服務(wù)器/客戶端的可堆疊通信模式,以最常見的SATA硬盤作為存儲介質(zhì),Marvell 88SM9705為核心控制芯片,設(shè)計了一種可堆疊的存儲介質(zhì)。經(jīng)測試,88SM9705通過解析主機端發(fā)送來的SATA 3.0協(xié)議定義的幀信息結(jié)構(gòu)(Frame Information Structure,F(xiàn)IS)中PM Port地址字段,能依次對其所連接的多個SATA硬盤進行正確的讀、寫等操作,實現(xiàn)了存儲設(shè)備的可堆疊,穩(wěn)定性能良好。是一種實現(xiàn)擴容同步提速的可堆疊存儲陣列解決方案,在嵌入式存儲系統(tǒng)領(lǐng)域具有很好的應用前景。
可堆疊存儲介質(zhì),SATA 3.0協(xié)議,Marvell 88SM9705,嵌入式存儲系統(tǒng)
隨著互聯(lián)網(wǎng)的發(fā)展,每天海量數(shù)據(jù)的產(chǎn)生使得人們對存儲器的容量和訪問速度有越來越高的要求[1],而僅僅依靠提升時鐘頻率來提速的空間已經(jīng)處于研究的瓶頸,有必要設(shè)計一種新的體系結(jié)構(gòu)來滿足上述需求。本文借助于端口倍增器(Port Multiplier,PM),將多個廉價的硬盤組織起來形成了一種可堆疊的存儲介質(zhì)架構(gòu),并在FPGA上進行了驗證。Marvell 88SM9705是一款具體實現(xiàn)可堆疊存儲介質(zhì)的物理層芯片,可對連接到其上的SATA硬盤按照主機端分配的地址實現(xiàn)對多個硬盤的訪問[2],為可堆疊存儲介質(zhì)的設(shè)計提供了良好的解決方案。
PM可以看成是一款允許活動的主機端與多個設(shè)備端通信的多路復用器。目前PM可以擴展設(shè)計到支持多達15路的設(shè)備端。88SM9705能夠識別SATA自定義的OOB序列和速度協(xié)商序列,可以根據(jù)主機端發(fā)送來的FIS中的PM Port地址字段訪問所連接的多個SATA硬盤,支持的通信速度最高達到6.0 Gb/s[2],是本設(shè)計所選用的核心芯片。下頁圖1為可堆疊存儲介質(zhì)連接示意圖。
圖1 可堆疊存儲介質(zhì)總體連接示意圖
網(wǎng)絡(luò)中,通過為服務(wù)器和客戶端分配不同的IP地址,使相同服務(wù)器和客戶端被區(qū)分開[3]。當服務(wù)器要向某個客戶端發(fā)送消息時,在消息中會加入該客戶端的IP地址,客戶端收到消息,解析提取地址并與自己的地址比較,如果地址匹配,則接收消息并進行相應的操作,否則放棄該消息[4],這種通信結(jié)構(gòu)即為可堆疊。由此可見,要想實現(xiàn)可堆疊,被訪問目標設(shè)備必須具有自主訪問功能和擁有獨立的地址。
SATA硬盤是在ATA硬盤基礎(chǔ)上加以改進,把控制器放在了設(shè)備端,當主機訪問這種設(shè)備時,將命令和數(shù)據(jù)封裝成消息,設(shè)備端的SATA控制器收到消息后,解析消息,提取命令和數(shù)據(jù),完成了硬盤的自主訪問。圖2為具有自主訪問功能的SATA設(shè)備結(jié)構(gòu)圖。
圖2 SATA自主訪問存儲結(jié)構(gòu)
由于SATA硬盤本身是沒有帶地址的,所以還不是可堆疊的存儲設(shè)備。要想實現(xiàn)可堆疊,正如服務(wù)器客戶端模式一樣,必須為能自主訪問的SATA硬盤分配地址。當主機在訪問多個設(shè)備時,在FIS消息中加入設(shè)備地址,設(shè)備端控制器通過提取地址來判斷是否對該設(shè)備進行操作。而目前這一功能的實現(xiàn),需要借助第三方芯片來區(qū)分每一個硬盤設(shè)備。具體的內(nèi)部通訊如圖3所示。
接收到數(shù)據(jù)后,主機在封裝FIS消息的同時,在消息中加入設(shè)備的地址信息,之后控制芯片解析消息提取地址,根據(jù)地址把消息發(fā)送到相應的硬盤,這樣做的好處是對內(nèi)就形成了一個可堆疊架構(gòu)[5],對外只有一個接口,形成一個大容量的存儲設(shè)備。
圖3 可堆疊存儲介質(zhì)內(nèi)部通訊圖
本設(shè)計選用Xilinx公司的Virtex-5開發(fā)平臺作為主機端,Marvell公司的88SM9705的PM芯片作為可堆疊芯片,兩路SATA硬盤組與9705連接作為設(shè)備端,在具體的通信過程中,Virtex-5給9705發(fā)送SATA3.0定義的幀信息結(jié)構(gòu)FIS,通過更改FIS的PM Port字段成對設(shè)備地址的分配[6]。圖4為利用9705芯片設(shè)計的可堆疊存儲介質(zhì)實物圖。
圖4 用9705設(shè)計的可堆疊存儲介質(zhì)連接實物圖
88SM9705芯片在正式投入使用之前必須對其各個端口進行初始化。若初始化成功,芯片端口對應指示燈會亮起,否則初始化失敗。具體初始化的方法在生產(chǎn)芯片時早已設(shè)定好,本文主要工作為編寫相應的狀態(tài)機,通過FPGA給其發(fā)送激活FIS即可。下頁圖5為端口0的具體激活狀態(tài)轉(zhuǎn)移圖,其他端口類似。
各個狀態(tài)含義如下:
idle:空閑狀態(tài);
init0_step1:將9705上端口0的SCR2寄存器接到芯片上的相同的SATA設(shè)備分配地址將它們加以區(qū)分,之后在激活可堆疊芯片的基礎(chǔ)上,通過狀態(tài)機程序?qū)χ付ǖ亩鄠€SATA硬盤訪問,完成數(shù)據(jù)的讀寫。
圖5 可堆疊芯片初始化端口0狀態(tài)轉(zhuǎn)移圖
主機要想給任意一個連接到可堆疊芯片上的SATA設(shè)備發(fā)送消息,就必須要給發(fā)送的消息加上設(shè)備地址。為此PM Port字段已被添加到所有SATA3.0 FIS的第一個雙字中,如表1。這些位在此前被定義為保留位,引進可堆疊芯片PM之后經(jīng)過檢測和初始化,主機端就可以改變PM Port字段的值來訪問連接到PM上的設(shè)備,實現(xiàn)了對這些設(shè)備地址的分配管理。
表1 PM Port在FIS中的位置
PM Port字段占用了SATA3.0 FIS中的4位。若FIS是由主機端傳輸?shù)皆O(shè)備端,該字段由主機填寫,若FIS是由設(shè)備端傳至主機端,該字段由PM填寫。
主機在寫每個SATA設(shè)備之前必須給設(shè)備發(fā)送寫命令FIS,設(shè)備在收到寫命令后會回復DMA模式的第0位置1;
init0_step2:將9705上端口0的SCR2寄存器的第0位置0;
init0_step3:將9705上端口0的SCR2寄存器的第X位清除;
pm0reg_fis:發(fā)送端口設(shè)備識別命令,驗證端口0是否被初始化激活。
圖6表示激活端口0時Chipscope抓取到的結(jié)果。
圖6 激活端口0
可堆疊存儲介質(zhì)結(jié)構(gòu)設(shè)計的核心思想為給連激活FIS,請求與主機建立DMA通信,建立成功后主機才會發(fā)送數(shù)據(jù)FIS。本次設(shè)計的狀態(tài)機實現(xiàn)的功能為將兩個扇區(qū)連續(xù)的寫入兩個不同硬盤的相同位置,如圖7所示。
各個狀態(tài)含義如下:
idle:空閑狀態(tài);
send_reg0:給設(shè)備0發(fā)送寫數(shù)據(jù)FIS;
send_date0:給設(shè)備0發(fā)送寫數(shù)據(jù)FIS;
send_reg1:給設(shè)備1發(fā)送寫數(shù)據(jù)FIS;
send_date1:給設(shè)備1發(fā)送寫數(shù)據(jù)FIS;
圖8為按照圖7的狀態(tài)轉(zhuǎn)移圖編寫的VHDL程序在chipscope中抓取到的執(zhí)行結(jié)果,從圖中可以看出每給一個硬盤寫完一個扇區(qū),該硬盤就會返回一個R_OK原語表示寫入數(shù)據(jù)成功。
圖7 連續(xù)寫兩個扇區(qū)到不同硬盤狀態(tài)轉(zhuǎn)移圖
圖8 連續(xù)寫兩個扇區(qū)到不同硬盤
主機復位后處于空閑狀態(tài),當接收到讀數(shù)據(jù)命令后,發(fā)送讀設(shè)備0的命令FIS,收到X_RDY原語后,轉(zhuǎn)到下一個狀態(tài),準備接收設(shè)備發(fā)送來的數(shù)據(jù),接收完數(shù)據(jù)校驗無誤后,發(fā)送讀取設(shè)備1的FIS開始對設(shè)備1進行讀操作,過程與讀設(shè)備0類似。本次設(shè)計的狀態(tài)機實現(xiàn)的功能為將寫入設(shè)備兩個扇區(qū)讀取出來,從而驗證狀態(tài)機程序的正確性。狀態(tài)轉(zhuǎn)移圖如圖9所示。
圖9 連續(xù)寫兩個扇區(qū)到不同硬盤狀態(tài)轉(zhuǎn)移圖
各狀態(tài)含義如下:
idle:空閑
send_reg0:給設(shè)備0發(fā)送讀數(shù)據(jù)FIS;
rev_date0:接收設(shè)備 0發(fā)送來數(shù)據(jù) FIS;send_reg1:給設(shè)備1發(fā)送讀數(shù)據(jù)FIS;
rev_date1:接收設(shè)備1發(fā)送來數(shù)據(jù)FIS;
經(jīng)過ISE綜合工具Synthesize,得到系統(tǒng)的最高時鐘頻率[8]為207.245 MHz,連續(xù)發(fā)送兩個扇區(qū)需要1 156個時鐘。經(jīng)計算過可得,傳送兩個扇區(qū)的數(shù)據(jù)需要5.58 ns,即傳輸速度可達到183.5 MB/s。本此設(shè)計的可堆疊存儲介質(zhì)只是可堆疊存儲陣列的一個通道,而在陣列中,各個通道并行工作互不干擾。以此推算,陣列上的通道數(shù)越多,傳輸速度也將會大幅度增加,可以滿足更高存儲速度的要求。
本文參考服務(wù)器客戶端的通信模式,設(shè)計了一種可堆疊存儲介質(zhì),可以作為廉價的高速大容量存儲設(shè)備設(shè)計的解決方案,為進一步挖掘SATA 3.0協(xié)議的PM功能奠定了基礎(chǔ),同時也是設(shè)計高速、大容量可堆疊存儲陣列的前期準備,具有良好的嵌入式應用前景。
[1]張杰.一種高速數(shù)據(jù)存儲方法的研究[D].合肥:中國科學技術(shù)大學,2013.
[2]郭燕妮,何杰,張剛.基于FPGA的C/S模式網(wǎng)絡(luò)硬盤設(shè)計與實現(xiàn)[J].電子技術(shù)應用,2014,40(12):30-32,39.
[3]戴寧.基于TCP/IP協(xié)議的網(wǎng)絡(luò)通信服務(wù)器設(shè)計[D].西安:西安電子科技大學,2014.
[4]張剛,張博,張陌.ASIC的片內(nèi)云架構(gòu)和基于該架構(gòu)的設(shè)計方法:中國,201310074630[P].2013-09-01.
[5]JOSE S.Virtex-5 FPGA rocket IO GTP transceiver user guide[R].Xilinx Coporation,2008.
[6]何賓.Xilinx FPGA設(shè)計權(quán)威指南[M].北京:清華大學出版社,2014.
A Design of Stackable Storage Medium
HAN Dong-ze,ZHANG Gang,ZHANG Qi-gui
(School of Information Engineering,Taiyuan University of Technology,Taiyuan 030024,China)
Referring to the communication model of server and client,the paper designs a stackable storage medium using the 88SM9705 chip of Marvell with the general SATA hard disks as the storage medium.The test results indicate that 88SM9705 chip could recognize the PM Port address field of Frame Information Structure(FIS)defined in the SATA 3.0 protocol,and read and write SATA hard disks connected with the chip.Completing the stackable storage device,and it has good stability,which is a solution of capacity expansion with speed increase to the stackable storage array.There is a better application prospect of embedded storage systems filed.
stackable storage medium,SATA 3.0 protocol,marvell 88SM9705,embedded storage systems
TP333.2
A
10.3969/j.issn.1002-0640.2017.08.030
1002-0640(2017)08-0132-04
2016-06-19
2016-08-12
韓東澤(1990- ),男,山西陽泉人,碩士研究生。研究方向:嵌入式系統(tǒng)的設(shè)計。