沈佐峰,梁文婷
(中國(guó)電子科技集團(tuán)公司第三十研究所,四川 成都 610041)
現(xiàn)場(chǎng)可編程邏輯門陣列(Field Programmable Gate Array,F(xiàn)PGA)以其高靈活性、豐富的邏輯和I/O資源,在電子、通信領(lǐng)域應(yīng)用越來(lái)越廣泛。眾所周知,目前FPGA市場(chǎng)被Xilinx、Lattice、Alter(已被Intel收購(gòu))及Actel(已被Microsemi收購(gòu))4家美國(guó)公司壟斷。國(guó)家對(duì)核心關(guān)鍵芯片的國(guó)產(chǎn)自主化日益迫切的需求,促使國(guó)內(nèi)廠家近年來(lái)大力發(fā)展FPGA設(shè)計(jì)和制造產(chǎn)業(yè),涌現(xiàn)出一批優(yōu)秀的FPGA廠家,如上海安路、高云半導(dǎo)體及京微齊力等。但是,上述國(guó)內(nèi)廠家由于工藝和技術(shù)上的限制,芯片性能一定程度上落后于國(guó)外幾家大廠。因此,通常FPGA在國(guó)產(chǎn)自主可控設(shè)備的工程使用上,由于性能的不足,需通過多片F(xiàn)PGA功能分隔完成工程化應(yīng)用[1]。
目前,無(wú)論國(guó)內(nèi)外廠商,F(xiàn)PGA的制造工藝大多數(shù)基于SRAM工藝。它具有易失性,F(xiàn)PGA在每次上電后需要重新進(jìn)行配置加載。配置加載傳統(tǒng)采用單片F(xiàn)PGA單獨(dú)配置一個(gè)PROM的方式,以實(shí)現(xiàn)FPGA程序的非易失和上電自動(dòng)加載。但是,該方式費(fèi)時(shí)費(fèi)力,一旦FPGA板卡裝入整機(jī)后再進(jìn)行程序的修改或升級(jí),必須通過開箱后連接下載電纜實(shí)現(xiàn),整個(gè)過程非常繁雜。
針對(duì)上述情況,本文提出了3種解決方案:第一種通過MCU采用菊花鏈的方式實(shí)現(xiàn)兩片或多片國(guó)產(chǎn)化FPGA程序的加載;第二種通過MCU配置和更新FPGA的程序存儲(chǔ)FLASH,再實(shí)現(xiàn)從FLASH啟動(dòng)FPGA;第三種是直接通過MCU加載FPGA。
目前,針對(duì)國(guó)內(nèi)外FPGA產(chǎn)品在配置方法,配置引腳功能設(shè)置及配置接口時(shí)序基本完全相同。這里以上海安路信息科技有限公司的AL3A10BG256為例進(jìn)行原理介紹[2]。AL3A10BG256共有7種配置方式可選擇,分別是主動(dòng)串行(Master Serial,MS)、從動(dòng)串行(Slave Serial,SS)、從動(dòng)并行(Slave Parallel,SP)、主動(dòng)并行(Master Parallel,MP)、快速SPI、標(biāo)準(zhǔn)SPI和JTAG配置模式。配置模式由MSEL[0-2]3個(gè)模式選擇信號(hào)確定。
AL3A10BG256芯片的配置過程包含3個(gè)步驟:
(1)在芯片上電復(fù)位或者系統(tǒng)復(fù)位信號(hào)有效后進(jìn)入復(fù)位階段,等待內(nèi)部信號(hào)和電源穩(wěn)定后,系統(tǒng)開始進(jìn)行初始化和內(nèi)部配置信息清除過程;
(2)當(dāng)芯片初始化完成后,F(xiàn)PGA開始接受配置數(shù)據(jù)寫入;
(3)數(shù)據(jù)寫入完成后,F(xiàn)PGA芯片進(jìn)入啟動(dòng)階段。
AL3A10BG256的配置引腳分為專用配置引腳和復(fù)用引腳,復(fù)用引腳配置完成后可以用一般IO使用。專用引腳包括配置模式選擇引腳(MSEL[0-2])、配置時(shí)鐘引腳(CCLK)、配置開始信號(hào)引腳(PROGRAMN)、配置完成引腳(DONE)、配置錯(cuò)誤指示引腳(INITN)、從模式配置片選引腳(CSN)及邊界掃描相關(guān)引腳(TDI、TDO、TMS、TCK)。復(fù)用引腳包括配置級(jí)聯(lián)片選、數(shù)據(jù)輸出腳(CSON/DOUT)、SPI模式片選輸出(SPICSN)和配置數(shù)據(jù)輸入引腳(D[7:0]),其中D[1]還可以做為MSPI模式下的MOSI,D[0]還可以作為從模式下的DIN和MSPI模式下的MISO。DONE和INITN是開漏輸出,需采用電阻上拉。
在初始化過程中,如需要重新下載配置數(shù)據(jù),拉低PROGRAMN引腳后,系統(tǒng)進(jìn)入初始化過程。初始化過程中,F(xiàn)PGA將清除內(nèi)部所有配置點(diǎn),復(fù)位內(nèi)部寄存器。在數(shù)據(jù)寫入階段,INITN信號(hào)變?yōu)楦唠娖?,此時(shí)用戶配置數(shù)據(jù)開始寫入AL3A10BG256。在啟動(dòng)階段,F(xiàn)PGA釋放DONE信號(hào)、釋放全局三態(tài)信號(hào)GTS、釋放全局復(fù)位/置位信號(hào)GSR及釋放全局寫使能信號(hào)GWE。
安路公司FPGA支持兩種級(jí)聯(lián)方式:一種是JTAG方式下的級(jí)聯(lián)(即通常說的菊花鏈);另一種是從動(dòng)模式下(SP/MP)的聯(lián)級(jí)。
2.1.1 JTAG級(jí)聯(lián)加載
JTAG級(jí)聯(lián)加載相對(duì)比較簡(jiǎn)單,如果要下載到FLASH,則只支持三級(jí)級(jí)聯(lián),如圖1所示。
圖1 JTAG級(jí)聯(lián)硬件
JTAG級(jí)聯(lián)在TD軟件中需要進(jìn)行設(shè)置,先把需要加載的多個(gè)bit文件加入,并生成SVF文件,然后設(shè)置level,即可下載。如果是單級(jí),則直接下載bit文件。安路的FPGA和國(guó)外FPGA在下載時(shí)有一定區(qū)別。國(guó)外FPGA直接下載到FPGA里是bit文件,如果下載到FLASH里則是MCS等文件。安路FPGA不論是下載到FPGA還是FLASH,都可以選則bit文件,可以在軟件中選擇采用JTAG方式加載還是FLASH方式加載[3]。
該方式較適合在開發(fā)調(diào)試階段使用,通過JTAG調(diào)試或下載程序到FLASH,也是最常用的方式。由于只存儲(chǔ)單一程序的配置文件,一旦加載后只能實(shí)現(xiàn)一個(gè)特定功能,不同功能模塊之間不能直接進(jìn)行互換,也不方便升級(jí)。該模式一般應(yīng)用于產(chǎn)品量小且產(chǎn)品只在特定室內(nèi)運(yùn)行,能快速拆卸機(jī)殼的環(huán)境,或者產(chǎn)品本身沒有MCU。
2.1.2 從動(dòng)級(jí)聯(lián)加載
無(wú)論是在SS、MS還是MP、SP模式下,都有Flow Through和Bypass兩種級(jí)聯(lián)模式。級(jí)聯(lián)工作模式由位流中的命令指定。這兩個(gè)級(jí)聯(lián)模式是可以無(wú)限級(jí)數(shù)的級(jí)聯(lián),非常適合大型系統(tǒng)采用。
在AL3A10BG256芯片的配置數(shù)據(jù)下載時(shí),若采用Flow Through模式,第一塊FPGA配置完成后,輸出CSON啟動(dòng)第二款芯片進(jìn)入配置。Bypass模式下,第一塊芯片配置完成后,配置給其他FPGA的數(shù)據(jù)在每個(gè)CCLK上升時(shí)刻輸出給DOUT引腳。級(jí)聯(lián)配置芯片的DONE和INITN引腳通過上拉電阻線與連接在一起,只有2片都完成配置后,通過DONE芯片同時(shí)開始工作,如圖2所示。
圖2 級(jí)聯(lián)
隨著通信設(shè)備的復(fù)雜化、多樣化和國(guó)產(chǎn)化,同一套硬件設(shè)備可能應(yīng)用于不同場(chǎng)合,這要求國(guó)產(chǎn)FPGA的內(nèi)部邏輯要可隨著應(yīng)用場(chǎng)合可變化,使設(shè)備可以滿足“一機(jī)多用”的應(yīng)用需求。為了適應(yīng)這種需求,本文介紹了一種“MCU+FLASH+JTAG”的硬件配置系統(tǒng),可在不同條件下進(jìn)行不同方式的加載[4]。
圖3可以選擇幾種加載方式:一是JTAG加載或通過JTAG下載程序到FLASH;二是MCU直接加載,程序存在MCU中;三是通過FLASH加載,F(xiàn)LASH可以通過MCU的網(wǎng)口、USB、串口隨時(shí)更新程序。第一種即JTAG級(jí)聯(lián),不作詳細(xì)介紹,下面主要說明后兩種加載方式。
2.2.1 MCU加載
第二種方式MCU加載bit文件,不需要FLASH。安路TD軟件生成的bin文件存入MCU軟件。MCU在啟動(dòng)后讀取二進(jìn)制文件,通過串行口寫入FPGA中,硬件設(shè)計(jì)如圖3所示的第2種方式。
FPGA軟件可以設(shè)置為Flow Through級(jí)聯(lián)模式,也可以是主動(dòng)串接的Flow Through級(jí)聯(lián)模式,通過MSEL選擇。如果要采用Bypass級(jí)聯(lián),則把上一級(jí)的DOUT輸入到下一級(jí)的DIN。需要在TD軟件中設(shè)置以下兩個(gè)選項(xiàng)開關(guān),分別為設(shè)置級(jí)聯(lián)模式為Bypass或Flow Through模式和設(shè)置多片同步啟動(dòng)模式。
MCU將FPGA和MCU之間的配置寄存器設(shè)置為加載模式,將PROGRAM信號(hào)拉低并保持低電平時(shí)間大于1 μs,F(xiàn)PGA檢測(cè)到PROGRAM為低且配置寄存器為0x1(加載模式),清除現(xiàn)有的程序進(jìn)入加載狀態(tài),同時(shí)拉低INITN信號(hào)和DONE信號(hào)對(duì)CPU反饋。CPU檢測(cè)INITN和DONE信號(hào)為低,待FPGA準(zhǔn)備就緒后,將INITN信號(hào)拉高;CPU檢測(cè)到INITN信號(hào)為高后,將輸出時(shí)鐘,并在時(shí)鐘下降時(shí)開始發(fā)送數(shù)據(jù)。第一片F(xiàn)PGA芯片配置完成后,它會(huì)在每個(gè)CCLK上升時(shí)刻將新收到的數(shù)據(jù)通過DOUT引腳移位到下一片F(xiàn)PGA中。當(dāng)所有FPGA加載完成后,最后一片F(xiàn)PGA將DONE信號(hào)拉高。如果加載不成功,DONE信號(hào)一直為低。FPGA在DONE信號(hào)拉高的同時(shí),把配置寄存器設(shè)置為0x0(正常模式)。CPU在所有配置寫入后延遲1 s,檢測(cè)DONE信號(hào)并且讀取配置寄存器,如果都正常,則表示加載成功。
圖3 FPGA加載硬件
當(dāng)需要升級(jí)FPGA程序時(shí),通過網(wǎng)口或別的通信口通過MCU。MCU接收到遠(yuǎn)程傳來(lái)的FPGA程序的BIN文件存放在外掛的非易失存儲(chǔ)器中(如SD卡)的特定位置,同時(shí)開始進(jìn)入加載模式。在FPGA加載成功后,將此次收到的BIN文件覆蓋之前FPGA加載文件存放位置。如果沒有加載成功,則把FPGA以前版本BIN重新加載,并且通知遠(yuǎn)方主機(jī)。
MCU軟件流程序邏輯,如圖4所示。
這種加載方式成本較低,升級(jí)性能好,可以在程序運(yùn)行任何時(shí)間段更新程序并重新加載,缺點(diǎn)是CCLK也要由MCU GPIO口模擬。如果MCU GPIO口的速度較慢,加載文件較大,那么時(shí)間就較長(zhǎng)。以兆易的MCU(GD32F450)+復(fù)旦微JFM7K325T為例,兆易自身啟動(dòng)大于90 s(與程序大小有關(guān)),JFM7K325T的BIN文件是11 176 kbyte。如果MCU GPIO的速度為800 kHz,F(xiàn)PGA加載時(shí)間為14 s,還需要MCU讀取加載文件的時(shí)間,從加電到FPGA啟動(dòng)完成正常工作,需要將近120 s。對(duì)于時(shí)間比較敏感的產(chǎn)品來(lái)說,用戶的體驗(yàn)會(huì)很差。在同等條件下,如果從FLASH啟動(dòng),時(shí)鐘為33 MHz,則加載只需要2.7 s。
2.2.2 FLASH加載
第三種方式是通過FLASH加載bit文件,同時(shí)升級(jí)FLASH很方便,硬件如圖3所示的第3點(diǎn),產(chǎn)生bit文件或bin文件都可以(這與國(guó)外FPGA不同),要升級(jí)時(shí)可以通過MCU外接的RJ45或USB或RS232口連接。以北京兆易的MCU(GD32F450)+安路FPGA(AL3A10BG256)搭建一個(gè)升級(jí)平臺(tái),如圖5所示。
圖4 MCU軟件流程序邏輯
圖5 硬件平臺(tái)
GD25Q64作為FPGA配置Flash,啟動(dòng)時(shí)連接FPGA的加載引腳。需要FPGA升級(jí)時(shí),MCU和FPGA通信,通過SPI1接口訪問配置Flash,實(shí)現(xiàn)FPGA升級(jí)功能。FLASH要成2個(gè)BANK,初始狀態(tài)BANK1和BANK2的BIN文件為一樣的。收到升級(jí)BIN后,BANK1為升級(jí)的BIN,BANK2為當(dāng)前版本的BIN。在RJ45、USB、RS232三種接口中,RJ45距離最遠(yuǎn),只要網(wǎng)絡(luò)允許即可通信,但要在下載bin或bit文件時(shí),加校驗(yàn)措施。USB和RS232都只能近距離升級(jí),可以通過U盤升級(jí)連接USB座子。MCU收到USB提示后,讀取USB內(nèi)容后送入FLASH中。通過RS232可以實(shí)現(xiàn)RS23和計(jì)算機(jī)相連,然后MCU自帶的使用“GigaDevice ISP Programmer”軟件,選擇相應(yīng)的MCU,把BIN下載到MCU再進(jìn)入FLASH。
MCU升級(jí)FLASH,需要制定一個(gè)升級(jí)寄存器,初始狀態(tài)為0x0。如果有程序?qū)懭隖LASH,則置0x3,在下次啟動(dòng)時(shí)從BANK1讀取程序。如FPGA正常啟動(dòng),則把升級(jí)寄存器置0x1。MCU檢測(cè)到寄存器為0x1時(shí),把BANK1的BIN文件寫入BANK2,同時(shí)把升級(jí)寄存器置為0x00。如果CPU檢測(cè)到FPGA重新加載了,升級(jí)寄存器為0x3,則把BANK2的數(shù)據(jù)覆蓋BANK1,把寄存器置為0x00,且通過升級(jí)不成功。
第三種方式也是在產(chǎn)品階段,通過FLASH啟動(dòng)。如果需要更新程序,MCU通過SPI更新FLASH的程序。這種配置方法的優(yōu)點(diǎn)是外圍電路簡(jiǎn)單、體積小,適合不需要頻繁升級(jí)、對(duì)啟動(dòng)時(shí)間要求高的產(chǎn)品。第三種方式綜合了前兩種的優(yōu)點(diǎn),但比第二種方式增加了FLASH的成本。
對(duì)于同樣大小的配置文件,選擇不同的配置模式,配置電路設(shè)計(jì)和配置時(shí)間會(huì)大不相同。常用配置模式比較如表1所示,選擇配置模式時(shí)考慮的因素有整體設(shè)置、速度、成本、程序升級(jí)復(fù)雜性和應(yīng)用場(chǎng)合等。
表1 配置模式比較
為了對(duì)本文設(shè)計(jì)的配置系統(tǒng)功能和性能進(jìn)行驗(yàn)證,根據(jù)圖1搭建了系統(tǒng)驗(yàn)證平臺(tái)。MCU采用兆 易 的MCU(GD32F450),F(xiàn)PGA采 用2片 安路公司的AL3A10BGA256,F(xiàn)LASH采用兆易公司的GD25Q64CSIG。選擇文件為bit文件,采用Flow Through級(jí)聯(lián)方式,JTAG下載時(shí)鐘選擇1M時(shí)鐘。配置文件大小分別為285 kB和292 kB,MCU選用配置時(shí)鐘為800 kHz,采用FLASH加載方式,用示波器實(shí)測(cè)加載時(shí)間為2 069 ms和2 105 ms(計(jì)算加載時(shí)間為2 280 ms和2 336 ms)。選擇MCU的配置方式,配置時(shí)間為81 s(這里MCU啟動(dòng)到加載FPGA約為70 s),根據(jù)配置結(jié)束后的在線示波器采樣的信號(hào)時(shí)序,F(xiàn)PGA的DONE引腳拉高,配置成功。
隨著國(guó)產(chǎn)FPGA被越來(lái)越多的使用,設(shè)計(jì)中對(duì)多片F(xiàn)PGA加載方式也提出了更高要求。本文提出了典型國(guó)產(chǎn)FPGA加載的幾種方案,設(shè)計(jì)者可以根據(jù)實(shí)際工程應(yīng)用情況,靈活選擇不同的加載方式,使得FPGA的配置加載更靈活可靠。本文提出的設(shè)計(jì)方案在實(shí)際使用時(shí)具有一定的參考意義,同時(shí)本方案經(jīng)過實(shí)際工程應(yīng)用檢驗(yàn),證明了安全性和可行性。