原型驗證過程中的ASIC到FPGA的代碼轉(zhuǎn)換
在對ASIC設(shè)計進行FPGA原型驗證時,由于物理結(jié)構(gòu)不同,ASIC的代碼必須進行一定的轉(zhuǎn)換后才能作為FPGA的輸入
現(xiàn)代集成電路設(shè)計中,芯片的規(guī)模和復(fù)雜度正呈指數(shù)增加。尤其在ASIC設(shè)計流程中,驗證和調(diào)試所花的時間約占總工期的70%。為了縮短驗證周期,在傳統(tǒng)的仿真驗證的基礎(chǔ)上,涌現(xiàn)了許多新的驗證手段,如斷言驗證、覆蓋率驅(qū)動的驗證,以及廣泛應(yīng)用的基于現(xiàn)場可編程器件(FPGA)的原型驗證技術(shù)。
采用FPGA原型技術(shù)驗證ASIC設(shè)計,首先需要把ASIC設(shè)計轉(zhuǎn)化為FPGA設(shè)計。但ASIC是基于標準單元庫,F(xiàn)PGA則是基于查找表,ASIC和FPGA物理結(jié)構(gòu)上的不同,決定了ASIC代碼需要一定的修改才能移植到FPGA上。但應(yīng)該注意到這只是由于物理結(jié)構(gòu)不同而對代碼進行的轉(zhuǎn)換,并不改變其功能,因此對代碼的這種修改只能限制在一定范圍內(nèi)。
基本原理
- 基于FPGA原型驗證的流程
由于FPGA的可編程特性,基于FPGA的原型技術(shù)已經(jīng)被廣泛采用。和仿真軟件相比,F(xiàn)PGA的硬件特性可以讓設(shè)計運行在較高的頻率上,加速仿真。另一方面,可以在ASIC芯片設(shè)計前期并行設(shè)計外圍電路及應(yīng)用軟件,縮短了芯片驗證周期。
FPGA原型驗證和其他驗證方法是不同的,任何一種其他驗證方法都是ASIC驗證中的一個環(huán)節(jié),而FPGA驗證卻是一個過程。由于FPGA與ASIC在結(jié)構(gòu)、性能上各不相同,ASIC是基于標準單元庫,F(xiàn)PGA用的是廠商提供的宏單元模塊,因此首先要進行寄存器傳輸級(RTL)代碼的修改。然后進行FPGA器件映射,映射工具根據(jù)設(shè)置的約束條件對RTL代碼進行邏輯優(yōu)化,并針對選定的FPGA器件的基本單元映射生成網(wǎng)表。接著進行布局布線,生成配置文件和時序報告等信息。當時序能滿足約束條件時,就可以利用配置文件進行下載。如果時序不能滿足約束,可通過軟件報告時序文件來確認關(guān)鍵路徑,進行時序優(yōu)化。可以通過修改約束條件,或者修改RTL代碼來滿足要求。
- 需要轉(zhuǎn)換的代碼
- 存儲單元
存儲單元是必須進行代碼轉(zhuǎn)換的,ASIC中的存儲單元通常用代工廠所提供的Memory Compiler來定制,它可以生成.gsp、.v等文件。.v文件只用來做功能仿真,通常不能綜合。而最后流片時,只需將標準提供給代工廠。如果直接將ASIC代碼中的存儲單元作為FPGA的輸入,通常綜合器是綜合不出來的,即使能綜合出來,也要花費很長時間,并且資源消耗多、性能不好。而FPGA廠商其實已經(jīng)提供了經(jīng)過驗證并優(yōu)化的存儲單元。因此存儲單元要進行代碼轉(zhuǎn)換。
- 時鐘單元
數(shù)字電路中,時鐘是整個電路最重要、最特殊的信號。在ASIC中,用布局布線工具來放置時鐘樹,利用代工廠提供的PLL進行時鐘設(shè)計。FPGA中通常已經(jīng)配置一定數(shù)量的PLL宏單元,并有針對時鐘優(yōu)化的全局時鐘網(wǎng)絡(luò),一般是經(jīng)過FPGA的特定全局時鐘管腳進入FPGA內(nèi)部,后經(jīng)過全局時鐘BUF適配到全局時鐘網(wǎng)絡(luò)的,這樣的時鐘網(wǎng)絡(luò)可以保證相同的時鐘沿到達芯片內(nèi)部每一個觸發(fā)器的延遲時間差異是可以忽略不計的。因此時鐘單元也是需要進行轉(zhuǎn)換的。
- 增加流水
由于實現(xiàn)結(jié)構(gòu)上的不同,F(xiàn)PGA器件內(nèi)部的單元延時遠大于ASIC的基本門單元延時。導(dǎo)致在同樣設(shè)計的情況下,ASIC可以滿足其時序,而FPGA有可能無法滿足。為了驗證的需要,修改ASIC代碼實現(xiàn)FPGA原型時,對ASIC實現(xiàn)的流水結(jié)構(gòu)在FPGA實現(xiàn)時需要適當增加流水。比如在一個很長的組合邏輯路徑中加入寄存器。如圖1所示。
圖1 增加流水
- 同步設(shè)計
在FPGA設(shè)計中,同步設(shè)計是應(yīng)該遵循的重要原則。異步設(shè)計容易導(dǎo)致電路處于亞穩(wěn)態(tài),產(chǎn)生毛刺。當從ASIC設(shè)計轉(zhuǎn)向FPGA設(shè)計時,應(yīng)該進行仔細的同步。具體體現(xiàn)在主時鐘選取、功能模塊的統(tǒng)一復(fù)位、同步時序電路設(shè)計。
在FPGA設(shè)計中要使用時鐘使能代替門控時鐘。在ASIC的設(shè)計中,為了減少功耗,使用門控時鐘(clock gating),門控時鐘的結(jié)構(gòu)如圖2所示。當寫有效時,數(shù)據(jù)才寫進存儲器,那么只有寫有效時,寄存器才會發(fā)生翻轉(zhuǎn),這樣可以減少功耗。
圖2 門控時鐘示意圖
由于設(shè)計的異步特性,對于FPGA來說,使用這種門控時鐘容易產(chǎn)生毛刺,導(dǎo)致數(shù)據(jù)不正確。所以在FPGA設(shè)計中,使用有使能信號的電路來替換門控時鐘電路。可以在寄存器前面加上MUX來實現(xiàn)時鐘使能信號,如圖3所示。現(xiàn)在的FPGA廠商則提供可以直接有使能,同步SET和RESET引腳的寄存器,如圖4所示。
圖3 用MUX生成時鐘使能信號
圖4 FPGA內(nèi)帶有時鐘使能的寄存器
- 充分利用FPGA中已有的IP核
FPGA廠商及第三方廠商已經(jīng)實現(xiàn)并優(yōu)化了很多典型的IP核,例如Xilinx提供了基礎(chǔ)邏輯、總線接口與I/O、視頻與圖像處理、數(shù)字信號處理、存儲器接口、微處理器、控制器等大量IP核。在代碼轉(zhuǎn)換時可以充分利用這些資源,對代碼進行優(yōu)化來提高設(shè)計性能。如在FPGA中使用SRL實現(xiàn)移位寄存器,用三態(tài)Buffer來替換三態(tài)總線和三態(tài)MUX,改進算術(shù)單元和有限狀態(tài)機的編碼。
- 存儲單元
代碼轉(zhuǎn)換的實現(xiàn)
結(jié)合同濟大學微電子中心的“32位高性能嵌入式CPU開發(fā)”項目,為了在流片之前確保功能的可靠性,對32位全定制高性能嵌入式CPU bc320進行了原型驗證。
設(shè)計采用Memec Design公司的FF1152開發(fā)板。該板使用了Xilinx的Virtex-Ⅱ Pro系列芯片中的XC2VP30。該FPGA擁有30 816個邏輯單元,相當于有30多萬的ASCI門。另有2Mb的片上Block RAM,644個I/O口。采用了Xilinx的全自動、完整的集成設(shè)計環(huán)境ISE 7.1i,進行FPGA綜合使用的工具是Synplify Pro。
用bc320的ASIC RTL代碼作為FPGA的輸入,具體的代碼轉(zhuǎn)換如下。
- 存儲單元
設(shè)計中用到了很多SRAM,例如Icache中的SRAM。在FPGA實現(xiàn)時根據(jù)所需RAM的寬度、深度和功能來決定采用哪種單元來進行替換。Xilinx提供了片外RAM、Block RAM和LUT RAM。
ISE提供了兩種具體的實現(xiàn)方法:IP生成器(Core Generator)和語言模板(Language Templates)。IP生成器是Xilinx FPGA設(shè)計中的一個重要設(shè)計輸入工具,它提供了大量Xilinx和第三方公司設(shè)計的成熟高效IP核。
這里是用Core Generator來產(chǎn)生了名為塊存儲器(Block Memory)的單口存儲器模塊。Core Generator用圖形化設(shè)置參數(shù)的方式來提供塊存儲器,其界面如圖5所示。塊存儲器的大小根據(jù)向量的大小來制定,一個普通單元向量只需要4個512
評論