一款基于CYPRESS的USB3.0總線設(shè)計
圖5、圖6分別為同步寫入和讀出數(shù)據(jù)的時序圖。由于讀寫最大包為1024字節(jié),所以實際每一包傳輸需要256個周期。圖中的輸入/出DQ數(shù)據(jù)為測試數(shù)據(jù)模塊和PC機產(chǎn)生的測試數(shù)據(jù),RX即UART_RX信號。
本文引用地址:http://www.ex-cimer.com/article/234977.htm
3.3.2 測試數(shù)據(jù)模塊
當計算機向FPGA發(fā)出讀命令時,F(xiàn)PGA產(chǎn)生測試數(shù)據(jù)。32位數(shù)據(jù),高16位為0,低16位循環(huán)計數(shù),發(fā)送一個周期后,自動清零。
批量(bulk)傳輸時的最大包大小為1024字節(jié),因此測試數(shù)據(jù)在0~255之間循環(huán)變化。
產(chǎn)生測試數(shù)據(jù)后,數(shù)據(jù)傳輸流程為DATA->
DDR2->FIFO->CYUSB3014->PC機,實現(xiàn)了將測試數(shù)據(jù)上傳到PC機的功能。
3.3.3 DDR2接口模塊
該部分直接負責外圍DDR2接口,利用FPGA的DDRII SDRAM IP核實現(xiàn),按照DDR2芯片MT47H64M16HR來設(shè)定控制器的時序參數(shù),控制器根據(jù)這些參數(shù)值生成滿足MT47H64M16HR時序的接口,再由DDR2模塊進行讀寫控制。
4.測試結(jié)果及分析
4.1 寫入數(shù)據(jù)測試
當應(yīng)用程序向USB發(fā)出寫命令時,F(xiàn)PGA產(chǎn)生測試數(shù)據(jù)并傳給FX3以便上傳給PC機。
采集1000MB的數(shù)據(jù)進行記錄,以便在MATLAB中進行分析。
CYPRESS官方開發(fā)包中自帶了streamer軟件進行速度測試。在Endpoint選項中選擇Bulk in endpoint端點(Bulk Out對應(yīng)的是PC機向FPGA寫數(shù)據(jù))。由于批量傳輸時的最大包為1024字節(jié),因此需要將Packets perXfer設(shè)置為256或以下,Xfers to Queue置為4.不同的USB3.0控制器,速度的測試結(jié)果會有所不同。如圖7所示是在64位WIN7系統(tǒng)下的測試及分析結(jié)果。如圖7(a)中所示,經(jīng)過一段時間的速度測試,23704個成功包,0失敗,往P C中寫入數(shù)據(jù)的速度能夠達到178800KB/S,即1.43Gbps.為了驗證數(shù)據(jù)的正確性,在MATLAB中對采集的8.0Gb數(shù)據(jù)進行分析。由于測試數(shù)據(jù)是0~255之間循環(huán)變化,因此可以根據(jù)每一包數(shù)據(jù)的數(shù)據(jù)差是否為1來判斷數(shù)據(jù)的正確性,當不為1時報錯。
如圖7(b)所示,讀取的數(shù)據(jù)是正確的,沒有發(fā)生丟數(shù)或錯數(shù)的情況。
4.2 讀出數(shù)據(jù)測試
類似的,當應(yīng)用程序向USB發(fā)出讀命令時,同時會產(chǎn)生一組有規(guī)律的測試數(shù)據(jù),并傳送給CYUSB3014,FPGA直接讀取數(shù)據(jù)。如下圖8(a)所示是讀入速度測試結(jié)果,18252個成功包,0失敗,往USB中寫入數(shù)據(jù)的速度能夠達到179000KB/S,即1.432Gbps.在FPGA中記錄下隨機采集的32k數(shù)據(jù)并進行分析,同樣的可以根據(jù)數(shù)據(jù)間的差來判斷數(shù)據(jù)的正確性,如圖8(b)所示,寫入的數(shù)據(jù)時正確的,沒有發(fā)生丟數(shù)錯數(shù)的情況。
5.結(jié)束語
本文在FPGA和CYUSB3014的基礎(chǔ)上,對USB3.0進行了開發(fā)應(yīng)用。鑒于本文的系統(tǒng)架構(gòu),雖然測試數(shù)據(jù)都是FPGA內(nèi)部產(chǎn)生,但是對于實際使用高采樣率AD的數(shù)據(jù)采集系統(tǒng)具有很大的借鑒意義。
評論