本文章详细介绍了怎样用ModelSim仿真Verilog,虽然只是很简单的一个二分频器的例子,但却正式小白入门所需要的。
本教程以ModelSim
SE 10.4为例
1. 新建工程
file->new->project,输入工程名 例如half_clk
2. 新建文件
新建二分频器模块文件和testbench文件,分别为half_clk和half_clk_tb,注意type选择Verilog。
3. 编写模块文件和激励文件内容
half_clk.v
half_clk
1
2
3
4
5
6
7
8
9
10
11
12
|
module half_clk_dai(clk_in, rst, clk_out );
input clk_in, rst;
output clk_out;
reg clk_out;
always @(posedge clk_in or negedge rst)
begin
if(!rst)
clk_out<=0;
else
clk_out<=~clk_out;
end
endmodule
|
half_clk_tb.v
half_clk_tb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
`timescale
1ns/1ns
module half_clk_top;
reg clk_in;
reg rst;
initial
begin
clk_in=1;
rst=1;
#1000 rst=0;
#1000 rst=1;
end
always #200 clk_in=~clk_in;
half_clk_dai dai1(.clk_in(clk_in),.rst(rst),.clk_out(clk_out));
endmodule
|
4. 编译文件
编译前一定注意要保存文件!! 【ctrl+s】
点击工具栏按钮,编译全部文件,如果文件名后的status显示√就表示没有语法错误,编译成功。
否则
如果有错误可以双击红色的error查看具体的错误信息。
5. 工程仿真
点击工具栏的Simulation按钮进行仿真。
选择work->half_clk_top,因为只需要对testbench文件进行仿真就行,取消左下角的优化选项,因为可能会把object框里的信号量优化掉.
在 instance里显示了testbench的文件结构,有一个always和一个initial,调用的half_clk里有个一always循环。
在信号量上 右键->add > To Dataflow > Selected Items可以查看设计图
如果ware里没有信号可以右键->add wave添加,然后设置运行时间5ms,点击run,就会显示波形。
可以看到分频器正确运行,输出频率是输入频率的一半。