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