書中代碼請訪問網盤:http://pan.baidu.com/s/1bndF0bt 完成了前面基本的設計輸入后,為了進一步的驗證代碼所實現功能的正確性,我們還需要進行仿真測試。關于仿真的一些深入的介紹大家可以參考筆者的《深入淺出玩轉FPGA》一書筆記10的相關內容。為了讓大家更好的理解什么是仿真、為什么要做仿真以及如何做仿真,這里將以testbench的基本概念進行簡單的介紹。當然了,仿真其實在包含在testbench這個大概念里面的。 所謂testbench,即測試平臺,詳細的說就是給待驗證的設計添加激勵,同時觀察它的輸出響應是否符合設計要求。如圖5.27所示,測試平臺就是要模擬一個和待驗證設計接口的各種外圍設備。 ![]() 圖5.27 設計與驗證 仿真測試是FPGA設計流程中必不可少的步驟。在今天的FPGA設計中,如果邏輯規模較大,一般都會使用到IP核或者SOC來加快RTL級設計,所以花費在仿真驗證上的工作量往往能夠占到這個開發流程的70%。仿真測試的重要性可見一斑。 初學者在剛接觸仿真這個概念的時候,可能以為仿真只是簡單的用一些開發軟件自帶的波形發生器產生一些激勵,然后觀察一下最后的波形輸出就完事了。但是對于大規模的設計,用波形產生激勵是不現實的,觀察波形的工作量也是可想而知的。例如,對于一個16位的輸入總線,它可以有65536種組合,如果每次隨機產生一種輸入,那用波形豈不累死人。再說輸出結果的觀察,對應65536種輸入的65536種輸出,看波形肯定讓人花眼繚亂。所以,testbench應該有更高效的測試手段。對于FPGA的仿真,使用波形輸入產生激勵是可以的,觀察波形輸出以驗證測試結果也是可以的,波形也許是最直觀的測試手段,但絕不是唯一手段。 如圖5.28所示,設計的測試結果判斷不僅可以通過觀察對比波形,而且可以靈活的使用腳本命令將有用的輸出信息打印到終端或者產生文本進行觀察,也可以寫一段代碼讓他們自動比較輸出結果。總之,testbench的設計是多種多樣的,它的語法也是很隨意的,不像RTL級設計代碼那么多講究,它是基于行為級的語法,很多高級的語法都可以在腳本中使用。因為它不需要實現到硬件中,它是運行在PC機上的一段腳本,所以相對RTL級可以做得更容易更靈活一些。 ![]() 圖5.28 驗證輸出 前面我們也以及介紹過Verilog和VHDL都有其相應的行為級的語法,這類語法相對而言更高級一些,它們無需實現到最終的硬件中,而是在PC上運行編譯來實現相關功能。而Verilog與VHDL相比,語法更自由一些,或者也可以說更高級一些,它用來寫測試腳本更加游刃有余。當然了,業內也出現了一些類似System Verilog、System C等更高級的HDL語言,雖然這些語言出現的初衷都是為了能夠最終直接服務于RTL級設計,但實際情況并沒有預期的理想,這些語言目前大都只是被用于testbench設計上了。不過對于一般的設計,我們也不用過分追求更高級的語法,行為級的Verilog足夠應付大多數的設計驗證。 本文節選自特權同學的圖書《FPGA/CPLD邊練邊學——快速入門Verilog/VHDL》 書中代碼請訪問網盤:http://pan.baidu.com/s/1bndF0bt |