我是靠谱客的博主 傻傻香菇,最近开发中收集的这篇文章主要介绍Modelsim 第一个仿真程序 四位加法器,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

4位全加器

//4位全加器
module a4(sum,cout,a,b,cin);

input [3:0] a,b;
input cin;
output cout;
output [3:0] sum;
assign {count,sum} = a+b+cin;
endmodule

4位全加器的仿真程序

//4位全加器的仿真程序
`timescale 1ns/1ns 
`include "MyFirstVerilog.v"
module add3_top; 测试模块的名字
reg[3:0] a,b;//测试输入信号定义为 reg 型
reg cin;  
wire[3:0] sum;//测试输出信号定义为 wire 型
wire cout; integer i,j;
a4 adder(sum,cout,a,b,cin); //调用测试对象
always #5 cin=~cin;//设定 cin 的取值
initial 
begin  a=0;b=0;cin=0; 
for(i=1;i<16;i=i+1)
#10   a=i;  //设定 a 的取值
end 
initial
begin 
for(j=1;j<16;j=j+1)
#10   b=j;//设定 b 的取值
end
initial
//定义结果显示格式
begin 
$monitor($time,,,"%d + %d + %b={%b,%d}",a,b,cin,cout,sum);
#160 
$finish; 
end 
endmodule 

窗口效果
在这里插入图片描述
wave窗口
在这里插入图片描述
可以把波形缩放到合适大小,这样能看清细节
在这里插入图片描述

测试模块的编写——initial语句

首先说说结构化过程语句,在verilog中有两种结构化的过程语句:initial语句always语句,他们是行为级建模的两种基本语句。其他所有的行为语句只能出现在这两种语句里。

与C语言不同,verilog在本质上是并发,而非顺序的。
verilog中的各个执行流程(进程)并发执行,而不是顺序执行的。
每个initial语句和always语句代表一个独立的执行过程,每个执行过程从仿真时间0开始执行并且两种语句不能嵌套使用。

下面举例解释之:

initial语句

所有的initial语句内的语句构成了一个initial块。initial块从仿真0时刻开始执行,在整个仿真过程中只执行一次。
如果一个模块中包括了若干个initial块,则这些initial块从仿真0时刻开始并发执行,且每个块的执行是各自独立的。
如果在块内包含了多条行为语句,那么需要将这些语句组成一组,一般式使用关键字begin和end将他们组合在一个块语句;如果块内只有一条语句,则不必使用begin和end.下面给出了initial语句的例子:

module stimulus 

reg x,y, a,b, m 

initial 
m = 1*b0; 

initial 
begin 
#5 a = 1*b1; 
#25 b = 1*b0; 
end 

initial 
begin 
#10 x = 1*b0; 
#25 y = 1*b1; 
end 

initial 
#50 $finish; 

endmodule 

在上面例子中,三条initial语句在仿真0时刻开始并行执行。
如果在某一条语句前面存在延迟#,那么这条initial语句的仿真将会停顿下来,在经过指定的延迟时间之后再继续执行。因此上面的initial语句执行顺序为:

时间 所执行的语句 
0 m = 1*b0; 
5 a = 1*b1; 
10 x = 1*b0; 
30 b = 1*b0; 
35 y = 1*b1; 
50 $finish;

仿真时,出现:Error loading design 错误

遇到过类似的问题,代码编译没问题,但modelsim启动仿真的时候会报错,说Error loading design。一般都是一些内部信号定义不一致之类的问题。比如设计中有两个子模块A和B,A给B传递一个信号,但是A的输出端口和B的输入端口中,这个信号的类型、位宽等定义的不一致。这样的代码在编译时是检查不到语法错误的,在启动仿真时才能检测到两个模块之间的这个信号对接不上,所以才会报错。你再检查一下modelsim的日志文件(工程目录下的transcript),一般都能找到出问题的模块。Ps:编译通过只是说明代码中没有语法错误了,所以编译通过不代表代码就没问题了。

最后

以上就是傻傻香菇为你收集整理的Modelsim 第一个仿真程序 四位加法器的全部内容,希望文章能够帮你解决Modelsim 第一个仿真程序 四位加法器所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部