基於Verilog HDL整數乘法器設計與仿真驗證
1.預備知識
整數分為短整數,中整數,長整數,本文只涉及到短整數。短整數:占用一個字節空間,8位,其中最高位為符號位(最高位為1表示為負數,最高位為0表示為正數),取值范圍為-127~127。
負數的表示方法為正值的求反又加1。例如:
8’b0000_0100; //表示值:4,正值求反為:8’b1111_1011;再加1表示為:8’b1111_1100,這樣便得到了-4的表示方法為:8’b1111_1100。
同理,負值變成正值的方法為:負值求反又加1。
2.設計思路
怎樣判斷一個短整數是正值還是負值?
利用一個數的最高位,if(!A[7]) //A是正值;if(B[7]) //B是負值。
在乘法運算中,運算結果的符號可以通過異或運算得到。
A值 |
B值 |
結果 |
正(0) |
正(0) |
正(0) |
正(0) |
負(1) |
負(1) |
負(1) |
正(0) |
負(1) |
負(1) |
負(1) |
正(0) |
3.乘法器程序設計思路
首先考慮輸入信號量,有乘數與被乘數,有一個開始指令(Start_Sig),相當於我們在計算器中輸入完計算式子之后,再按下一個“=”號,得到最終的結果。
再考慮輸出信號量,有計算結果,同時在計算結果出來后,輸出一個運算完成信號(Done_Sig)。
乘法運算的Verilog HDL程序實現:以8X5來舉例,其中8是被乘數,5是乘數,表示的含義是5個8相加。乘法運算可以拆分成三個步驟來實現:
在運算前,取得乘數和被乘數的符號位,然后取被乘數和乘數的正值。
isNeg <= Multiplicand[7]^Multiplier[7];
Mcand <= Multiplicand[7]?(~Multiplicand+1’b1):Multiplicand;
Mer <= Multiplier[7]?(~Multiplier+1’b1):Multiplier;
4.基於ModelSim的乘法器仿真驗證
本文將詳細描述ModelSim的配置過程,方便以后查閱。
(1)首先建立乘法器的模型,編輯好Verilog HDL程序(學習重點)
(2)關聯Quartus與Modelsim-Altera
Tools ---- Options ---- EDA Tool Options,選擇仿真工具,並添加仿真工具的安裝路徑。本文選用的Modelsim-Altera。
(3)設置仿真工具與需要仿真的文本格式,Time Scale。
Assignments ---- Settings ---- Simulation
Tool name:
Format for output netlist:
Time scale:
Output directory:為默認設置
(4)自動生成Test bench模板
Processing ---- Start ---- Start Test Bench Template writer,操作完成后,自動生成Test bench。
打開Test Bench文件,在整個工程文件中會生成一個simulation文件夾,打開,找到里面的“XXX.vt”文件。
(5)編輯Test bench文件
按照模板文件中的注釋,填充相應的測試程序即可。(里面有大學問)
在測試文件中,有一個初始化模塊,一般用來初始化時鍾信號(CLK)和復位整個電路(RSTn)。
結合“#num”這一參數的變化,與仿真波形的對比,可以得出“#num”是用來設定時間的語句。
首先談談乘法器的工作原理:首先輸入乘數與被乘數,當Start_Sig信號置高電平,乘法器開始工作,按照預先寫好的模型一步一步運算完后,Done_Sig輸出高電平,代表運算完成,得出運算結果輸出到Product上。
1.Start_Sig由0跳變到1,乘法器開始運算(相當於計算器上的等號按鈕),此時乘數與被乘數輸入端口已經有數值,Done_Sig處於st0狀態,代表還未完成計算。
2.計算完了乘法的第一步,輸出Product上已經有第一步的運算結果了,但是Done_Sig信號還是保持st0狀態,代表計算還未結
3.第二步運算完成,結果輸出到了Product信號線上,但是Done_Sig信號還是保持st0,乘法器還在繼續工作。
4.Done_Sig信號線由st0跳變為st1,並持續一個脈沖周期,此刻表示乘法器完成計算,Product信號線上的數據即為乘法運算的最終結果。
5.Done_Sig狀態又恢復到st0,此刻Start_Sig信號由1變為0,代表乘法器關閉,停止工作,always塊語句里面的乘法算法將不再執行。
(6)將編輯好的Test bench文件添加到工程中
Assignments ---- Settings ---- Simulation
選擇 Compile test bench選項,單擊“...”
New ----
需要填充如下內容:
Test bench name:就是testbench文件的名字,即“.vt”文件的文件名。
Top level module in test bench:就是testbench文件的頂層模塊名。
End simulation at:就是仿真最大的時間。
在Test bench files面板中添加Test bench文件,單擊“...”找到“.vt”文件的路徑,單擊add即可,最后單擊OK。
單擊OK。
單擊Apply,單擊OK。
(7)開始仿真
Tools ---- Run EDA Simulation Tool ---- EDA RTL Simulation
自動啟動ModelSim程序,即可以看到仿真波形。