Modelsim仿真查看内部信号

1. 配置仿真工具

在Quartus 中,选择Assignments->Settings,然后再弹出的对话框左侧选择EDA Tool Settings->simulation,可以进行仿真的配置,如Tool name, Format(VHDL/Verilog/...), TestBench, simulation script等。


2. 从Quartus中运行Modelsim

Tools->Run EDA simulation Tool,有两个选项,EDA RTL simulation就是功能仿真,EDA Gate level simulation 就是时序仿真。选择后Modelsim会自动启动,并打开Wave窗口,显示testbench 中的波形。


3. 查看内部信号

如果使用以上的方法,打开的信号波形默认都是testbench里面定义的。有时候需要查看模块内部信号,也是很方便的。

可以在sim窗口中一层一层找到的所在的instance,选中,这样就会在Object上窗口出现所用到的信号。选择需要的拖到Wave窗口即可。

也可以在Transcript窗口输入命令add wave /testbench_name/design_unit_name/signal_name。这个名字是路径的形式,一层一层写下去的。如果不知道,可以把鼠标悬浮在Object对应的信号上,会出现这个信号的完整路径。


4. 写Modelsim的script

但是这两种方法都比较麻烦,因为每次从Quartus中调用Modelsim的时候都会进行默认配置,这就需要每次都要重新添加信号,调整顺序。对了,还得先选择simulate->start simulation,添加信号后,再选择simulate->run -all。

其实,根据上面写的命令,可以把我么想要的添加信号操作都放在一个脚本文件(.do)中,然后在Quartus的仿真器配置中,勾选use script to set up simulation,并选择script文件路径。这样每次每次启动的时候,都按照文件中的一条一条命令执行了,省了很多事。

关于脚本文件的写法,也不用那么复杂。仿真的时候,有个默认的脚本文件,在仿真文件目录下,.do的那个。例如我的文件viterbi_run_msim_rtl_vhdl.do的内容如下:

transcript on
if {[file exists rtl_work]} {
	vdel -lib rtl_work -all
}
vlib rtl_work
vmap work rtl_work


vcom -93 -work work {C:/Users/Du/MyWork/WiFi-FPGA/viterbi/pkg_param.vhd}
vcom -93 -work work {C:/Users/Du/MyWork/WiFi-FPGA/viterbi/pkg_trellis.vhd}
vcom -93 -work work {C:/Users/Du/MyWork/WiFi-FPGA/viterbi/dec_viterbi.vhd}
vcom -93 -work work {C:/Users/Du/MyWork/WiFi-FPGA/viterbi/dec_viterbi_tb.vhd}


vsim -t 1ps -L altera -L lpm -L sgate -L altera_mf -L cycloneive -L rtl_work -L work -voptargs="+acc" dec_viterbi_tb


add wave *
view structure
view signals
run -all


看到了倒数第四句,意思是添加所有信号,这时我们就可以按照需要添加我们需要的信号。改后成为:myscript.do

transcript on
if {[file exists rtl_work]} {
	vdel -lib rtl_work -all
}
vlib rtl_work
vmap work rtl_work

vcom -93 -work work {C:/Users/Du/MyWork/WiFi-FPGA/viterbi_ver2/pkg_param.vhd}
vcom -93 -work work {C:/Users/Du/MyWork/WiFi-FPGA/viterbi_ver2/pkg_trellis.vhd}
vcom -93 -work work {C:/Users/Du/MyWork/WiFi-FPGA/viterbi_ver2/dec_viterbi.vhd}
vcom -93 -work work {C:/Users/Du/MyWork/WiFi-FPGA/viterbi_ver2/acs.vhd}
vcom -93 -work work {C:/Users/Du/MyWork/WiFi-FPGA/viterbi_ver2/dec_viterbi_tb.vhd}

vsim -t 1ps -L altera -L lpm -L sgate -L altera_mf -L cycloneive -L rtl_work -L work -voptargs="+acc" dec_viterbi_tb

add wave /dec_viterbi_tb/u1/clk_in
add wave /dec_viterbi_tb/u1/clk_out
add wave /dec_viterbi_tb/u1/cnt_dec
add wave /dec_viterbi_tb/u1/gen_acs__63/inst_acs/inrecv
add wave /dec_viterbi_tb/u1/gen_acs__63/inst_acs/inprepm_high
add wave /dec_viterbi_tb/u1/gen_acs__63/inst_acs/inprepm_low
add wave /dec_viterbi_tb/u1/gen_acs__63/inst_acs/v_high
add wave /dec_viterbi_tb/u1/gen_acs__63/inst_acs/v_low
add wave /dec_viterbi_tb/u1/gen_acs__63/inst_acs/outpm
add wave /dec_viterbi_tb/u1/gen_acs__63/inst_acs/outsp


add wave /dec_viterbi_tb/u1/pmm

view structure
view signals
run -all

这样只要在Quartus中设置了这个myscript.do 文件,程序运行的时候就可以自动按照里面的命令执行了。

也可以在Transcript窗口输入do myscript.do执行。这样还有一个好处就是,不用每次综合完,都要关一下仿真器,再重新启动,只需要综合完,在Modelsim的命令窗口输入个do myscript.do 就好了。我是这样做的,感觉方便了不少,不知道还有没有更好的方法。



你可能感兴趣的:(FPGA)