莊雪亞,蔡 翔
(中國(guó)電子科技集團(tuán)公司第五十八研究所,江蘇無(wú)錫 214072)
目前FPGA規(guī)模越來(lái)越大,配置時(shí)間很長(zhǎng),而且在使用FPGA時(shí),每個(gè)項(xiàng)目對(duì)FPGA內(nèi)模塊所使用的資源各有不同,絕大部分時(shí)候不會(huì)用完所有資源,即使要全部使用完資源也會(huì)存在布線布不通的問(wèn)題[1]。故大部分時(shí)候只是使用了FPGA內(nèi)的部分資源。目前的設(shè)計(jì)中,不管使用FPGA內(nèi)部多少資源,都會(huì)為每一個(gè)配置位生成一位配置數(shù)據(jù),軟件生成的配置數(shù)據(jù)大小也是固定的,用來(lái)存儲(chǔ)配置數(shù)據(jù)的配置芯片也必須有相應(yīng)大小的容量,下載配置數(shù)據(jù)的速度也是固定的。如果把空閑資源默認(rèn)配置為零,不再為空閑資源專門生成配置數(shù)據(jù),就可以減少配置數(shù)據(jù)的大小,用更小的存儲(chǔ)器來(lái)存儲(chǔ)配置數(shù)據(jù),相應(yīng)的下載時(shí)間也會(huì)縮短。
FPGA 內(nèi)部有 IOB、BRAM、CLB、DSP等資源,軟件根據(jù)不同工程使用FPGA內(nèi)部不同資源生成不同的配置數(shù)據(jù),這里稱為bitstream,如圖1所示存儲(chǔ)在Flash(11)內(nèi)。CTRL(1)是數(shù)據(jù)下載的控制系統(tǒng),用來(lái)解析bitstream中每個(gè)數(shù)據(jù)的具體含義,并協(xié)調(diào)控制DSR(2)、ADDR(3)。DSR(2)是一個(gè)數(shù)據(jù)移位寄存器,因?yàn)閿?shù)據(jù)通過(guò)CTRL(1)出來(lái)的數(shù)據(jù)是32位寬的,需要通過(guò)DSR(2)實(shí)現(xiàn)將1312位寬的數(shù)據(jù)提供給配置模塊SRAM的BL(Bit_Line)上。ADDR(3)是一個(gè)地址譯碼器,通過(guò)CTRL(1)解析出來(lái)的地址譯出相應(yīng)的WL(Word_Line),提供給配置模塊SRAM的WL上。當(dāng)BL準(zhǔn)備好1312位數(shù)據(jù)時(shí),打開(kāi)WL,即1312位數(shù)據(jù)會(huì)被成功配置到配置模塊的SRAM內(nèi)。
圖1 傳統(tǒng)配置流程
目前的控制系統(tǒng)設(shè)計(jì)都是從左到右依次打開(kāi)WL,也即從左到右依序?yàn)榕渲媚KSRAM配置bitstream。沒(méi)用到的那部分資源,軟件生成的bitstream對(duì)應(yīng)部分就是0,用到的資源軟件會(huì)生成有意義的具體值,這樣任何時(shí)候生成的bitstream大小固定且比較大,每配置一個(gè)地址DSR都需要移位1312位,這樣配置時(shí)間也是固定的,且用時(shí)較長(zhǎng)[2]。如圖2所示,本加速配置設(shè)計(jì)是先配置空閑資源,也即先把所有全零配置結(jié)束后再配置實(shí)際用到的資源,見(jiàn)圖2中STEP 1,Bitstream中先給出空閑資源的地址,此時(shí)CTRL(1)控制DSR(2)使BL上一直保持著1312位0,ADDR(3)根據(jù)地址依次打開(kāi)WL,把整行配置完。這樣做的好處是bitstream中不用再去存儲(chǔ)每個(gè)配置位是0的數(shù)據(jù),DSR(2)也不用花時(shí)間去移位得到1312位數(shù)據(jù),節(jié)省了配置時(shí)間,見(jiàn)圖2中STEP 2,配置完未使用的資源后,就需要開(kāi)始依次配置用到的資源,bitstream先給出數(shù)據(jù)通過(guò)DSR(2)移位搜集完1312位數(shù)據(jù)后,bitstream就會(huì)給出一個(gè)地址,ADDR(3)解析出相應(yīng)的WL,也即一幀的配置位被配置完成。這樣從左到右依次配置完所有的配置位。
圖2 加速配置流程
如圖3所示,CTRL通過(guò)下載模式來(lái)選擇哪種數(shù)據(jù)接口給FPGA下載數(shù)據(jù),接口包括JTAG、BPI、Selectmap等。數(shù)據(jù)解析模塊根據(jù)收到的數(shù)據(jù)進(jìn)行解析是寄存器數(shù)據(jù)還是配置數(shù)據(jù),如果是控制寄存器數(shù)據(jù)會(huì)存到控制寄存器里,并通過(guò)控制信號(hào)產(chǎn)生模塊產(chǎn)生對(duì)應(yīng)的控制信號(hào);如果是地址寄存器數(shù)據(jù)就會(huì)存到地址寄存器并傳給地址產(chǎn)生模塊;如果是配置數(shù)據(jù)就直接傳給DSR。在傳送配置數(shù)據(jù)的同時(shí)會(huì)有一個(gè)地址產(chǎn)生模塊,產(chǎn)生地址給ADDR模塊。我們?cè)谑褂眉铀倥渲玫臅r(shí)候,其實(shí)就是通過(guò)bitstream來(lái)控制寄存器,讓DSR和ADDR協(xié)調(diào)工作。根據(jù)加速配置原理,我們?cè)谙螺dbitstream的時(shí)候,只要先配置控制寄存器,把空閑資源的地址下到地址寄存器,再通過(guò)控制寄存器讓DSR先準(zhǔn)備好1312位的0,再打開(kāi)相應(yīng)的地址,通過(guò)不停地更新地址寄存器,就可以完成空閑資源的配置。
DSR有41個(gè)圖4中的移位結(jié)構(gòu)級(jí)聯(lián)組成一組,一共用32組。DSR的移位結(jié)構(gòu)由多路開(kāi)關(guān)型鎖存器和觸發(fā)器組成。在Shift_EN和ShiftN_EN的選擇下,對(duì)32 bit數(shù)據(jù)進(jìn)行移位處理,每一位數(shù)據(jù)通過(guò)類似結(jié)構(gòu)可移位41次。當(dāng)移位滿41次時(shí),圖4中由Program_EN/ProgramN_EN控制的MUX一次性全部輸出。
圖3 CTRL框圖
圖4 DSR移位結(jié)構(gòu)
地址譯碼電路從最左邊開(kāi)始啟動(dòng),最先啟動(dòng)的是幀地址,隨后是列地址、BLOCK地址、上/下部分,最后是塊類型。塊類型==000,地址譯碼電路模塊給CLB/IO/DSP/CLK/BlockRAM互聯(lián)提供字線;塊類型==001,地址譯碼電路模塊給Block RAMs內(nèi)容提供字線。
幀地址傳至目標(biāo)幀(最后一幀)后復(fù)位,幀地址開(kāi)始遞增。當(dāng)幀地址傳至最右列時(shí),BLOCK地址開(kāi)始遞增。芯片下半部分重復(fù)以上過(guò)程。
FPGA中的每一個(gè)配置幀都有特殊的32位地址,主要分為五部分,如圖5所示,具體每位的含義見(jiàn)表1。ADDR是地址解析模塊,CTRL有一個(gè)地址寄存器,通過(guò)bistream可以設(shè)置這個(gè)地址寄存器,通過(guò)表1的規(guī)則可以分解出并具體定位到FPGA內(nèi)的每個(gè)配置SRAM。地址解析模塊可以根據(jù)CTRL解析過(guò)來(lái)的地址進(jìn)行對(duì)比定位,在每1312個(gè)配置SRAM會(huì)配一個(gè)
地址解析。
圖5 32位幀地址分布
表1 地址譯碼電路描述
采用基于Verilog行為級(jí)描述的RTL代碼,建立整個(gè)仿真驗(yàn)證環(huán)境,利用Cadence公司仿真工具NC進(jìn)行設(shè)計(jì)仿真驗(yàn)證[3]。如圖6所示,D為輸入給控制系統(tǒng)CTRL的32位寬數(shù)據(jù),DSR_SHIFT_EN為數(shù)據(jù)計(jì)數(shù)器使能信號(hào),只有下載需用資源的配置數(shù)據(jù)才使能,當(dāng)下載的是空閑資源的配置數(shù)據(jù)時(shí)該信號(hào)保持為零,因?yàn)榇藭r(shí)的DSR會(huì)自動(dòng)產(chǎn)生1312位個(gè)0,不需要DSR移位產(chǎn)生。在DSR_SHIFT_EN使能時(shí),每41個(gè)cclk控制DSR把1312位數(shù)據(jù)輸出到SRAM的位線上 。 MINOR_ADDR、COLUMN_ADDR、ROW_CNT、BLOCK_TYPE、TOP_B分別為字線地址、列地址、行地址、塊類型地址、上下分區(qū)地址。當(dāng)FPGA上電內(nèi)部初始化結(jié)束,拉高INITB_I,開(kāi)始接受數(shù)據(jù),首先下載空閑資源的配置數(shù)據(jù),圖中所示因?yàn)槭褂玫馁Y源比較少,大部分時(shí)間都是在下載空閑資源,下載的過(guò)程中DSR_SHIFT_EN一直保持0不變,也即在下載空閑資源的配置數(shù)據(jù)時(shí)DSR不需要移位,默認(rèn)就是輸出1312位個(gè)0,只需要地址線不斷更新就行。圖6中DSR_SHIFT_EN為高電平時(shí)就是在下載需用資源的配置數(shù)據(jù)。因?yàn)橄螺d過(guò)程是以行為單位,每一行都是先下載空閑資源再下載需用資源的配置數(shù)據(jù),最后下載結(jié)束CRC校驗(yàn)正確,內(nèi)部成功下載標(biāo)志EOS變高電平。
如圖7所示為加速配置波形與正常配置波形的比較,長(zhǎng)方形框里是加速配置波形,長(zhǎng)方形框外是正常配置波形??梢钥闯鰧?duì)于同一個(gè)工程生成的配置數(shù)據(jù)加速配置時(shí)間是正常配置時(shí)間的六分之一。
圖6 加速配置仿真波形
圖7 加速配置與正常配置波形對(duì)比
本文基于FPGA傳統(tǒng)下載配置數(shù)據(jù),在控制系統(tǒng)內(nèi)通過(guò)控制地址寄存器和控制DSR初始數(shù)據(jù)來(lái)達(dá)到加速配置的目的。使用的時(shí)候配合軟件先產(chǎn)生空閑資源的地址,再生成需用資源的數(shù)據(jù)及地址。通過(guò)先配置空閑資源的配置數(shù)據(jù),再配置需用資源的配置數(shù)據(jù)實(shí)現(xiàn)加速配置功能,并兼容原有功能。利用Cadence公司仿真工具NC進(jìn)行設(shè)計(jì)仿真驗(yàn)證,驗(yàn)證結(jié)果證明加速配置效果明顯,特別對(duì)于使用資源不多的工程,加載速度能加快很多倍。
參考文獻(xiàn):
[1]褚振勇,齊亮,田紅心,高楷娟.FPGA設(shè)計(jì)及應(yīng)用[M].第2版.西安:西安電子科技大學(xué)出版社,2006:250-301.
[2]周國(guó)娟,金紅莉.靈活實(shí)用的FPGA配置的設(shè)計(jì)[J].中國(guó)高新技術(shù)企業(yè),2008(8):73-74.
[3](美)Rabaey,J M.數(shù)字集成電路——電路、系統(tǒng)與設(shè)計(jì)[M].周潤(rùn)德,等譯.第二版.北京:電子工業(yè)出版社,2004:319-357.