Modelsim的仿真功能非常强大,本文介绍使用do脚本仿真单个Verilog或者VHDL文件的操作过程,希望对大家有用!
以带时钟和复位信号的计数器为例,代码如下:
module counter ( clk, n_rst, a, b, d );<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
input clk;
input n_rst;
input [7:0] a;
input [7:0] b;
output [8:0] d;
reg [8:0] d;
always@(posedge clk)
begin
if (!n_rst)
d <= 9'b000000000;
else
d <= a + b;
end
endmodule
然后编写如下内容的do格式文件:
1) vlib work
2) vmap work
3) vlog counter.v
4) vsim -L work work.counter -t 1ns
5) add wave -r /*
6) force -repeat 20 clk 0 0, 1 10
7) force n_rst 1
8) force a 16#AA
9) force b 16#BB
10) run 40
11) force n_rst 0
12) run 40
13) force n_rst 1
14) force a 16#55
15) force b 16#aaa
16) run 40
启动Modelsim,将工作目录切换到counter.v和counter.do文件所在目录,在命令框里输入do counter.do 即可自动进行仿真,显示的波形图如下:
counter.do 文件解释
1) 新建work库
2) 映射work库
3) 编译counter.v文件,默认编译到work库里
4) 仿真work库里名为counter的模块,时间单位为1ns
5) 将工程中所有信号量添加到波形图里
6) 添加时钟信号,周期为20(ns)。如果要改变时钟周期,代码中“20”和“10”要同时改变,且为两倍关系,“10”为一个周期中高电平所占时间。
7) 将n_rst 信号置1
8) 将a 赋值为16进制的AA (b10101010)
9) 将b 赋值为16进制的BB (b10111011)
10) 运行40ns,如图中的前两个周期
11) 将n_rst 置 0
12) 运行40ns,如图中的中间两个周期
13) 将n_rst 置 1
14) 将a 赋值为16进制55 (b01010101)
15) 将b 赋值为16进制 AA (b10101010)
16) 支行40ns,如图中后两个周期
补充:如果要仿真单个VHDL文件,只要将第3行换成vcom counter.vhd 即可。
可以下载本文的PDF版:
https://static.assets-stash.eet-china.com/album/old-resources/2010/6/19/bc4d19a7-5848-48d6-97d6-868ca7e9bdf5.rar
用户576008 2010-7-10 16:25