|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
Testbench入门
% r. S6 F$ z5 R! v& p$ I编写 testbench目的* y h( f& B, t
编写 testbench 的主要目的是为了对使用硬件描述语言(HDL)设计的电路进行仿真验2 @* u( e2 v0 s3 K, ~$ z% K' k
证,测试设计电路的功能、部分性能是否与预期的目标相符。
2 z! S9 Y; l' I" D) f& X3 _编写 testbench进行测试的过程如下:
8 i: R$ _, u$ m4 g5 ^: t1)产生模拟激励(波形);
1 g; d' o: o1 T- O) I. E* O$ n2)将产生的激励加入到被测试模块并观察其输出响应;
; Y7 R3 @: v6 b- x( Y. i3)将输出响应与期望进行比较,从而判断设计的正确性。
! b0 W( o: z$ t0 `( w3 e. n7 g2 基本的 testbench结构
' x9 F/ o5 U& Z4 v* \" Mmodule test_bench;
* ~9 c. S `" G, @$ k" H// 通常 testbench没有输入与输出端口) v3 P9 _5 y5 `, r3 O2 F
信号或变量定义声明7 a1 z1 [ {1 l" _" N7 i
使用 initial或&nBSP; always语句来产生激励波形. e8 s9 b4 W1 m
例化设计模块
' |& Q5 j7 _$ J- C* c2 R% S监控和比较输出响应
( S2 a8 K" H5 a% iendmodule" j) A: f) [' Z
简单的 testbench 的结构通常需要建立一个顶层文件,顶层文件没有输入和输出端口。! i6 b+ o9 w" H# @9 D7 F; U7 c4 E
在顶层文件里,把被测模块和激励产生模块实例化进来,并且把被测模块的端口与激励模块" [! J& [) y6 l$ l7 q
的端口进行对应连接,使得激励可以输入到被测模块。端口连接的方式有名称和位置关联两
* O5 B% ~; ~8 q8 H5 u0 h. @种方式,我们常常使用“名称关联”方式。
: ~ R1 y$ C1 Y3 产生激励的一些描写方式
8 T' ~8 O |* w3.1 产生时钟的几种方式6 N+ _5 }0 x" O. A9 t7 L$ z) b
1)使用 initial方式产生占空比 50﹪的时钟/ a3 h' m0 N9 u2 ~" a; ?, Q
initial
% {) s4 B" }2 S5 c3 ubegin
; I6 O; S" L9 cCLK = 0;
6 H8 C: B H' O8 Y: S" I& u1 K#delay;
- J8 w( i+ |" h% G+ \9 E, `* P3 Hforever
" c3 B y' n7 N6 s) |% J+ T1 A/ t#(period/2) CLK = ~CLK;/ t! g. K2 `1 ?$ g1 j1 x
end
9 B6 T! t- ~8 q" D% p注意:一定要给时钟赋初始值,因为信号的缺省值为 z,如果不赋初值,则反相后还是
- V2 n6 m/ L8 iz,时钟就一直处于高阻 z状态。
7 m" \. A6 J, F2 c' N8 Q
* o" M6 V3 s, p! I完整资料见附件:
/ L: _$ u* }, S: i. G |
|