《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 可編程邏輯 > 設(shè)計(jì)應(yīng)用 > 利用PowerPC對(duì)多片F(xiàn)PGA并行配置的設(shè)計(jì)與實(shí)現(xiàn)
利用PowerPC對(duì)多片F(xiàn)PGA并行配置的設(shè)計(jì)與實(shí)現(xiàn)
來(lái)源:電子技術(shù)應(yīng)用2014年第8期
趙陸文1,繆志敏2,張北江1,劉 波1
1.解放軍理工大學(xué) 通信工程學(xué)院,江蘇 南京210007; 2.解放軍理工大學(xué) 指揮信息系統(tǒng)學(xué)院,江
摘要: 為了克服JTAG等常用FPGA配置方式存在的下載速度慢等缺點(diǎn),設(shè)計(jì)了一種利用PowerPC對(duì)多片F(xiàn)PGA進(jìn)行并行配置的方案。借助PowerPC通用輸入/輸出口產(chǎn)生控制邏輯,利用其本地總線并行下載配置數(shù)據(jù)。該方案可以選擇8 bit、16 bit以及32 bit位寬下載方式,依次實(shí)現(xiàn)對(duì)多片F(xiàn)PGA的并行配置。經(jīng)實(shí)測(cè),利用JTAG口對(duì)XC6VSX475T芯片進(jìn)行配置需要48 s,而采用本方案可將配置時(shí)間縮短至1 s左右,大大縮短了配置時(shí)間。
中圖分類(lèi)號(hào): TN391
文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2014)08-0017-03
Design and realization of parallel configuration of multiple FPGAs based on PowerPC
Zhao Luwen1,Miao Zhimin2,Zhang Beijiang1,Liu Bo1
1.Communication Engineering College,PLA University of Science and Technology, Nanjing 210007,China;2.Command Information System College, PLA University of Science and Technology, Nanjing 210007,China
Abstract: In order to overcome the shortages of common configuration modes, such as slowly speed, a parallel configuration scheme is put forward. Multiple FPGAs can be parallelly configured by PowerPC. The control logic is produced by PowerPC′s GPIO, and the configuration data is downloaded through PowerPC′s Local Bus. There are three bus width modes can be chosen, 8 bit,16 bit and 32 bit. The test results show that it requires 48 seconds configuration XC6VSX475T using JTAG mode, however, the time can be shortened to about 1 second using the proposed scheme.
Key words : PowerPC;FPGA;parallel configuration

     PowerPC具有外設(shè)豐富、處理能力強(qiáng)以及便于移植Linux等操作系統(tǒng)的特點(diǎn),而現(xiàn)場(chǎng)可編輯邏輯門(mén)陣列FPGA具有處理能力強(qiáng)、在線可編程等特點(diǎn)。因此,在復(fù)雜工業(yè)控制、路由器等諸多領(lǐng)域,采用PowerPC+FPGA的架構(gòu)得到了廣泛的使用。眾所周知,F(xiàn)PGA多采用靜態(tài)隨機(jī)存取存儲(chǔ)器SRAM(Static Random-Access Memory)工藝,掉電后配置數(shù)據(jù)將丟失。因此,系統(tǒng)每次上電后都必須進(jìn)行數(shù)據(jù)配置。此外,隨著FPGA規(guī)模越來(lái)越大,配置數(shù)據(jù)已達(dá)到幾十甚至上百兆比特,常用的串行配置邊界掃描(JTAG)等方式在很多場(chǎng)合下已無(wú)法滿(mǎn)足需求。若設(shè)計(jì)中需要對(duì)多片F(xiàn)PGA進(jìn)行配置,則更為復(fù)雜,耗費(fèi)時(shí)間更長(zhǎng)。目前,主流PowerPC具有豐富的通用輸入/輸出口GPIO(General Purpose I/O),自帶位寬達(dá)32 bit的本地總線(Local Bus),且在其上移植Linux等操作系統(tǒng)方便快捷。因此,可以利用PowerPC本地總線對(duì)多片F(xiàn)PGA進(jìn)行快速并行配置。

1 FPGA配置方式

1.1 常用的配置方式及特點(diǎn)

    目前主流的FPGA廠家有Xilinx、Altera等公司。雖然不同廠家、不同系列的FPGA芯片配置方式或多或少存在一些差異,但是大體來(lái)說(shuō)配置方式包括JTAG模式、主動(dòng)模式以及被動(dòng)模式[1-2]。不同模式之間通過(guò)模式選擇控制引腳進(jìn)行選擇,具體設(shè)置方式由相應(yīng)的芯片資料給出。

JTAG模式使用最方便,使用下載器就可以很方便地將計(jì)算機(jī)生成的配置數(shù)據(jù)下載到FPGA中。但是這種模式?jīng)]有存儲(chǔ)芯片,掉電后需重新通過(guò)計(jì)算機(jī)下載,所以這種配置方式多用于調(diào)試階段;主動(dòng)模式下FPGA作為控制器,產(chǎn)生配置時(shí)鐘和控制時(shí)序,從配置器件等外部設(shè)備中讀取配置數(shù)據(jù),進(jìn)而將數(shù)據(jù)下載至FPGA。根據(jù)數(shù)據(jù)采用的是串行還是并行模式,又分為主動(dòng)串行模式和主動(dòng)并行模式。被動(dòng)模式是由外部配置器件產(chǎn)生時(shí)鐘和控制時(shí)序控制整個(gè)配置過(guò)程,F(xiàn)PGA只是被動(dòng)地接收配置數(shù)據(jù)。同樣根據(jù)數(shù)據(jù)采用的是串行還是并行模式(對(duì)應(yīng)Xilinx FPGA的SelectMAP模式),又分為被動(dòng)串行和被動(dòng)并行模式[3-4]。當(dāng)然,根據(jù)數(shù)據(jù)是同步還是異步的,還可以進(jìn)一步細(xì)分。

    串行(主串或從串)模式具有配置信號(hào)少、配置電路簡(jiǎn)單等優(yōu)點(diǎn)。但是FPGA 在配置時(shí)鐘的1個(gè)上升沿只能接收1 位配置數(shù)據(jù),顯然該配置方式速度較慢;并行模式配置信號(hào)線比較多,但是配置速度較快,在高密度的FPGA系統(tǒng)中,更適合采用并行模式。并行模式除了采用專(zhuān)用配置芯片外,還可以采用微處理器或者CPLD控制Flash等存儲(chǔ)器對(duì)FPGA進(jìn)行配置。由于主流PowerPC具有豐富的GPIO口和32位總線,若運(yùn)行Linux系統(tǒng),則可以進(jìn)一步擴(kuò)展CF卡或者SD卡,將配置文件存放在CF卡或者SD卡中,而不用Flash芯片。在精簡(jiǎn)系統(tǒng)設(shè)計(jì)的同時(shí),使得程序升級(jí)維護(hù)更方便,在工程實(shí)踐中更具有實(shí)際意義。

1.2 FPGA配置文件

    以Xilinx FPGA芯片為例,其配置文件可由集成開(kāi)發(fā)環(huán)境ISE生成。常用的配置文件格式(后綴名)包括:.bit、.rbt、.bin、.mcs以及.hex等格式。其中.bin和.bit文件都是直接向FPGA配置的文件。.bit文件除包含有真正的配置數(shù)據(jù)外,還在文件開(kāi)頭添加了頭部冗余信息,包含當(dāng)前ISE工程的名字、器件型號(hào)、編譯時(shí)間等信息,主要用于JTAG下載;.bin文件只包含了原始配置數(shù)據(jù)的二進(jìn)制文件,實(shí)質(zhì)上就是去除了頭部冗余信息的.bit文件。.bin文件也由文件頭和配置數(shù)據(jù)組成,其中文件頭主要包括位寬檢測(cè)和同步字等,第二部分才是真正寫(xiě)入FPGA的配置文件,這種格式常用于利用微處理器對(duì)FPGA進(jìn)行并行下載。.rbt格式為.bit文件的ASCII格式;.mcs文件包括地址和校驗(yàn)信息,主要用于專(zhuān)用配置芯片進(jìn)行程序燒寫(xiě);.hex文件只包含F(xiàn)PGA的配置數(shù)據(jù),也是給用戶(hù)使用的。顯然,利用PowerPC對(duì)FPGA進(jìn)行配置時(shí)要選擇.bin格式文件。本文采用被動(dòng)SelectMAP模式對(duì)Xinlix Virtex-6 FPGA進(jìn)行配置。

2 硬件設(shè)計(jì)與實(shí)現(xiàn)

2.1 并行配置的相關(guān)時(shí)序

    Xilinx SelectMAP模式實(shí)質(zhì)上就是并行配置模式,它以字節(jié)為單位將配置數(shù)據(jù)寫(xiě)入FPGA。在從SelectMAP模式下,外部數(shù)據(jù)源向FPGA提供時(shí)鐘(CCLK)、編程(PROGRAM_B)、片選(CSI_B)、讀/寫(xiě)(RDWR_B)、初始化(INIT_B)以及數(shù)據(jù)信號(hào)D[0:n](在8 bit、16 bit、32 bit模式下,n分別對(duì)應(yīng)7、

15、31)。表 1給出了SelectMAP模式下的配置引腳功能。其中信號(hào)方向是相對(duì)于FPGA而言的。

 

各控制信號(hào)的具體含義如下[5]:

    (1)PROGRAM_B:編程復(fù)位信號(hào)。在上電過(guò)程中為邊沿敏感,上電后為低電平有效。該信號(hào)拉低完成芯片的復(fù)位,低電平保持時(shí)間為0.5 ?滋s乘以配置文件的幀數(shù)。對(duì)Virtex-6芯片,大概幾十毫秒(經(jīng)實(shí)測(cè)在1 ms以?xún)?nèi))。復(fù)位完成后,內(nèi)部INIT_B抬高。

    (2)INIT_B:初始化信號(hào)。為雙向信號(hào),在重啟或者編程初始化(PROGRAM_B=0)過(guò)程中,用來(lái)指示FPGA是否已經(jīng)完成配置初始化。作為輸入信號(hào),將INIT_B拉低來(lái)推遲對(duì)FPGA的配置。一般情況下,只需在PROGRAM_B=0后等待一定時(shí)間即可完成初始化。為了簡(jiǎn)化設(shè)計(jì),在本設(shè)計(jì)中INIT_B只用于輸入。

    (3)CSI_B:片選信號(hào)。低電平有效,CSI_B=0表示總線允許。

    (4)RDWR_B:讀寫(xiě)控制信號(hào)。RDWR_B=0表示總線寫(xiě)入,RDWR_B=10表示總線讀出。需要注意的是,拉低RDWR_B信號(hào)之前,必須確認(rèn)CSI_B=0,否則可能會(huì)導(dǎo)致數(shù)據(jù)丟失。

    (5)BUSY:握手信號(hào)。當(dāng)配置時(shí)鐘頻率超過(guò)50 MHz時(shí),利用本信號(hào)控制寫(xiě)入或者讀出速度。

    (6)DONE:配置狀態(tài)指示信號(hào)。數(shù)據(jù)正確配置后,DONE=1。

         圖 1給出了連續(xù)并行配置的時(shí)序圖。

 

圖1  SelectMAP 模式連續(xù)配置時(shí)序圖

 

 

2.2 基本思想與硬件設(shè)計(jì)原理

    由表1和圖1可以看出,F(xiàn)PGA在CSI_B、PROGRAM_B、RDWR_B以及INIT_B的控制下,在時(shí)鐘CCLK的上升沿時(shí)刻將配置數(shù)據(jù)寫(xiě)入FPGA。以上4個(gè)控制信號(hào)可以利用PowerPC的GPIO口生成,雖然CCLK也可以用GPIO生成,但是由于GPIO口輸出的數(shù)據(jù)和總線數(shù)據(jù)都要經(jīng)過(guò)鎖存、電平轉(zhuǎn)換等,在高速設(shè)計(jì)中,可能會(huì)產(chǎn)生意想不到的結(jié)果,或者為了保證時(shí)序的正確性而犧牲效率??紤]到PowerPC總線進(jìn)行寫(xiě)操作時(shí),其對(duì)應(yīng)的片選信號(hào)LCS以及RDWR信號(hào)都為低電平,而進(jìn)行其他操作時(shí),RDWR為高電平。此外,通過(guò)對(duì)PowerPC的總線控制寄存器進(jìn)行設(shè)置,可以使LCS信號(hào)滯后于RDWR拉高。因此可以將LCS與RDWR進(jìn)行“或操作”產(chǎn)生配置時(shí)鐘CCLK。寫(xiě)命令發(fā)出后,由于LCS滯后于RDWR信號(hào),可以保證數(shù)據(jù)能夠被正確寫(xiě)入FPGA。

    基于以上時(shí)序分析的結(jié)果,設(shè)計(jì)了圖2所示的原理框圖。通過(guò)SATA接口相連的CF卡用來(lái)存放配置數(shù)據(jù),當(dāng)然也可以用SD卡。CF卡或者SD卡可以很方便地從卡座上拔下,使得程序維護(hù)升級(jí)非常方便,甚至非專(zhuān)業(yè)人員都能完成程序的升級(jí)。在調(diào)試過(guò)程中,數(shù)據(jù)可以直接存放在調(diào)試計(jì)算機(jī)中,利用NFS協(xié)議調(diào)試,方便快捷。為了能夠區(qū)分多片F(xiàn)PGA,可以將不同的地址線與LCS、RDWR一起進(jìn)行或運(yùn)算,實(shí)現(xiàn)片選。地址線為高電平時(shí),時(shí)鐘始終為高電平,對(duì)應(yīng)FPGA芯片不被選中(芯片較多的情況下,也可采用譯碼器來(lái)實(shí)現(xiàn)片選)。向相應(yīng)的地址寫(xiě)入數(shù)據(jù),就實(shí)現(xiàn)了片選。需要注意的是,在FPGA配置過(guò)程中,無(wú)需對(duì)地址進(jìn)行操作,地址僅僅是作為片選信號(hào)使用。此外,圖中的數(shù)據(jù)總線不僅在配置期間使用,在訪問(wèn)FPGA時(shí)也要使用。為了更好地利用同一條總線實(shí)現(xiàn)對(duì)FPGA的配置和訪問(wèn),LCS2同時(shí)連接至多片F(xiàn)PGA的片選,在配置期間與其他信號(hào)一起產(chǎn)生配置時(shí)鐘,在訪問(wèn)期間起到片選的作用。圖中的虛線表示在PowerPC訪問(wèn)FPGA時(shí)采用的信號(hào)線,在配置期間不使用。

 

圖2  PowerPC并行配置FPGA原理框圖

 

3 軟件設(shè)計(jì)與實(shí)現(xiàn)

3.1 軟件設(shè)計(jì)要點(diǎn)

    針對(duì)PowerPC、Linux操作系統(tǒng)以及FPGA的特點(diǎn),在軟件設(shè)計(jì)過(guò)程中,應(yīng)注意以下幾點(diǎn):

    (1)利用內(nèi)存映射函數(shù)替代驅(qū)動(dòng)程序設(shè)計(jì)。通常情況下,Linux內(nèi)核通過(guò)驅(qū)動(dòng)程序來(lái)實(shí)現(xiàn)對(duì)外部設(shè)備的輸入/輸出操作。利用PowerPC對(duì)FPGA進(jìn)行并行配置,當(dāng)然也可以利用驅(qū)動(dòng)程序來(lái)實(shí)現(xiàn)。不過(guò)由于驅(qū)動(dòng)程序編寫(xiě)比較繁瑣,使用起來(lái)也不夠靈活,所以可以利用Linux內(nèi)存映射函數(shù)mmap[6],將包括系統(tǒng)配置寄存器等相關(guān)寄存器在內(nèi)的一塊內(nèi)核空間映射到用戶(hù)空間的一段內(nèi)存區(qū)域。映射成功后,用戶(hù)對(duì)這段內(nèi)存區(qū)域的操作可以直接反映到內(nèi)核空間。具體來(lái)說(shuō),經(jīng)過(guò)映射后,用戶(hù)可以通過(guò)對(duì)相應(yīng)的內(nèi)存地址進(jìn)行操作,實(shí)現(xiàn)對(duì)系統(tǒng)配置寄存器、GPIO寄存器、本地總線控制器寄存器等的配置和訪問(wèn),而無(wú)需利用驅(qū)動(dòng)程序,使得配置程序得以簡(jiǎn)化。

    (2)妥善處理字節(jié)序和比特序問(wèn)題。在FPGA配置過(guò)程中,因涉及到眾多軟硬件,要特別注意接口過(guò)程中的字節(jié)序和比特序問(wèn)題。以MPC8377 PowerPC為例,其為大端、最低有效位LSB(Least Significant Bit)在前模式,而Virtex-6系列FPGA為小端、LSB在前模式。大端模式是在寫(xiě)內(nèi)存時(shí)在內(nèi)存低地址處存放數(shù)據(jù)的高位字節(jié),高地址處存放低位字節(jié);而讀內(nèi)存時(shí),將內(nèi)存的高位地址視為目標(biāo)數(shù)據(jù)的低字節(jié),將低位地址視為高字節(jié)。小端模式正好相反。ISE生成的.bin文件與FPGA一致,也為小端模式。因此通過(guò)PowerPC將數(shù)據(jù)下載至FPGA時(shí)必須要進(jìn)行大小端轉(zhuǎn)換,即字節(jié)序轉(zhuǎn)換。因PowerPC和FPGA均為L(zhǎng)SB在前模式,因此無(wú)需作比特序的轉(zhuǎn)換。也就是說(shuō),利用ISE生成.bin文件時(shí)不需做bit swap處理。

    (3)正確配置寄存器。使用本地總線首先必須要正確配置本地總線的本地訪問(wèn)窗口基址寄存器、本地訪問(wèn)窗口屬性寄存器、本地總線控制基寄存器和可選寄存器。若片選信號(hào)為L(zhǎng)CS2,則這4個(gè)寄存器分別為:LBLAWBAR2、LBLAWAR2、BR2和OR2。其中,LBLAWBAR2就是本地訪問(wèn)窗口的基址,可以直接設(shè)置為L(zhǎng)CS2對(duì)應(yīng)的地址;LBLAWAR2是本地訪問(wèn)窗口屬性寄存器,這個(gè)寄存器主要定義了允許訪問(wèn)窗口的大小,主要由需要配置的FPGA片選對(duì)應(yīng)的地址空間決定;BR2主要是對(duì)總線的位寬進(jìn)行設(shè)置,位寬有8 bit、16 bit以及32 bit 3種選擇;OR2也比較重要,決定了外部存儲(chǔ)器寫(xiě)訪問(wèn)期間LCS2 和LWE 何時(shí)無(wú)效。舉例來(lái)說(shuō),在bit21 22=00的情況下,對(duì)bit20置位,可使LWE提前總線1/4個(gè)周期。這樣可以確保在LCS2拉高前,數(shù)據(jù)能夠被正確寫(xiě)入FPGA。當(dāng)然,也可以對(duì)bit21 22通過(guò)設(shè)置其他的值,實(shí)現(xiàn)LCS2的不同延時(shí)。

3.2 軟件流程

    按照上述思想,給出了軟件流程如圖3所示。

4 調(diào)試要點(diǎn)

    (1)注意大小端問(wèn)題。利用MPC8377對(duì)FPGA進(jìn)行配置時(shí),總線寬度可以是8 bit、16 bit、32 bit之一。8 bit模式下不用關(guān)心字節(jié)序,16 bit和32 bit必須進(jìn)行大小端轉(zhuǎn)換。關(guān)注同步字即可確定字節(jié)序和比特序。在實(shí)際的調(diào)試過(guò)程中,應(yīng)抓住一點(diǎn),對(duì)于FPGA,其引腳上的同步字為D[31..0]=0x5599AA66。若FPGA和PowerPC的引腳是順序?qū)?yīng)的(即D0對(duì)D0,D31對(duì)D31),那么對(duì)于PowerPC,需要在總線上傳輸?shù)臄?shù)據(jù)應(yīng)該是0x665599AA。所以需要將.bin配置文件中的同步字0xAA995566進(jìn)行大小端轉(zhuǎn)換后變?yōu)?x665599AA,然后通過(guò)PowerPC傳送到FPGA對(duì)應(yīng)的引腳上即可。

    (2)善于利用JTAG口。FPGA的JTAG既可以用來(lái)下載數(shù)據(jù),也可以借助它來(lái)查看FPGA配置狀態(tài)寄存器的值,其中包括總線寬度、配置模式等參數(shù)。在利用PowerPC對(duì)FPGA進(jìn)行配置的過(guò)程中,關(guān)注配置寄存器的相關(guān)狀態(tài),可以得到對(duì)應(yīng)的信息。比如配置模式在INIT信號(hào)由低變高時(shí)被采樣,總線寬度是在檢測(cè)到位寬信號(hào)后被采樣。若位寬顯示正常,說(shuō)明配置數(shù)據(jù)已能被正確寫(xiě)入FPGA;若配置還是錯(cuò)誤,就應(yīng)該檢查字節(jié)序、配置文件等是否正確。

    (3)利用NFS協(xié)議調(diào)試。調(diào)試過(guò)程中,可以將程序放在本地計(jì)算機(jī)中進(jìn)行編譯,通過(guò)NFS協(xié)議,PowerPC可以運(yùn)行存放在主機(jī)中的文件。等調(diào)試完畢后,可將應(yīng)用程序、配置文件一并存入外接的CF卡中,以提高調(diào)試效率。

    此外,在調(diào)試階段可以將PROGRAM、INIT等信號(hào)間隔適當(dāng)拉大,調(diào)整OR寄存器的值,適當(dāng)降低配置速率,等配置成功后,再對(duì)相關(guān)值進(jìn)行調(diào)整和優(yōu)化,以提高配置速度。

    本文給出了一種利用PowerPC對(duì)多片F(xiàn)PGA進(jìn)行并行配置的簡(jiǎn)單方法。經(jīng)實(shí)測(cè),配置1片Virtex-6 XC6VS-

X475T芯片,若采用JTAG模式,需要48 s,而采用文中給出的并行配置方案,可將配置時(shí)間縮短至1 s左右,極大地縮短了配置時(shí)間。該方法也同樣適用于Xilinx其他系列的芯片以及Altera系列芯片。

參考文獻(xiàn)

[1] Altera.Device configuration schemes[EB/OL].(2013-10-08) [2014-03-30].http://www.altera.com.cn/support/devices/configuration/schemes/cfg-matrix.html.

[2] Xilinx.Configuration for Virtex-6 FPGA[EB/OL].(2013-08-25)[2014-03-30].http://www.xilinx.com/products/design_resources/config_sol/v6/config_v6.htm.

[3] 葛飛,何輔云,夏玉寶.FPGA被動(dòng)并行配置控制器的研究與實(shí)現(xiàn)[J].合肥工業(yè)大學(xué)學(xué)報(bào)(自然科學(xué)版),2008,30(4):39-41.

[4] 趙勇,孟李林,李小龍.Cyclone IV系列FPGA的配置方式及其工程應(yīng)用[J].微型機(jī)與應(yīng)用,2013,32(19):25-28.

[5] Xilinx.UG360 Virtex-6 FPGA configuration user guide[EB/OL].(2013-11-27)[2014-03-30].http://www.xilinx.com/support/documentation/user_guides/ug360.pdf.

[6] 韓超,魏治宇,廖文江.嵌入式Linux上的C語(yǔ)言編程實(shí)踐[M].北京:電子工業(yè)出版社,2009.

(收稿日期:2014-04-22)  


此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。