ModelSim仿真入门

注:本文记录内容在ModelSim6.2b、ModelSim6.5、ModelSim10.1a中均做过。

本文以一个四分频的Verilog程序为例,记录一下自己学习的ModelSim的入门过程。除了帮自己加深记忆,希望对别人有一点帮助。

一,建立工程

点击”File”->”New”->”Project”,出现”Create Project”对话框,如图:

填入工程名,修改工程保存路径,其他的一般都保持不变。点击”OK”后,会出现如下对话框:

可以看出来,有多种方式可以添加源文件,也可以添加目录等。这里我选择”Create New File”,出现如下对话框:

输入文件名字,并选择文件类型位Verilog,然后点击”OK”。之后会在”Project”选项卡中出现你刚才建立的文件,我这里建立的是”clk_div”。可以看到状态栏有一个问号,这表示该文件还没有编译;双击该文件,出现编辑窗口,输入你的程序。这里我的四分频程序如下:
module clk_div
(
input wire clk,
input wire reset,
output wire div_clk
);
reg counter;
reg temp_divclk;
always@(posedge clk, negedge reset)
if(!reset)
begin
counter <= 1'b0;
temp_divclk <= 1'b0;
end
else if(counter >= 1'b1)
begin
counter <= 1'b0;
temp_divclk <= !temp_divclk;
end
else
counter <= counter + 1;

assign divclk = temp_divclk;
endmodule

输入完成后,保存。然后右键单击源文件,选择”Compile”->”Compile All”,如下图:

如果编译成功,会在下面输入命令的地方出现一行绿色的提示:”Compile of clk_div.v was successful”。如果有错误,则返回重新修改源文件,再编译,直到没有错误。

编译完后,点击”Library”标签栏,展开”work”库后,就可以看到编译后的设计文件了。

二,仿真

注:仿真有两种方式,一种是手动添加激励文件,另外一种是使用testbench文件。这里使用前者。

点击”Simulate”->”Start Simulate”,出现如下对话框,选择”work”下的”clk_div”。此处一定要注意,默认最下边的”Enable optimization”是选中的,一定要勾掉。因为我发现如果不勾掉的话,后面有的信号无法添加。

点击OK后,出现仿真界面。如下图:

为了观察波形,我们输入命令”view&nbps;signals wave”(当然也可以去view菜单里面添加),出现下图:

然后在”Objects”窗口中,选中要添加到”Wave”窗口中的信号(可以使用shift键和ctrl键多选),然后单击右键依次选择”Add”->”to Wave”->”Selected Signals”,便可以将想要观察波形的信号添加进去。如下图:


接下来,手动添加激励(添加一个50MHz的时钟):
为reset信号输入驱动:
force reset 0 0, 1 10

该命令表示0ns时刻reset的值为0,10ns以后reset的值为1
位clk信号输入驱动:
force clk 0 0, 1 10 -r 20

该命令表示0ns时刻clk的值为0,10ns开始clk值为1,-r 20表示在20ns处开始重复前面的状态。也即我们输入了一个(1/20ns)=50MHz的时钟。
然后开始仿真。输入命令”run 200us”,得到如下所示波形:

注:上面凡是用命令实现的都可以找到对应的GUI方式,但我发现其实命令特别好用,会有命令提示和自动补全。这可能是因为我是Linux用户,对命令行比较有好感。