1.引言
FPGA器件結(jié)合了 ASIC的高性能和微處理器的靈活,不僅擁有豐富的邏輯資源,,而且可以進(jìn)行方便靈活的配置,。主動(dòng)配置方式盡管配置速度快、實(shí)現(xiàn)簡(jiǎn)單,,但并未發(fā)揮 FPGA配置靈活的特點(diǎn),,適合于 FPGA用作單一應(yīng)用的場(chǎng)合,并且大容量的配置芯片及其占用的電路板面積也帶來(lái)了較高的成本,;被動(dòng)配置方式需要使用外部控制單元產(chǎn)生配置時(shí)序,,實(shí)現(xiàn)一般較為復(fù)雜,而且在目前常見(jiàn)的方案中,,常由于接口速率限制 [1]或者采用微處理器介入數(shù)據(jù)傳輸?shù)仍?,而造成配置速度不高?nbsp;
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萬(wàn)門 FPGA(XC3S5000)作為配置目標(biāo),選用 Cypress EZ-USB FX2LP作為 USB設(shè)備芯片,,并使用其內(nèi)部的大容量端點(diǎn) FIFO,,在 GPIF狀態(tài)機(jī)的控制下,實(shí)現(xiàn)了一個(gè)高性能的配置數(shù)據(jù)傳輸通道,。配置的進(jìn)程則由設(shè)計(jì)的 USB請(qǐng)求來(lái)控制,。此配置方案具有開(kāi)發(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)行四倍緩沖的大數(shù)據(jù)從端點(diǎn)轉(zhuǎn)移到外設(shè)(FPGA)的過(guò)程中,,如果使用 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ì)成為瓶頸而無(wú)法發(fā)揮出 USB傳輸通道高傳輸速率的優(yōu)勢(shì),;而如果通過(guò)位寬為 8bit的 FIFO來(lái)傳輸?shù)脑挘羁烨闆r下,,每時(shí)鐘周期都可以傳輸一個(gè)字節(jié)數(shù)據(jù)[2],。在 EZ-USB中,大端點(diǎn)的緩存可以作為端點(diǎn) FIFO直接連接 FPGA的配置數(shù)據(jù)輸入口形成高速傳輸通道,,端點(diǎn) FIFO的讀寫(xiě)時(shí)序可由 EZ-USB內(nèi)嵌的 GPIF[4](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的傳輸速度超過(guò)了上位機(jī)到端點(diǎn)的 USB中斷傳輸管道的最大速度,,不對(duì) USB傳輸通道構(gòu)成瓶頸,。
3.配置時(shí)序的發(fā)生
配置數(shù)據(jù)需要在配置時(shí)序的配合下寫(xiě)入 FPGA[5]。GPIF是一個(gè)可編程的狀態(tài)機(jī),,它可以采集 5個(gè)輸入引腳(RDY)的狀態(tài),,并通過(guò) 5個(gè)輸出引腳(CTL)對(duì)外產(chǎn)生任意時(shí)序,因此可用來(lái)產(chǎn)生 FPGA的配置時(shí)序,。表 1說(shuō)明了 FPGA在 SelectMap模式下各配置引腳的作用[5],,如圖 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í)鐘倒相。
本設(shè)計(jì)方案使用了一個(gè)控制端點(diǎn)(端點(diǎn) 0)和一個(gè)大端點(diǎn)(端點(diǎn) 2)傳輸數(shù)據(jù),。其中控制端點(diǎn)是所有 USB設(shè)備所必備的,,它用于在設(shè)備枚舉時(shí)傳輸 USB請(qǐng)求和相關(guān)數(shù)據(jù),在本設(shè)計(jì)中,,控制端點(diǎn)還用來(lái)傳輸專門設(shè)計(jì)的 USB廠商請(qǐng)求來(lái)控制配置進(jìn)程,、獲取配置狀態(tài)。大端點(diǎn)用來(lái)傳輸配置數(shù)據(jù),,由于配置數(shù)據(jù)需要及時(shí),、無(wú)誤的傳輸,因此使用可以同時(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。
根據(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萬(wàn)門的 XC3S5000為 13271936 bit[5]。
4.系統(tǒng)軟件的設(shè)計(jì)
4.1 EZ-USB固件程序設(shè)計(jì)
EZ-USB的固件框架[3]如圖 3所示,,Cypress為大部分模塊提供了完整的代碼,,本設(shè)計(jì)需要編寫(xiě)的模塊有 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ù)包后,開(kāi)啟 GPIF狀態(tài)機(jī),,將 FIFO內(nèi)的配置數(shù)據(jù)寫(xiě)入 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)程序的句柄,,打開(kāi)包含配置代碼的文件并對(duì)其進(jìn)行語(yǔ)法分析,,在 USB 中斷傳輸?shù)拿看握{(diào)用過(guò)程中傳送取自配置文件的 1024字節(jié)發(fā)送出去,這一過(guò)程將繼續(xù)下去,,直到配置文件中沒(méi)有剩余字節(jié)為止,。
5.配置性能的實(shí)際測(cè)試
配置數(shù)據(jù)傳輸?shù)钠款i在 USB傳輸通道,而采用中斷端點(diǎn)時(shí),, USB傳輸通道的速度極限值應(yīng)為 24000KB/s,,對(duì)于 500萬(wàn)門的 XC3S5000而言,傳輸 13271936bit配置數(shù)據(jù)的理論時(shí)間約為 527.4ms,。
對(duì)配置時(shí)間進(jìn)行的實(shí)際測(cè)試中,,使用 500萬(wàn)門的 XC3S5000作為配置對(duì)象,使用測(cè)量精度為 10ms的碼表測(cè)量從送出配置文件到 FPGA的 Done引腳所連接的 LED點(diǎn)亮的時(shí)間差,,經(jīng)測(cè)量,,配置實(shí)際使用時(shí)間為 540ms??紤]到 MCU判斷端點(diǎn)緩存和開(kāi)啟標(biāo)志,,以及開(kāi)啟狀態(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完善的開(kāi)發(fā)工具也使得方案的實(shí)現(xiàn)非常簡(jiǎn)單。經(jīng)過(guò)實(shí)際測(cè)試,,本方案的配置速度非??欤瑢?duì)于大規(guī)模 FPGA配置時(shí)間也能在一秒之內(nèi)完成,,因此本方案具有很好的實(shí)用價(jià)值,。
本文作者創(chuàng)新點(diǎn):設(shè)計(jì)了一種針對(duì)大規(guī)模 FPGA的實(shí)用配置方案,配置方式靈活,、配置速度快,、配置成本低、系統(tǒng)開(kāi)發(fā)簡(jiǎn)單,。