基於Verilog HDL整數乘法器設計與仿真驗證


基於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是乘數,表示的含義是58相加。乘法運算可以拆分成三個步驟來實現:

    在運算前,取得乘數和被乘數的符號位,然后取被乘數和乘數的正值。

    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)關聯QuartusModelsim-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_Sig0跳變到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程序,即可以看到仿真波形。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM