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