在线时间 3 小时 最后登录 2012-2-10 注册时间 2012-2-5 听众数 4 收听数 0 能力 0 分 体力 35 点 威望 0 点 阅读权限 20 积分 31 相册 0 日志 3 记录 2 帖子 35 主题 12 精华 0 分享 0 好友 15
升级 27.37%
该用户从未签到
1 引言- K5 [+ C$ V* G4 i. f$ N( e
' P: F/ q) P: _5 Q, @ & t0 s, t6 v5 ~ d7 z
( l G. D: ]* L) j: @
在对复杂数字系统进行仿真测试时,设计者常常面对测试向量数量庞大而难以实现的问题。以数字图像处理系统的仿真测试为例,如果采用完备性测试方法.那么所需测试向量的数量将非常巨大,甚至无法实现:而采用测试向量波形图或者用HDL语言描述等常用方法.不仅仿真测试工作的效率低下,而且工作量巨大。在数字图像处理系统中,一帧320x240的数字图像所产生的测试向量数量达到320x240x2=153 600个。无论采用完备性测试方法还是向量波形图或者.HDL语言描述的方法,由于测试向量的数量极其巨大,采用这些方法都难以进行仿真测试。
4 E2 }" g5 g3 y: t& T3 y" C
" N9 C- S* U, [ 2 b' j/ K9 G( b; s6 W3 {0 P( d+ |
( I8 B% m/ Y& z' ]: [+ h
针对这个难题,笔者提出一种进行仿真测试的新方法.该方法应用TEXTI0和:MATLAB来辅助仿真测试过程.使测试向量数量巨大、难以处理的难题得到很好的解决。以电视视频系统中实时多目标捕获单元的仿真测试为例.对这种新方法进行全面的讨论。4 C( _. _3 s* x+ n" p
, O+ c1 W( Q3 g" o0 O) p( M& e ; N/ n+ N' N+ p7 _- {$ @/ m
# O! B4 Q' \$ l
2 基于TEXTIO的VlII)L仿真* l1 A2 C* Y/ t5 B8 i3 l, B6 y
$ F L r% F. m : ~1 ~, i, X& k6 a
) d$ H3 v/ Y. j% S
2.1 TEXTIO的功能
- @, t$ Y; M) R, ~6 J ; z4 K6 W- R. _ T9 E" N
: k' z* p4 X& R' g& v! N5 y
# s- I. J3 P7 F2 i9 q' \
TEXXTl0是VHDL标准库STD中的程序包(Package),它提供了VHDL与磁盘文件直接访问的桥梁。TEXTIO定义了3种类型:LINE类型、TEXT类型及SIDE类型。TEXTI0在程序包中定义了一些访问文件的过程(Procedure)。
' O6 F4 n0 j4 k
7 M; i5 z( e$ X2 ?+ C
: R+ Z# e5 n) \' A. a: ~
0 c' u8 N8 d! n TEXTIO提供的基本过程有:
1 L% e5 g- f2 B% ?
& l/ E# y3 @5 q [( |8 V 3 M7 d0 H% |8 u4 }& [. R$ [' D
% S! x# N0 u. E& q) N) I$ F9 v
(1)procedure READLNE(文件变量,行变量),用于从指定文件读取一行数据到行变量中;
I: ?$ W8 y4 d+ n: p4 I( a - m! J6 U$ a. [' o4 g" v' R
(2)procedure WRITELNE(文件变量,行变量),用于向指定文件写入行变量所包含的数据;8 s8 S9 e! _8 z/ o1 X; h6 Z
/ L% S; ]# V2 Q v" N8 h (3)procedure READ(行变量,数据类型),用于从行变量中读取相应数据类型的数据.根据参数的数据类型及参数个数的不同.有多种重载方式,TEX-TIO提供了bit、bit、bit_vector、BOOLEAN、character、in-teger、real、string、time数据类型的重载;
; t% l$ a# |) \; r/ O. @' Q9 J - h/ }3 w; E$ S
(4)mcedure WRITE(行变量,数据变量,写入方式,位宽),该过程将数据写入行变量。其中,写入方式表示写在行变量的左边还是右边,其值只能为left或right,位宽表示写入数据时占的位宽。例如write(Oufljne,OutData,left,2/表示将变量OutData写入LINE 变量OutLine的左边,占2个字节。 W/ `8 [# I: ]. e/ @4 c8 u! M
8 m1 J& E O; ?' \- c 8 |: A. p6 l+ g" ^6 F+ G
7 D9 \6 {3 d" m& {) x 2.2 仿真测试方案0 V* C- Q9 ^ u
3 ]# O+ `9 O" _8 @1 E
% B2 d2 A) i) o" ^/ u7 p
1 h. z1 X4 d+ ]- Q+ V 使用TEXTO和MNTLAB辅助TestBench进行复杂数字系统仿真的方案框图如图1所示。
/ z. [3 K% \3 O2 P# e- i " Y k8 m7 ?: ~4 F
# ?! M# K/ u+ I* m
' L5 B# G* t& `9 e( |/ n- | & S2 P% v9 U* Z# L P; N* T
- x/ ?' v) i$ U
9 o; ]' N2 E4 x9 b
5 ^* i' B7 a3 a1 ^* m 2.3 仿真测试步骤
6 x) J, Y; w' Q* d. k 6 B( b, a+ `9 v( Z* V
& O& m/ s, G* f% w- n6 N; l # @9 d4 t4 }) i& K' \
2.3.1 使用MATLAB生成测试激励文件
/ B$ B7 a( @0 t1 a5 U) u 1 x9 ], |0 e* }. }+ {
- U; s# G5 G6 Q' }3 M+ i) ]% k9 U
7 }* P& D' ?: p) v% g& e
MATLAB是矩阵实验室(Matrix Laboratory)的缩写,是1984年MathWorks公司推出的软件。经过20多年的发展,MATLAB已成为通用科技计算、图视交互系统和程序语言,广泛应用于研究和解决各种具体工程问题。) N0 i- _, ? c" ^ }
" x' H g9 C/ ^( J$ E5 ? , A3 G" i- L1 \% w
$ B$ O4 U5 B& T 在复杂数字系统仿真中,用户可以利用MAT-LAB的强大处理功能生成测试激励文件。测试激励文件的数据格式由设计者自行定义。测试激励文件应包含输入信号的测试激励数据.也可以包含输出信号的期望输出数据.这些内容常常以.ASCII码表示。
' r/ G$ K- h* @9 i. I4 L$ G; A
r7 P% o5 W( o' e, r% p8 K; j
/ x5 O" S- V1 y2 e( {8 G
' Q* k. n) E/ ]& X7 k) j 2.3.2 编写TestBench2 `( w$ S3 S: O! x! P
$ k& o" u8 b! B $ _! f: Q4 c$ T
U' B3 @ Q4 ?$ X
TestBench是测试平台程序。TEXTI0的使用是通过TestBench来进行的,TestBench利用TEXTIO读取测试激励文件或写入仿真结果输出。进行复杂数字系统仿真时,用户根据测试的目的和要求设计TestBench。
; E, q# A: T0 _4 W" W) o: Q% Q
$ n- P& R! K9 w: ]) x : ~- X! e* ~* D
* o' k5 O% }8 `7 I; ` s: j 2.3.3 在Modelsim中进行仿真
! l2 v( m" n) m4 [ N8 Z $ R% w, p5 l9 i, `
7 y( a' c. @# @2 }" K6 B2 E . L! c: F6 Y( p
Modelsim是Model Technology(Mentor Graphics的子公司)的HDL(Hardware Description Language)仿真软件。可以实现VHDL、Verilog及VHDL一Ver-ilog混合设计的仿真。Modelsim为’TestBench提供一种良好的HDL仿真环境。
1 P- F+ E; [" z8 N9 _
7 `3 g/ N' N; m2 S/ v. _ T) T) e, I3 @$ u% e- m
2 ~- f& |8 H1 ~ 2.3.4 结果分析- {. a: Q# H; O4 u; r
" z. A( }/ I8 l9 j- ]
# M9 A( V3 R B: C* X8 h4 p
- K4 |; A5 u* w; J( k 仿真结束后,仿真结果是否符合要求,用户可以通过二种方法来判断。一种是应用软件自动判断。即通过TestBench或其他软件(如MATLAB)对仿真输出结果和期望输出结果进行对比,从而得到分析结果:另外一种是人工判断.即设计者自行对仿真输出结果和期望输出结果进行对比,从而得到分析结果。( { _ N: H+ C$ [- K F& n2 y0 L
! I4 I/ q! W5 p' V% ?1 V
; N+ @$ V) ^$ W' w! Q7 r9 l# d& L
) w1 G! V4 \7 N2 k) O 3 仿真测试实例8 S7 P( X# G& p/ e% S k
( n( B! T Q6 o% U8 a
4 c( d8 ]5 a) p7 L" m5 E8 g % v. j7 e' L* V. R
3.1 电视图像实时目标捕获单元功能8 z4 B4 g% c7 o5 f/ K
4 }; ~+ ]; L$ @: d: { L/ @; L & U2 X, E; v- f' \4 Q& J2 J; L, w& K! l
$ Z4 H2 m8 l; ~- v: \* S
电视图像实时目标捕获单元(以下简称待测单元)具有对电视图像中的目标图像进行实时捕获的功能。本例将用TEXllO和MATLAB辅助Test-Bench对待测单元进行仿真测试。" i; ~( t/ U! g1 p2 K+ w3 C
- N! B' ?3 X; |0 Z% _" w
- D4 @9 L. G* d7 R0 Y* g$ Z # M6 H6 q$ G/ R$ O
3.2 需要产生的测试信号及波形! X) H" _/ V! K2 S# d: T
4 X9 C3 `9 ^. p3 `+ w$ T + h3 b& G2 B, u7 u( t% z2 ^
# T% g! `; P. u# a( X) w; g 待测单元输入信号的时序如图2所示。其中,clk、vsy、hsy和ccd分别代表像素时钟、数字化后的场同步、行同步和二值图像信号。
+ X4 i- G2 z: |5 o3 a " n! w3 g) H1 u% y* ^8 l. k
( h" p* g* v& E. t
5 A) ^; a9 U9 M& x# b7 D, B
9 |$ R# R0 S) i3 d 7 m% i1 w: F5 w' s7 L( G9 A
用户设计的测试激励信号即测试激励文件中输入信号的激励数据,应符合图2所示时序的要求。. W* L$ r+ q& e$ o" @) t
! ^" V, t- e* [ \" r
' U! X A6 y# V9 M: i7 f6 w7 G# W 0 h& I$ z7 X: {2 g' x
3.3 测试信号的产生
) b% t' `6 k' T! e/ O . i# E- V$ [' x7 F
. d' }8 W2 k+ [4 N' f3 X
9 q6 w1 ?5 v4 e6 B1 a: I 在MATLAB的开发环境中.通过编程可以生成测试激励文件。* N1 k- r3 t# ?+ n& h& Z0 a: H
8 A$ D! i- A9 W- Z! @; e
3 G( v9 v: d; R N2 B9 x( Q
, q B5 G# `# z3 ?9 W3 p( H
以下是生成测试激励程序的核心代码:
7 D" s( ^1 A5 N4 C( C4 @ ' }+ ?: Q' O+ M( q7 w" a" c. R% K
image=imread(‘pic.bmp’);%读取图像文件( w3 m/ F( N7 T
. C I' Z9 L d% K
[YN,XN]=size(image); %得到图像大小
8 t$ S8 |3 r" l* z z6 X- c - F6 F* e. E* |
FZ=20; %晶体振荡器频率(MHz), O- Y2 ?: P: X" b9 H5 q/ [6 m
' R4 N6 i+ r$ m %定义常数 %对应于图2所示的时序
+ z$ I. z U5 \) f- [. J
; L6 [* z! F: ~) Y POSTIME=52.2; %行正程时间(μ8)
( l; g5 @- [2 L$ g% E
& G0 S7 G' g% c, F5 G. {( Y: w NEGTIME=11.8; %行逆程时间(μs)- H( K' p: `; ]% J, F4 J
4 x: L" u1 r- A7 a3 W5 O& M/ k' C HORTIME=64;%行正逆程总时间
! k8 ~" v1 r' |7 W# x2 h
$ t9 \5 }, \' L- c, d, R VSYTIME=1615; %场信号时间(μB)
$ g9 G2 P' K1 M4 H% F7 ]! R , m# s: G- z/ Y
PPDOT=POSTIME*FZ/XN; %行正程时间*晶体振
5 A0 O# m/ d4 q, e
% [* n. K! f2 \ 荡器频率,图像X方向分辨率
( P4 P7 G. N' J, A7 j& a: S + @ K2 u2 s' H x/ _ U6 e" r
……
) a s$ z2 i7 x$ @- |% x$ D+ g; |9 e
6 A4 T. C/ c6 w& D9 p ; R- ]+ g% R9 A: K/ W* s
2 n" T( \/ c8 ~% j+ M& v" s fid=fopen(‘TestVectors.inp’,‘W’) ;%指定测试激励文件的文件名称
2 K7 E, X K3 O7 r( Y6 `3 O
6 T9 s: T# Y9 v for j=1:1:YN;
" t: U8 |9 s; R# M5 X j $ P8 s; x# @; q0 T1 T
yy_j;xx=0;7 a7 M7 H) M8 J1 ~
2 b! r. A4 \8 G* G& Z
for i=l:1:HORTIME*FZ;
/ B7 O, J3 B: b) c ! T+ o, Q# e* }
%产生行同步激励
8 e9 q2 Q0 f! D3 N3 E7 C2 j
+ k3 v! p# S" M! d* D( e/ L if(i<(HFNTIME+HDLTIME)*FZ)(i>(HFNTIME+HDLTIME+HSYTIME)*FZ)
9 c0 G( |9 p, P, _ - h$ q" ?1 @/ p U( w0 S
hsy=l;8 L# a& V7 q" A/ f' E2 \% }9 M3 y2 k
+ I. G: V- _; x% v' o else
: @& V; K, V( }5 L9 `) k* ^: t6 b 1 Q% U' Y E" ]: i
hsy=0;+ _6 h4 A" C9 W" \/ t
$ K$ d3 {% j$ k- J
end;
9 X0 T1 w: G2 w% t
6 {: d3 e: s; t- A- L %产生像素时钟激励
{2 m* p, a4 }) K5 f! r7 H
6 J" i) S# d+ ^* n" e# M. [ if clk==1% q' A6 A! W7 \- l
: c: A; M0 J* @& K: \; A clk=0;' H; B# J" ]5 t/ j4 r4 `2 Z
" D B5 c! {& Q$ N7 O
else* S; Z g- n6 R5 N$ e$ S
, S$ R4 m% y( ~- _8 _8 [ clk=l;
7 {" y" m# @# ^ . D5 I9 C+ A' Q' _& b# `! }
end;) B R$ y8 g U9 p% \* B
# M) G1 L }, ?! t r %产生CCD激励, T0 Y9 P" N0 m z' F
$ F# h( ~, H" n- v! p" {
if i>NEGTIME*FZ$ S$ A; C! _( g8 P9 i% l0 u' q O
s W& M+ l3 j9 ?
xx=round((i-NEGTIME*FZ)/PPDOT+0.45):' ?! Y+ s: C: I$ J5 ?
+ c$ N/ ?) d/ k9 T, y
ccd=round(image(yy,xx));
2 [" \6 X$ {6 m8 S; l
. K: h& d1 l' k" i9 }; |6 J% n! u else1 \9 @, |# `+ i
! n7 R! d9 S+ v, e. s$ ?
ccd=0;
- v9 z. U/ F( @& v6 m9 Z( a' Z5 k
7 T4 K0 Z( n0 x- F, B end;
. y7 a' x7 V2 A, @& \( H" V& v
! F, [6 k) K% C5 l %将激励写入测试激励文件7 G9 A# K$ e" V- c7 \
0 y9 Y$ t5 A3 s fprintf md.‘%d%d%d%d%d%d、Il’,clk,ccd,hsy,vsy);, X5 [* r" E+ h) Q( W& @: P
! H* E6 w% @) ~$ k% y end;5 e0 Q/ |( }: ^/ K |2 c- m+ P3 [8 C
& Y5 N; y z! r U* q1 P
end;! m" v5 K- I: ^' q: A
3 Q6 P1 y" ?& C( l
产生的测试激励文件名称为TestVectors.inp,激励内容以ASCII码表示,信号之间用空格隔开,且一行代表一次激励。下面是测试激励文件中的一段内容,激励包含clk,ccd,hsy,vsy 4个信号:6 u9 x# l' A) F3 Z# B2 A+ ~* ]
- e9 u+ k% T! y5 g9 d9 [ 0 0 1 1—clk=0 eed=0 hsy=l vsy=l
' b q% P# G/ `: j " p) N0 Y% b# c: n: B
1 0 1 1—clk=l ccd=0 hsy=l vsy=1* C) G$ I7 Z& [5 O e
1 w8 g* y" E* H" S …
+ a" Y* T: G @4 G* o' h ( A/ ^ v6 r- ^3 Z
2 x$ P9 l8 G. X) ~) l2 d* |% m; s
+ q7 ?$ s( r# G% Z! M 0 0 0 1——clk=O ccd=0 hsy=0 vsy=1
8 ~& Q( k! f& m. Q 5 l6 | E" l- q# `! s
…
' R/ L9 G8 \% U( E$ s . u; A" @$ [9 E& ?! g- d
1 K! x/ o6 \8 M' j/ D
( A' A+ {+ k4 B, J
进行仿真时。TestBeneh应用TEXTIO通过逐行读取测试激励文件得到待测单元输入信号的激励。
/ }, j! l" e1 p * v. T& ^! D- P
8 U/ O7 s: F' _
/ O; e0 P+ r" X2 h
3.4 编写TestBench
) j7 [* a& ^, A3 R! {" ~6 e* e # u/ d! X- _! U# A
6 e3 P- |1 t2 x
, v W ]3 r8 P2 ]& \
TestBench调用TEXTIO读取测试激励文件得到激励,然后将这些激励分别驱动到待测单元的输入端口。同时,TestBench读取待测单元的输出结果,调用TEXTIO将仿真输出结果写入文件名称为Re-sult.out的仿真结果输出文件。4 _/ Y* U/ z0 o1 V# {
; g u) m, O0 s# c" ~
7 A; b+ p; B4 x) c4 S% B
# P, B% x! \# Q& Z 以下是TestBeneh的核心代码:/ ~1 d: h0 r M: b- x% H: F3 Y
9 ?& t* A7 t; q. M" @
testprocess:process1 ~' G/ R. C4 A/ e8 I/ X
9 A8 E, `: @! R/ S) O9 N1 e/ O6 h
file vector_file:text open read_mode is“TestVectors.3 `6 {" v; k( v4 s! A
& D5 m) P$ u; M& L l! x! Y inp”:一指定测试激励文件* t) {7 y* e8 p9 y! C7 y9 W8 L3 m; ]
5 M- v$ X4 i. \% ~, w! V% T file output_file:text open write_mode is“Reset.out”:
4 ^; m0 C. s" ~( j# Y
: b" X/ z* R" ]# G) I6 f0 s 一指定仿真结果输出文件4 H8 v5 K* \) H) o" w
* w5 Y# \+ z6 y/ B, Z/ G
variable invecs,outvecs:line;! u+ V2 z3 ]% i( n }* k0 b' {( n
5 e6 E& {4 [: Z3 c variable good:boolean;" O3 ?' ^* X% R8 }
! P/ E* B4 K5 Y- z" c- m& G$ O1 a variable eh:eharacter;
/ G0 x, s- }0 c7 O
. s- D/ _* v# {* T4 S! q5 H ……
: X7 r/ k7 x) v+ D- g" @& a
0 ~+ @0 R; j1 O 4 L: C3 M! s% z9 S
: s, P' ?3 I. u" ~6 i% Z5 |
while not endfile(veetor_file)loop8 a+ V# G# \3 @4 `" j# I3 @
' k" x2 O4 W( Z* H
readline(veetor_file.invecs);一读出测试激励文件一行内容.得到激励. P) f3 S6 W1 j3 b Q: J5 J
& V: l5 v3 x! n* |7 x) g; ]: N
read(invees,vclk,good); 一一读取一个值给信号vclk
% `% G. N! {% J% `: A8 |& @
5 y1 s7 ?4 u$ S read(invees,ch); 一一读取空格 U# q' g" h% X8 k3 {' @: e
9 s3 b! r% f6 q2 k1 u
……
3 l" l4 S9 w3 x x" h% g9 v# @ b {" D: H! t" a0 f
$ @5 S/ o' W( d# g4 \5 g
, B, B' S2 R+ n, M2 Q9 ^ read(invees,wBy,good); 一读取一个值给信号vvsy( z8 b+ S! }" p3 ]# s3 z- P* I, {
- ]; {: d# K' g5 F* E read(invecs,ch); 一读取空格6 l, _% w8 r! @ d
" }( C" @2 Q+ A5 G
……
: T2 B" n' n6 [: ]4 j- J
6 a; u4 n% \6 i) T. k
7 P2 T! N$ z; G1 H / |. {! u. p2 h! f' f* N
clk<=vclk;一驱动待测单元的输入信号clk
! |4 S# h7 V- u1 F3 m0 d! W# O / y7 w" ?' L2 j- d% P8 l1 N6 b
ccd<=vced;一驱动待测单元的输入信号ccd
' q9 _1 x B9 u1 V * u, ~3 K8 |+ d: M; n6 v
hsy<=vhsy;一驱动待测单元的输入信号hsy
/ s# `9 o* Q: R: O) Y/ X
; T" N% X+ {! Y! N! F8 T4 ` vsy<=wsy;一驱动待测单元的输入信号vsy! _, `, ^0 e; f1 I
# A4 p [. @4 J) U: w" g c
……& b% d7 l/ g& n$ l% P3 Q
9 a4 D; n/ I) A" k! ?- @ {" \
3 P# v' B' L- B6 |) z& o * s1 h: ?) }' {" T Z! [
caseiis s& `7 z1 B$ l1 [* B
, e2 h' @, I9 t! T2 F9 e when 0=>out_string:=“frame_Yup0:”:一将目标0左上角Y坐标写入仿真结果$ P; Q9 ^' v8 |$ o
+ ~' S9 z& W R s' G" c* X9 Z4 T( v, U
when 1=>out_string=“frame_Ydn0:”:一将目标0右下角Y坐标写入仿真结果
2 r/ _/ m. L& |. v% o9 k
( Z$ q( Y4 Y/ L6 b$ Q! ]* G when 14=>out_strlng:=“frame_Xli3:”:一将目标3左上角X坐标写入仿真结果$ v8 g0 A1 J& z& `
8 K1 Q- c& J# [$ Z! M8 f8 z when 15=>out_string:=“frame_Xrt3:”:一将目标3右下角X坐标写入仿真结果+ W! m+ B. Z5 x5 `6 D' R
! a. o, E8 D8 c# R when other8=>null;
7 O8 U5 U# p% C1 G0 Y; C1 S " i8 O6 u2 C; D4 r" _# `
end case;
- Q5 ^- R; s3 y. R6 `( Q+ `
) ^1 M2 \0 R7 x% }+ f& n write(outvees,string’(out_string));& z( R$ X8 B5 x, p+ J5 e
8 z/ I& {4 p# p0 d0 l* g
……* ^- B: P* H3 ^# s6 E/ ~
% `$ \- X+ P8 y1 ]! q& f ^ ; q: v/ }0 B' K" W5 y6 v/ u
; E# p: a- s, Y# Y
3.5 Modelsim中显示的测试波形及测试结果; M- m( s! c; @5 r$ o: H2 I( r, ]
5 q5 g" C$ N T; p0 F# W+ Y
- k8 s9 c* J3 ?6 h8 K
; Q2 S0 S3 a& Y5 c7 j8 s# ^0 z/ m 在Modelsim提供的HDL仿真环境中,运行TestBeneh进行仿真测试,得到测试向量波形(如图3所示)、仿真波形(如图4所示)和仿真输出结果文件ResuIt.out。对仿真输出结果进行分析表明,仿真输出的目标位置与输入电视图像中的目标位置完全一致。2 q, z- [; o A) {
' O* h7 r! r- I+ l
% d7 m2 ^9 W" [+ k: K
( c4 l ^" J6 }& h9 V: g 1 `& y; g0 x2 r. @" X$ i
, l: U+ |1 k1 { ' w! Z( N* r) @. t
8 p& S1 M0 [2 E2 p: O0 X
7 [2 S3 [: |# O6 l' p
9 P9 D% R5 w7 `# w* x 本例的结果分析是通过人工对比进行的。还可以将仿真预期输出结果保存在测试激励文件或其他文件中.TestBench调用TEXTIO读取仿真预期输出结果.并和仿真实际输出结果进行对比,然后自动判断结果是否正确。在某些场合下,例如对VHDL编写的处理器进行仿真调试时,用户可以将包括指令类型、源地址、目标地址在内的指令保存成文本文件。TestBench调用TEXTIO读取这些指令。同时.TestBeneh调用TEXTIO将结果及中间变量保存成文本文件,以便设计者事后分析和查找问题的原因。
7 Z3 m! d$ [- |
3 k# c' q8 K% f8 v 5 P! U' z0 Y$ y$ S9 C3 J
zan