解析FPGA設(shè)計(jì)流程及其布線資源
FPGA/CPLD的設(shè)計(jì)流程
1、電路設(shè)計(jì)與輸入
電路設(shè)計(jì)與輸入是指通過(guò)某些規(guī)范的描述方式,將工程師電路構(gòu)思輸入給EDA工具。常用的設(shè)計(jì)方法有硬件描述語(yǔ)言(HDL)和原理圖設(shè)計(jì)輸入方法等。原理圖設(shè)計(jì)輸入法在早期應(yīng)用得比較廣泛,它根據(jù)設(shè)計(jì)要求,選用器件、繪制原理圖、完成輸入過(guò)程。這種方法的有點(diǎn)是直觀、便于理解、元器件庫(kù)資源豐富。但是在大型設(shè)計(jì)中,這種方法的可維護(hù)性較差,不利于模塊構(gòu)造與重用。更主要的缺點(diǎn)就是當(dāng)所選用芯片升級(jí)換代后,所有的原理圖都要做相應(yīng)的改動(dòng)。目前進(jìn)行大型工程設(shè)計(jì)時(shí),最常用的設(shè)計(jì)方法是HDL設(shè)計(jì)輸入法,其中影響最為廣泛的HDL語(yǔ)言是VHDL和Verilog HDL。他們的共同特點(diǎn)是利用由頂向下設(shè)計(jì),利于模塊的劃分與復(fù)用,可移植性好,通用性好,設(shè)計(jì)不因芯片的工藝與結(jié)構(gòu)不同而變化,更利于向ASIC的移植。波形輸入和狀態(tài)機(jī)輸入方法是兩種常用的輔助設(shè)計(jì)輸入方法:使用波形輸入時(shí),志耘愛繪制出激勵(lì)波形與輸出波形,EDA軟件就能自動(dòng)地根據(jù)響應(yīng)關(guān)系進(jìn)行設(shè)計(jì);使用狀態(tài)機(jī)輸入法時(shí),設(shè)計(jì)者只需要畫出狀態(tài)轉(zhuǎn)移圖,EDA軟件就能生成相應(yīng)的HDL代碼或原理圖,使用十分方便。但是需要指出的是,波形輸入和狀態(tài)機(jī)輸入方法只能在某些特殊情況下緩解設(shè)計(jì)者的工作量,并不適合所有的設(shè)計(jì)。
2、功能仿真
電路設(shè)計(jì)完成以后,要用專用的仿真工具對(duì)設(shè)計(jì)進(jìn)行功能仿真,驗(yàn)證電路功能是否符合設(shè)計(jì)要求。功能仿真有時(shí)也稱為前仿真。通過(guò)仿真能及時(shí)發(fā)現(xiàn)設(shè)計(jì)中的錯(cuò)誤,加快設(shè)計(jì)進(jìn)度,提高設(shè)計(jì)的可靠性。
3、綜合優(yōu)化
綜合優(yōu)化(Synthesize)是指將HDL語(yǔ)言、原理圖等設(shè)計(jì)輸入翻譯成由與、或、非門,RAM,觸發(fā)器等基本邏輯單元組成的邏輯連接(網(wǎng)表),并根據(jù)目標(biāo)與要求(約束條件)優(yōu)化所生成的邏輯連接,輸出edf和edn等標(biāo)準(zhǔn)格式的網(wǎng)表文件,供FPGA/CPLD廠家的布局布線器進(jìn)行實(shí)現(xiàn)。
4、綜合后仿真
綜合完成后需要檢查綜合結(jié)果是否與設(shè)計(jì)一致,做綜合后仿真。在仿真時(shí),把綜合生成的標(biāo)準(zhǔn)延時(shí)文件反標(biāo)志到綜合仿真模型中去,可估計(jì)門延時(shí)帶來(lái)的影響。綜合后仿真雖然比功能仿真精確一些,但是只能估計(jì)門延時(shí),不能估計(jì)線延時(shí),仿真結(jié)果與布線后的實(shí)際情況還有一定的差距,并不十分準(zhǔn)確。這種仿真的主要目的在于檢查綜合器的綜合結(jié)果是否與設(shè)計(jì)輸入一致。目前主流綜合工具日益成熟,對(duì)于一般性的設(shè)計(jì),如果設(shè)計(jì)者確信自己標(biāo)注明確,沒(méi)有綜合歧義發(fā)生,則可省略該步驟。但是如果在布局布線后仿真時(shí)發(fā)現(xiàn)有電路結(jié)構(gòu)與設(shè)計(jì)意圖不符的現(xiàn)象,則常常需要回溯到綜合后仿真以確認(rèn)是否時(shí)由于綜合歧義造成的問(wèn)題。
5、實(shí)現(xiàn)與布局布線
綜合結(jié)果的本質(zhì)是一些由與、或、非門,觸發(fā)器,RAM等基本邏輯單元組成的邏輯網(wǎng)表,它與芯片的實(shí)際的配置情況還有較大的差距。此時(shí)應(yīng)該使用FPGA/CPLD廠商提供的軟件工具,根據(jù)所選芯片的型號(hào)將綜合輸出的網(wǎng)表適配到具體FPGA/CPLD器件上,這個(gè)過(guò)程就叫做實(shí)現(xiàn)過(guò)程。因?yàn)橹挥衅骷拈_發(fā)商最了解器件的內(nèi)部結(jié)構(gòu),所以實(shí)現(xiàn)步驟必須選用器件開發(fā)商提供的工具。在實(shí)現(xiàn)過(guò)程中最主要的過(guò)程是布局布線(PAR)。所謂布局(Place),就是指將邏輯網(wǎng)表中的硬件原語(yǔ)或者底層單元合理地適配到FPGA內(nèi)部的固有硬件結(jié)構(gòu)上,布局的優(yōu)劣對(duì)設(shè)計(jì)的最終結(jié)果(在速度和面積兩個(gè)方面)影響很大。所謂布線(Route),是指根據(jù)布局的拓?fù)浣Y(jié)構(gòu),利用FPGA內(nèi)部的各種連線資源,合理正確連接各個(gè)元件的過(guò)程。FPGA的結(jié)構(gòu)相對(duì)復(fù)雜,為了獲得更好的實(shí)現(xiàn)結(jié)果,特別是保證能夠滿足設(shè)計(jì)的時(shí)序條件,一般采用時(shí)序驅(qū)動(dòng)的引擎進(jìn)行布局布線,所以對(duì)于不同的設(shè)計(jì)輸入,特別是不同的時(shí)序約束,獲得的布局布線結(jié)果一般有較大的差異。CPLD結(jié)構(gòu)相對(duì)簡(jiǎn)單得多,其資源有限而且布線資源一般為交叉連接矩陣,故CPLD的布局布線過(guò)程相對(duì)簡(jiǎn)單明朗的多,一般稱為適配過(guò)程。一般情況下,用戶可以通過(guò)設(shè)置參數(shù)指定布局布線的優(yōu)化準(zhǔn)則,總的來(lái)說(shuō)優(yōu)化目標(biāo)主要有兩個(gè)方面,面積和速度。一般根據(jù)設(shè)計(jì)的主要矛盾,選擇面積或者速度或者是兩者平衡等優(yōu)化目標(biāo),但是當(dāng)兩者沖突時(shí),一般滿足時(shí)序約束要求更重要一些,此時(shí)選擇速度或時(shí)序優(yōu)化目標(biāo)更佳。
6、時(shí)序仿真與驗(yàn)證
將布局布線的延時(shí)信息反標(biāo)注到設(shè)計(jì)網(wǎng)表中,所進(jìn)行的仿真就叫時(shí)序仿真或布局布線后仿真,也叫后仿真。該仿真的仿真延時(shí)文件包含的延時(shí)信息最全,不僅包含了門延時(shí),還包含了實(shí)際布線延時(shí),所以布局布線后仿真最準(zhǔn)確,能夠較好的反映芯片的實(shí)際工作情況。一般來(lái)說(shuō),布線后仿真步驟必須進(jìn)行,通過(guò)布局布線后仿真能檢查設(shè)計(jì)時(shí)序與FPGA實(shí)際運(yùn)行情況是否一致,確保設(shè)計(jì)的可靠性和穩(wěn)定性。
<3個(gè)不同階段的仿真小結(jié)>:
--功能仿真主要目的在于驗(yàn)證語(yǔ)言設(shè)計(jì)的電路結(jié)構(gòu)和功能是否和設(shè)計(jì)意圖相符。
--綜合后仿真主要目的在于驗(yàn)證綜合后電路結(jié)構(gòu)是否與設(shè)計(jì)意圖相符,是否存在歧義綜合結(jié)果。
--布局布線后仿真主要目的是驗(yàn)證是否存在時(shí)序違規(guī)。
7、板級(jí)仿真與驗(yàn)證
有些高速設(shè)計(jì)情況下還需要使用第三方的板級(jí)驗(yàn)證工具進(jìn)行仿真與驗(yàn)證。這些工具通過(guò)對(duì)設(shè)計(jì)的IBIS、HSPICE等模型的仿真,能較好地分析高速設(shè)計(jì)的信號(hào)完整性、電磁干擾等電路特性。
8、調(diào)試與加載配置
設(shè)計(jì)開發(fā)的最后步驟就是在線調(diào)試或者將生成的配置文件寫入芯片中進(jìn)行測(cè)試。示波器和邏輯分析儀是邏輯設(shè)計(jì)的主要調(diào)試工具。傳統(tǒng)的邏輯功能板級(jí)驗(yàn)證手段是用邏輯分析儀分析信號(hào),設(shè)計(jì)時(shí)要求FPGA和PCB設(shè)計(jì)人員保留一定數(shù)量FPGA管腳作為測(cè)試管腳,編寫FPGA代碼時(shí)將需要觀測(cè)的信號(hào)作為模塊的輸出信號(hào),在綜合實(shí)現(xiàn)時(shí)在把這些輸出信號(hào)鎖定到測(cè)試管腳上,然后連接邏輯分析儀的探頭到這些測(cè)試管腳,設(shè)定觸發(fā)條件,進(jìn)行觀測(cè)。
任何仿真或驗(yàn)證步驟出現(xiàn)問(wèn)題,就需要根據(jù)錯(cuò)誤定位返回到相應(yīng)的步驟更改或者重新設(shè)計(jì)邏輯設(shè)計(jì)的主要調(diào)試工具。傳統(tǒng)的邏輯功能板級(jí)驗(yàn)證手段是用邏輯分析儀分析信號(hào),設(shè)計(jì)時(shí)要求FPGA和PCB設(shè)計(jì)人員保留一定數(shù)量FPGA管腳作為測(cè)試管腳,編寫FPGA代碼時(shí)將需要觀測(cè)的信號(hào)作為模塊的輸出信號(hào),在綜合實(shí)現(xiàn)時(shí)在把這些輸出信號(hào)鎖定到測(cè)試管腳上,然后連接邏輯分析儀的探頭到這些測(cè)試管腳,設(shè)定觸發(fā)條件,進(jìn)行觀測(cè)。
任何仿真或驗(yàn)證步驟出現(xiàn)問(wèn)題,就需要根據(jù)錯(cuò)誤定位返回到相應(yīng)的步驟更改或者重新設(shè)計(jì)。
FPGA中豐富的布線資源
布線資源連通FPGA內(nèi)部的所有單元,而連線的長(zhǎng)度和工藝決定著信號(hào)在連線上的驅(qū)動(dòng)能力和傳輸速度。FPGA芯片內(nèi)部有著豐富的布線資源,根據(jù)工藝、長(zhǎng)度、寬度和分布位置的不同而劃分為4類不同的類別。
第一類是全局布線資源,用于芯片內(nèi)部全局時(shí)鐘和全局復(fù)位/置位的布線;
第二類是長(zhǎng)線資源,用以完成芯片Bank間的高速信號(hào)和第二全局時(shí)鐘信號(hào)的布線;
第三類是短線資源,用于完成基本邏輯單元之間的邏輯互連和布線;
第四類是分布式的布線資源,用于專有時(shí)鐘、復(fù)位等控制信號(hào)線。
在實(shí)際中設(shè)計(jì)者不需要直接選擇布線資源,布局布線器可自動(dòng)地根據(jù)輸入邏輯網(wǎng)表的拓?fù)浣Y(jié)構(gòu)和約束條件選擇布線資源來(lái)連通各個(gè)模塊單元。從本質(zhì)上講,布線資源的使用方法和設(shè)計(jì)的結(jié)果有密切、直接的關(guān)系。