通過USB接口實(shí)現(xiàn)FPGA 的SelectMap配置
摘要:本文提出了一種基于USB接口的FPGA SelectMap配置方式的實(shí)現(xiàn)方案。方案以大容量Spartan3 FPGA作為配置目標(biāo),選用Cypress EZ-USB FX2LP作為USB設(shè)備芯片,采用其內(nèi)置的端點(diǎn)FIFO和GPIF狀態(tài)機(jī)實(shí)現(xiàn)了一個(gè)高性能的配置數(shù)據(jù)傳輸通道,并設(shè)計(jì)了USB廠商請(qǐng)求來控制配置進(jìn)程。方案具有配置靈活、成本低、速度快、實(shí)現(xiàn)簡(jiǎn)單的特點(diǎn),目前已在很多軟件無線電項(xiàng)目中得到應(yīng)用,具有很強(qiáng)的實(shí)用性。
1. 引言
FPGA 器件結(jié)合了ASIC 的高性能和微處理器的靈活,不僅擁有豐富的邏輯資源,而且可以進(jìn)行方便靈活的配置。主動(dòng)配置方式盡管配置速度快、實(shí)現(xiàn)簡(jiǎn)單,但并未發(fā)揮FPGA 配置靈活的特點(diǎn),適合于FPGA 用作單一應(yīng)用的場(chǎng)合,并且大容量的配置芯片及其占用的電路板面積也帶來了較高的成本;被動(dòng)配置方式需要使用外部控制單元產(chǎn)生配置時(shí)序,實(shí)現(xiàn)一般較為復(fù)雜,而且在目前常見的方案中,常由于接口速率限制[1]或者采用微處理器介入數(shù)據(jù)傳輸?shù)仍颍斐膳渲盟俣炔桓?。USB2.0 協(xié)議在目前PC 外設(shè)的接口方案中非常流行,它支持高速率、多管道、多類型的數(shù)據(jù)傳輸,可以方便的構(gòu)建出高性能的數(shù)據(jù)傳輸通道和靈活的控制通道。
本文提出了一種基于 USB 接口的FPGA SelectMap(并行被動(dòng))配置方式的實(shí)現(xiàn)方案,不但具有被動(dòng)配置靈活、設(shè)計(jì)成本低的特點(diǎn),而且實(shí)現(xiàn)簡(jiǎn)單、配置快速。方案以Xilinx Spartan3系列目前最大容量的500 萬門FPGA(XC3S5000)作為配置目標(biāo),選用Cypress EZ-USBFX2LP 作為USB 設(shè)備芯片,并使用其內(nèi)部的大容量端點(diǎn)FIFO,在GPIF 狀態(tài)機(jī)的控制下,實(shí)現(xiàn)了一個(gè)高性能的配置數(shù)據(jù)傳輸通道。配置的進(jìn)程則由設(shè)計(jì)的USB 請(qǐng)求來控制。此配置方案具有開發(fā)簡(jiǎn)單、配置成本低、速度快、使用靈活的特點(diǎn),具有很強(qiáng)的實(shí)用性。
2. 系統(tǒng)的總體設(shè)計(jì)
如圖 1 所示,系統(tǒng)使用USB 通道連接上位機(jī)和EZ-USB。EZ-USB 是一塊高速USB 外設(shè)芯片,它支持USB 協(xié)議所描述全部四種傳輸模式,并擁有1 個(gè)64Byte 的控制傳輸專用端點(diǎn)、2 個(gè)緩存為64Byte 的普通端點(diǎn)和4 個(gè)緩存最大可達(dá)1KB、并可以進(jìn)行四倍緩沖的大端點(diǎn)。本設(shè)計(jì)方案使用了一個(gè)控制端點(diǎn)(端點(diǎn)0)和一個(gè)大端點(diǎn)(端點(diǎn)2)傳輸數(shù)據(jù)。其中控制端點(diǎn)是所有USB 設(shè)備所必備的,它用于在設(shè)備枚舉時(shí)傳輸U(kuò)SB 請(qǐng)求和相關(guān)數(shù)據(jù),在本設(shè)計(jì)中,控制端點(diǎn)還用來傳輸專門設(shè)計(jì)的USB 廠商請(qǐng)求來控制配置進(jìn)程、獲取配置狀態(tài)。大端點(diǎn)用來傳輸配置數(shù)據(jù),由于配置數(shù)據(jù)需要及時(shí)、無誤的傳輸,因此使用可以同時(shí)保證傳輸準(zhǔn)確性和最大延時(shí)的中斷傳輸方式,并設(shè)置端點(diǎn)緩存為1KB、做4 倍緩沖,最大傳輸間隔為一個(gè)微幀(125us),且每個(gè)傳輸間隔內(nèi)傳輸3 個(gè)有效載荷為1KB 的包(最后一個(gè)包的載荷可能小于1KB),這樣配置數(shù)據(jù)在USB 通道中的傳輸速率可達(dá)到3*1KB*(1/125us)=24000KB/s。
數(shù)據(jù)從端點(diǎn)轉(zhuǎn)移到外設(shè)(FPGA)的過程中,如果使用USB 設(shè)備芯片內(nèi)嵌的8051 MCU進(jìn)行轉(zhuǎn)移的話,最快8 個(gè)時(shí)鐘周期才能傳輸一個(gè)字節(jié)的數(shù)據(jù)[2],在8051 的時(shí)鐘周期為48MHz情況下,傳輸速度為6MB/s,遠(yuǎn)小于USB 通道的傳輸速率,會(huì)成為瓶頸而無法發(fā)揮出USB傳輸通道高傳輸速率的優(yōu)勢(shì);而如果通過位寬為8bit 的 FIFO 來傳輸?shù)脑挘羁烨闆r下,每時(shí)鐘周期都可以傳輸一個(gè)字節(jié)數(shù)據(jù)[2]。在EZ-USB 中,大端點(diǎn)的緩存可以作為端點(diǎn)FIFO 直接連接FPGA 的配置數(shù)據(jù)輸入口形成高速傳輸通道,端點(diǎn)FIFO 的讀寫時(shí)序可由EZ-USB 內(nèi)嵌的GPIF(General Programmable Interface)產(chǎn)生,MCU 可以不參與端點(diǎn)到FPGA 的數(shù)據(jù)轉(zhuǎn)移,只起到配置和控制的作用,在FIFO 位寬為8bit,GPIF 時(shí)鐘頻率為48MHz 的情況下,傳輸速率為48MB/s,這樣數(shù)據(jù)從端點(diǎn)到FPGA 的傳輸速度超過了上位機(jī)到端點(diǎn)的USB 中斷傳輸管道的最大速度,不對(duì)USB 傳輸通道構(gòu)成瓶頸。
3. 配置時(shí)序的發(fā)生
配置數(shù)據(jù)需要在配置時(shí)序的配合下寫入 FPGA。GPIF 是一個(gè)可編程的狀態(tài)機(jī),它可以采集5 個(gè)輸入引腳(RDY)的狀態(tài),并通過5 個(gè)輸出引腳(CTL)對(duì)外產(chǎn)生任意時(shí)序,因此可用來產(chǎn)生FPGA 的配置時(shí)序。表1 說明了FPGA 在SelectMap 模式下各配置引腳的作用,如圖1 所示,CCLK 連接EZ-USB 提供的界面時(shí)鐘IFCLK,D[7:0]連接端點(diǎn)FIFO,其它配置引腳連接著GPIF 狀態(tài)機(jī)的RDY 及CTL 引腳。為了確保各引腳的輸入有充足的建立時(shí)間供FPGA 采樣,F(xiàn)PGA 的時(shí)鐘輸入應(yīng)與GPIF 的內(nèi)部時(shí)鐘倒相。
根據(jù)配置時(shí)序所設(shè)計(jì)的 GPIF 狀態(tài)機(jī)的狀態(tài)轉(zhuǎn)移圖如圖2 所示。配置時(shí)鐘為48MHz,所以PROG 低脈沖要維持25 個(gè)時(shí)鐘周期,狀態(tài)機(jī)會(huì)根據(jù)端點(diǎn)FIFO 的空滿狀態(tài)控制FPGA 的CS 引腳,確保FPGA 在FIFO 有配置數(shù)據(jù)輸出的情況下進(jìn)行數(shù)據(jù)采樣,數(shù)據(jù)輸出在字節(jié)計(jì)數(shù)達(dá)到FPGA 配置比特流文件的字節(jié)數(shù)值時(shí)停止,500 萬門的XC3S5000 為13271936 bit。
4. 系統(tǒng)軟件的設(shè)計(jì)
4.1 EZ-USB 固件程序設(shè)計(jì)
EZ-USB 的固件框架如圖3 所示,Cypress 為大部分模塊提供了完整的代碼,本設(shè)計(jì)需要編寫的模塊有TD_Init,TD_Poll 和USB 請(qǐng)求解析模塊。TD_Init 模塊僅執(zhí)行一次,作用是設(shè)置端點(diǎn)和GPIF 傳輸界面,以及將端點(diǎn)2 緩存的控制權(quán)交給邏輯單元使得邏輯單元可以將總線上收到的數(shù)據(jù)包裝入緩存。TD_Poll 模塊會(huì)反復(fù)執(zhí)行,作用是在端點(diǎn)2 的緩存填入數(shù)據(jù)包后,開啟GPIF 狀態(tài)機(jī),將FIFO 內(nèi)的配置數(shù)據(jù)寫入FPGA。USB 請(qǐng)求解析模塊需要解析本方案設(shè)計(jì)的2 條USB 廠商請(qǐng)求,0xB1 和0xB2,它們用于配置初始化和查詢配置狀態(tài)。
4.2 上位機(jī)程序設(shè)計(jì)
由于 Cypress 已提供USB 設(shè)備驅(qū)動(dòng),因此上位機(jī)程序只需要獲得了一個(gè)至 USB 設(shè)備驅(qū)動(dòng)程序的句柄,打開包含配置代碼的文件并對(duì)其進(jìn)行語法分析,在 USB 中斷傳輸?shù)拿看握{(diào)用過程中傳送取自配置文件的1024 字節(jié)發(fā)送出去,這一過程將繼續(xù)下去,直到配置文件中沒有剩余字節(jié)為止。
5. 配置性能的實(shí)際測(cè)試
配置數(shù)據(jù)傳輸?shù)钠款i在 USB 傳輸通道,而采用中斷端點(diǎn)時(shí),USB 傳輸通道的速度極限值應(yīng)為24000KB/s,對(duì)于500 萬門的XC3S5000 而言,傳輸13271936bit 配置數(shù)據(jù)的理論時(shí)間約為527.4ms。
對(duì)配置時(shí)間進(jìn)行的實(shí)際測(cè)試中,使用500 萬門的XC3S5000 作為配置對(duì)象,使用測(cè)量精度為10ms 的碼表測(cè)量從送出配置文件到FPGA 的Done 引腳所連接的LED 點(diǎn)亮的時(shí)間差,經(jīng)測(cè)量,配置實(shí)際使用時(shí)間為540ms。考慮到MCU 判斷端點(diǎn)緩存和開啟標(biāo)志,以及開啟狀態(tài)機(jī)所用時(shí)間,實(shí)測(cè)值比理論值多出的時(shí)間是合理的。
6. 結(jié)論
采用 Cypress EZ-USB 及其內(nèi)置的GPIF 狀態(tài)機(jī)對(duì)大容量FPGA 進(jìn)行 SelectMap 方式配置的方案,不僅具有被動(dòng)配置方式靈活性高的優(yōu)點(diǎn),而且因?yàn)椴恍枰笕萘颗渲么鎯?chǔ)器、同時(shí)可以節(jié)約電路板空間,所以實(shí)現(xiàn)成本較低。另外Cypress 完善的開發(fā)工具也使得方案的實(shí)現(xiàn)非常簡(jiǎn)單。經(jīng)過實(shí)際測(cè)試,本方案的配置速度非??欤瑢?duì)于大規(guī)模FPGA 配置時(shí)間也能在一秒之內(nèi)完成,因此本方案具有很好的實(shí)用價(jià)值。
本文作者創(chuàng)新點(diǎn):設(shè)計(jì)了一種針對(duì)大規(guī)模FPGA 的實(shí)用配置方案,配置方式靈活、配置、速度快、配置成本低、系統(tǒng)開發(fā)簡(jiǎn)單。
來源:過往煙云0次