Verilog学习笔记(03)


参考:Verilog数字VLSI设计教程
硬件描述语言Verilog
Verilog HDL数字设计与综合
Verilog HDL 数字集成电路高级程序设计

4. 测试仿真结构

对于一个典型的电路测试,一般会有一个信号源对它的目标电路进行激励,然后通过测试设备,对波形进行观察,然后确定电路的正确与否

下图为测试仿真的示意图:
在这里插入图片描述
流程图如下:
在这里插入图片描述
testbench的结构模板:

module 仿真模块名;
//数据类型声明
激励信号为reg型,显示信号为wire型

//实例化待测模块
<模块名><实例名><(端口列表)>;

//测试激励定义
always和initial过程块
function和task结构
if-elsecase等控制语句
//输出响应

endmodule

测试激励描述方式
(1)直接编辑测试激励波形。在测试环境中,用人工的方式去改变信号的电平,产生我们要求的向量,但效率较低
(2)用Verilog产生测试激励,效率相对较高
(3)利用Verilog从文本文件中读取数据。对于大规模集成电路以及可靠性要求较高的测试环境中,通常会使用

4.1 信号初始化

一般来说,testbench中信号初始化采用initial过程块来完成

4.2 延迟控制
1.延迟语句

(1)外部时间控制方式

initial #5 a=b;
等效于
initial 
begin 
	#5;
	a=b;
end

(2)内部时间控制方式

initial a=#5 b;
等效于
initial
begin
	temp=b;
	#5;
	a=temp;
end
2.事件语句
@(<事件表达式>);
@(<事件表达式>)行为语句;

例如

initial
begin
	#10;
	@(posedge en) in=~in;
end
3.等待语句
wait(<条件表达式>) 行为语句;

例如:

always #5 cnt=cnt+1'b1;
initial
wait(cnt==4'b1111)
$display($time,"cnt=%b",cnt);
4.3 initial和always过程块的使用
1. initial过程块

例:
在这里插入图片描述

`timescale 1ns/1ns
module wave_initial;
reg a; 
initial
begin
        a=1'b0;
        #5 a=1'b1; 
        #5 a=1'b0;
        #10 a=1'b1;
end
endmodule
2. always过程块

例:
在这里插入图片描述

`timescale 1ns/1ns
module wave_always;
reg clk; 
initial clk=1'b0;
always  #5 clk=~clk;
endmodule

4.4 串行与并行语句块产生测试信号
1. 串行语句块产生测试信号

例:
在这里插入图片描述

`timescale 1ns/1ns 
module serial_wave
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值