当前位置:   article > 正文

使用脚本文件快速启动Modelsim仿真_bat调用modelsim

bat调用modelsim

在仿真大工程的时候,如果每次都使用GUI界面创建modelsim工程,添加库,添加设计文件,编译并仿真观察波形这个过程有些浪费时间。因此,可以使用tcl命令编写脚本文件,执行这个脚本文件调用modelsim自动进行仿真可以大大缩减每次仿真的工作量,无需通过鼠标点点点进行操作。

首先编写一个.bat文件,使用文本编辑器编辑,保存的时候后缀改成.bat就行。

modelsim -do run_sim.do

然后编写tcl脚本文件,后缀改为.do

还是以之前的FFT IP仿真为例,通过编写tcl脚本启动仿真并观察波形。

  1. #工程存放地址(相对于.do文件的地址)
  2. set proc_dir "./"
  3. #创建工程 (在工程存放地址上自动创建work工作区和.mpf文件)
  4. project new $proc_dir fft_test
  5. #对已有的编译好的库进行映射(需要把已经编译好的库文件提前放到对应目录的文件夹里)
  6. #这里的地址是相对于.mpf工程文件的地址
  7. vmap altera $proc_dir/lib/altera
  8. vmap altera_ver $proc_dir/lib/altera_ver
  9. vmap altera_mf $proc_dir/lib/altera_mf
  10. vmap altera_mf_ver $proc_dir/lib/altera_mf_ver
  11. vmap altera_lnsim $proc_dir/lib/altera_lnsim
  12. vmap altera_lnsim_ver $proc_dir/lib/altera_lnsim_ver
  13. vmap lpm $proc_dir/lib/lpm
  14. vmap lpm_ver $proc_dir/lib/lpm_ver
  15. vmap twentynm $proc_dir/lib/twentynm
  16. vmap twentynm_ver $proc_dir/lib/twentynm_ver
  17. vmap twentynm_hssi $proc_dir/lib/twentynm_hssi
  18. vmap twentynm_hssi_ver $proc_dir/lib/twentynm_hssi_ver
  19. vmap twentynm_hip $proc_dir/lib/twentynm_hip
  20. vmap twentynm_hip_ver $proc_dir/lib/twentynm_hip_ver
  21. #在work工作区添加设计文件
  22. #FFT IP file
  23. project addfile $proc_dir/rtl/fft_ip/altera_avalon_st_sink_bfm.sv
  24. project addfile $proc_dir/rtl/fft_ip/altera_avalon_st_source_bfm.sv
  25. project addfile $proc_dir/rtl/fft_ip/altera_fft_dual_port_ram.vhd
  26. project addfile $proc_dir/rtl/fft_ip/altera_fft_dual_port_rom.vhd
  27. project addfile $proc_dir/rtl/fft_ip/altera_fft_mult_add.vhd
  28. project addfile $proc_dir/rtl/fft_ip/altera_fft_single_port_rom.vhd
  29. project addfile $proc_dir/rtl/fft_ip/apn_fft_cmult_cpx.vhd
  30. project addfile $proc_dir/rtl/fft_ip/apn_fft_cmult_cpx2.vhd
  31. project addfile $proc_dir/rtl/fft_ip/apn_fft_mult_can.vhd
  32. project addfile $proc_dir/rtl/fft_ip/apn_fft_mult_cpx.vhd
  33. project addfile $proc_dir/rtl/fft_ip/apn_fft_mult_cpx_1825.v
  34. project addfile $proc_dir/rtl/fft_ip/asj_fft_1dp_ram.vhd
  35. project addfile $proc_dir/rtl/fft_ip/asj_fft_1tdp_rom.vhd
  36. project addfile $proc_dir/rtl/fft_ip/asj_fft_3dp_rom.vhd
  37. project addfile $proc_dir/rtl/fft_ip/asj_fft_3pi_mram.vhd
  38. project addfile $proc_dir/rtl/fft_ip/asj_fft_3tdp_rom.vhd
  39. project addfile $proc_dir/rtl/fft_ip/asj_fft_4dp_ram.vhd
  40. project addfile $proc_dir/rtl/fft_ip/asj_fft_6tdp_rom.vhd
  41. project addfile $proc_dir/rtl/fft_ip/asj_fft_alt_shift_tdl.vhd
  42. project addfile $proc_dir/rtl/fft_ip/asj_fft_bfp_ctrl.vhd
  43. project addfile $proc_dir/rtl/fft_ip/asj_fft_bfp_i.vhd
  44. project addfile $proc_dir/rtl/fft_ip/asj_fft_bfp_i_1pt.vhd
  45. project addfile $proc_dir/rtl/fft_ip/asj_fft_bfp_o.vhd
  46. project addfile $proc_dir/rtl/fft_ip/asj_fft_bfp_o_1pt.vhd
  47. project addfile $proc_dir/rtl/fft_ip/asj_fft_burst_ctrl.vhd
  48. project addfile $proc_dir/rtl/fft_ip/asj_fft_burst_ctrl_de.vhd
  49. project addfile $proc_dir/rtl/fft_ip/asj_fft_burst_ctrl_qe.vhd
  50. project addfile $proc_dir/rtl/fft_ip/asj_fft_cmult_can.vhd
  51. project addfile $proc_dir/rtl/fft_ip/asj_fft_cmult_std.vhd
  52. project addfile $proc_dir/rtl/fft_ip/asj_fft_cnt_ctrl.vhd
  53. project addfile $proc_dir/rtl/fft_ip/asj_fft_cnt_ctrl_de.vhd
  54. project addfile $proc_dir/rtl/fft_ip/asj_fft_cxb_addr.vhd
  55. project addfile $proc_dir/rtl/fft_ip/asj_fft_cxb_data.vhd
  56. project addfile $proc_dir/rtl/fft_ip/asj_fft_cxb_data_mram.vhd
  57. project addfile $proc_dir/rtl/fft_ip/asj_fft_cxb_data_r.vhd
  58. project addfile $proc_dir/rtl/fft_ip/asj_fft_data_ram.vhd
  59. project addfile $proc_dir/rtl/fft_ip/asj_fft_data_ram_dp.vhd
  60. project addfile $proc_dir/rtl/fft_ip/asj_fft_dataadgen.vhd
  61. project addfile $proc_dir/rtl/fft_ip/asj_fft_dft_bfp.vhd
  62. project addfile $proc_dir/rtl/fft_ip/asj_fft_dft_bfp_sgl.vhd
  63. project addfile $proc_dir/rtl/fft_ip/asj_fft_dp_mram.vhd
  64. project addfile $proc_dir/rtl/fft_ip/asj_fft_dpi_mram.vhd
  65. project addfile $proc_dir/rtl/fft_ip/asj_fft_dualstream.vhd
  66. project addfile $proc_dir/rtl/fft_ip/asj_fft_in_write_sgl.vhd
  67. project addfile $proc_dir/rtl/fft_ip/asj_fft_lcm_mult.vhd
  68. project addfile $proc_dir/rtl/fft_ip/asj_fft_lcm_mult_2m.vhd
  69. project addfile $proc_dir/rtl/fft_ip/asj_fft_lpp.vhd
  70. project addfile $proc_dir/rtl/fft_ip/asj_fft_lpp_serial.vhd
  71. project addfile $proc_dir/rtl/fft_ip/asj_fft_lpp_serial_r2.vhd
  72. project addfile $proc_dir/rtl/fft_ip/asj_fft_lpprdadgen.vhd
  73. project addfile $proc_dir/rtl/fft_ip/asj_fft_lpprdadr2gen.vhd
  74. project addfile $proc_dir/rtl/fft_ip/asj_fft_m_k_counter.vhd
  75. project addfile $proc_dir/rtl/fft_ip/asj_fft_mult_add.vhd
  76. project addfile $proc_dir/rtl/fft_ip/asj_fft_pround.vhd
  77. project addfile $proc_dir/rtl/fft_ip/asj_fft_sglstream.vhd
  78. project addfile $proc_dir/rtl/fft_ip/asj_fft_si_de_so_b.vhd
  79. project addfile $proc_dir/rtl/fft_ip/asj_fft_si_de_so_bb.vhd
  80. project addfile $proc_dir/rtl/fft_ip/asj_fft_si_qe_so_b.vhd
  81. project addfile $proc_dir/rtl/fft_ip/asj_fft_si_qe_so_bb.vhd
  82. project addfile $proc_dir/rtl/fft_ip/asj_fft_si_se_so_b.vhd
  83. project addfile $proc_dir/rtl/fft_ip/asj_fft_si_se_so_bb.vhd
  84. project addfile $proc_dir/rtl/fft_ip/asj_fft_si_sose_so_b.vhd
  85. project addfile $proc_dir/rtl/fft_ip/asj_fft_tdl.vhd
  86. project addfile $proc_dir/rtl/fft_ip/asj_fft_tdl_bit.vhd
  87. project addfile $proc_dir/rtl/fft_ip/asj_fft_tdl_bit_rst.vhd
  88. project addfile $proc_dir/rtl/fft_ip/asj_fft_tdl_rst.vhd
  89. project addfile $proc_dir/rtl/fft_ip/asj_fft_twadgen.vhd
  90. project addfile $proc_dir/rtl/fft_ip/asj_fft_twadgen_dual.vhd
  91. project addfile $proc_dir/rtl/fft_ip/asj_fft_twadsogen.vhd
  92. project addfile $proc_dir/rtl/fft_ip/asj_fft_twadsogen_q.vhd
  93. project addfile $proc_dir/rtl/fft_ip/asj_fft_twid_rom_tdp.vhd
  94. project addfile $proc_dir/rtl/fft_ip/asj_fft_twiddle_ctrl_qe.vhd
  95. project addfile $proc_dir/rtl/fft_ip/asj_fft_unbburst_ctrl.vhd
  96. project addfile $proc_dir/rtl/fft_ip/asj_fft_unbburst_ctrl_de.vhd
  97. project addfile $proc_dir/rtl/fft_ip/asj_fft_unbburst_ctrl_qe.vhd
  98. project addfile $proc_dir/rtl/fft_ip/asj_fft_unbburst_sose_ctrl.vhd
  99. project addfile $proc_dir/rtl/fft_ip/asj_fft_wrengen.vhd
  100. project addfile $proc_dir/rtl/fft_ip/asj_fft_wrswgen.vhd
  101. project addfile $proc_dir/rtl/fft_ip/auk_dspip_avalon_streaming_block_sink.vhd
  102. project addfile $proc_dir/rtl/fft_ip/auk_dspip_avalon_streaming_block_source.vhd
  103. project addfile $proc_dir/rtl/fft_ip/auk_dspip_avalon_streaming_controller.vhd
  104. project addfile $proc_dir/rtl/fft_ip/auk_dspip_avalon_streaming_sink.vhd
  105. project addfile $proc_dir/rtl/fft_ip/auk_dspip_avalon_streaming_source.vhd
  106. project addfile $proc_dir/rtl/fft_ip/counter_module.sv
  107. project addfile $proc_dir/rtl/fft_ip/fft_4k_streaming.v
  108. project addfile $proc_dir/rtl/fft_ip/fft_4k_streaming_altera_fft_ii_191_dstukoq.sv
  109. project addfile $proc_dir/rtl/fft_ip/fft_4k_streaming_altera_fft_ii_191_dstukoq_tb.sv
  110. project addfile $proc_dir/rtl/fft_ip/fft_4k_streaming_altera_fft_ii_191_dstukoq_test_program.sv
  111. project addfile $proc_dir/rtl/fft_ip/hyper_pipeline_interface.v
  112. project addfile $proc_dir/rtl/fft_ip/twid_rom.vhd
  113. project addfile $proc_dir/rtl/fft_ip/altera_avalon_clock_source.sv
  114. project addfile $proc_dir/rtl/fft_ip/altera_avalon_reset_source.sv
  115. project addfile $proc_dir/rtl/fft_ip/auk_dspip_lib_pkg.vhd
  116. project addfile $proc_dir/rtl/fft_ip/auk_dspip_math_pkg.vhd
  117. project addfile $proc_dir/rtl/fft_ip/fft_pack.vhd
  118. project addfile $proc_dir/rtl/fft_ip/auk_dspip_text_pkg.vhd
  119. project addfile $proc_dir/rtl/fft_ip/auk_fft_pkg.vhd
  120. project addfile $proc_dir/rtl/fft_ip/avalon_utilities_pkg.sv
  121. project addfile $proc_dir/rtl/fft_ip/auk_dspip_roundsat.vhd
  122. project addfile $proc_dir/rtl/fft_ip/hyper_opt_OFF_pkg.vhd
  123. project addfile $proc_dir/rtl/fft_ip/verbosity_pkg.sv
  124. #User design file
  125. project addfile $proc_dir/rtl/FFT_test.v
  126. #tb file
  127. project addfile $proc_dir/rtl/tb/TB_test.v
  128. #全编译
  129. project calculateorder
  130. #执行仿真 进行部分优化 以ps为单位 仿真时要与仿真库建立连接
  131. vsim -voptargs=+acc -t 1ps -L altera -L altera_ver -L altera_mf -L altera_mf_ver -L altera_lnsim -L altera_lnsim_ver -L lpm -L lpm_ver -L twentynm -L twentynm_ver -L twentynm_hssi -L twentynm_hssi_ver -L twentynm_hip -L twentynm_hip_ver work.TB_test
  132. #添加波形 设置分组 格式 颜色等 -group xxx -radix xxx -color xxx
  133. add wave TB_test/FFT_0/fft_ip_u0/fft_ii_0/clk
  134. add wave TB_test/FFT_0/fft_ip_u0/fft_ii_0/reset_n
  135. add wave TB_test/FFT_0/fft_ip_u0/fft_ii_0/inverse
  136. add wave -group fft_sink TB_test/FFT_0/fft_ip_u0/fft_ii_0/sink_error
  137. add wave -group fft_sink TB_test/FFT_0/fft_ip_u0/fft_ii_0/sink_ready
  138. add wave -group fft_sink TB_test/FFT_0/fft_ip_u0/fft_ii_0/sink_valid
  139. add wave -group fft_sink TB_test/FFT_0/fft_ip_u0/fft_ii_0/sink_sop
  140. add wave -group fft_sink TB_test/FFT_0/fft_ip_u0/fft_ii_0/sink_eop
  141. add wave -group fft_sink TB_test/FFT_0/fft_ip_u0/fft_ii_0/sink_real
  142. add wave -group fft_sink TB_test/FFT_0/fft_ip_u0/fft_ii_0/sink_imag
  143. add wave -group fft_source TB_test/FFT_0/fft_ip_u0/fft_ii_0/source_error
  144. add wave -group fft_source TB_test/FFT_0/fft_ip_u0/fft_ii_0/source_ready
  145. add wave -group fft_source TB_test/FFT_0/fft_ip_u0/fft_ii_0/source_valid
  146. add wave -group fft_source TB_test/FFT_0/fft_ip_u0/fft_ii_0/source_sop
  147. add wave -group fft_source TB_test/FFT_0/fft_ip_u0/fft_ii_0/source_eop
  148. add wave -group fft_source TB_test/FFT_0/fft_ip_u0/fft_ii_0/source_real
  149. add wave -group fft_source TB_test/FFT_0/fft_ip_u0/fft_ii_0/source_imag
  150. add wave -group fft_source TB_test/FFT_0/fft_ip_u0/fft_ii_0/source_exp
  151. #设置运行时间
  152. run -all

注:

  1.如果没有事先编译好库文件,需要在tcl脚本里进行库的创建编译以及映射,这个仿真里库文件已经预先编译好了,所以只需要把编译好的库放到对应文件夹里,进行库映射就可以了。

  2.使用"-project calculateorder"命令自动全编译会方便很多。如果使用"-vlog"和"-vcom"命令一个一个编译文件,tcl脚本可能要写很多行,工作量太大了。而且"-vlog"和"-vcom"命令有编译先后顺序的要求,如果设计文件加入先后顺序不对,编译完可能会报错,但是"-project calculateorder"命令可以自动调整编译顺序,在添加设计文件的时候也就不需要考虑加入文件的顺序问题了。

 

仿真结果如下:

 

仿真验证通过。 

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

闽ICP备14008679号