[SV]Modelsim仿真图文教程 --- Windows下进行SystemVerilog与UVM仿真

                            Modelsim仿真图文教程

                                       --- Windows下进行SystemVerilog与UVM仿真

       

       Modelsim仿真没有想象的那么难,我一直没想着仔细研究一下,本来想着请教别人的,但是最后还是决定找资料,自己好好做一下。

       我原先都是调试C语言程序,然后直接用硬件验证的,没有注意到仿真的重要性。在FPGA上面,仿真占了很大的一部分。在我们实际验证之前,就采用仿真来排除可能出现的错误,能够节省很多时间。仿真过程中也可以让我们更加深入的思考所设计的系统。因此Modelsim就显得很重要了。

       最初都是使用quartus进行直接调用的,对modelsim的整个操作流程还是不了解,后来直接用modelsim调用编写的程序。

       Modelsim也可以编译verilog的程序的,我们可以建立一个空的工程进行编译的。我们这里使用的方法是在quartus里面进行编译。这两种方法我都测试过,都是可以的。

       下面现在列出具体的方法。 

// 注意一点,最后我们仿真需要两个文件,一个是我们的源文件.V文件,另外一个就是我们的testbench文件。我们最后仿真的时候,其实仿真的是testbench文件。

(1)使用quartus编写源文件,此处以38译码器为例

/*
   decode38  
*/

`timescale 1ns/1ps

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 = '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 begin
    #10 clk=~clk;
  end
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)得到仿真结果

 

 

五、本文转自

 5.1、Link

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值