轉至:http://www.eepw.com.cn/article/184677.htm
FPGA真不帶這么玩的!趕緊禁止自己使用Quartus II自帶的仿真,甭畫波形圖了,你畫成大師也沒用(也成不了大師,Quartus II只能做極初級的仿真)!如果你立志從事FPGA行業,那么會寫Testbench才你的敲門磚,而且別想著去公司寫RTL代碼了,向毛主席保證,公司一定是讓你來寫Testbench的。再趕緊把你的FPGA開發板有多遠扔多遠(別丟,還是要用的),FPGA不是單片機,學習FPGA并不那么需要開發板。打個比方,學習FPGA是兩萬五千里長征,那么使用開發板連三千里都占不到,遠遠不到。對于FPGA,仿真驗證才是核心,這么講吧,驗證占到整個設計作業的70%,前仿真、后仿真、功能仿真、時序仿真、行為級仿真、RTL級仿真、綜合后仿真、門級仿真、布局布線后仿真……好吧,別暈,本篇只講Testbench,Modelsim仿真咱們下篇再討論。
一個最基本的Testbench包含三個部分,信號定義、模塊介面和功能代碼。借用一下特權同學總結的撰寫Testbench的三個基本步驟:
1、對被測驗設計的頂層介面進行例化;
2、給被測驗設計的輸入介面添加激勵;
3、判斷被測驗設計的輸出相應是否滿足設計要求。
逐步解決撰寫Testbench的這三點:
首先“對被測驗設計的頂層介面進行例化”,這一步相對比較簡單,例化就是,但埠多時也夠喝一壺的,而且要分wire、reg,有時會弄錯,別難過,其實可以偷個懶,通過Quartus II自動生成一個Testbench的模板,選擇Processing -> Start -> Start Test Bench Template Writer,等待完成后打開剛才生成的Testbench,默認是保存在simulation\Modelsim檔案夾下的.vt格式檔案。這一步就不多講了,偷懶就挺好。
其次“給被測驗設計的輸入介面添加激勵”,一般時序設計必然涉及到最基本的兩個信號——clk、rst_n(時鐘、復位),肯定有童鞋會講可以沒有rst_n,是可以沒有,但何必呢,讓代碼更健壯一點不很好嘛,別鉆牛角尖。下面攻克clk、rst_n的寫法:
首先先講一下timescale,因為想要進行仿真首先要規定時間單位,而且最好在Testbench里面統一規定時間單位,而不要在工程代碼里定義,因為不同的模塊如果時間單位不同可能會為仿真帶來一些問題,而timescale本身對綜合也就是實際電路沒有影響。 `timescale 1ns/ 1ps表示仿真的單位時間為1ns,精度為1ps。
clk大體上有三種寫法 :
上述三種代碼的目的就是產生系統時鐘,給clk一個初值后,不斷重復執行:每10ns翻轉一次clk,從而生成一個周期為20ns,頻率50MHz的方波信號。第一、二種基本類似,第三種比較簡單,少了一個initial,放在了always里初始化。
三種方法都無一例外地給clk賦了初值,因為信號的預設值為Z,如果不賦初值,則反相后還是Z,時鐘就一直處于高阻Z狀態。小朱同學一般選中第一種,看個人喜歡。
根據復位方式的不同,rst_n一般有兩種寫法:
fpga相關文章:fpga是什么
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/102846.html
標籤:驅動開發/核心開發
上一篇:米老師語錄一
