Modelsim仿真過程(完整版)

Modelsim仿真沒有想象的那麼難,我一直沒想着仔細研究一下,本來想着請教別人的,但是最後還是決定找資料,自己好好做一下。

我原先都是調試C語言程序,然後直接用硬件驗證的,沒有注意到仿真的重要性。在FPGA上面,仿真佔了很大的一部分。在我們實際驗證之前,就採用仿真來排除可能出現的錯誤,能夠節省很多時間。仿真過程中也可以讓我們更加深入的思考所設計的系統。因此Modelsim就顯得很重要了。

最初都是使用quartus進行直接調用的,對modelsim的整個操作流程還是不瞭解,後來直接用modelsim調用編寫的程序。

Modelsim也可以編譯verilog的程序的,我們可以建立一個空的工程進行編譯的。我們這裏使用的方法是在quartus裏面進行編譯。這兩種方法我都測試過,都是可以的。

下面現在列出具體的方法。

// 注意一點,最後我們仿真需要兩個文件,一個是我們的源文件.V文件,另外一個就是我們的testbench文件。我們最後仿真的時候,其實仿真的是testbench文件。

1),使用quartus編寫源文件,此處以38譯碼器爲例。

/*

   decode38  

*/

module decode_38(keyin,led,clk);

input clk;

input [2:0]keyin;

output [7:0]led;

reg [2:0]read_key;

reg [7:0]led;

always@(keyin)

begin

  read_key=keyin;

  case(read_key)

  3'd0: led=8'b1111_1110;

  3'd1: led=8'b1111_1101;

  3'd2: led=8'b1111_1011;

  3'd3: led=8'b1111_0111;

  3'd4: led=8'b1110_1111;

  3'd5: led=8'b1101_1111;

  3'd6: led=8'b1011_1111;

  3'd7: led=8'b0111_1111;

  default:

        led=8'b1111_1111;

  endcase

end

endmodule

(2)編寫testbench文件

`timescale 1 ns/ 1 ps

module decode_38_vlg_tst();

reg clk;

reg [2:0] keyin;

// wires                                               

wire [7:0]  led;

reg [3:0]invect;

initial

begin

  #10 clk=1'b0;

  forever 

   #10 clk=~clk;

end

initial

begin

  for(invect=0;invect<8;invect=invect+1)

   begin

  keyin=invect[3:0];

  #10 $display($time," clk=%b,keyin=%b,led=%b",clk,keyin,led);

end

end

 

initial

begin

  #120 $stop;

end

                        

decode_38 i1 (

// port map - connection between master ports and signals/registers   

.clk(clk),

.keyin(keyin),

.led(led)

);                                                   

endmodule

(3)啓動modelsim File->New->Project,建立工程

 

(4)保存新建的工程

 

(5)添加項目到建立的工程之中。此處選擇Add Existing File(因爲要仿真的文件我們已經編譯好了)

 

 

(6)選擇編譯好的文件。需要加載我們的.V文件,以及testbench文件,一次可以加載多個文件的。

 

 


 

(7)在“Project”選項卡中顯示剛纔加載的文件,此時Status狀態欄顯示“?”,因爲我們現在還沒有對其進行編譯呢

 


(8)選擇菜單欄Complie進行全編譯

 

 


(9)打開Library選項卡中的work庫,找到我們加載的兩個文件(.v .vt)。

 


(10)選中testbench文件,並右擊鼠標,準備simulate

 

(11)右擊我們的testbench文件,選中Add->To Wave-> All items in region

 

(12)設置仿真時間,我們這裏設置10ms

 

(13)在最下面的命令行窗口輸入”run”,或者選中Simulate->Run-All

 

(14)得到仿真結果



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章