1 引言 + r1 Q' k) U: c ]- J( y/ R4 k1 l3 D 7 |) T% `# u9 T4 q% c. S6 Y9 l0 ^! f. U2 x, ~9 T9 q
在对复杂数字系统进行仿真测试时,设计者常常面对测试向量数量庞大而难以实现的问题。以数字图像处理系统的仿真测试为例,如果采用完备性测试方法.那么所需测试向量的数量将非常巨大,甚至无法实现:而采用测试向量波形图或者用HDL语言描述等常用方法.不仅仿真测试工作的效率低下,而且工作量巨大。在数字图像处理系统中,一帧320x240的数字图像所产生的测试向量数量达到320x240x2=153 600个。无论采用完备性测试方法还是向量波形图或者.HDL语言描述的方法,由于测试向量的数量极其巨大,采用这些方法都难以进行仿真测试。; w4 {8 X4 Z! O4 h* H9 o) y
+ S' e }( C# _" T
/ }( U$ _7 H2 |' d4 U: M1 ?/ p3 e ( H$ _) V) p+ @/ s0 w 针对这个难题,笔者提出一种进行仿真测试的新方法.该方法应用TEXTI0和:MATLAB来辅助仿真测试过程.使测试向量数量巨大、难以处理的难题得到很好的解决。以电视视频系统中实时多目标捕获单元的仿真测试为例.对这种新方法进行全面的讨论。 * q1 g0 d3 c2 X! h" Q+ T/ ^ ( R" j5 G! P" B / d' B) S! o4 @% e# t- F- i; ~' H7 y/ d2 M. r! i, K( t6 m8 V
2 基于TEXTIO的VlII)L仿真 $ `# |; U4 v! ?) H+ @" e: ]' v' F! i" j) W$ m6 V9 X- s
) `) z5 {) v% R B( B/ I ; @- `( { |: O3 u 2.1 TEXTIO的功能 " K- U* k" p p% P5 o7 e/ Y0 ^+ `3 J
4 U' U3 H4 t) Z/ |* l+ E' g( `& G8 P
TEXXTl0是VHDL标准库STD中的程序包(Package),它提供了VHDL与磁盘文件直接访问的桥梁。TEXTIO定义了3种类型:LINE类型、TEXT类型及SIDE类型。TEXTI0在程序包中定义了一些访问文件的过程(Procedure)。 ) n4 b6 X; U# h: o0 b& ~2 a N: \ [2 b; \
7 t0 A4 M; p9 x5 A& L1 _$ N0 Z* O) H7 B4 p! O5 |* ]% P+ g
TEXTIO提供的基本过程有:- Q: ]( a* o& I, Z
6 r. H: H7 H6 [. b
( d3 A5 v- Y0 T7 v
5 x R0 m: F3 C( o9 q+ h3 ~
(1)procedure READLNE(文件变量,行变量),用于从指定文件读取一行数据到行变量中; * e" T, l2 a- F5 E0 V: B4 p. X1 |# K; |: \& v9 d
(2)procedure WRITELNE(文件变量,行变量),用于向指定文件写入行变量所包含的数据; z; Y; [/ j: f; H( d9 T$ K- \7 J {. [% c3 b; C- E8 h4 j1 ^" g: T
(3)procedure READ(行变量,数据类型),用于从行变量中读取相应数据类型的数据.根据参数的数据类型及参数个数的不同.有多种重载方式,TEX-TIO提供了bit、bit、bit_vector、BOOLEAN、character、in-teger、real、string、time数据类型的重载; 4 H/ N% x! U3 I9 U* o- z. b+ W" `8 C, N$ u
(4)mcedure WRITE(行变量,数据变量,写入方式,位宽),该过程将数据写入行变量。其中,写入方式表示写在行变量的左边还是右边,其值只能为left或right,位宽表示写入数据时占的位宽。例如write(Oufljne,OutData,left,2/表示将变量OutData写入LINE 变量OutLine的左边,占2个字节。+ k( f/ [- b# g* w- a6 g8 j0 ?0 |
# t( u% D/ l" u3 A; b5 _6 w , \- N' |$ ]8 c3 c1 A9 S3 C4 A 2 ~7 Y7 y9 O. g6 u( M, k, n' n 2.2 仿真测试方案 " ^' d2 G, s8 l1 v7 ]% e. t3 I ; e( Z& s( h# v0 k 1 C6 p* |$ Q) H( `% n. q; r( v& V0 k- I8 }, X' {
使用TEXTO和MNTLAB辅助TestBench进行复杂数字系统仿真的方案框图如图1所示。 # p$ U% n0 `3 a6 c2 p$ |* g# H+ _: b. c0 Q+ F
/ L- L. L+ I2 {
% G& D8 E; E# h' d9 W0 U/ P+ B# a- S
6 l$ r8 v5 a8 X O
+ y" d; z- v4 S& H4 i$ q
0 C% i: B' p: n 6 n9 ?8 [! B [2 v9 _% U$ x 2.3 仿真测试步骤+ J) e a3 F1 b' Y8 w; Q& I
K; [; c) V6 w, c2 u2 S/ O4 |( @
% {* v' t: p5 C; [
7 o0 J& ^( B) W9 W7 o" c/ K
2.3.1 使用MATLAB生成测试激励文件/ ?( l8 d1 \. Y j( M. v
R8 [# h9 C' l7 [ + [, g5 R5 L( F: t; K
4 Z, J1 M1 [2 \) U1 ?
MATLAB是矩阵实验室(Matrix Laboratory)的缩写,是1984年MathWorks公司推出的软件。经过20多年的发展,MATLAB已成为通用科技计算、图视交互系统和程序语言,广泛应用于研究和解决各种具体工程问题。 ! a, R7 l9 { m$ Z/ i* V+ d3 n* ]2 S! y$ }$ O
9 `+ p9 Q) w) R; b
( ?9 _# k& N6 A. W M
在复杂数字系统仿真中,用户可以利用MAT-LAB的强大处理功能生成测试激励文件。测试激励文件的数据格式由设计者自行定义。测试激励文件应包含输入信号的测试激励数据.也可以包含输出信号的期望输出数据.这些内容常常以.ASCII码表示。 - J% c9 D9 T6 w, S* b; W- p" W3 }( i2 _8 O
, O" b1 g" Z2 q0 s, h7 _
B+ U. v) }: V
2.3.2 编写TestBench9 i' @/ \$ s6 P+ X( E% ]9 D% G
: ~2 H5 R+ l: D) W& @) ?5 K; h
8 P" m2 Z* z. D4 w. y + t* G. p# m2 H* a, u4 O' x4 { caseiis0 W l( y7 w2 M2 B
. f* v& ^* r3 U& `# q) s/ J# i3 Q when 0=>out_string:=“frame_Yup0:”:一将目标0左上角Y坐标写入仿真结果 # k, g$ ?/ M& l! @3 T ( ~4 o( f5 u! e6 p when 1=>out_string=“frame_Ydn0:”:一将目标0右下角Y坐标写入仿真结果" X" J( B; e/ G1 f( |' m' P
# @! T( |5 y; _" Q) H: b. H7 K/ s when 14=>out_strlng:=“frame_Xli3:”:一将目标3左上角X坐标写入仿真结果" F4 M2 h) Y5 d+ Y
, E2 H5 ^) Q# f, H4 Y4 i when 15=>out_string:=“frame_Xrt3:”:一将目标3右下角X坐标写入仿真结果4 |7 n; ~) K+ d$ z4 C1 s3 A
! u4 v5 g/ W+ U4 l$ n1 ` o when other8=>null; d0 P5 G' V' f! j p
8 n% l7 y7 A4 F& p- t end case;2 o) V. T# z: U: f" m* o. k
) h1 b* x6 S4 o2 z7 C* U u4 i5 Q
write(outvees,string’(out_string)); 7 S& D( N' I2 p) \! L% N. a1 O! W8 ~; y2 {/ o6 I
……; n" q5 A* s4 E8 X3 @1 ^
& F: f( x- f+ E0 z: _ * M/ g" y8 X0 U$ C p4 z/ Q+ y ' R- v; y' z$ j 3.5 Modelsim中显示的测试波形及测试结果, A9 y d: ?! X2 r
4 a0 q' f( u3 N
6 B) t3 t6 A2 Q$ f
; F. V/ c4 g( o, f+ ^5 @ 在Modelsim提供的HDL仿真环境中,运行TestBeneh进行仿真测试,得到测试向量波形(如图3所示)、仿真波形(如图4所示)和仿真输出结果文件ResuIt.out。对仿真输出结果进行分析表明,仿真输出的目标位置与输入电视图像中的目标位置完全一致。 5 }2 X d. d% V( a2 U+ k ' o$ m/ a7 {% M/ X; y - U; d( F0 y3 l! _ q4 I1 S* z$ h t: G$ j g# y
0 b0 K. R4 F6 D! R1 `# R! \% ]/ H: C# ?" Y+ X3 M
2 r: v% U I/ O# I5 W; @
0 R- E9 i3 q4 Y. z4 U) s' {9 d9 I
" J ?9 K2 t, M; n9 y
4 [6 `( e# e' X& E. f 本例的结果分析是通过人工对比进行的。还可以将仿真预期输出结果保存在测试激励文件或其他文件中.TestBench调用TEXTIO读取仿真预期输出结果.并和仿真实际输出结果进行对比,然后自动判断结果是否正确。在某些场合下,例如对VHDL编写的处理器进行仿真调试时,用户可以将包括指令类型、源地址、目标地址在内的指令保存成文本文件。TestBench调用TEXTIO读取这些指令。同时.TestBeneh调用TEXTIO将结果及中间变量保存成文本文件,以便设计者事后分析和查找问题的原因。 3 I" R) v8 r" ~2 [- Z" p' Y, ^" e$ ?+ s) V
, f" b* y- P) S+ W" j5 ^: w; g