||
基于廣州星嵌電子科技有限公司TMS320C6657+ZYNQ7035/45評估板的PL端實現標準NVMe 1.3協議的Host端,即純邏輯實現NVMe Host IP。
用戶可以根據自身需求,定制NVMe Host FPGA IP,還可以在此基礎上定制FPGA純邏輯來實現文件系統ExFAT。
NVMe Host FPGA IP核使用VHDL硬件描述語言的純邏輯方式來實現,NVMe物理層使用Xilinx 7系列 PCIe核,無需CPU參與。
目前已在廣州星嵌電子科技有限公司DSP+FPGA+ARM XQ6657Z35-EVM評估板上實現并經充分測試驗證:
如果使用PCIe 2.0 X2接口,連續讀速率:685 MB/s,連續寫速率:531 MB/s;
如果使用PCIe2.0 X4接口,連續讀速率1277 MB/s,連續寫速率1015 MB/s,
日后升級性能還可以提升。
NVMe Host FPGA IP訪問接口簡單,用戶可將此IP當作雙端口RAM來使用,只是相對普通雙端口RAM而言多增加了一些讀、寫命令握手接口信號而已。當然,用戶還可將IP定制為自身所需要的接口形式。
NVMe Host FPGA IP對外接口圖如下:
名詞和概念解釋:
SLBA(Starting LBA):邏輯塊基地址,數據在SSD固態硬盤上的起始地址。
NLB(Number of Logical Blocks):邏輯塊數量,指定數據傳輸大小,需要指出的是這是一個0基數值,即以0為初始值,所以最終傳的是(NLB+1)個邏輯塊。
NVMe Host FPGA IP支持最大隊列數64對,最大隊列深度16383,用戶可以根據需要進行定制。NVMe Host FPGA IP核源碼實現了參數化,可根據用戶功能及性能(比如隊列數與隊列深度)對IP參數進行修改設置。
NVMe Host FPGA IP使用的FPGA 軟件開發平臺為Vivado 2018.3,用戶可以定制為自身所需的FPGA軟件開發平臺上。
三、資源消耗NVMe Host FPGA IP在XC7Z035FFG676-2芯片上的資源消耗報表如下(僅供參考,基于XQ6657Z35-EVM平臺測試的數據):
借助NVMe Host FPGA IP,往NVMe SSD固態硬盤上寫入測試數據(例程使用的是累加數),然后讀出,并在FPGA上使用邏輯進行比對,并給出比對結果,以驗證NVMe硬盤讀寫數據是否一致。
1、單次寫8個扇區注:NLB = 7,即邏輯塊數量8。
數據波形放大查看,可以看到寫數據與寫地址相同,寫數據為累加
單次寫8個扇區對應的PCIe底層時序波形如下圖所示:
對上面數據波形放大,可發現讀數據與讀地址相同,讀數據為累加數:
單次讀8個扇區對應的PCIe底層時序波形如下圖所示:
比對結果如下圖高亮信號所示:
Equal_Fail:SSD硬盤讀寫過程中,只要發現一個數據讀寫比對不一致,此信號就拉高并一直保持高電平,無論以后數據是否一致,除非復位。
Equal_Valid:讀寫數據比對結果有效標識,1表示讀寫對比結果有效。
Equal_Flag:SSD硬盤讀寫數據一致標識,1表示讀寫數據一致。
NVMe SSD硬盤讀寫測試完后,從測試平臺上取下NVMe SSD固態
硬盤,并將SSD硬盤連接至PC電腦,使用WinHex軟件工具分析NVMe SSD固態硬盤的寫入數據。
服務方式 | 配套清單 |
源碼 | 源碼、使用說明 |
網表不綁定(適用一個系列) | 網表(針對特定FPGA型號,比如XC7Z035FFG676)、使用說明 |
網表綁定 | 網表(網表綁定,綁定FPGA DNA號,也就是綁定FPGA芯片)、使用說明 |
PCIe接口參數 | NVMe SSD硬盤型號 | 性能指標實測數值 |
PCIe 2.0 X2接口 | 三星NVMe SSD 970 500GB 硬盤 | 連續讀速率:685 MB/s; 連續寫速率:531 MB/s。 |
PCIe2.0 X4接口 | 三星970 EVO Plus 250GB NVme SSD | 連續讀速率:1277 MB/s; 連續寫速率:1015 MB/s。 |