当前位置:   article > 正文

QuartusII Modelsim使用教程_quartus ii modelsim

quartus ii modelsim

我的博客:QuartusII Modelsim使用教程 | Infinite journey (infinite-zh.com)

QuartusII中Modelsim是一个很好的仿真软件,相较于VWF,它的仿真时间更长、显示更具体、界面更友好,另外Modelsim还可以结合TestBench来进行仿真,省去了自己设置信号的过程。本文将从以下几个方面来介绍Modelsim的使用:

  • 1、Modelsim联合TestBench进行仿真;
  • 2、Modelsim仿真的几个小窍门;
  • 3、Modelsim软件的bug

1、Modelsim联合TestBench进行仿真

我一开始的时候对TestBench很不习惯,因为一搜TestBench就有各样的语法,让人头大,但后来在我写了一两个之后,我就不禁发出感叹“我是**”,TestBench免去了我打开modelsim之后,手动配置输入信号、时钟等,大大提高了我的仿真效率。

在Verilog代码写好编译好之后,可以通过Processing->Start->Start Test Bench Template Writer来自动生成一个TestBench模板。我们可以看到他是长这个样子的

  1. // Copyright (C) 2017 Intel Corporation. All rights reserved.
  2. // Your use of Intel Corporation's design tools, logic functions
  3. // and other software and tools, and its AMPP partner logic
  4. // functions, and any output files from any of the foregoing
  5. // (including device programming or simulation files), and any
  6. // associated documentation or information are expressly subject
  7. // to the terms and conditions of the Intel Program License
  8. // Subscription Agreement, the Intel Quartus Prime License Agreement,
  9. // the Intel FPGA IP License Agreement, or other applicable license
  10. // agreement, including, without limitation, that your use is for
  11. // the sole purpose of programming logic devices manufactured by
  12. // Intel and sold by Intel or its authorized distributors. Please
  13. // refer to the applicable agreement for further details.
  14. // *****************************************************************************
  15. // This file contains a Verilog test bench template that is freely editable to
  16. // suit user's needs .Comments are provided in each section to help the user
  17. // fill out necessary details.
  18. // *****************************************************************************
  19. // Generated on "05/17/2020 21:30:07"
  20. // Verilog Test Bench template for design : AES_encryp
  21. //
  22. // Simulation tool : ModelSim-Altera (Verilog)
  23. //
  24. `timescale 1 ps/ 1 ps
  25. module AES_encryp_vlg_tst();
  26. // constants
  27. // general purpose registers
  28. reg eachvec;
  29. // test vector input registers
  30. reg clk;
  31. reg [127:0] iKey;
  32. reg [127:0] iPlaintext;
  33. reg rst_n;
  34. // wires
  35. wire [127:0] oCiphertext;
  36. // assign statements (if any)
  37. AES_encryp i1 (
  38. // port map - connection between master ports and signals/registers
  39. .clk(clk),
  40. .iKey(iKey),
  41. .iPlaintext(iPlaintext),
  42. .oCiphertext(oCiphertext),
  43. .rst_n(rst_n)
  44. );
  45. initial
  46. begin
  47. // code that executes only once
  48. // insert code here --> begin
  49. // --> end
  50. $display("Running testbench");
  51. end
  52. always
  53. // optional sensitivity list
  54. // @(event1 or event2 or .... eventn)
  55. begin
  56. // code executes for every event on sensitivity list
  57. // insert code here --> begin
  58. @eachvec;
  59. // --> end
  60. end
  61. endmodule

在这里特别提一下最后一个@eachvec 这一串代码,虽然具体不知道这段代码的作用,但如果加上这段代码,那么在进行Modelsim仿真的时候,仿真时间会特别短,clk也无法振动起来,因此再写需要clk的TestBench时建议将@eachvec这一段去了。

那么接下来编写TestBench就变得十分容易,你可以在initial中加入你要初始化的变量,例如rst_n,初始输入的数据等等,除此之外还可以通过#延时,来增加新的输入。然后在always中进行clk的实现,下面是加入初始化变量和时钟的部分TestBench代码。

  1. initial
  2. begin
  3. // code that executes only once
  4. // insert code here --> begin
  5. begin
  6. #0 clk = 0;
  7. rst_n = 0;
  8. #5 rst_n = 1;
  9. iKey = 128'h31_32_33_34_35_36_37_38_39_30_31_32_33_34_35_36;
  10. iPlaintext = 128'h30_39_38_37_36_35_34_33_32_31_36_35_34_33_32_31;
  11. #1000 rst_n = 0;
  12. #5 rst_n = 1;
  13. iKey = 128'h30_39_38_37_36_35_34_33_32_31_36_35_34_33_32_31;
  14. iPlaintext = 128'h31_32_33_34_35_36_37_38_39_30_31_32_33_34_35_36;
  15. // --> end
  16. $display("Running testbench");
  17. end
  18. always
  19. // optional sensitivity list
  20. // @(event1 or event2 or .... eventn)
  21. begin
  22. // code executes for every event on sensitivity list
  23. // insert code here --> begin
  24. #10 clk = ~clk;
  25. // --> end
  26. end
  27. endmodule

在写了一两个TestBench之后,也可以去了解一下repeat等的函数,来进一步提高编写TestBench的能力。

以下是配置Modelsim启用TestBench。

点击菜单栏的Assignments->setting->EDA Tool Settings->Simulation如下图所示

之后就一直Ok,然后就可以打开Modelsim进行仿真了。

2、Modelsim仿真的几个小窍门

1、在使用Modelsim时,我们常常会发现代码的问题然后去修改,那么修改了代码之后如何重新Modelsim仿真呢

如上图所示,只要在Modelsim中的Library->work->修改代码的文件->Recompile即可重新编译,不需要再每次重启Modelsim。

在之后如何重新运行Modelsim

如图所示,Simulate->Restart 选择OK即可,在之后run即可

值得一提的是,run不仅可以通过Simulate->run 还可以在如下图中直接输入run 100来运行仿真

2、如何在Modelsim中加入别的变量?

如上图所示,我们可以在sim中选择相应的模块,其中的assign是你在头文件中定义的变量。

另外再加入变量后,需要Restart Modelsim仿真,这样才可以看到数据一开始的变化过程,当然如果不进行Restart,也可以看到你加入变量之后的时间段的结果。

3、Modelsim的软件Bug

Modelsim因为版本问题,可能会有一些的坑,我这里记录一个我最近遇到的坑,之后又新的坑会再继续更新。

1、关于Modelsim无法找到mif文件的问题

在我使用的Quartus17.1的自带的Modelsim中,当我使用ROM IP核的时候,我通过Mif文件写入,但通过modelsim仿真却发现,mif文件并没有能够被modelsim读出来,我也搜索了许多的解决方案,例如,将mif文件放在simulation文件夹下,或者说将mif文件放在工程文件下,但最后都不好使。最后我找到了解决方案:将mif文件的路径改成绝对路径,如下图所示。(PS:这个可能看脸,我同学的同样版本的quartus和modelsim他就可以读出来......)

具体就先更新这么多,日后在实践中又遇到新的问题再回来更新哈。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/790409
推荐阅读
相关标签
  

闽ICP备14008679号