Verilog入门设计(三)——组合电路和逻辑电路的仿真

一、测试平台(Test Bench)

  测试平台的作用是给我们的设计进行验证,通过给被测试模块施加激励信号,观察其输出,然后判断其逻辑功能与时序关系正确与否来判断这个设计是否符合需求。
在这里插入图片描述
  从图中可以看出,测试模块向待测木块施加激励信号,激励信号必须定义为reg类型,以保持其信号值。待测模块在激励作用下产生输出,输出信号必须定义为wire型。测试模块将输出信息按规定的格式以文本或图形输出,供用户检测。

1、测试程序一般结构

module 仿真模块名;//无端口列表

数据类型说明  //其中激励信号定义为reg类型,输出信号定义为wire类型
parameter、integer等定义
待测模块调用

激励向量定义(always、initial结构等,if-else/for/case/while/repeat/disable等控制语句)

显示格式定义($monitor、$display、$time等)
endmodule
  • 测试模块只有模块名,没有端口列表;输入信号(激励信号)必须定义为reg型,以保持其信号值;输出信号(显示信号)必须定义为wire型;
  • 在测试模块中调用待测试模块,在调用时应注意端口排列的顺序与模块定义时一致;
  • 一般用always、initial等过程快来定义激励信号,使用系统任务和系统函数来定义输出格式;在激励型号的定义中,可使用如下一些控制语句:if-else, for,forever,case,while,repeat,wait,disable,force,release,begin-end,fork-join等,这些控制语句一般只用在always、initial、function、task等过程快中。

2、激励信号产生方式举例

2.1 initial语句产生激励信号

`timescale 1ns/100ps
module test1;	//定义模块名
reg A,B,C;		//定义输入输出端口,本例只有输入端口,声明为reg类型
initial
begin
A=0;B=1;C=0;
#10 C=1;		//#n表示延迟10个时间单位,时间单位由timescale确定,本例中一个时间单位为1ns,精度为100ps。#10表示延迟10ns
#10 A=1;B=0;
#10 A=0;
#10 C=0;
end
initial $monitor($time,,,"A=%d,B=%d,C=%d",A,B,C);	//显示
endmodule

2.2 always语句产生激励信号

例1:

`timescale 1ns/1ns
module always_clk;
reg clk;
parameter CYCLE=100;
always #(CYCLE/2) clk=~clk;
initial clk=1;
initial $monitor($time,,,"clk=%d",clk);
endmodule

例2:

`timescale 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

树下等苹果

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值