当前位置:   article > 正文

modelsim自动化仿真脚本的思路_modelsim 辅助设计

modelsim 辅助设计

一、文件代码执行原理 

一、在 windows 系统下先执行名字叫做 run_simulation.bat 的批处理文件

这个文件的作用是:可以在批处理窗口选择需要仿真哪个模块,然后便调用仿真那个模块的 compile.do 文件

二、compile.do 文件是 modelsim 的自动仿真脚本

它首先会选取 名字叫 work 的仿真库,然后把设计代码文件 vlg_design.v 加入modelsim软件,接着把仿真代码 testbench_top.v 也加进modelsim软件 ,然后再 执行 wave.do文件 。

三、 这里有三个文件。分别是 设计文件 vlg_design.v,仿真文件testbench_top.v,波形显示文件wave.do

二、执行过程

一、文件结构

sim_102是桌面文件夹,打开后如图所示。

二、双击 run_simulation.bat 文件,弹出批处理窗口 

三、输入 “1”,然后回车,便会弹出 modelsim 的窗口。左下角显示没有错误,说明设计代码和测试代码无误。

 与此同时,这个批处理窗口变成这样

 

 四、点击 点击modelsim软件的 “Run All” 开始仿真波形。

点击 “Zoom Full(F)”便可以看到波形。

 

三、全部的脚本如下

1、run_simulation.bat 文件

  1. @echo off
  2. @cls
  3. title FPGA Auto Simulation batch script
  4. echo ModelSim simulation
  5. echo.
  6. echo Press '1' to start simulation
  7. echo.
  8. :input
  9. set INPUT=
  10. set /P INPUT=Type test number: %=%
  11. if "%INPUT%"=="1" goto run1
  12. goto end
  13. :run1
  14. @cls
  15. echo Start Simulation;
  16. echo.
  17. echo.
  18. cd testbench
  19. vsim -do "do compile.do"
  20. goto clean_workspace
  21. :clean_workspace
  22. rmdir /S /Q work
  23. del vsim.wlf
  24. del transcript.
  25. :end

2、compile.do 文件 。带有“#”号的表示是注释行,是不执行的代码。

  1. vlib work
  2. vmap work work
  3. #library
  4. #vlog -work work ../../library/artix7/*.v
  5. #IP
  6. #vlog -work work ../../../source_code/ROM_IP/rom_controller.v
  7. #SourceCode
  8. vlog -work work ../design/vlg_design.v
  9. #Testbench
  10. vlog -work work testbench_top.v
  11. vsim -voptargs=+acc work.testbench_top
  12. #Add signal into wave window
  13. do wave.do
  14. #run -all

3、wave.do 文件

add wave -position insertpoint sim:/testbench_top/*

4、vlg_design.v 文件

  1. `timescale 1ns/1ps
  2. module vlg_design(
  3. input clk,
  4. input rst_n,
  5. output reg clk_1mhz
  6. );
  7. `define CNT_MAX 100
  8. `define CNT_MAX_DIV2 `CNT_MAX/2
  9. reg[7:0] cnt;
  10. always @(posedge clk)
  11. if(!rst_n) cnt <= 8'd0;
  12. else if(cnt < (`CNT_MAX-1)) cnt <= cnt+1'b1;
  13. else cnt <= 8'd0;
  14. always @(posedge clk)
  15. if(!rst_n) clk_1mhz <= 1'b0;
  16. else if(cnt < `CNT_MAX_DIV2) clk_1mhz <= 1'b1;
  17. else clk_1mhz <= 1'b0;
  18. endmodule

5、testbench_top.v 文件

  1. `timescale 1ns/1ps
  2. module testbench_top();
  3. //参数定义
  4. `define CLK_PERIORD 10 //时钟周期设置为10ns(100MHz)
  5. //接口申明
  6. reg clk;
  7. reg rst_n;
  8. wire clk_1mhz;
  9. //对被测试的设计进行例化
  10. vlg_design uut_vlg_design(
  11. .clk(clk),
  12. .rst_n(rst_n),
  13. .clk_1mhz(clk_1mhz)
  14. );
  15. //复位和时钟产生
  16. //时钟和复位初始化、复位产生
  17. initial begin
  18. clk <= 0;
  19. rst_n <= 0;
  20. #1000;
  21. rst_n <= 1;
  22. end
  23. //时钟产生
  24. always #(`CLK_PERIORD/2) clk = ~clk;
  25. //测试激励产生
  26. initial begin
  27. @(posedge rst_n); //等待复位完成
  28. @(posedge clk);
  29. repeat(10) begin
  30. @(posedge clk);
  31. end
  32. #10_000;
  33. $stop;
  34. end
  35. endmodule

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

闽ICP备14008679号