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