1 引言 " A `. }0 f( T2 s 2 s6 T; `9 I0 A. e6 t+ T ) j" u) K U! `/ h2 R0 T 0 t- F& b( z& k' m4 D 在对复杂数字系统进行仿真测试时,设计者常常面对测试向量数量庞大而难以实现的问题。以数字图像处理系统的仿真测试为例,如果采用完备性测试方法.那么所需测试向量的数量将非常巨大,甚至无法实现:而采用测试向量波形图或者用HDL语言描述等常用方法.不仅仿真测试工作的效率低下,而且工作量巨大。在数字图像处理系统中,一帧320x240的数字图像所产生的测试向量数量达到320x240x2=153 600个。无论采用完备性测试方法还是向量波形图或者.HDL语言描述的方法,由于测试向量的数量极其巨大,采用这些方法都难以进行仿真测试。' p& p; \+ s+ G, L0 a
8 {% A( s' T9 w+ n" p 9 W+ l$ ^( m4 x( |2 t5 B8 |! z
, I1 k# }- X+ q$ w2 m3 I* n
针对这个难题,笔者提出一种进行仿真测试的新方法.该方法应用TEXTI0和:MATLAB来辅助仿真测试过程.使测试向量数量巨大、难以处理的难题得到很好的解决。以电视视频系统中实时多目标捕获单元的仿真测试为例.对这种新方法进行全面的讨论。 . y: y3 B6 f% v( V+ p. \ , Z( k$ v: R4 I! h5 @% r / I [% g$ }4 ?7 F7 c8 [- i L7 M
& w7 b, E2 k& p4 n) ^, [ ^9 Y. k 2 基于TEXTIO的VlII)L仿真; V# @) p2 B- N- `. w k
) E, _( e% s r- W% f5 K
9 o) O4 V3 ?6 v* l7 @* o! j. i# E8 [# Z& ]; l3 c8 l1 |' C2 |
2.1 TEXTIO的功能 1 p9 Q$ _9 z* V' C: B9 ?; y7 [ & K! l! r3 r" k4 n z) \9 V. i: i8 r S ) |$ U. Q- x+ V' T$ j8 r TEXXTl0是VHDL标准库STD中的程序包(Package),它提供了VHDL与磁盘文件直接访问的桥梁。TEXTIO定义了3种类型:LINE类型、TEXT类型及SIDE类型。TEXTI0在程序包中定义了一些访问文件的过程(Procedure)。 , z3 A& B R& G" Z' C+ L+ w9 H5 g% c: n5 V+ g9 I' ?/ z- m
}$ {. d8 X' C- Q. {) J) r + V$ q: o- q5 b$ ]) j* I; P' k TEXTIO提供的基本过程有: ; O. J; c' F2 h, j j5 G' b4 u7 U$ x( G q+ q" }
/ g8 T+ q+ \2 {2 [0 Z; s ^
. B) x! ^/ X8 ]
(1)procedure READLNE(文件变量,行变量),用于从指定文件读取一行数据到行变量中;: V4 c. z7 v) j
1 {0 d+ b* _# ? \6 _- ?
(2)procedure WRITELNE(文件变量,行变量),用于向指定文件写入行变量所包含的数据;% y+ \3 U) n, f. z/ B9 Y; e
1 A1 z/ k) Q* \% a
(3)procedure READ(行变量,数据类型),用于从行变量中读取相应数据类型的数据.根据参数的数据类型及参数个数的不同.有多种重载方式,TEX-TIO提供了bit、bit、bit_vector、BOOLEAN、character、in-teger、real、string、time数据类型的重载; ) V: K( Q) |, ?1 f" l9 B/ j / Y) N) v/ t; j X (4)mcedure WRITE(行变量,数据变量,写入方式,位宽),该过程将数据写入行变量。其中,写入方式表示写在行变量的左边还是右边,其值只能为left或right,位宽表示写入数据时占的位宽。例如write(Oufljne,OutData,left,2/表示将变量OutData写入LINE 变量OutLine的左边,占2个字节。- t+ L: R. H5 t8 C
/ y" K0 [6 Z* H
) W- W! S s3 S; b; x4 m2 x
- F8 H0 x. U$ X* W6 W: F 2.2 仿真测试方案 - G8 T8 x R3 J . Q$ _: t4 ]( y9 _& u. b6 ]9 e # C* i- `( V% T x2 x0 }% Q# ^' {% d5 @, B3 ], I. i0 n/ `
使用TEXTO和MNTLAB辅助TestBench进行复杂数字系统仿真的方案框图如图1所示。 , A: ?' t8 Q n( s" v1 E9 r" E # p2 _7 S, Y! R4 j" J ) X/ H5 w- x- V% l. I) v8 n. e8 I Z
" v) s7 A$ p# `4 W* S" ~# T8 h 0 B" ^8 Z% h3 o9 N4 h) H1 N
+ ~* u- }( f7 D) z9 q7 s l/ i5 G5 k
. }; \* G* ]7 Z A5 i
& L3 x" E+ M* p$ P; Q" h
2.3 仿真测试步骤 : H- d+ c; l1 d 1 p! ]+ x1 L8 }* R/ O; z 2 Q1 b: h/ o( g, Y" n9 i
, Y. U3 b" l8 O file output_file:text open write_mode is“Reset.out”: 0 i' p/ m+ p5 x# S5 I. ~7 O 3 x) u) ~) Q! Y2 X" d 一指定仿真结果输出文件. ~* g. ~0 }8 `8 Q: c
) B' C! k: Y$ f4 N8 Y6 w variable invecs,outvecs:line; % ], ^. W6 @* G; D. t |4 L) E* S9 p! X
variable good:boolean; 3 P. F9 x( ^9 F ) Y5 C2 V, G/ c variable eh:eharacter;' @& O! }' v9 a& M0 `4 v
* ?- o: r/ R" m- Z' C( V' D% Q …… 1 P) z+ [9 W1 e3 j0 b: u. @ - f) @$ V& Q+ }3 p, u# B ' s, z; S$ a5 R
. I+ g! h9 U/ Y5 }& E' `
while not endfile(veetor_file)loop6 m4 M5 ` h* O
9 R* I- V0 d2 C( l/ c readline(veetor_file.invecs);一读出测试激励文件一行内容.得到激励 1 h2 f' }4 B0 c& M9 B5 ` ( s: F* H+ U' p' V+ b, W8 `* n read(invees,vclk,good); 一一读取一个值给信号vclk : i, o4 H: }9 p h2 c1 x2 k8 z 8 x/ B6 P' e% I' c read(invees,ch); 一一读取空格. n9 N& L) z+ J6 p4 Z
! g% R$ L# ]# d( }) n# Y. e, b7 H …… ( M/ q9 `* F) [& w" T ; o: W" y9 j$ X. Z T, J : W* p% U2 H% U8 q , R6 m2 L7 p* z read(invees,wBy,good); 一读取一个值给信号vvsy& F: N- r. m3 I( F* U) [: I* l
' B; e+ z7 f. Q read(invecs,ch); 一读取空格1 [& z# Q6 M9 E. K' w4 l' ]