最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊

官宣:基于LV My FPGA SATA硬盤IP正式發(fā)布

2022-04-15 00:37 作者:神電測控  | 我要投稿

????? ?1、背景

?????? ?眾所周知,在傳統(tǒng)的FPGA應(yīng)用領(lǐng)域中,經(jīng)常需要將采集到的大量原始數(shù)據(jù)或者處理后的數(shù)據(jù)存到本地,但是FPGA不像上位機(jī),沒有系統(tǒng),所以做數(shù)據(jù)存儲(chǔ)會(huì)非常麻煩,也就是我們俗稱的數(shù)據(jù)流盤。

?????? ?雖然,我們可以將一部分?jǐn)?shù)據(jù)存放到DDR里面緩沖,但是內(nèi)存的容量太有限了,一般也就是幾十GB,價(jià)格貴,并且一旦掉電數(shù)據(jù)就會(huì)丟失,弊端很多。因此,很多廠商發(fā)明了磁盤陣列系統(tǒng),用多個(gè)廉價(jià)的SATA或者NVME接口的固態(tài)硬盤進(jìn)行并行讀寫,突破了帶寬和容量的限制,比如采用8個(gè)工業(yè)級(jí)的1T SATA固態(tài)硬盤,同時(shí)進(jìn)行讀寫操作,可以實(shí)現(xiàn)平均3.2GB/s的讀寫速度,容量更是高達(dá)8T,當(dāng)然,磁盤容量和數(shù)量還可以進(jìn)一步擴(kuò)充。

?????? ?但是這類商業(yè)磁盤陣列系統(tǒng),價(jià)格非常昂貴,體積大,不方便集成。因此,很多FPGA高手就會(huì)想著去買成熟的SATA或者NVME商業(yè)IP核,這類FPGA IP動(dòng)輒十幾萬甚至幾十萬,很多小公司或者個(gè)體戶無法承受這么昂貴的成本。所以他們會(huì)轉(zhuǎn)向采用傳統(tǒng)的SD卡或者Flash來存放數(shù)據(jù),但是限制很明顯,那就是SD卡或者Flash的容量太小,速度太慢,稱不上是流盤系統(tǒng),頂多也就是記錄一下少量的參數(shù)和狀態(tài)信息。

?????? ?針對(duì)目前磁盤陣列和流盤(數(shù)據(jù)存儲(chǔ))行業(yè)里面遇到的這些問題,我們神電測控聯(lián)合FPGA專家花費(fèi)了半年時(shí)間攻關(guān),終于完成了基于LabVIEW My FPGA軟件工具包下的SATA固態(tài)硬盤IP軟件、FPGA SATA Demo以及配套的上位機(jī)軟件。

????? ?2、官宣

?????? ?時(shí)隔半年,LabVIEW My FPGA軟件工具包,終于迎來了一位重量級(jí)成員,那就是基于FPGA的高速磁盤陣列(流盤)IP。

?????? ?用戶可以在LabVIEW FPGA環(huán)境下,直接使用我們封裝好的SATA磁盤VI(Socket CLIP),然后自動(dòng)編譯下載到FPGA芯片里面運(yùn)行,分分鐘實(shí)現(xiàn)一套高速磁盤陣列系統(tǒng),性能和指標(biāo)可以完全PK市面上現(xiàn)有的流盤系統(tǒng)。

?????? ?當(dāng)然了,對(duì)于很多不需要磁盤陣列的應(yīng)用,也可以單獨(dú)使用一個(gè)低成本的SATA固態(tài)硬盤作為FPGA的貼身保鏢,實(shí)現(xiàn)FPGA數(shù)據(jù)的在線實(shí)時(shí)流盤,就像飛機(jī)的黑匣子那樣,真正補(bǔ)齊了FPGA的最后一塊短板。

?????? ?傳統(tǒng)的SATA FPGA IP使用起來非常麻煩,我們專門將SATA底層復(fù)雜的邏輯進(jìn)行優(yōu)化和封裝,然后移植到我們的LabVIEW My FPGA工具包里面來,直接通過圖形化的方式進(jìn)行調(diào)用,門檻極低,只要有一點(diǎn)LabVIEW基礎(chǔ),就可以非常輕松地開發(fā)出基于FPGA的高速流盤系統(tǒng)了,當(dāng)然,用戶也可以直接基于我們編寫好的LabVIEW FPGA SATA Demo程序進(jìn)行少量修改和適配,定制出適合自己的FPGA SATA流盤板卡或者陣列。

?????? ?下面我們詳細(xì)講解一下,如何利用LabVIEW編寫FPGA SATA固態(tài)硬盤高速讀寫程序,同時(shí)還可以將FPGA讀取SATA固態(tài)硬盤的數(shù)據(jù)通過PCIe上傳到上位機(jī)進(jìn)行觀察回放。

????? ?3、硬件準(zhǔn)備

?????? ?眾所周知,我們的LabVIEW My FPGA軟件工具包主打開源國產(chǎn)化,不限制任何廠家FPGA硬件。為了測試我們封裝好的My FPGA SATA IP(VI),我們從市場上隨便淘了一個(gè)便宜的帶標(biāo)準(zhǔn)SATA接口的Kintex-7 FPGA開發(fā)板,如圖100-1所示。廠家是杭州言曼科技,感興趣的用戶可以在網(wǎng)上搜索一下。同時(shí),這個(gè)K7開發(fā)板還支持PCIe高速通信,正好后續(xù)磁盤數(shù)據(jù)回放里面可以用上,將FPGA從SATA里面讀取的數(shù)據(jù)通過PCIe總線發(fā)送給上位機(jī)進(jìn)行顯示。

?????? ?注意:一般的K7開發(fā)板廠家都沒有集成SATA接口,是因?yàn)樗麄兲峁┎涣薙ATA例程。而KU和KU+開發(fā)板一般會(huì)預(yù)留SATA接口,但是這樣的板子價(jià)格比較貴。

? ? ? ? ? ? ? ? ? ? ?

圖100-1:支持4路標(biāo)準(zhǔn)SATA接口的Kintex-7 FPGA開發(fā)板

? ? ? ??這款K7開發(fā)板上面預(yù)留了4路標(biāo)準(zhǔn)SATA接口,可以同時(shí)連接4個(gè)獨(dú)立的SATA固態(tài)硬盤。這里我們選擇了一個(gè)商業(yè)級(jí)的256GB容量的mini SATA固態(tài)硬盤,如圖100-2所示。有條件的用戶也可以嘗試一下工業(yè)級(jí)的SATA盤,工業(yè)級(jí)的SATA盤讀寫性能要比商業(yè)級(jí)更快,且速度更穩(wěn)定。

圖100-2:mini SATA接口的固態(tài)硬盤(商業(yè)級(jí))

? ? ? ??由于FPGA開發(fā)板上預(yù)留的是標(biāo)準(zhǔn)SATA接口,mini SATA盤不能直接連,用戶可以直接在淘寶上買一個(gè)mini SATA轉(zhuǎn)標(biāo)準(zhǔn)SATA口的轉(zhuǎn)接板,如圖100-3所示;這種轉(zhuǎn)接板一般需要外部獨(dú)立供電,網(wǎng)上有很多這種接口的電源,比如圖100-4所示的可以專門給SATA供電的12V電源適配器。


圖100-3(a):miniSATA轉(zhuǎn)標(biāo)準(zhǔn)SATA接口板

?

圖100-3(b):miniSATA轉(zhuǎn)標(biāo)準(zhǔn)SATA接口板
圖100-4:帶SATA接口的12V電源適配器

? ? ? ? 將前面的miniSATA固態(tài)硬盤、轉(zhuǎn)接板、電源適配器組裝一下,就可以接到FPGA開發(fā)板上了,實(shí)物如圖100-5所示。當(dāng)然了,用戶也可以直接從PC或者工控機(jī)里面拆一個(gè)標(biāo)準(zhǔn)SATA接口的硬盤或者網(wǎng)上買一個(gè),如圖100-6所示,這樣就不需要那個(gè)轉(zhuǎn)接板了。

圖100-5:組裝好的mini SATA固態(tài)硬盤
圖100-6:標(biāo)準(zhǔn)SATA接口的固態(tài)硬盤

? ? ? ??二者區(qū)別就是:miniSATA硬盤體積小,重量輕,易于集成;標(biāo)準(zhǔn)SATA盤體積大,一般用于傳統(tǒng)PC或者工控機(jī)領(lǐng)域。

?????? ?為了將FPGA從SATA固態(tài)硬盤里面讀出來的數(shù)據(jù)傳輸給上位機(jī)進(jìn)行回放顯示,我們可以借助FPGA的PCIe通信口。因?yàn)楝F(xiàn)在很多筆記本都有雷電口,所以只要買一個(gè)TypeC雷電口轉(zhuǎn)PCIe擴(kuò)展塢跟FPGA開發(fā)板的PCIe連起來,就可以很方便的實(shí)現(xiàn)上位機(jī)(筆記本)跟下位機(jī)FPGA之間的PCIe數(shù)據(jù)通信了,并且相較于傳統(tǒng)的工控機(jī),更容易攜帶和調(diào)試。如圖100-7所示。

圖100-7:通過TypeC雷電轉(zhuǎn)PCIe擴(kuò)展塢將FPGA開發(fā)板跟筆記本相連(PCIe通信)


????? ?4、下位機(jī)FPGA SATA硬盤讀寫程序開發(fā)

?????? ?下面我們先來講解一下如何利用LabVIEW編寫一個(gè)下位機(jī)FPGA程序,實(shí)現(xiàn)對(duì)SATA固態(tài)硬盤的讀寫;通過3個(gè)FPGA SATA Demo程序向大家展示一下,使用LabVIEW調(diào)用我們封裝好的SATA IP是多么的簡單實(shí)用。

?????? ?1首先,新建一個(gè)LabVIEW項(xiàng)目,右擊“我的電腦”選擇新建“終端和設(shè)備”,如圖100-8所示。

圖100-8:右擊“我的電腦”新建FPGA“終端和設(shè)備”

? ? ? ? 2在彈出來的對(duì)話框里面,找到Kintex7-325T家族,展開之后,找到里面帶SATA后綴的FPGA終端,如圖100-9所示。選中之后,可以看到FPGA終端里面多出來一個(gè)SATA Socket CLIP,如圖100-10所示。

圖100-9:右擊“我的電腦”新建FPGA“終端和設(shè)備”
圖100-10:封裝到LabVIEW FPGA終端下的SATA IP

? ? ? ??下面,我們簡單介紹一下,SATA IP在LabVIEW My FPGA下每個(gè)端口的含義:

?????? ?1)圖100-11顯示的是SATA IP的兩個(gè)復(fù)位信號(hào)??梢詫?duì)底層的SATA IP核和硬盤進(jìn)行復(fù)位操作,一般情況下,F(xiàn)PGA VI運(yùn)行的時(shí)候,執(zhí)行一次復(fù)位即可。

圖100-11:LabVIEW My FPGA SATA IP復(fù)位端口

? ? ? ? 2)圖100-12顯示的是SATA IP的寄存器讀寫端口??梢詫?duì)底層的SATA IP核進(jìn)行寄存器讀寫操作,比如我們可以對(duì)指定寄存器地址寫入或者讀取的扇區(qū)首地址、連續(xù)讀寫的扇區(qū)個(gè)數(shù)進(jìn)行配置,也可以讀取SATA IP內(nèi)部的寄存器工作狀態(tài),這個(gè)在后續(xù)的Demo程序里面再給用戶做詳細(xì)的介紹。

圖100-12:LabVIEW My FPGA SATA IP寄存器讀寫端口

? ? ? ? 3)圖100-13顯示的是SATA IP讀寫命令是否執(zhí)行結(jié)束標(biāo)志。如果SATA磁盤處于單次或者連續(xù)讀取或者寫入忙狀態(tài),CMD_BUSY處于高電平,讀寫完成后該信號(hào)拉低,而CMD_END信號(hào)在讀寫完成后會(huì)拉高一個(gè)時(shí)鐘周期,用戶可以任選其一作為完成信號(hào)。

圖100-13:LabVIEW My FPGA SATA IP命令完成端口

? ? ? ? 4)圖100-14顯示的是SATA IP數(shù)據(jù)流寫入和讀取端口。我們按照標(biāo)準(zhǔn)的四線握手進(jìn)行封裝,這樣用戶就可以直接將LabVIEW FPGA里面的FIFO與下面的WR和RD進(jìn)行互聯(lián),在后續(xù)的FPGA VI程序框圖中可以看到,非常簡單。需要注意的是:這6個(gè)端口需要放在200MHz(推薦大于等于150M時(shí)鐘)時(shí)鐘域里面運(yùn)行,因?yàn)镾ATA IP底層走的GTX時(shí)鐘是150MHz,數(shù)據(jù)位寬是32位,也就是單個(gè)SATA磁盤的最大理論帶寬是150M×4Byte/s=600MByte/s.除了這6個(gè)端口外,其余的SATA REG寄存器和狀態(tài)端口全部放在低速的50MHz時(shí)鐘域里面運(yùn)行就可以了。

圖100-14:LabVIEW My FPGA SATA IP數(shù)據(jù)流寫入和讀出端口

? ? ? ? 5)圖100-15顯示的是SATA IP寄存器和狀態(tài)信息端口。如果SATA硬盤出現(xiàn)故障,我們可以通過下面的6個(gè)狀態(tài)輸出口進(jìn)行排查,比如,如果SATA硬盤跟FPGA斷開了,那么LED_LINK_UP會(huì)熄滅。如果SATA IP初始化成功的話,LED_LINK_UP和GTX_PLLLOCKED會(huì)點(diǎn)亮。

圖100-15:LabVIEW My FPGA SATA IP狀態(tài)信息輸出端口(用于調(diào)試觀察)

? ? ? ??3雖然,上面我們簡單介紹了一下封裝到LabVIEW FPGA下的SATA IP端口含義,但是很多用戶不知道具體怎么使用。下面我們通過3個(gè)FPGA SATA VI Demo示例程序向用戶講解一下調(diào)用過程。這3個(gè)FPGA VI下位機(jī)程序,如圖100-16所示。

?????? ?這3個(gè)FPGA SATA VI示例程序分別實(shí)現(xiàn)了對(duì)SATA固態(tài)硬盤的單次讀寫、連續(xù)讀寫以及通過PCIe由上位機(jī)實(shí)現(xiàn)對(duì)FPGA SATA的操控和數(shù)據(jù)回放。

圖100-16:基于LabVIEW編寫的3個(gè)下位機(jī)FPGA SATA硬盤讀寫Demo程序

? ? ? ??4雙擊打開第一個(gè)FPGA SATA單次讀寫VI(實(shí)驗(yàn)100.1-SATA固態(tài)硬盤高速流盤-FPGA-單次.vi),里面一共有3個(gè)定時(shí)循環(huán),如圖100-17所示。相當(dāng)于3個(gè)獨(dú)立并行的線程,分別是“SATA寄存器操作線程”、“SATA數(shù)據(jù)流讀寫線程”和“模擬數(shù)據(jù)產(chǎn)生用戶線程”。對(duì)應(yīng)的FPGA VI前面板,如圖100-18所示。

圖100-17:下位機(jī)FPGA SATA單次讀寫程序框圖
圖100-18:下位機(jī)FPGA SATA單次讀寫程序前面板

? ? ? ? 1)第1個(gè)定時(shí)循環(huán)“SATA寄存器操作線程”,是一個(gè)標(biāo)準(zhǔn)狀態(tài)機(jī)架構(gòu),可以對(duì)SATA IP進(jìn)行手動(dòng)復(fù)位、扇區(qū)地址、扇區(qū)數(shù)量進(jìn)行設(shè)置,然后自動(dòng)實(shí)現(xiàn)數(shù)據(jù)流讀寫,同時(shí)還能計(jì)算出單次讀寫消耗的時(shí)間,方便用戶對(duì)SATA盤平均讀寫速度的計(jì)算。我們看看最后一個(gè)狀態(tài),當(dāng)單次讀寫完成后,CMD_END會(huì)拉高一個(gè)時(shí)鐘周期,根據(jù)這個(gè)狀態(tài)信息重新回到Idle狀態(tài),然后等待下一次的SATA操作。需要注意的是:單次往SATA硬盤側(cè)寫入的扇區(qū)數(shù)量不能超過65535個(gè),另外,我們封裝的SATA地址和容量單位都是扇區(qū),單個(gè)扇區(qū)大小為512字節(jié),相當(dāng)于地址偏移量是512.假設(shè)一個(gè)SATA盤的容量是256GB,那么等效的扇區(qū)個(gè)數(shù)就是256GB/512B=500M,扇區(qū)地址就是0~500M-1.

圖100-19:FPGA SATA單次讀寫狀態(tài)機(jī)最后一個(gè)狀態(tài)(退出機(jī)制)

? ? ? ? 2)第2個(gè)定時(shí)循環(huán)“SATA數(shù)據(jù)流讀寫線程”,位于200MHz系統(tǒng)時(shí)鐘域里面,因?yàn)閱蝹€(gè)SATA固態(tài)硬盤底層調(diào)用的GTX時(shí)鐘最小是150MHz。這個(gè)線程里面的程序框圖非常簡單,用戶只需要將讀寫數(shù)據(jù)緩沖區(qū)FIFO按照標(biāo)準(zhǔn)四線握手的方式跟SATA WR和RD端口互連起來即可,如圖100-20所示。這樣做的好處是,可以將用戶線程跟SATA線程隔離開,不同的行業(yè)應(yīng)用,只需要在用戶線程里面讀取或者寫入數(shù)據(jù)就可以了。

圖100-20:FPGA SATA數(shù)據(jù)流讀寫線程

? ? ? ? 3)第3個(gè)定時(shí)循環(huán)“用戶線程”,看過我們寶典前面串口、IIC、SPI、千兆以太網(wǎng)等相關(guān)內(nèi)容的用戶知道,我們習(xí)慣于將通信線程跟用戶線程分開,二者之前通過FIFO進(jìn)行數(shù)據(jù)交互,同時(shí)也可以實(shí)現(xiàn)跨時(shí)鐘域訪問。本節(jié)實(shí)驗(yàn)程序里面的用戶線程,是用來模擬SATA寫入數(shù)據(jù)的,可以將FPGA VI前面板上的“寫入數(shù)據(jù)”輸入控件里面的數(shù)值寫到SATA硬盤里面去,當(dāng)然也可以將SATA硬盤里面的數(shù)據(jù)讀出來更新到顯示控件“讀出數(shù)據(jù)”里面,如圖100-21所示。

圖100-21:FPGA SATA用戶線程(支持FPGA VI前面板控件數(shù)據(jù)交互)

? ? ? ? 4)需要提醒用戶的是:對(duì)SATA固態(tài)硬盤寫固定值和寫隨機(jī)的數(shù)據(jù),速度是不一樣的,如果對(duì)多個(gè)連續(xù)扇區(qū)進(jìn)行固定值寫入,速度非???,商業(yè)盤可以到400多MB/s,如果是變化的數(shù)據(jù),一般是150MB/s左右;工業(yè)級(jí)的SATA盤更快,可達(dá)穩(wěn)定的400MB/s。。

?????? ?5上面的Demo程序?qū)崿F(xiàn)了FPGA對(duì)SATA盤的單次最大不超過65535個(gè)扇區(qū)的連續(xù)讀寫,如果想要實(shí)現(xiàn)更多扇區(qū)的連續(xù)讀寫,可以打開我們的第2個(gè)FPGA SATA Demo示例程序。其實(shí)整體程序框圖跟單次讀寫是類似的,只不過我們稍微調(diào)整了一下狀態(tài)機(jī)讀寫退出的機(jī)制而已,如圖100-22所示。將單次讀寫完成后的扇區(qū)數(shù)量進(jìn)行累加,直到滿足用戶指定的扇區(qū)總數(shù)量才會(huì)停止退出這個(gè)狀態(tài)機(jī),這樣就實(shí)現(xiàn)了對(duì)整個(gè)SATA盤的連續(xù)讀寫。

圖100-22:FPGA SATA連續(xù)讀寫線程(扇區(qū)地址累加)

? ? ? ? 6無論是前面的FPGA SATA單次還是連續(xù)讀寫,用戶都可以手動(dòng)在FPGA VI前面板上通過控件和按鈕實(shí)現(xiàn)對(duì)SATA盤的操作,這樣便于用戶理解和掌握SATA盤數(shù)據(jù)讀寫機(jī)制,整個(gè)過程非常直觀,這一切都得益于我們打通了LabVIEW FPGA VI在線前面板交互式功能。不需要單獨(dú)編寫上位機(jī)的情況下,也能直接操作FPGA VI前面板,效果非常好,具體演示我們會(huì)在后續(xù)實(shí)驗(yàn)環(huán)節(jié)給大家講解。

?????? ?熟悉和掌握我們的My FPGA SATA IP用法之后,就可以研究我們提供的模擬真實(shí)場景下的第3個(gè)FPGA VI Demo應(yīng)用案例,那就是“磁盤陣列回放系統(tǒng)”。下位機(jī)FPGA可以將SATA磁盤里面的數(shù)據(jù)讀出來通過USB2.0、USB3.0、千兆以太網(wǎng)或者PCIe高速總線傳輸給上位機(jī)(可以是Windows主機(jī)也可以是Linux RT實(shí)時(shí)系統(tǒng)),進(jìn)行離線觀察和顯示。

?????? ?雙擊打開FPGA終端下的第3個(gè)“實(shí)驗(yàn)100.3-SATA固態(tài)硬盤高速流盤-FPGA-連續(xù)+PCIe DMA.vi”示例程序,可以看到,我們是在前面FPGA SATA連續(xù)讀寫例程里面,加上寶典第7章的PCIe總線通信,實(shí)現(xiàn)了磁盤陣列的數(shù)據(jù)操控和回放功能。具體的下位機(jī)FPGA程序框圖,如圖100-23所示。這里不再贅述了。

圖100-23(Part1):下位機(jī)SATA連續(xù)讀寫+PCIe DMA流盤回放FPGA程序框圖
圖100-23(Part2):下位機(jī)SATA連續(xù)讀寫+PCIe DMA流盤回放FPGA程序框圖
圖100-23(Part3):下位機(jī)SATA連續(xù)讀寫+PCIe DMA流盤回放FPGA程序框圖

? ? ? ??這個(gè)FPGA SATA VI程序前面板相應(yīng)的增加了一些PCIe控件,如圖100-24所示。

圖100-24:下位機(jī)SATA連續(xù)讀寫+PCIe DMA流盤回放FPGA前面板


????? ?5、上位機(jī)SATA磁盤陣列回放程序開發(fā)

?????? ?光有下位機(jī)FPGA SATA VI程序還不夠,很多客戶希望有一個(gè)獨(dú)立的上位機(jī)軟件可以實(shí)現(xiàn)對(duì)下位機(jī)FPGA程序的控制,這樣才是一個(gè)完整的項(xiàng)目開發(fā)。為此,我們單獨(dú)編寫了一個(gè)基于PCIe總線傳輸?shù)拇疟P陣列數(shù)據(jù)流盤回放的上位機(jī)軟件,提供給大家。如圖100-25所示。

圖100-25:上位機(jī)SATA硬盤連續(xù)讀寫+PCIe DMA流盤回放(項(xiàng)目瀏覽器)

? ? ? ? ?1雙擊打開這個(gè)上位機(jī)VI程序前面板,如圖100-26所示??梢钥吹剑覀兪窃诒緯懊娴?章的PCIe上位機(jī)例程基礎(chǔ)上稍加修改就實(shí)現(xiàn)了SATA磁盤陣列的回放程序。上位機(jī)VI前面板上主要增加的是FPGA SATA下位機(jī)前面板上的一些控件,這樣用戶就可以通過PCIe下行通道將上位機(jī)參數(shù)下發(fā)給FPGA程序,即使不借助FPGA VI在線前面板也能實(shí)現(xiàn)由上位機(jī)來獨(dú)立操控下位機(jī)FPGA程序了;同時(shí)也把下位機(jī)FPGA前面板上的SATA顯示控件也就是狀態(tài)信息通過PCIe上行通道傳輸?shù)缴衔粰C(jī)顯示出來,方便用戶獨(dú)立觀察;最后就是將FPGA從SATA磁盤里面讀出來的數(shù)據(jù)通過DMA FIFO傳輸?shù)缴衔粰C(jī)回放出來。

圖100-26:上位機(jī)SATA硬盤連續(xù)讀寫+PCIe DMA流盤回放前面板

? ? ? ? 2上位機(jī)對(duì)應(yīng)的程序框圖一共有3個(gè)線程,分別是“下發(fā)SATA控制參數(shù)”、“讀取SATA數(shù)據(jù)流”和“讀取SATA狀態(tài)信息”。下面簡單介紹一下3個(gè)線程對(duì)應(yīng)的程序框圖。

?????? ?1)首先是“下發(fā)SATA控制參數(shù)”這個(gè)while循環(huán)(線程),負(fù)責(zé)將上位機(jī)前面板的控件信息和參數(shù),比如SATA盤的扇區(qū)地址、連續(xù)讀寫扇區(qū)長度、讀還是寫、分頻系數(shù)等通過PCIe下行通道(比如ch13)下發(fā)給FPGA,如圖100-27所示。不熟悉的用戶可以看看我們寶典第7章PCIe部分的相關(guān)內(nèi)容和案例。

圖100-27:上位機(jī)SATA硬盤連續(xù)讀寫+PCIe DMA流盤回放(下發(fā)SATA控制參數(shù)程序框圖)

? ? ? ? 2)接著是“讀取SATA數(shù)據(jù)流”這個(gè)while循環(huán)(線程),負(fù)責(zé)將下位機(jī)FPGA從SATA硬盤里面讀取的數(shù)據(jù)流通過PCIe DMA上行通道(比如ch9)讀到上位機(jī),然后放到波形圖里面實(shí)時(shí)顯示,如圖100-28所示。

圖100-28:上位機(jī)SATA硬盤連續(xù)讀寫+PCIe DMA流盤回放(讀取SATA數(shù)據(jù)流程序框圖)

? ? ? ? 3)最后是“讀取SATA狀態(tài)信息”這個(gè)while循環(huán)(線程),可以將下位機(jī)FPGA SATA盤當(dāng)前正在讀寫的扇區(qū)地址、連續(xù)讀寫扇區(qū)長度、SATA盤連接狀態(tài)、錯(cuò)誤信息等通過PCIe上行通道(比如ch8)讀到上位機(jī),如圖100-29所示。這樣,即使我們不借助FPGA VI在線前面板交互式功能,也能實(shí)時(shí)觀察下位機(jī)FPGA SATA的運(yùn)行情況。

圖100-29:上位機(jī)SATA硬盤連續(xù)讀寫+PCIe DMA流盤回放(讀取SATA狀態(tài)信息程序框圖)

? ? ? ? 4)需要提醒用戶的是:上位機(jī)初始化打開下位機(jī)FPGA PCIe對(duì)應(yīng)的通道號(hào)之前,最好用Winobj工具觀察一下上位機(jī)設(shè)備管理里面映射出來的PCIe具體通道號(hào)名稱是多少,如圖100-30所示。很多用戶在這個(gè)地方翻車了,一上來直接運(yùn)行上位機(jī)VI,導(dǎo)致崩潰退出,這是因?yàn)榭磿蛔屑?xì),實(shí)際上,本書第7章關(guān)于Winobj的用法做過詳細(xì)的介紹,不記得的用戶可以回顧一下。為了同時(shí)識(shí)別多個(gè)FPGA板卡,每個(gè)FPGA板卡里面的DMA通道名稱不能相同,比如第一塊FPGA硬件是ch0~ch7,第2塊FPGA硬件是ch8~ch15.而下位機(jī)FPGA程序框圖使用的是ch0、ch1和ch5,那么針對(duì)第2塊FPGA硬件的上位機(jī)PCIe通道號(hào)就要偏移累加8,也就是ch8、ch9和ch13的由來。

圖100-30:利用Winobj工具查看上位機(jī)設(shè)備管理器里面識(shí)別出來的PCIe DMA通道號(hào)


????? ?6、實(shí)驗(yàn)測試結(jié)果

?????? ?這里我們直接測試第3個(gè)FPGA SATA流盤示例程序,也就是SATA磁盤陣列數(shù)據(jù)回放系統(tǒng)。????

?????? ?1首先,直接運(yùn)行下位機(jī)FPGA VI,在FPGA程序生成規(guī)范里面勾選“加載至FPGA時(shí)運(yùn)行”,等待編譯完成后,可以看到對(duì)應(yīng)的FPGA芯片資源消耗情況,如圖100-31所示;接著自動(dòng)彈出交互式下載對(duì)話框,由于我們還沒有將Xilinx下載器接到FPGA開發(fā)板上,所以LabVIEW會(huì)提示找不到Cable,如圖100-32所示。

圖100-31:下位機(jī)FPGA SATA VI程序編譯完成后的資源消耗情況
圖100-32:LabVIEW提示找不到FPGA下載器(沒有接Xilinx下載器)

? ? ? ? 2接下來,將Xilinx JTAG下載器接到FPGA開發(fā)板上,如圖100-33所示。給FPGA板子和SATA硬盤上電。

圖100-33:將Xilinx JTAG下載器接到FPGA開發(fā)板上并上電

? ? ? ? 然后,打開這個(gè)路徑下的這個(gè)ini文件

C:\Program Files (x86)\National Instruments\LabVIEW 2015\vi.lib\FPGAPlugInAG\My_FPGA_Robot_BoaRD

確保download+debug=1,然后直接運(yùn)行剛剛編譯好的下位機(jī)FPGA VI,等待幾秒鐘,可以看到FPGA開發(fā)板上的Done指示燈熄滅,說明FPGA被JTAG控制了,正在下載程序,下載完成后,Done指示燈會(huì)重新點(diǎn)亮,但是FPGA VI前面板并沒有進(jìn)入在線交互式運(yùn)行,而是直接彈出一個(gè)錯(cuò)誤提示框,如圖100-34所示。

圖100-34:FPGA VI在線交互式前面板提示運(yùn)行超時(shí)(PCIe 100MHz時(shí)鐘沒有產(chǎn)生導(dǎo)致)

? ? ? ? 這是因?yàn)橄挛粰C(jī)FPGA里面含有PCIe程序框圖,而PCIe從設(shè)備下載bit文件之后必須要重啟主機(jī)才能識(shí)別,識(shí)別之后,主機(jī)才會(huì)給從設(shè)備FPGA提供100MHz PCIe時(shí)鐘;如果FPGA程序框圖里面的任何一個(gè)定時(shí)循環(huán)時(shí)鐘不存在,都會(huì)報(bào)這個(gè)超時(shí)錯(cuò)誤,關(guān)于這點(diǎn)我們在寶典第7章做過非常詳細(xì)的講解和提醒,不記得的用戶一定要多看幾遍。

?????? ?3既然FPGA SATA程序下載到FPGA芯片里面運(yùn)行了,只需要熱重啟一下主機(jī)或者插拔一下我們的TypeC雷電轉(zhuǎn)PCIe模塊,就可以讓主機(jī)識(shí)別到下位機(jī)FPGA PCIe設(shè)備,比如,打開設(shè)備管理器,可以看到加載成功的PCIe驅(qū)動(dòng),如圖100-35所示。同時(shí),F(xiàn)PGA開發(fā)板上的LED0指示燈閃爍起來了,這個(gè)是Xillybus PCIe心跳指示燈,說明FPGA里面的PCIe工作正常。

圖100-35:重啟主機(jī)或者插拔一下雷電轉(zhuǎn)PCIe擴(kuò)展塢即可加載PCIe驅(qū)動(dòng)

? ? ? ? 4然后將ini文件里面的1改成0,也就是download+debug=0,相當(dāng)于告訴LabVIEW FPGA直接進(jìn)入在線前面板交互式運(yùn)行,不要去下載bit文件了,因?yàn)榍懊嬉呀?jīng)下載過了,不然就會(huì)陷入下載bit,PCIe重啟的死循環(huán)了。改完之后,再次點(diǎn)擊運(yùn)行下位機(jī)FPGA VI程序,此時(shí),可以看到下位機(jī)FPGA前面板活了,并且“PCIe_Status[]”狀態(tài)布爾數(shù)組里面的LED0閃爍了,說明PCIe工作正常,同時(shí)“LED_LINK_UP”和“GTX_PLLLOCKED”都點(diǎn)亮了,說明SATA IP初始化成功,如圖100-36所示。

圖100-36:下位機(jī)FPGA SATA VI程序自動(dòng)進(jìn)入在線前面板交互式運(yùn)行模式

? ? ? ? 5由于我們的LabVIEW My FPGA有這個(gè)在線前面板交互式功能,所以不用打開上位機(jī),直接就能測試SATA盤讀寫是否正常。比如我們想把1234寫入到扇區(qū)地址從0開始的1M個(gè)連續(xù)空間(1M×512Byte)里面,那么用戶可以在下位機(jī)FPGA VI前面板上輸入以下參數(shù),如圖100-37所示。注意:分頻系數(shù)設(shè)置為1,這樣可以保證產(chǎn)生源數(shù)據(jù)的速度要大于理論值600MB/s,才不會(huì)拖累SATA。

圖100-37:設(shè)置下位機(jī)FPGA VI前面板SATA參數(shù)(寫入扇區(qū)空間0~1M,單位512Byte)

? ? ? ? 6然后點(diǎn)擊一下“Start”按鈕,此時(shí),可以看到“單次寫入扇區(qū)首地址(512字節(jié))”這個(gè)控件里面的數(shù)值在不斷增加,說明FPGA正在往SATA硬盤里面寫入數(shù)據(jù),等到1M個(gè)扇區(qū)空間全部寫完之后,“連續(xù)讀寫消耗時(shí)間(ms)”控件里面顯示出5.151s,如圖100-38所示。這就是本次連續(xù)寫操作花費(fèi)的時(shí)間,這樣我們就可以計(jì)算出當(dāng)前這塊商業(yè)SATA盤的平均寫入速度:1M×512Byte/5.151s=99.398MB/s,這個(gè)速度還可以,因?yàn)檫@個(gè)盤比較老,讀寫次數(shù)太多導(dǎo)致的,如果對(duì)這個(gè)盤格式化一下,寫入速度馬上就能飆到150MB/s。工業(yè)級(jí)的SATA固態(tài)盤寫入速度可以到450MB/s,讀取速度更快。另外,如果寫入固定值和變化值,SATA固態(tài)盤的讀寫速度也是有很大差別的。前面Demo1和Demo2每次讀寫的是固定值,所以速度更快,這里的Demo3是一個(gè)連續(xù)的正弦信號(hào),變化值,所以速度會(huì)慢一些,這個(gè)是SATA盤本身機(jī)制的問題,跟FPGA沒有關(guān)系。

圖100-38:將512MByte正弦信號(hào)連續(xù)寫入SATA磁盤陣列里面

? ? ? ? 7下面,我們測試一下SATA讀取速度,將“單次讀寫扇區(qū)首地址(512字節(jié))”重新設(shè)置為0,總?cè)萘窟€是1M不變,將“Write”按鈕切換到Read模式,按下“一直讀取”按鈕,如圖100-39所示。然后再點(diǎn)擊“Start”觸發(fā)讀取操作,很明顯,地址增加的速度要比寫入更快,等待讀取完成后,可以看到本次讀取操作花費(fèi)的時(shí)間是997ms,如圖100-40所示,也就是0.997s,等效的平均讀取速度是1M×512Byte/0.997s=513.54MB/s,因?yàn)樽x取操作不需要對(duì)SATA進(jìn)行擦除和校驗(yàn),所以速度更快。

圖100-39:設(shè)置下位機(jī)FPGA VI前面板SATA參數(shù)(讀取扇區(qū)空間0~1M,單位512Byte)
圖100-40:從SATA磁盤里面連續(xù)讀取512MByte的正弦信號(hào)出來

? ? ? ? 8最后,我們打開上位機(jī)測試程序,利用上位機(jī)直接對(duì)下位機(jī)FPGA進(jìn)行SATA控制和數(shù)據(jù)讀寫操作。注意:切換到上位機(jī)控制模式,要把FPGA VI前面板上的“一直讀取”關(guān)閉掉,如圖100-41所示。

圖100-41:關(guān)閉下位機(jī)FPGA讀取模式,切換到上位機(jī)讀取回放模式

? ? ? ? 9首先,測試一下上位機(jī)控制FPGA寫入SATA硬盤功能,將5.12GByte的正弦信號(hào)一次性寫入SATA固態(tài)硬盤,參數(shù)設(shè)置如圖100-42所示。分頻系數(shù)設(shè)置為1,點(diǎn)亮“Start”按鈕,然后點(diǎn)擊“Send”發(fā)送按鈕,即可將這些參數(shù)下發(fā)給FPGA,等待FPGA將10M扇區(qū)全部寫入完成后,可以看到耗費(fèi)的時(shí)間是32.424s,如圖100-43所示。等效的寫入平均速度就是:10M×512Byte/32.424s=157.9MB/s,對(duì)于商業(yè)盤來說,這個(gè)速度還是非常不錯(cuò)的。

圖100-42:將5.12GByte正弦信號(hào)連續(xù)寫入SATA磁盤陣列里面(參數(shù)設(shè)置)
圖100-43:5.12GByte正弦信號(hào)由FPGA全部寫入SATA耗費(fèi)的時(shí)間(32.424s)

? ? ? ? 10最后,測試一下上位機(jī)控制FPGA讀取SATA數(shù)據(jù)流回放功能,準(zhǔn)備將SATA固態(tài)硬盤里面的連續(xù)5.12GByte正弦信號(hào)一次性讀取到上位機(jī)進(jìn)行實(shí)時(shí)回放,參數(shù)設(shè)置如圖100-44所示。分頻系數(shù)設(shè)置為1,將“Write”按鈕切換到Read模式,點(diǎn)亮 “Start”按鈕,然后點(diǎn)擊“Send”發(fā)送按鈕,即可將這些參數(shù)下發(fā)給FPGA,此時(shí),上位機(jī)前面板波形圖控件里面立刻出現(xiàn)了連續(xù)的正弦信號(hào);等待FPGA將10M扇區(qū)全部讀取完成后,可以看到耗費(fèi)的時(shí)間是23.51s,如圖100-45所示。等效的讀取平均速度就是:10M×512Byte/23.51s=217.779MB/s,可以看出,商業(yè)盤的讀寫速度穩(wěn)定性沒有工業(yè)級(jí)的好。

圖100-44:從SATA磁盤陣列里面讀取連續(xù)的5.12GByte正弦信號(hào)(參數(shù)設(shè)置)
圖100-45:FPGA從SATA里面讀取5.12GByte正弦信號(hào)耗費(fèi)的時(shí)間(23.51s)


????? ?7、結(jié)論

?????? ?本節(jié)實(shí)驗(yàn)我們測試的是單個(gè)SATA固態(tài)硬盤的讀寫和回放功能,實(shí)際上,如果用戶需要更高帶寬和更大容量的磁盤陣列來實(shí)現(xiàn)流盤系統(tǒng),可以多買幾個(gè)SATA硬盤,接到FPGA板子上,然后直接在FPGA VI里面將讀寫線程復(fù)制幾份,加上并轉(zhuǎn)串和串轉(zhuǎn)并線程就可以實(shí)現(xiàn)磁盤陣列的Raid0模式了,比如下面圖100-46就是我們實(shí)際項(xiàng)目里面開發(fā)的一款高集成度的FPGA SATA板卡,支持最大3.2GB/s的流盤速度。更多具體信息,歡迎大家聯(lián)系我們神電測控。微信:myview30;郵箱:DLW30@126.com

圖100-46:針對(duì)具體項(xiàng)目開發(fā)的超高速大容量FPGA SATA磁盤陣列板卡


官宣:基于LV My FPGA SATA硬盤IP正式發(fā)布的評(píng)論 (共 條)

分享到微博請遵守國家法律
永川市| 扶沟县| 赞皇县| 姚安县| 赫章县| 南皮县| 河西区| 绿春县| 株洲县| 灌阳县| 福清市| 巨鹿县| 广灵县| 濉溪县| 龙游县| 克东县| 莲花县| 南宫市| 新疆| 田林县| 衡水市| 江安县| 长宁区| 夏津县| 汉沽区| 永登县| 肥乡县| 吉首市| 当雄县| 阜康市| 新竹县| 清水河县| 海城市| 宣城市| 曲周县| 彩票| 林口县| 昔阳县| 四平市| 如东县| 奉新县|