1.目標(biāo)
將ASIC設(shè)計代碼做一定轉(zhuǎn)換,變成FPGA的輸入,供FPGA原型驗證使用。
2.ASIC轉(zhuǎn)FPGA基本原理
ASIC和FPGA的物理結(jié)構(gòu)不同,ASIC是基于標(biāo)準(zhǔn)單元庫,而FPGA是基于廠商提供的宏單元模塊(查找表),這就導(dǎo)致了如果要進(jìn)行FPGA原型驗證,ASIC代碼就必須做一定的轉(zhuǎn)換,才能夠移植到FPGA上。這種轉(zhuǎn)換,只是代碼層次上的轉(zhuǎn)換,用FPGA可以實現(xiàn)的方式去替換ASIC中部分代碼,功能并沒有改變。 因此首先要進(jìn)行寄存器傳輸級(RTL)代碼的修改。然后進(jìn)行FPGA器件映射,映射工具根據(jù)設(shè)置的約束條件對RTL代碼進(jìn)行邏輯優(yōu)化,并針對選定的FPGA器件的基本單元映射生成網(wǎng)表。接著進(jìn)行布局布線,生成配置文件和時序報告等信息。當(dāng)時序能滿足約束條件時,就可以利用配置文件進(jìn)行下載。如果時序不能滿足約束,可通過軟件報告時序文件來確認(rèn)關(guān)鍵路徑,進(jìn)行時序優(yōu)化??梢酝ㄟ^修改約束條件,或者修改RTL代碼來滿足要求。
3 需要轉(zhuǎn)換的代碼
存儲單元是必須進(jìn)行代碼轉(zhuǎn)換的,ASIC中的存儲單元通常用代工廠所提供的Memory Compiler來定制,它可以生成.gsp、.v等文件。.v文件只用來做功能仿真,通常不能綜合。而最后流片時,只需將標(biāo)準(zhǔn)提供給代工廠。如果直接將ASIC代碼中的存儲單元作為FPGA的輸入,是綜合不出來的,會被當(dāng)成一個無用的black box,還會報缺失文件的錯誤;而FPGA廠商其實已經(jīng)提供了經(jīng)過驗證并優(yōu)化的存儲單元。因此存儲單元要進(jìn)行代碼轉(zhuǎn)換。
按照ASIC設(shè)計中RAM、ROM的設(shè)計信息,在vivado中生成功能相同的存儲單元IP核,并在設(shè)計文件中進(jìn)行替換。注意,替換不代表改變其功能,替換的過程中,要了解代工廠所用存儲單元的接口信號,以及讀寫有效信號。位寬等,vivado中一般存儲的IP核都是高有效信號。數(shù)字電路中,時鐘是整個電路最重要、最特殊的信號。在 ASIC中,用布局布線工具來放置時鐘樹,利用代工廠提供的 PLL進(jìn)行時鐘設(shè)計。 FPGA中通常已經(jīng)配置一定數(shù)量的 PLL 宏單元,并有針對時鐘優(yōu)化的全局時鐘網(wǎng)絡(luò),一般是經(jīng)過 FPGA的特定全局時鐘管腳進(jìn)入 FPGA內(nèi)部,后經(jīng)過全局時鐘 BUFG適配到全局時鐘網(wǎng)絡(luò)的,這樣的時鐘網(wǎng)絡(luò)可以保證相同的時鐘沿到達(dá)芯片內(nèi)部每一個觸發(fā)器的延遲時間差異是可以忽略不計的。因此時鐘單元也是需要進(jìn)行轉(zhuǎn)換的。
當(dāng)前,ASIC設(shè)計中并沒有放置PLL,不需替換,為了便于仿真,使用vivado 生成時鐘單元的IP核。在tb_top里面定義了一對差分時鐘(時鐘頻率100Mhz,差分時鐘互為取反)。使用IBUFDS (差分輸入的緩沖器)差分信號緩沖器,支持低壓差分信號,進(jìn)行緩沖。然后,送入到生成的時鐘IP核里,時鐘IP核定義了輸入和輸出的時鐘關(guān)系,以及分頻系數(shù),輸入100Mhz,按照分頻的系數(shù),輸出80,80,40,20的時鐘頻率。由于實現(xiàn)結(jié)構(gòu)上的不同,F(xiàn)PGA器件內(nèi)部的單元延時遠(yuǎn)大于ASIC的基本門單元延時。導(dǎo)致在同樣設(shè)計的情況下,ASIC可以滿足其時序,而FPGA有可能無法滿足。為了驗證的需要,修改ASIC代碼實現(xiàn)FPGA原型時,對ASIC實現(xiàn)的流水結(jié)構(gòu),在FPGA實現(xiàn)時需要適當(dāng)增加流水。比如在一個很長的組合邏輯路徑中加入寄存器。如圖1所示。

在FPGA設(shè)計中要使用時鐘使能代替門控時鐘。在ASIC的設(shè)計中,為了減少功耗,使用門控時鐘(clock gating),門控時鐘的結(jié)構(gòu)如圖2
所示。當(dāng)寫有效時,數(shù)據(jù)才寫進(jìn)存儲器,那么只有寫有效時,寄存器才會發(fā)生翻轉(zhuǎn),這樣可以減少功耗。

由于設(shè)計的異步特性,對于FPGA來說,使用這種門控時鐘容易產(chǎn)生毛刺,導(dǎo)致數(shù)據(jù)不正確。所以在FPGA設(shè)計中,使用有使能信號的電路來替換門控時鐘電路??芍苯永脁ilinx已有模塊,BUFGCE,是帶有時鐘使能端的全局緩沖, 它有一個輸入I、一個使能端CE和一個輸出端O。只有當(dāng)BUFGCE的使能端CE有效(高電平)時,BUFGCE才有輸出, 與全局時鐘資源相關(guān)的Xilinx器件原語包括:IBUFG、IBUFGDS、BUFG、BUFGP、BUFGCE、BUFGMUX、BUFGDLL和DCM等。(具體信息詳見:http://blog.163.com/fangfangwife@126/blog/static/69522522200874103923525/)
4.具體過程
1.傳入設(shè)計文件
添加不加約束,DC綜合后的設(shè)計文件,好處就是在DC綜合過程中,會把設(shè)計文件調(diào)用一些庫文件也綜合進(jìn)去,避免了發(fā)生缺失文件這樣的問題。(DC腳本中含有工藝廠商的庫文件),綜合的時候會辨認(rèn)出module中調(diào)用的單元;如DW_minmax(ps:不同參數(shù)的DW_minmax,也是可以識別出來的)
利用腳本,按照filelist,把所有filelist上的module合成一個.v文件,這樣做的好處就是,用chipscope仿真的時候便于觀察,容易定位到問題;壞處就是,設(shè)計文件調(diào)用其他地方的module時,容易發(fā)生缺失文件的問題。(需要注意:同樣的module也有可能傳入的參數(shù)不同)
做法:使用DC綜合后的設(shè)計文件。IP核仿真出現(xiàn)問題,則用.v文件替換,查找原因;
2 傳入設(shè)計文件過程中遇到的問題總結(jié)
-
在Messags 窗口,常會出現(xiàn)一些Critical Warning,如不能打開include file 。這是因為vivado編譯的時候,找不到include的文件。雖然說,已經(jīng)把綜合后的文件或.v文件全都放進(jìn)去了,但vivado只是個工具,它只會去尋找缺少的文件名,而不會檢測大文件是否內(nèi)部包含;.
解決方法:首先要在project setting 和 simulation setting中設(shè)置include file 的search path,可以手動添加,也可以利用tcl腳本添加;手動添加 到所需文件的文件夾即可;利用tcl腳本添加,一次要寫入全部的include file的search path,因為,每寫一次都會覆蓋掉上次所設(shè)置的search path。
腳本命令如下: project setting: set_property include_dirs{path1 path2 ...}[current_fileset] simulation setting: set_property include_dirs{path1 path2 ...}[get_filesets sim_1] ps:sim_1 是當(dāng)前仿真工程的名字DW_minmax module缺失的問題:
DW_minmax module缺失,找到設(shè)計文件中所有的DW_minmax模塊,確認(rèn)傳入?yún)?shù)的類型,對每種傳入?yún)?shù)類型的DW_minmax模塊單獨進(jìn)行DC綜合,然后,傳入到FPGA.如果使用的是DC綜合后的.getch文件,不會出現(xiàn)該問題。
RAM替換的問題,有些RAM存在BWEB 寫有效信號(帶B、N的一般都是低有效信號,帶A的為高有效信號) 總結(jié)如下:
CEB信號;1:RAM處于idle狀態(tài) ; 0:RAM被使能 WEB信號;讀寫控制信號,1:讀,0:寫 BWEB信號:寫有效信號,BWEB[0]為0時,數(shù)據(jù)才能被寫入。xilinx 生成的IP核通常只有ena、wea,即使能信號、讀寫控制信號。遇到這種情況,一般處理方法:例化IP核時,可以生成寫有效信號wea;例如72bit位寬,可以生成[8:0]wea信號。此時,ena可以看成,讀寫控制信號;ena=1代表寫操作,ena為0代表讀操作;wea此時代表寫有效信號。
連接關(guān)系: .ena(~WEB),.wea(~BWEB)使用IP生成器生成RAM、ROM等存儲器的時候, 除了參數(shù)設(shè)置外,還需要輸入一個名為.coe的文件來初始化塊存儲器的內(nèi)容。
3.搭建FPGA最小系統(tǒng)
將ASIC轉(zhuǎn)FPGA,首先需要先搭一個A7最小系統(tǒng)。A7最小系統(tǒng)仿真、綜合成功后,再由上而下,添加AHB總線以及AHB總線上的QSPI、SDMMC、NFC、SMC、DEVC、GMAC、USB等IP核,仿真綜合成功后,最后添加兩條APB總線,以及APB總線上掛載的SPI、I2C、UART、TIMER、GPIO、CAN、WDT等IP核.
最小系統(tǒng)包括時鐘單元、復(fù)位單元、RAM、ROM、總線AXI以及CPU(A7),具體結(jié)構(gòu)如圖所示:

在搭建FPGA系統(tǒng)時,需要創(chuàng)建一個全局define.v,該文件主要是定義IP是否掛在FPGA系統(tǒng)上。因為,硬件部門常常只針對單個IP進(jìn)行驗證工作,簡單的驗證UART,只需要在define.v中定義下UART即可,便于靈活控制以及節(jié)省綜合、實現(xiàn)的時間,這個常用到宏編譯命令`ifdef 。