鑒于芯片設(shè)計(jì)的復(fù)雜度提升, 成功設(shè)計(jì)一個(gè)芯片所牽扯的步驟與過(guò)程也愈加復(fù)雜,所需花費(fèi)的資金也成倍增加,一個(gè)典型的芯片開發(fā)項(xiàng)目的周期和花銷如下所示
可以見(jiàn)到在芯片制造出來(lái)之前,很多精力會(huì)花費(fèi)在RTL代碼驗(yàn)證工作上,另外軟件的相關(guān)開發(fā)工作,也會(huì)在得到芯片前開始,這2方面都需要借助FPGA原形來(lái)模擬芯片的行為,幫助硬件開發(fā)和軟件開發(fā)者,共同提升工作效率。
FPGA原型在數(shù)字芯片設(shè)計(jì)中,基本是必不可少的,原因非常明顯,相比用仿真器,或者加速器等來(lái)跑仿真,F(xiàn)PGA的運(yùn)行速度,更接近真實(shí)芯片,可以配合軟件開發(fā)者來(lái)進(jìn)行底層軟件的開發(fā)。當(dāng)然FPGA原型作為芯片的替身,也是有諸多限制的,比如規(guī)模限制,速度限制,功耗限制,結(jié)構(gòu)限制等,在使用FPGA原型作為芯片的替代時(shí),需要進(jìn)行相應(yīng)的修改,才能完成相應(yīng)功能,甚至有些功能最終無(wú)法覆蓋。
如果對(duì)FPGA中可以映射為ASIC的資源做逐一對(duì)比,我們可以得到這樣的表格。
以上表格看出,除了普通的RTL邏輯以及基本端口,其他的類似存儲(chǔ)時(shí)鐘DSP等,最好都是做手動(dòng)修改進(jìn)行映射,把ASIC設(shè)計(jì)轉(zhuǎn)換為FPGA比較靠譜。
要把一塊ASIC做出FPGA的原型,需要大致一下步驟,
1 FPGA選型
2 做板或者購(gòu)買原型板。
3 將ASIC設(shè)計(jì)轉(zhuǎn)換裝入FPGA
4 調(diào)試啟動(dòng)FPGA原型
5 載入軟件協(xié)同運(yùn)行
6 軟硬件系統(tǒng)驗(yàn)證
下文就按照這些步驟逐一討論:
第一個(gè)就是FPGA的選型問(wèn)題,在選型前,當(dāng)然需要對(duì)ASIC的設(shè)計(jì)進(jìn)行大致的了解,包括以下各方面:
選型問(wèn)題最關(guān)心的幾個(gè)維度:
1 容量 其中包括純邏輯容量,存儲(chǔ)容量,dsp單元容量這些
2 內(nèi)置IP 包括時(shí)鐘,存儲(chǔ)控制,cpu等的硬核
3 接口 普通接口與專用高速接口
4 速度 資源占用率在50%左右時(shí)的速度,一般被用來(lái)評(píng)估原型
其中純邏輯容量,也就是ASIC中組合電路與觸發(fā)器的容量,是可以直接與FPGA中的資源換算的。
比如上圖xilinx V7 2000T中有2.4M FF,大致對(duì)應(yīng)ASIC的2輸入與非門10M gates,如果使用率按照50%算,大概放置5M邏輯門沒(méi)問(wèn)題。
內(nèi)置的存儲(chǔ)器,可以實(shí)現(xiàn)21M的單雙端口ram,rom,fifo等,如果ASIC中使用的存儲(chǔ)稍微多一點(diǎn),也可以用lut實(shí)現(xiàn)部分的存儲(chǔ),替代block ram。
如果使用較多乘加運(yùn)算,也可以映射fpga中的dsp器件實(shí)現(xiàn),具體各種型號(hào)的FPGA包含多少器件,可以參考xilinx文檔。
對(duì)于內(nèi)置ip,最先要考慮的,就是時(shí)鐘模塊MMCM,一般FPGA會(huì)有幾個(gè)到幾十個(gè)時(shí)鐘模塊,例如下表2000T中包含24個(gè)CMTs,也就是24個(gè)PLL和MMCM,每組PLL和MMCM可以對(duì)一個(gè)時(shí)鐘域的時(shí)鐘進(jìn)行分頻倍頻。一般ASIC會(huì)包含多個(gè)時(shí)鐘域,每個(gè)時(shí)鐘域至少需要一個(gè)CMTs對(duì)時(shí)鐘進(jìn)行操作,可以據(jù)此選擇使用哪個(gè)FPGA器件。
如要選擇帶有ARM硬核的FPGA來(lái)模擬ASIC中的ARM核,則需要選擇zynq系列。系統(tǒng)中自研的邏輯,則通過(guò)AXI掛入總線中,當(dāng)然這樣未必能使FPGA與ASIC中的系統(tǒng)完全一致,但是作為一個(gè)圓形,也是足夠的,以下是部分帶有ARM核的FPGA的容量以及相應(yīng)IP情況
對(duì)于接口的限制,一般FPGA的普通接口數(shù)量夠大,不會(huì)成為瓶頸,主要在于ASIC所需的特定接口,在FPGA中是否能夠滿足,很多時(shí)候這些特定接口需要外接phy才能完成相應(yīng)功能。
影響FPGA最終運(yùn)行速度的因素很多,包括代碼風(fēng)格,具體設(shè)計(jì),資源占用率,F(xiàn)PGA型號(hào)等,所以這需要在RTL代碼基本框架完成后,通過(guò)工具綜合才能得到一個(gè)大致數(shù)值,所以作為ASIC原型,盡量選擇速度夠快的FPGA。
通過(guò)以上限定條件,基本可以選出使用哪種FPGA型號(hào),但是可能ASIC資源占用太多,任何一種都裝不下,這就有2種解決方式了。一種是分塊分別驗(yàn)證,當(dāng)然這樣風(fēng)險(xiǎn)極高,且沒(méi)法直接驗(yàn)證最終系統(tǒng)。
另外就是使用多片F(xiàn)PGA得到原型,這就要涉及不同F(xiàn)PGA之中功能劃分的問(wèn)題,這個(gè)是比較麻煩且有難度的事情,對(duì)FPGA電路設(shè)計(jì),以及ASIC到FPGA的代碼轉(zhuǎn)換,都有挺多新問(wèn)題。
第2步就是制版,這需要考量的方面也是相當(dāng)多,比如信號(hào)完整性,電源問(wèn)題,時(shí)鐘問(wèn)題,可擴(kuò)展性等,本人對(duì)此沒(méi)有直接經(jīng)驗(yàn),也就無(wú)從展開。當(dāng)然對(duì)于需要多個(gè)FPGA的驗(yàn)證板,一般實(shí)力的團(tuán)隊(duì),未必能搞定,所以選擇花錢買平安,直接選用類似HAPS這樣的驗(yàn)證系統(tǒng),可能更靠譜。
第3步就是ASIC的設(shè)計(jì)裝入FPGA。這需要對(duì)原本面向ASIC的代碼,進(jìn)行修改。
對(duì)于一般的純RTL邏輯,在ASIC中與FPGA中都可以綜合出可用結(jié)果,但是以下表中的器件,需要修改
芯片中的pad,一般是fab廠給出的硬核,具有輸入輸出,驅(qū)動(dòng)上下拉控制等。在轉(zhuǎn)換成FPGA時(shí),一般會(huì)在例化中直接用assign替代,并.XDC或者.v中指定上下拉等
如果有ASIC門級(jí)網(wǎng)表,可以把底層ASIC實(shí)例器件用verilog行為描述替換,在FPGA綜合中則可以對(duì)應(yīng)實(shí)現(xiàn)。其他的簡(jiǎn)單cell例化,也可以這樣轉(zhuǎn)換一下。
對(duì)于存儲(chǔ)器,一般可以在FPGA中找到與ASIC功能一致的SRAM,ROM ,可以直接把FPGA MEM 外包一層改變端口名字,替代ASIC MEM。小的嵌入flash,則可以把FPGA的SRAM包一層邏輯來(lái)模仿。
其他的硬核IP, 可能需要在FPGA中尋找功能一致的,并相應(yīng)修改接口,與ASIC代碼中其他部分有效連接。
對(duì)于BIST,最直接的辦法是去除,一般不會(huì)影響實(shí)際功能。
對(duì)于各種門控時(shí)鐘,倍頻分頻等,一般需要針對(duì)FPGA做手動(dòng)修改,使用DCM完成與芯片中時(shí)鐘一致的行為。
以下就一些修改中會(huì)出現(xiàn)的具體問(wèn)題,詳細(xì)說(shuō)明。
首先我們拿到的ASIC設(shè)計(jì)的結(jié)構(gòu),基本如下圖所示,最外一圈是各種pad ring,里邊先是芯片的各種輔助功能,包括 clk, rst, power, test,debug等。然后是與芯片實(shí)際功能相關(guān)的部分,可能包括部分模擬電路,數(shù)字電路包括cpu,mem 總線,各種邏輯控制等。我們需要明確用FPGA來(lái)原形驗(yàn)證的,主要是數(shù)字電路中的那些核心功能,芯片核心外部的那些輔助邏輯,很多是需要修改的,也是無(wú)法得到驗(yàn)證的。這里的pad一般直接在FPGA中直接去例化一個(gè)包含幾個(gè)assign語(yǔ)句的 FPGA PAD 等效實(shí)例,clk rst 需要根據(jù)具體上電順序,時(shí)鐘資源做調(diào)整,一般會(huì)對(duì)rst功能進(jìn)行簡(jiǎn)化,做成一個(gè)全局復(fù)位,clk中的分頻與關(guān)斷功能會(huì)放在CMT中實(shí)現(xiàn)。power控制,一般在FPGA中直接忽略,因?yàn)橛肍PGA幾乎無(wú)法模擬各種UPF指定的行為。debug test可以根據(jù)實(shí)際情況保留或者去除,但是即使保持,一般也不會(huì)真的去用。核心功能中需要更改的,一般就是各種內(nèi)部存儲(chǔ)器了。
時(shí)鐘門控 clock gating 一般在ASIC中廣泛使用,一般會(huì)在clk模塊中例化成由latch與門組成的門控單元,對(duì)某個(gè)模塊進(jìn)行時(shí)鐘控制。這些門控單元,如果直接在FPGA中例化為相同邏輯的latch與門,邏輯功能是沒(méi)有問(wèn)題的。但是這時(shí)與門出來(lái)的受控時(shí)鐘,則不能再FPGA的專用時(shí)鐘網(wǎng)絡(luò)中走線,而是走普通的信號(hào)網(wǎng)絡(luò),這樣FPGA能達(dá)到的頻率很差。為了糾正這樣情況,可以把對(duì)寄存器的門控,放在寄存器端,也就是選用FPGA中行如FDCE這樣帶門控的寄存器。這個(gè)過(guò)程可以手動(dòng)完成,但是比較麻煩,一般來(lái)說(shuō)專門的FPGA綜合工具能做這種自動(dòng)轉(zhuǎn)換。比如 vivado中使用 (* gated_clock = "true" *) input clk_a; 標(biāo)定受控時(shí)鐘,并在腳本加入 -gated_clock_conversion on 綜合選項(xiàng)。
當(dāng)然如果需要的可控時(shí)鐘不太多,也就是少于FPGA中BUFGCE的數(shù)量,則可以直接把門控信號(hào)加在 BUFGCE的控制端,輸出就是走時(shí)鐘網(wǎng)絡(luò)的門控信號(hào)了。如果FPGA器件中有 BUFHCE,則可以對(duì)更多層級(jí)的時(shí)鐘進(jìn)行門控,也就可以得到更多的受控時(shí)鐘。
有關(guān)FPGA門控時(shí)鐘的更詳細(xì)解釋,可以參照 https://forums.xilinx.com/t5/General-Technical-Discussion/Reg-Clock-gati...
ASIC轉(zhuǎn)變到FPGA使用的綜合約束,在SDC與XDC基本相容,例如
這些都可以直接使用,當(dāng)然很多情況下FPGA還是不可能跑到ASIC速度,必須降速運(yùn)行。另外還需要添加FPGA中對(duì)管腳位置,類型,驅(qū)動(dòng)強(qiáng)度等的約束,以及一些綜合選項(xiàng)
以上即為對(duì)ASIC代碼更改的主要部分,在下到FPGA板調(diào)試前,最好對(duì)更改的FPGA代碼進(jìn)行仿真,確認(rèn)功能正常,減少上板調(diào)試的工作量。
第4步為啟動(dòng)調(diào)試FPGA原型。
在把修改后的FPGA代碼裝入調(diào)試前,先需要保證FPGA板本身是正常可用的,這時(shí)如果是外購(gòu)的開發(fā)板或者類似haps的驗(yàn)證系統(tǒng),則會(huì)省去一些麻煩。
如果是頭次開發(fā)的FPGA板,則需要先裝入一個(gè)最簡(jiǎn)單的FPGA鏡像文件,測(cè)試一下FPGA的電源供電,下載連接是否可用,然后通過(guò)幾個(gè)用于測(cè)試的FPGA文件,測(cè)試下板上與FPGA連接的其他器件是否正常工作。一般頭次設(shè)計(jì)的板子,多少會(huì)有各種問(wèn)題,比如電源供電問(wèn)題,管腳連接的差分信號(hào)匹配問(wèn)題,阻抗匹配,電流驅(qū)動(dòng),信號(hào)質(zhì)量等問(wèn)題 如果板子通過(guò)了以上測(cè)試,則可以認(rèn)為電路硬件設(shè)計(jì)沒(méi)有問(wèn)題,可以裝入FPGA原形文件進(jìn)行測(cè)試了。
裝入修改了的FPGA原型模擬ASIC,一般不會(huì)一次成功,一般出現(xiàn)的問(wèn)題可以分為以下三類:
1 RTL邏輯錯(cuò)誤,包括原本ASIC既有的和修改過(guò)程引入的錯(cuò)誤。
2 接口錯(cuò)誤 與外部器件的電信號(hào)連接錯(cuò)誤,包括電壓不匹配,驅(qū)動(dòng)電流不一致等。
3 軟件錯(cuò)誤 MCU運(yùn)行的軟件沒(méi)有正確配置相關(guān)功能導(dǎo)致,這種一般在仿真中難以發(fā)現(xiàn),因?yàn)榉抡婧苌龠\(yùn)行真正的軟件系統(tǒng)。
對(duì)fpga原型的板上調(diào)試,可以歸納為以下步驟。
當(dāng)載入實(shí)際運(yùn)行的軟件后,通過(guò)FPGA原型,就可以如同在實(shí)際芯片中一樣,對(duì)軟件進(jìn)行測(cè)試修改,同時(shí)完成系統(tǒng)級(jí)的驗(yàn)證工作了。也就進(jìn)入了步驟5.6,這與普通的嵌入式軟件開發(fā)大致相同。
對(duì)于通過(guò)FPGA進(jìn)行原型驗(yàn)證,有以下設(shè)計(jì)流程上的建議,值得參考
以上參考了xilinx網(wǎng)站內(nèi)容,以及FPMM等書。
編輯:hfy
-
FPGA
+關(guān)注
關(guān)注
1629文章
21738瀏覽量
603461 -
asic
+關(guān)注
關(guān)注
34文章
1200瀏覽量
120510 -
Xilinx
+關(guān)注
關(guān)注
71文章
2167瀏覽量
121441 -
芯片設(shè)計(jì)
+關(guān)注
關(guān)注
15文章
1019瀏覽量
54899
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論