沈佐峰,梁文婷
(中國電子科技集團公司第三十研究所,四川 成都 610041)
現場可編程邏輯門陣列(Field Programmable Gate Array,FPGA)以其高靈活性、豐富的邏輯和I/O資源,在電子、通信領域應用越來越廣泛。眾所周知,目前FPGA市場被Xilinx、Lattice、Alter(已被Intel收購)及Actel(已被Microsemi收購)4家美國公司壟斷。國家對核心關鍵芯片的國產自主化日益迫切的需求,促使國內廠家近年來大力發展FPGA設計和制造產業,涌現出一批優秀的FPGA廠家,如上海安路、高云半導體及京微齊力等。但是,上述國內廠家由于工藝和技術上的限制,芯片性能一定程度上落后于國外幾家大廠。因此,通常FPGA在國產自主可控設備的工程使用上,由于性能的不足,需通過多片FPGA功能分隔完成工程化應用[1]。
目前,無論國內外廠商,FPGA的制造工藝大多數基于SRAM工藝。它具有易失性,FPGA在每次上電后需要重新進行配置加載。配置加載傳統采用單片FPGA單獨配置一個PROM的方式,以實現FPGA程序的非易失和上電自動加載。但是,該方式費時費力,一旦FPGA板卡裝入整機后再進行程序的修改或升級,必須通過開箱后連接下載電纜實現,整個過程非常繁雜。
針對上述情況,本文提出了3種解決方案:第一種通過MCU采用菊花鏈的方式實現兩片或多片國產化FPGA程序的加載;第二種通過MCU配置和更新FPGA的程序存儲FLASH,再實現從FLASH啟動FPGA;第三種是直接通過MCU加載FPGA。
目前,針對國內外FPGA產品在配置方法,配置引腳功能設置及配置接口時序基本完全相同。這里以上海安路信息科技有限公司的AL3A10BG256為例進行原理介紹[2]。AL3A10BG256共有7種配置方式可選擇,分別是主動串行(Master Serial,MS)、從動串行(Slave Serial,SS)、從動并行(Slave Parallel,SP)、主動并行(Master Parallel,MP)、快速SPI、標準SPI和JTAG配置模式。配置模式由MSEL[0-2]3個模式選擇信號確定。
AL3A10BG256芯片的配置過程包含3個步驟:
(1)在芯片上電復位或者系統復位信號有效后進入復位階段,等待內部信號和電源穩定后,系統開始進行初始化和內部配置信息清除過程;
(2)當芯片初始化完成后,FPGA開始接受配置數據寫入;
(3)數據寫入完成后,FPGA芯片進入啟動階段。
AL3A10BG256的配置引腳分為專用配置引腳和復用引腳,復用引腳配置完成后可以用一般IO使用。專用引腳包括配置模式選擇引腳(MSEL[0-2])、配置時鐘引腳(CCLK)、配置開始信號引腳(PROGRAMN)、配置完成引腳(DONE)、配置錯誤指示引腳(INITN)、從模式配置片選引腳(CSN)及邊界掃描相關引腳(TDI、TDO、TMS、TCK)。復用引腳包括配置級聯片選、數據輸出腳(CSON/DOUT)、SPI模式片選輸出(SPICSN)和配置數據輸入引腳(D[7:0]),其中D[1]還可以做為MSPI模式下的MOSI,D[0]還可以作為從模式下的DIN和MSPI模式下的MISO。DONE和INITN是開漏輸出,需采用電阻上拉。
在初始化過程中,如需要重新下載配置數據,拉低PROGRAMN引腳后,系統進入初始化過程。初始化過程中,FPGA將清除內部所有配置點,復位內部寄存器。在數據寫入階段,INITN信號變為高電平,此時用戶配置數據開始寫入AL3A10BG256。在啟動階段,FPGA釋放DONE信號、釋放全局三態信號GTS、釋放全局復位/置位信號GSR及釋放全局寫使能信號GWE。
安路公司FPGA支持兩種級聯方式:一種是JTAG方式下的級聯(即通常說的菊花鏈);另一種是從動模式下(SP/MP)的聯級。
2.1.1 JTAG級聯加載
JTAG級聯加載相對比較簡單,如果要下載到FLASH,則只支持三級級聯,如圖1所示。

圖1 JTAG級聯硬件
JTAG級聯在TD軟件中需要進行設置,先把需要加載的多個bit文件加入,并生成SVF文件,然后設置level,即可下載。如果是單級,則直接下載bit文件。安路的FPGA和國外FPGA在下載時有一定區別。國外FPGA直接下載到FPGA里是bit文件,如果下載到FLASH里則是MCS等文件。安路FPGA不論是下載到FPGA還是FLASH,都可以選則bit文件,可以在軟件中選擇采用JTAG方式加載還是FLASH方式加載[3]。
該方式較適合在開發調試階段使用,通過JTAG調試或下載程序到FLASH,也是最常用的方式。由于只存儲單一程序的配置文件,一旦加載后只能實現一個特定功能,不同功能模塊之間不能直接進行互換,也不方便升級。該模式一般應用于產品量小且產品只在特定室內運行,能快速拆卸機殼的環境,或者產品本身沒有MCU。
2.1.2 從動級聯加載
無論是在SS、MS還是MP、SP模式下,都有Flow Through和Bypass兩種級聯模式。級聯工作模式由位流中的命令指定。這兩個級聯模式是可以無限級數的級聯,非常適合大型系統采用。
在AL3A10BG256芯片的配置數據下載時,若采用Flow Through模式,第一塊FPGA配置完成后,輸出CSON啟動第二款芯片進入配置。Bypass模式下,第一塊芯片配置完成后,配置給其他FPGA的數據在每個CCLK上升時刻輸出給DOUT引腳。級聯配置芯片的DONE和INITN引腳通過上拉電阻線與連接在一起,只有2片都完成配置后,通過DONE芯片同時開始工作,如圖2所示。

圖2 級聯
隨著通信設備的復雜化、多樣化和國產化,同一套硬件設備可能應用于不同場合,這要求國產FPGA的內部邏輯要可隨著應用場合可變化,使設備可以滿足“一機多用”的應用需求。為了適應這種需求,本文介紹了一種“MCU+FLASH+JTAG”的硬件配置系統,可在不同條件下進行不同方式的加載[4]。
圖3可以選擇幾種加載方式:一是JTAG加載或通過JTAG下載程序到FLASH;二是MCU直接加載,程序存在MCU中;三是通過FLASH加載,FLASH可以通過MCU的網口、USB、串口隨時更新程序。第一種即JTAG級聯,不作詳細介紹,下面主要說明后兩種加載方式。
2.2.1 MCU加載
第二種方式MCU加載bit文件,不需要FLASH。安路TD軟件生成的bin文件存入MCU軟件。MCU在啟動后讀取二進制文件,通過串行口寫入FPGA中,硬件設計如圖3所示的第2種方式。
FPGA軟件可以設置為Flow Through級聯模式,也可以是主動串接的Flow Through級聯模式,通過MSEL選擇。如果要采用Bypass級聯,則把上一級的DOUT輸入到下一級的DIN。需要在TD軟件中設置以下兩個選項開關,分別為設置級聯模式為Bypass或Flow Through模式和設置多片同步啟動模式。
MCU將FPGA和MCU之間的配置寄存器設置為加載模式,將PROGRAM信號拉低并保持低電平時間大于1 μs,FPGA檢測到PROGRAM為低且配置寄存器為0x1(加載模式),清除現有的程序進入加載狀態,同時拉低INITN信號和DONE信號對CPU反饋。CPU檢測INITN和DONE信號為低,待FPGA準備就緒后,將INITN信號拉高;CPU檢測到INITN信號為高后,將輸出時鐘,并在時鐘下降時開始發送數據。第一片FPGA芯片配置完成后,它會在每個CCLK上升時刻將新收到的數據通過DOUT引腳移位到下一片FPGA中。當所有FPGA加載完成后,最后一片FPGA將DONE信號拉高。如果加載不成功,DONE信號一直為低。FPGA在DONE信號拉高的同時,把配置寄存器設置為0x0(正常模式)。CPU在所有配置寫入后延遲1 s,檢測DONE信號并且讀取配置寄存器,如果都正常,則表示加載成功。

圖3 FPGA加載硬件
當需要升級FPGA程序時,通過網口或別的通信口通過MCU。MCU接收到遠程傳來的FPGA程序的BIN文件存放在外掛的非易失存儲器中(如SD卡)的特定位置,同時開始進入加載模式。在FPGA加載成功后,將此次收到的BIN文件覆蓋之前FPGA加載文件存放位置。如果沒有加載成功,則把FPGA以前版本BIN重新加載,并且通知遠方主機。
MCU軟件流程序邏輯,如圖4所示。
這種加載方式成本較低,升級性能好,可以在程序運行任何時間段更新程序并重新加載,缺點是CCLK也要由MCU GPIO口模擬。如果MCU GPIO口的速度較慢,加載文件較大,那么時間就較長。以兆易的MCU(GD32F450)+復旦微JFM7K325T為例,兆易自身啟動大于90 s(與程序大小有關),JFM7K325T的BIN文件是11 176 kbyte。如果MCU GPIO的速度為800 kHz,FPGA加載時間為14 s,還需要MCU讀取加載文件的時間,從加電到FPGA啟動完成正常工作,需要將近120 s。對于時間比較敏感的產品來說,用戶的體驗會很差。在同等條件下,如果從FLASH啟動,時鐘為33 MHz,則加載只需要2.7 s。
2.2.2 FLASH加載
第三種方式是通過FLASH加載bit文件,同時升級FLASH很方便,硬件如圖3所示的第3點,產生bit文件或bin文件都可以(這與國外FPGA不同),要升級時可以通過MCU外接的RJ45或USB或RS232口連接。以北京兆易的MCU(GD32F450)+安路FPGA(AL3A10BG256)搭建一個升級平臺,如圖5所示。

圖4 MCU軟件流程序邏輯

圖5 硬件平臺
GD25Q64作為FPGA配置Flash,啟動時連接FPGA的加載引腳。需要FPGA升級時,MCU和FPGA通信,通過SPI1接口訪問配置Flash,實現FPGA升級功能。FLASH要成2個BANK,初始狀態BANK1和BANK2的BIN文件為一樣的。收到升級BIN后,BANK1為升級的BIN,BANK2為當前版本的BIN。在RJ45、USB、RS232三種接口中,RJ45距離最遠,只要網絡允許即可通信,但要在下載bin或bit文件時,加校驗措施。USB和RS232都只能近距離升級,可以通過U盤升級連接USB座子。MCU收到USB提示后,讀取USB內容后送入FLASH中。通過RS232可以實現RS23和計算機相連,然后MCU自帶的使用“GigaDevice ISP Programmer”軟件,選擇相應的MCU,把BIN下載到MCU再進入FLASH。
MCU升級FLASH,需要制定一個升級寄存器,初始狀態為0x0。如果有程序寫入FLASH,則置0x3,在下次啟動時從BANK1讀取程序。如FPGA正常啟動,則把升級寄存器置0x1。MCU檢測到寄存器為0x1時,把BANK1的BIN文件寫入BANK2,同時把升級寄存器置為0x00。如果CPU檢測到FPGA重新加載了,升級寄存器為0x3,則把BANK2的數據覆蓋BANK1,把寄存器置為0x00,且通過升級不成功。
第三種方式也是在產品階段,通過FLASH啟動。如果需要更新程序,MCU通過SPI更新FLASH的程序。這種配置方法的優點是外圍電路簡單、體積小,適合不需要頻繁升級、對啟動時間要求高的產品。第三種方式綜合了前兩種的優點,但比第二種方式增加了FLASH的成本。
對于同樣大小的配置文件,選擇不同的配置模式,配置電路設計和配置時間會大不相同。常用配置模式比較如表1所示,選擇配置模式時考慮的因素有整體設置、速度、成本、程序升級復雜性和應用場合等。

表1 配置模式比較
為了對本文設計的配置系統功能和性能進行驗證,根據圖1搭建了系統驗證平臺。MCU采用兆 易 的MCU(GD32F450),FPGA采 用2片 安路公司的AL3A10BGA256,FLASH采用兆易公司的GD25Q64CSIG。選擇文件為bit文件,采用Flow Through級聯方式,JTAG下載時鐘選擇1M時鐘。配置文件大小分別為285 kB和292 kB,MCU選用配置時鐘為800 kHz,采用FLASH加載方式,用示波器實測加載時間為2 069 ms和2 105 ms(計算加載時間為2 280 ms和2 336 ms)。選擇MCU的配置方式,配置時間為81 s(這里MCU啟動到加載FPGA約為70 s),根據配置結束后的在線示波器采樣的信號時序,FPGA的DONE引腳拉高,配置成功。
隨著國產FPGA被越來越多的使用,設計中對多片FPGA加載方式也提出了更高要求。本文提出了典型國產FPGA加載的幾種方案,設計者可以根據實際工程應用情況,靈活選擇不同的加載方式,使得FPGA的配置加載更靈活可靠。本文提出的設計方案在實際使用時具有一定的參考意義,同時本方案經過實際工程應用檢驗,證明了安全性和可行性。