2.1 綜合
Verilog 是硬件描述語(yǔ)言,顧名思義,就是用代碼的形式描述硬件的功能,最終在硬件電路上實(shí)現(xiàn)該功能。 在 Verilog 描述出硬件功能后需要使用綜合器對(duì) Verilog 代碼進(jìn)行解釋并將代碼轉(zhuǎn)化成實(shí)際的電路來(lái)表示,最終產(chǎn)生實(shí)際的電路, 也被稱為網(wǎng)表。這種 將 Verilog 代碼轉(zhuǎn)成網(wǎng)表的工具就是綜合器 。
上圖左上角是一段 Verilog 代碼,該代碼實(shí)現(xiàn)了一個(gè)加法器的功能。 在經(jīng)過(guò)綜合器解釋后該代碼被轉(zhuǎn)化成一個(gè)加法器電路。 QUARTUS、 ISE 和 VIVADO 等 FPGA 開(kāi)發(fā)工具都是綜合器, 而在集成電路ASIC設(shè)計(jì)領(lǐng)域常用的綜合器是 DC。
2.2 仿真
在 FPGA 設(shè)計(jì)的過(guò)程中,不可避免會(huì)出現(xiàn)各種 BUG。如果在編寫好代碼、 綜合成電路、 燒寫到FPGA 后才發(fā)現(xiàn)問(wèn)題,此時(shí)再去定位問(wèn)題就會(huì)非常地困難。 而在綜合前, 設(shè)計(jì)師可以在電腦里通 過(guò)仿真軟件對(duì)代碼進(jìn)行仿真測(cè)試, 檢測(cè)出 BUG 并將其解決,最后再將程序燒寫進(jìn) FPGA。一般情況下可以認(rèn)為沒(méi)有經(jīng)過(guò)仿真驗(yàn)證的代碼,一定是存在 BUG 的。
為了模擬真實(shí)的情況,需要編寫測(cè)試文件。該文件也是用 Verilog 編寫的, 其描述了仿真對(duì)象的輸入激勵(lì)情況。該激勵(lì)力求模仿最真實(shí)的情況,產(chǎn)生最接近的激勵(lì)信號(hào),將該信號(hào)的波形輸入給仿真對(duì)象,查看仿真對(duì)象的輸出是否與預(yù)期一致。需要注意的是: 在仿真過(guò)程中沒(méi)有將代碼轉(zhuǎn)成電路,仿真器只是對(duì)代碼進(jìn)行仿真驗(yàn)證。至于該代碼是否可轉(zhuǎn)成電路,仿真器并不關(guān)心。
由此可見(jiàn), Verilog 的代碼不僅可以描述電路,還可以用于測(cè)試。事實(shí)上, Verilog 定義的語(yǔ)法非常之多,但絕大部分都是為了仿真測(cè)試來(lái)使用的, 只有少部分才是用于電路設(shè)計(jì),詳細(xì)可以參考本書(shū)的“可綜合邏輯設(shè)計(jì)”一節(jié)。 Verilog 中用于設(shè)計(jì)的語(yǔ)法是學(xué)習(xí)的重點(diǎn), 掌握好設(shè)計(jì)的語(yǔ)法并熟練應(yīng)用于各種復(fù)雜的項(xiàng)目是技能的核心。 而其他測(cè)試用的語(yǔ)法, 在需要時(shí)查找和參考就已經(jīng)足夠了。
2.3 可綜合設(shè)計(jì)
Verilog 硬件描述語(yǔ)言有類似高級(jí)語(yǔ)言的完整語(yǔ)法結(jié)構(gòu)和系統(tǒng),這些語(yǔ)法結(jié)構(gòu)的應(yīng)用給設(shè)計(jì)描述帶來(lái)很多方便。但是, Verilog 是描述硬件電路的, 其建立在硬件電路的基礎(chǔ)之上。而有些語(yǔ)法結(jié)構(gòu)只是以仿真測(cè)試為目的,是不能與實(shí)際硬件電路對(duì)應(yīng)起來(lái)的。 也就是說(shuō)在使用這些語(yǔ)法時(shí), 將一個(gè)語(yǔ)言描述的程序映射成實(shí)際硬件電路中的結(jié)構(gòu)是不能實(shí)現(xiàn)的,也稱為不可綜合語(yǔ)法。
綜合就是把編寫的 rtl 代碼轉(zhuǎn)換成對(duì)應(yīng)的實(shí)際電路。比如編寫代碼 assign a=b&c; EDA 綜合工具就會(huì)去元件庫(kù)里調(diào)用一個(gè)二輸入與門, 將輸入端分別接上 b 和 c,輸出端接上 a。
同樣地,如果設(shè)計(jì)師編寫了一些如下所示的語(yǔ)句:
綜合工具就會(huì)像搭積木一樣把這些“邏輯”電路用一些“門”電路來(lái)搭起來(lái)。當(dāng)然,工具會(huì)對(duì)必要的地方做一些優(yōu)化,比如編寫一個(gè)電路 assing a=b&~b,工具就會(huì)將 a 恒接為 0,而不會(huì)去調(diào)用一個(gè)與門來(lái)搭這個(gè)電路。
綜述所述,“綜合”要做的事情有:編譯 rtl 代碼,從庫(kù)里選擇用到的門器件,把這些器件按照“邏輯”搭建成“門”電路。
不可綜合,是指找不到對(duì)應(yīng)的“門”器件來(lái)實(shí)現(xiàn)相應(yīng)的代碼。比如“ #100”之類的延時(shí)功能,簡(jiǎn)單的門器件是無(wú)法實(shí)現(xiàn)延時(shí) 100 個(gè)單元的, 還有打印語(yǔ)句等,也是門器件無(wú)法實(shí)現(xiàn)的。在設(shè)計(jì)的時(shí)候要確保所寫的代碼是可以綜合的,這就依賴于設(shè)計(jì)者的能力,知道什么是可綜合的代碼,什么是不可綜合的代碼。對(duì)于初學(xué)者來(lái)說(shuō),最好是先記住規(guī)則,遵守規(guī)則,先按規(guī)則來(lái)設(shè)計(jì)電路并在這一過(guò)程中逐漸理解,這是最好的學(xué)習(xí)路徑。
下面表格中列出了 不可綜合或者不推薦使用的代碼 。
下表為 推薦使用的設(shè)計(jì)代碼 。
發(fā)布評(píng)論請(qǐng)先 登錄
評(píng)論