testbench(1)
本文最后更新于:Wednesday, September 30th 2020, 8:01 pm
Testbench(1)
1、testbench的结构

testbench没有
输入输出接口测试模块只负责对
待测试系统接口提供激励信号;并监控输出testbench代码
不需要可综合,即不被实现成电路产生适当的激励并达到
覆盖率要求
2、测试激励的描述方式
信号的初始化
1
2
3
4
5第一种: initial 初始化
initial a = 0;
第二种: 定义信号时初始化
reg[3:0] cnt = 4'b1010;延迟控制
延迟语句
外部时间控制
1
2
3
4
5
6
7
8initial #5 a = b;(等待5tick后计算右端的值并赋值给左边👈)
等价于:
initial
begin
#5;
a=b;
end内部时间控制
1
2
3
4
5
6
7
8
9initial a = #5 b;(先计算右端的值,等待5tick后再把值赋给左边👈)
等价于
initial
begin
temp = b;
#5;
a = temp;
end验证程序如下:


可以清楚地看到:
第一种延时语句,在0-5tick之间只要b变化了,那么第五tick
时刻a被赋予的值就是b第五时刻的值。
而第二种延时语句:b的值在0时刻已经定好了,不管
b在这期间怎么变化,a最终得到的是b在0时刻的值。
事件语句
@(<事件表达式>);
@(<事件表达式>)行为语句;
1
2
3
4
5initial
begin
# 10
@(posedge en) in = ~in; //en的👆上升沿到来时,in取反
end事件语句
@必须等指定事件到来才执行等待语句
wait(<条件表达式>) 行为语句
1
2
3
4
5
6always
#5 cnt=cnt+1'b1;
initial
wait(cnt == 4'b1111)
$display($time,,,"cnt = %b", cnt);
end等待语句只有条件为真时才执行。

可以看到第0时刻cnt = 0
第5时刻cnt = 1
以此类推;直到第75时刻 cnt = 15
再过10tick 就终止仿真了。总过时常85tick
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!