Verilog HDL程式筆記2
Verilog HDL程式筆記1:寫出屬于你的第一個Verilog HDL子產品
文章目錄
- Verilog HDL程式筆記2
- 前言
- 一、如何測試子產品?
-
- 1.仿真平台
- 2.建立工程
- 3.程式設計與編譯
- 二、使用步驟
-
- 1.Testbench的含義
- 2.Testbench的寫法
- 3.仿真
- 總結
前言
經過第一章的學習之後,我們已經能夠用代碼寫出屬于我們的第一個子產品了。這就引出了下一個問題,我們應該如何驗證子產品的正确與否呢?下面就帶大家繼續了解子產品的測試。
提示:以下是本篇文章正文内容。
一、如何測試子產品?
1.仿真平台
在學習測試子產品之前我們需要先了解我們的IDE兼仿真平台——Modelsim。

Mentor公司的ModelSim是業界最優秀的HDL語言仿真軟體,它能提供友好的仿真環境,是業界唯一的單核心支援VHDL和Verilog混合仿真的仿真器。它采用直接優化的編譯技術、Tcl/Tk技術、和單一核心仿真技術,編譯仿真速度快,編譯的代碼與平台無關,便于保護IP核,個性化的圖形界面和使用者接口,為使用者加快調錯提供強有力的手段,是FPGA/ASIC設計的首選仿真軟體。
——引用自百度百科
關于軟體的安裝及破解可以參考這篇文章:
Modelsim-win64-10.1c 安裝破解
2.建立工程
打開軟體後點選左上角File-New-Project建立一個項目,名字自己看着取就好了
點選OK之後會彈出下面這個框框
這裡就不用我翻譯了吧?大家都是過了4級的人。
我們點選第一個圖示,建立一個新的檔案。首先第一步需要将我們上節課的子產品給建立了,名字是叫dog是吧?
這裡千萬不要點OK!
我們需要點開左下角的"Add file as type",選擇Verilog。
這一步是選擇程式設計語言,一定不能有錯!然後我們才能點選OK。
然後我們再仿照上面的步驟建立一個檔案叫做:dogTestbench。這個檔案就是我們的測試檔案,稍後再詳細解說。
檔案建立好之後我們可以看見剛剛創立的兩個檔案已經出現在了畫面中。
3.程式設計與編譯
我們需要先點開dog.v,然後将上節課的代碼複制粘貼上去。
然後我們點選編譯按鈕
可以看到編譯成功了!
然後我們再打開dogTestbench.v準備開始編寫我們的測試子產品。
二、使用步驟
1.Testbench的含義
首先我們需要了解Modelsim的仿真原理。
在我們使用Modelsim寫完一個子產品的時候,這個子產品就像一名工程師設計好了的一個零件的設計圖一樣。在零件的量産與大量使用之前我們需要對零件進行驗證——做出初代産品并檢驗。
我們寫的dog.v就像是初代零件設計圖,而Testbench像是初代加工好的零件。
那麼dog和dogTestbench之間有什麼關系呢?學過其他程式設計語言的同學可以将其勉強了解為類與對象的概念。
而沒有學過其他進階程式設計語言的同學可以将dog和dogTestbench了解為學生這個群體和這個群體裡的一個學生的概念。
學生的錢最好掙 ,小明同學的錢最好掙。學生就像是dog,小明同學就像是dog.v
當然,上面的比喻有點牽強,下面我将用實際的例子讓大家體會一下。
2.Testbench的寫法
首先在這裡需要說明一下,Testbench也是一個子產品——測試子產品。是以我們整個代碼的架構和dog.v異曲同工。
然後我們需要用reg型來建立需要指派的變量。而用wire型來建立輸出的值。
由于dog這個子產品實際上是一個二選一多路器,是以需要兩個輸入和一個選擇信号,而隻有一個輸出。是以我們就像下圖這麼寫就好了。
然後我們需要對我們需要指派的信号初始化:
我們可以看到begin和end又出現了。聰明的小夥伴可能已經發現了Verilog裡沒有花括号,并且聯想到了begin和end就是花括号的作用了。
初始化之後我們要做的當然就是給信号指派啦!這裡有兩種指派方式:
第一種方式是手動指派,我們在初始化裡直接手動指派。#100代表延時了100個時間機關。
可以看出這是十分累的。除了有特定的要求之外我建議直接使用第二種方法。
可以看到這簡單的一句話就産生了一個周期為50個機關時間的選通信号。
我們的測試子產品就是為了觀測輸出的值的變化。按照邏輯來說,當選通信号為0時,輸出值和a的值相同。當選通信号為1時,輸出的值和b相同。
到這裡我們已經把a,b和sl都設定好了。是以接下來我們隻要觀察outw的值的變化就好了。
接下來我們需要加入最後一步也是最具有靈魂的的一步
dog就是所謂的設計圖,而dog1就是我們做出來測試的初代産品!而括号内的.xxx(yyy)中的xxx就是子產品的接口,yyy就是Testbench指派的信号。必須要一一對應才行,不然仿真值會出錯。
3.仿真
最後我們再編譯一下所有.v檔案,然後最上方工具欄中選擇 Simulate-star simulate
然後點開work,選擇dogTestbench。最重要的是**将左下角第三步的勾勾去掉!!**然後OK運作。
然後我們在左邊那一欄裡右鍵點選dogTestbench-add wave。這時才能添加信号波形。
我們點選上方的這個按鈕開始仿真
框框裡的100ns可以自定義大小,這個會影響我們點選一次仿真按鈕輸出的波形長度。
成功輸出波形了。對比發現,當sl=0時,outw=a=0,當sl=1時outw=b=1;
為了排除誤差,我們把dogTestbench.v裡的a和b的值互換一下再次進行仿真:
确實是這麼回事!也就是說,我們的子產品沒有問題。dog子產品确實有二選一選擇器的功能。大成功!!
總結
本章講述了如何使用Modelsim寫子產品和建立一個測試平台。并進行了仿真觀測了波形。這隻是一個很簡單的例子。往後我們将學習更多有趣的知識。因為本人也是一名正在學習Verilog的大學生,是以有不正确的地方歡迎大家的指出!