1 引言 " U0 n/ s4 w+ Y0 \ 2 X: y; |$ H1 C1 m4 Z & F5 r' o; o5 J! r5 o ^" o" I$ D+ |# v8 B- p4 f0 \" w" Y
在对复杂数字系统进行仿真测试时,设计者常常面对测试向量数量庞大而难以实现的问题。以数字图像处理系统的仿真测试为例,如果采用完备性测试方法.那么所需测试向量的数量将非常巨大,甚至无法实现:而采用测试向量波形图或者用HDL语言描述等常用方法.不仅仿真测试工作的效率低下,而且工作量巨大。在数字图像处理系统中,一帧320x240的数字图像所产生的测试向量数量达到320x240x2=153 600个。无论采用完备性测试方法还是向量波形图或者.HDL语言描述的方法,由于测试向量的数量极其巨大,采用这些方法都难以进行仿真测试。 , \% c* Q* h! {; o, ~ & j- i. y" `3 p8 w( _- r ; ?/ u0 {5 Z1 S; S- z; z0 Y
9 _" c U" Z1 H' K/ \ `9 B 针对这个难题,笔者提出一种进行仿真测试的新方法.该方法应用TEXTI0和:MATLAB来辅助仿真测试过程.使测试向量数量巨大、难以处理的难题得到很好的解决。以电视视频系统中实时多目标捕获单元的仿真测试为例.对这种新方法进行全面的讨论。9 a4 P$ Y" q4 C# ]: f. l4 S
* i9 }+ I: Z" f' Z 6 s' n2 A+ {! p5 B+ Q; n
( c8 n t# w6 |0 y4 U% z0 E+ u
2 基于TEXTIO的VlII)L仿真 5 b/ |, o h h' s & K5 U+ [8 K$ Z5 C% u- a# \* l 5 F2 {# S2 e0 X
5 N9 _) {; X6 p
2.1 TEXTIO的功能 ' l! ]% |$ T& D" }0 ? 0 T( O( n$ r" d/ L. R2 f% } % F m/ N! d+ r5 X6 R {5 u4 b! P. t9 {- b2 F: E7 L" }
TEXXTl0是VHDL标准库STD中的程序包(Package),它提供了VHDL与磁盘文件直接访问的桥梁。TEXTIO定义了3种类型:LINE类型、TEXT类型及SIDE类型。TEXTI0在程序包中定义了一些访问文件的过程(Procedure)。& @6 u6 j# [- a4 ~) s/ [
, ?( I2 |6 `: P0 ~! Y2 z" `
* }/ U% g) x0 P7 e- x ' o( U2 c% w# N! c- a TEXTIO提供的基本过程有: r: p. Y2 \6 h, C1 V0 e
( g7 L8 x, ?+ }- T2 r1 u% C 2 \* s! d& N# g4 k+ N) \1 c8 W1 ~" c, P5 A6 g
(1)procedure READLNE(文件变量,行变量),用于从指定文件读取一行数据到行变量中; 9 V( O! D. @6 M/ f& E- {0 k7 f, o* K9 N4 t( \" h" F- T
(2)procedure WRITELNE(文件变量,行变量),用于向指定文件写入行变量所包含的数据; $ ^" a& M! K6 y5 v - Q g0 i% p- O1 ?. e r (3)procedure READ(行变量,数据类型),用于从行变量中读取相应数据类型的数据.根据参数的数据类型及参数个数的不同.有多种重载方式,TEX-TIO提供了bit、bit、bit_vector、BOOLEAN、character、in-teger、real、string、time数据类型的重载; * ^4 h9 K' n' l3 h( a( E5 @. w# H; M K
(4)mcedure WRITE(行变量,数据变量,写入方式,位宽),该过程将数据写入行变量。其中,写入方式表示写在行变量的左边还是右边,其值只能为left或right,位宽表示写入数据时占的位宽。例如write(Oufljne,OutData,left,2/表示将变量OutData写入LINE 变量OutLine的左边,占2个字节。 @* N( R% r9 n# o6 H0 B
, |) I$ P) M. V" j* @ . a" z/ Z8 b/ G m( D; T8 B0 J+ S, q 2.2 仿真测试方案 9 @7 x5 \( d. w6 o) S8 W# O $ P ? M0 V+ b- N3 U " P: ]& v6 c" u3 q2 [ 2 F, \+ g0 z, ^) X& d/ M( w: ] 使用TEXTO和MNTLAB辅助TestBench进行复杂数字系统仿真的方案框图如图1所示。4 f) Y$ X4 w7 a
! Z* Q2 `$ \; }* }) K% G7 C# v
# T# g( A& {: H HORTIME=64;%行正逆程总时间 * ]- ~: Q) s ~( z$ o2 V7 m; r2 \/ p
VSYTIME=1615; %场信号时间(μB) f, A" X: g5 j% T2 y) E0 ~! t
$ C5 v6 p. A' q, n3 y T/ u8 I7 V; f PPDOT=POSTIME*FZ/XN; %行正程时间*晶体振 ' t) R- e0 s) u$ A* S/ p( } % ]/ ?3 N6 G9 d5 m 荡器频率,图像X方向分辨率 0 ?+ G/ e F8 s: Q" E2 ?1 l 3 ^# ^0 k0 z2 k …… $ v1 B S( x% w H; n6 y+ [1 k. o% F: Q% R
9 d- V9 A) Q5 `8 }$ f" D: c( y6 P hsy<=vhsy;一驱动待测单元的输入信号hsy 6 {) K: L3 N& N' B# }4 Y- ?0 H 1 v, U! M% y2 r+ R; E' [ vsy<=wsy;一驱动待测单元的输入信号vsy $ f9 p8 j" F; O3 f; ]1 G+ S J7 l8 W- O0 T; b6 q
…… `) m" X6 H) h2 K0 A
/ L) K5 b: v/ A% o* D 2 G8 m; v! M& S$ i) ]5 ^4 p1 f6 U" g' J
caseiis. t+ r! r6 q! r4 ^3 ?. d
$ H4 Y! F/ R3 \& Y. }$ u( F2 V
when 0=>out_string:=“frame_Yup0:”:一将目标0左上角Y坐标写入仿真结果, t' d& B1 o% k4 F
% R* y. `7 x3 S! c* k5 t+ y when 1=>out_string=“frame_Ydn0:”:一将目标0右下角Y坐标写入仿真结果2 g; z; D% P; G/ _5 i' O6 D
& n$ H' m& s7 u when 14=>out_strlng:=“frame_Xli3:”:一将目标3左上角X坐标写入仿真结果 ! A; p% a0 W1 o) m) B! i4 m* s" I 6 r$ B y* b; \' M7 I when 15=>out_string:=“frame_Xrt3:”:一将目标3右下角X坐标写入仿真结果! _8 D L+ Q* A* i9 r, M3 H
/ V4 U5 a( t4 \9 h when other8=>null; 5 m, e* {0 W' B9 `8 I) B 6 N- n R8 I! H# f: E/ Q) x end case; & \7 w- }! [7 E/ x6 X j( T- L4 x6 B; K( ?9 E2 a
write(outvees,string’(out_string)); 9 f- j* S1 q/ k% r3 q1 f+ J2 O6 h3 ]1 M- i* \( Y/ E
……+ T, K$ f% j# h0 y b
/ m, j* |2 G8 r' } 3 @* a2 Y+ s$ z4 K0 l1 ?
. g: Y/ n2 f# z9 Z, z' x
3.5 Modelsim中显示的测试波形及测试结果 ) C5 A' ~3 V _9 R6 |1 M# C t : W" |3 B( Y) c; `& |" z% ` 2 y% Z/ j1 [3 M9 M6 ~ ( I7 E+ x# `, J7 v4 }4 P 在Modelsim提供的HDL仿真环境中,运行TestBeneh进行仿真测试,得到测试向量波形(如图3所示)、仿真波形(如图4所示)和仿真输出结果文件ResuIt.out。对仿真输出结果进行分析表明,仿真输出的目标位置与输入电视图像中的目标位置完全一致。 - a* D7 R% l2 B, C- K5 z. \4 j4 {* Q
! Q$ s5 S, @5 \+ G j/ w
) v! F2 ?0 Y# ]7 d# C! P 1 d1 ^7 |9 ]+ ~+ B- `$ Q3 q; x# s! v- P
2 H+ P& {3 ~) U Y% N D
9 c. r; q: y- R4 l) Y& P" d8 j8 _% k
( U8 ~# F. y ?- |8 v, k+ j
" D7 t6 `) X( M6 H
本例的结果分析是通过人工对比进行的。还可以将仿真预期输出结果保存在测试激励文件或其他文件中.TestBench调用TEXTIO读取仿真预期输出结果.并和仿真实际输出结果进行对比,然后自动判断结果是否正确。在某些场合下,例如对VHDL编写的处理器进行仿真调试时,用户可以将包括指令类型、源地址、目标地址在内的指令保存成文本文件。TestBench调用TEXTIO读取这些指令。同时.TestBeneh调用TEXTIO将结果及中间变量保存成文本文件,以便设计者事后分析和查找问题的原因。* Q. \5 d. c( P; |9 S0 y# K5 s