modelsim和quartus 联合调试

        下面是基于在Altera Quartus II 下如何调用M odelS im  进行仿真的一个实例。 本来想和上一张 modesin 破解应用一起讲解,但是我在写的时候发现太多了,为了清楚明了,我就单独出了一篇。
        Quartus II 9.1,modesim 版本为modesim 6.5a,Quartus无法像ISE 那样方便的直接调用ModelSim,而
是需要额外的做一些工作。这确实给我们的仿真调试带来了一些不便。我也是在摸索了好久以后才彻底搞定这个问题,下面分享下,力求明白易懂,让大家少走一些弯路。

 

1、首先我们写一个代码如下的文件,保存为.v,因为我们采用的是verilog语言,代码意思为DIV 输出一个2分频的一个时钟,我们这里为什么要用到时钟呢,因为在我们不用到时钟的modesim 仿真中,要简单很多,使用到时钟的modesim 仿真,要全面一点,因此,我们这里主要讲解这个。

module clkdiv    //clkdiv 这个名一定要跟文件名相同

      (

           clk,

           rst_n,

           div

      );

      input clk; //系统时钟

      input rst_n; //复位信号,低有效

      output div;  // 2  分频信号

      reg div;

     

      always  @  (posedge  clk or  negedge rst_n ) 

           if( !rst_n )

                 div <=  1'b0;

           else

                 div <= ~div;

endmodule

2、然后我们新建工程,新建工程与普通的新建工程是没区别的,最后一步的时候要注意,如下图


选择我们要使用的仿真软件和仿真语言,

3、然后我们编译一下这段代码,在文件夹下面就会多一个(工程目录)\simulation\modelsim 。这个下面生成的是仿真所需要的文件,其中.vo 文件就是我们的代码布局布线信息。

4、打开processing下的start目录下的start test bench template writer自动创建后

缀为vt的文件。


5、接下来我们打开  工程目录\simulation\modelsim\clkdiv.vt   进行编辑,其中默认生成的文件如下:

 

`timescale 1 ps/ 1 ps

module clkdiv_vlg_tst();

// constants                                          

// general purpose registers

reg eachvec;

// test vector input registers

reg clk;

reg rst_n;

// wires                                              

wire div;

 

// assign statements (if any)                          

clkdiv i1 (

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

      .clk(clk),

      .div(div),

      .rst_n(rst_n)

);

 

initial                                               

begin                                                 

// code that executes only once                       

// insert code here --> begin                         

                                                      

// --> end                                            

$display("Running testbench");                       

end                                                   

always                                                

// optional sensitivity list                          

// @(event1 or event2 or .... eventn)                 

begin                                                  

// code executes for every event on sensitivity list  

// insert code here --> begin                         

                                                      

@eachvec;                                              

// --> end                                            

end                                                   

endmodule

我们要注意到,默认的模块名字是  clkdiv_vlg_tst ,把我们所写的clkdiv.v文件封装成了  clkdiv i1 的文件名,通过write 连接。

因此我们需要修改下面的initial 文件,

 

`timescale 1 ps/ 1 ps

module clkdiv_vlg_tst();

// constants                                          

// general purpose registers

reg eachvec;

// test vector input registers

reg clk;

reg rst_n;

// wires                                              

wire div;

 

// assign statements (if any)                         

clkdiv i1 (

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

      .clk(clk),

      .div(div),

      .rst_n(rst_n)

);

 

initial begin

clk = 0;

forever

#10 clk = ~clk; 

end

initial begin

rst_n = 0;

#1000 rst_n =  1;

#1000;

$stop;

end

endmodule

 

修改完后的test bench 文件如上面代码。我们进行保存意思为:

上电后1us 复位信号

运行时间为 1us,(当然我们可以一直运行,这个我们可以自行设定)。

 

 

6、下面我们设置仿真选项,打开   Assignments --->  EDA Tool Settings 


其中在N ativeLink settings 选择 c ompile test bench  test bench 进行设置非常关键

参考如下:按“test benches…”进入设定如下

选择NEW


进入下面页面设置


test bench name 填写的是:simulation/modelsim 目录下的 clkdiv.vt 文件名 clkdiv 

Top level module  in test bench 填写的是:打开clkdiv.vt 文件内的module  名字。

Design  inst ance  name in  test  bench:   默认i1 . 

 

这里的文件名字,我们在修改test bench 已经讲过了。

 

完成以上步填写,在Test bench files 下面添加test bench files->clkdiv.vt点击OK

完成设置。

7、设置完成以后,在进行编译。

8、在quartus 调用 modesim


9、由于我们设置了仿真时间,默认就已经运行完了,得到如下波形


1us 后复位,然后运行1us 2分频,

10、如果我们需要一点一点的看,那么我们在下面的命令行中输入命令


首先我们结束当前仿真    quit –sim  回车


然后在 library 中找到 work 下面的工作文件


为什么要选择clkdiv_vlg_tst 文件仿真呢?在前面我们就说了,因为我们把clkdiv  封装成了一个文件,让clkdiv_vlg_tst 去调用,因此我们只需要仿真clkdiv_vlg_tst OK


添加仿真网络


假设我们先运行100ps,那么我们如数  run 100


得到如下波形


如果我们要运行 1ms ,那么出现如下:


其中波形为


这里提示为:

# Break in Module clkdiv_vlg_tst at F:/modelsim/san/simulation/modelsim/clkdiv.vt line 77

意思我们仿真超过了所设定的值。

 

到这里我们的仿真和modesim 基本应用就讲完咯!!  886


---------------------------------------------------------------------

转自:http://blog.csdn.net/ywhfdl/article/details/7467471


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: ModelSimQuartus可以联合仿真,实现硬件设计的验证和调试。具体步骤如下: 1. 在Quartus中生成设计文件,包括VHDL或Verilog代码、约束文件等。 2. 在Quartus中设置仿真波形,选择需要仿真的信号和时钟。 3. 在Quartus中生成仿真模型,包括仿真脚本和仿真模型文件。 4. 在ModelSim中打开仿真模型文件,加载仿真脚本。 5. 在ModelSim中运行仿真,观察仿真波形,验证设计的正确性。 需要注意的是,在联合仿真时,需要保证QuartusModelSim的版本兼容性,否则可能会出现兼容性问题。同时,也需要注意仿真波形的设置和仿真模型的生成,以保证仿真结果的准确性。 ### 回答2: ModelSimQuartus是两个常用的EDA(电子设计自动化)工具,在FPGA设计中有着广泛的应用。其中,Quartus是一个集成了各种设计工具,如原理图编辑器、综合工具、布局实现工具等的软件,用于FPGA的设计和开发。而ModelSim则是一种仿真工具,可以对电子电路的行为进行仿真。对于FPGA设计,ModelSim主要用于仿真设计的功能和性能,来验证设计的正确性。 在实际的FPGA项目开发中,通常需要进行联合仿真,即将Quartus生成的RTL代码和其它模块一同在ModelSim环境下进行仿真,以验证整个系统的正确性和性能。下面是ModelSimQuartus联合仿真的步骤: 1. 生成Quartus的RTL代码。在Quartus中完成设计后,通过综合和布局实现,生成需要仿真的RTL代码。 2. 生成QuartusModelSim的仿真文件。Quartus提供了一个“Generate Testbench”命令,可以自动生成用于和ModelSim联合仿真的仿真文件。通过这个命令,Quartus会生成仿真模块的顶层模块和仿真文件,包括了仿真信号的输入输出端口,以及其中的一些局部信号和时钟。 3. 添加Quartus库。由于Quartus独有的一些库函数,需要将这些库导入到ModelSim中才能使用。在ModelSim的工作区中,选择“Library”选项卡,点击“Add Library”按钮,选择Quartus的安装目录,将Quartus提供的库函数导入进来即可。 4. 运行仿真。完成前面的步骤后,就可以在ModelSim中运行这个设计的仿真了。首先,需要将仿真代码编译成可执行的模型库。选择“Compile All”命令进行编译。编译完成后,就可以运行仿真了。在ModelSim中,选择“Simulate” > “Start Simulation”命令,就可以开始仿真了。 5. 查看仿真结果。在仿真过程中,会记录下各种信号的状态变化。通过ModelSim提供的波形查看器(waveform viewer),可以查看仿真结果。通过查看波形,可以验证设计的正确性和性能,发现可能存在的问题。 总之,ModelSimQuartus联合仿真过程,需要在Quartus中生成仿真文件,添加Quartus库,然后在ModelSim中进行编译和运行仿真。通过联合仿真,可以验证整个FPGA设计的正确性和性能。 ### 回答3: ModelSimQuartus是两种常用的FPGA设计工具,其中Quartus用于FPGA设计和编译设置,而ModelSim则用于FPGA设计的功能仿真。如果要实现仿真,通常需要建立测试激励文件、仿真模型以及检查波形等。对于一些复杂的FPGA设计,ModelSim可能无法满足仿真要求,这时候可以考虑使用QuartusModelSim联合仿真。 联合仿真的流程如下:首先在Quartus中编译设计并生成输出文件,然后使用ModelSim来读取输出文件,并在其上运行波形仿真。通过这种方法,可以很轻松地进行功能仿真,以检查设计是否按预期工作并找出错误。 在ModelSim中进行仿真的优点是,它提供了更稳定的仿真环境,并可以使用Verilog、VHDL等多种仿真语言。同时,如果需要进一步分析和优化设计,可以使用ModelSim提供的调试工具来查看波形、检查寄存器和时序等信息。 然而,在进行联合仿真时也需要注意一些要点。首先,需要确保QuartusModelSim的版本兼容性,否则可能会导致仿真失败或产生错误。其次,在Quartus中设置仿真时需要勾选“NativeLink”选项,以便将仿真所需的文件和设置传递给ModelSim。最后,在ModelSim中运行仿真时需要指定仿真时钟频率,并验证仿真结果是否符合预期。 综上所述,联合仿真是一种有效的FPGA设计仿真方法,可以提高设计的准确性和可靠性。但是,需要在QuartusModelSim的版本兼容性、设置文件和仿真参数等方面仔细处理,以确保仿真结果正确。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值