本文章详细介绍了怎样用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
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
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,就会显示波形。
可以看到分频器正确运行,输出频率是输入频率的一半。