在线时间 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 引言
8 v. N7 T% i' j2 {& E
8 B- J7 o0 u; g( k 2 D2 {" ]* e- B: N% q* I0 ?5 ~# z
! u# s2 Z1 G4 E4 P/ U. s+ u
在对复杂数字系统进行仿真测试时,设计者常常面对测试向量数量庞大而难以实现的问题。以数字图像处理系统的仿真测试为例,如果采用完备性测试方法.那么所需测试向量的数量将非常巨大,甚至无法实现:而采用测试向量波形图或者用HDL语言描述等常用方法.不仅仿真测试工作的效率低下,而且工作量巨大。在数字图像处理系统中,一帧320x240的数字图像所产生的测试向量数量达到320x240x2=153 600个。无论采用完备性测试方法还是向量波形图或者.HDL语言描述的方法,由于测试向量的数量极其巨大,采用这些方法都难以进行仿真测试。
9 U. |; I6 j) d 0 _* v! u# Z8 o c
+ S2 |8 ?% j9 Y( Q6 f. q ; M1 ], j* A9 S4 k. c% L) f7 P
针对这个难题,笔者提出一种进行仿真测试的新方法.该方法应用TEXTI0和:MATLAB来辅助仿真测试过程.使测试向量数量巨大、难以处理的难题得到很好的解决。以电视视频系统中实时多目标捕获单元的仿真测试为例.对这种新方法进行全面的讨论。- O* l! s7 J) w c3 ~0 S1 V
$ s% W$ S0 Z; A; T* E. e* Q2 \ K5 {
) Y6 V# g; w) C- m' e
4 O$ w6 L' p( c1 L8 R
2 基于TEXTIO的VlII)L仿真
) K0 ^- V& t% e+ p8 t3 L3 V1 U : f: u$ o* X% @+ a& W3 O! h( X
9 f- Y* g3 s4 F% ]
7 P: W' a& V5 R! ] 2.1 TEXTIO的功能3 i* P+ u9 {2 e9 w& G/ k
+ R" m% Y3 `2 E+ j2 R0 |
# d& O0 o* ?8 [2 V" a5 Y/ t
% y( M, t7 O9 o' B+ O) d
TEXXTl0是VHDL标准库STD中的程序包(Package),它提供了VHDL与磁盘文件直接访问的桥梁。TEXTIO定义了3种类型:LINE类型、TEXT类型及SIDE类型。TEXTI0在程序包中定义了一些访问文件的过程(Procedure)。
' G- L6 ^- u1 N7 t
3 X0 D2 W- L! W8 [
$ C/ [, d$ ~( F1 m5 W! ]
: Z1 o' ]7 l4 r1 S, O$ O+ T, e TEXTIO提供的基本过程有:
8 ]+ g$ [3 J2 r2 C& B) l; v# X ; X Y; b1 g/ a6 [; a; L
! y- V+ t! |+ K( W: X$ e2 v
- ^0 U- e1 p( b, F4 L
(1)procedure READLNE(文件变量,行变量),用于从指定文件读取一行数据到行变量中;1 g7 n/ f0 f0 I S
8 I/ }$ z% Y! A* _( @ (2)procedure WRITELNE(文件变量,行变量),用于向指定文件写入行变量所包含的数据;% U- w& \' h) H X! z# w+ _
* W$ x$ u5 F7 a! z3 R (3)procedure READ(行变量,数据类型),用于从行变量中读取相应数据类型的数据.根据参数的数据类型及参数个数的不同.有多种重载方式,TEX-TIO提供了bit、bit、bit_vector、BOOLEAN、character、in-teger、real、string、time数据类型的重载;
% j: M( T% B) |$ K , A* _7 c! P Y9 X
(4)mcedure WRITE(行变量,数据变量,写入方式,位宽),该过程将数据写入行变量。其中,写入方式表示写在行变量的左边还是右边,其值只能为left或right,位宽表示写入数据时占的位宽。例如write(Oufljne,OutData,left,2/表示将变量OutData写入LINE 变量OutLine的左边,占2个字节。
7 Q9 F" l9 x) u2 X) C$ ^) m" L # Y' T$ L" j4 f W4 L# L* E
( l. E+ H! r5 O$ W: g8 u" ]. O' j p
/ {6 F' q! j5 f# ~, D5 X
2.2 仿真测试方案( ^( o6 X$ K$ U7 M
" h. K; I, m9 m, P, t0 h0 U C 1 W& m) s. `0 N Y. N) A0 R
0 o+ w8 |- @: ^7 L
使用TEXTO和MNTLAB辅助TestBench进行复杂数字系统仿真的方案框图如图1所示。9 t0 I, s, I" d$ m2 n
4 Y- P: U$ z% q( Q
1 p; g f) W3 i+ f% j 3 q2 R6 X( V( z- S# P8 v
2 h, k" L+ A3 D q! i2 c. T4 B
) B$ H% d5 I, |- W3 `3 d" {
# o8 H# [* A1 s* I% e1 l ; B# n4 D' y0 z6 q9 R
2.3 仿真测试步骤
6 X9 R* o) f; ?8 |6 n$ F
7 P9 }) u+ N ?+ A9 ~: T4 s0 f 8 i# r+ s; A* M) D5 ^% `
1 ^: b; ^( l/ p$ g+ I$ w
2.3.1 使用MATLAB生成测试激励文件
' o& j5 N4 z: W; w4 g
) E6 x3 d7 T/ G
1 v9 t+ W! H8 K& {
* W3 G' k2 ?) i2 M; |9 n4 W0 @ h MATLAB是矩阵实验室(Matrix Laboratory)的缩写,是1984年MathWorks公司推出的软件。经过20多年的发展,MATLAB已成为通用科技计算、图视交互系统和程序语言,广泛应用于研究和解决各种具体工程问题。5 [- k- l( r* \% H( h% [0 O0 j
6 D$ ]% m) |& ?, U& ?3 D! S 7 ]3 R" `* T( G9 G" v0 ~
) W G0 `4 t( \: j/ I
在复杂数字系统仿真中,用户可以利用MAT-LAB的强大处理功能生成测试激励文件。测试激励文件的数据格式由设计者自行定义。测试激励文件应包含输入信号的测试激励数据.也可以包含输出信号的期望输出数据.这些内容常常以.ASCII码表示。
2 V+ r8 T$ Z7 f! Z$ G+ l L 8 k1 p+ r; t& K( C
+ V; k! j! }# E9 { * E+ m: k) J4 p: f- m! E+ ~+ t
2.3.2 编写TestBench8 H8 H. Q3 @& Q) u7 f1 i2 h
3 o! R- U: W, i6 w X' o0 r
0 v8 k. |7 C! w! V5 R( R
- P6 Y' I6 Q% L* s, t- u TestBench是测试平台程序。TEXTI0的使用是通过TestBench来进行的,TestBench利用TEXTIO读取测试激励文件或写入仿真结果输出。进行复杂数字系统仿真时,用户根据测试的目的和要求设计TestBench。
5 q% F* M, a% T+ M8 J ( D6 P9 G, U: l# E- E
8 `5 e$ S" Z* N2 S& _
3 w* @7 U% M7 V" @- n) h2 F4 M/ Z6 N 2.3.3 在Modelsim中进行仿真
! i! F. k$ [8 V 2 s. A1 P+ W/ G9 V( {0 u V( x, {
: b! R Z' b K8 L Q1 ]+ Y5 D: J6 l/ Q
Modelsim是Model Technology(Mentor Graphics的子公司)的HDL(Hardware Description Language)仿真软件。可以实现VHDL、Verilog及VHDL一Ver-ilog混合设计的仿真。Modelsim为’TestBench提供一种良好的HDL仿真环境。) _' U+ i- {) R: f% B. t7 n
5 I; @5 e2 \& {, P 8 S! P, |1 S. I
}# ^; _ o3 d, G2 w
2.3.4 结果分析. {$ W/ y, q* v, K* P$ t" _
/ I4 S4 L/ H. c& b* V
8 A% V% ]/ x4 A0 L i5 I6 O+ G
5 t. o' [ F, Q' t6 { ?# W 仿真结束后,仿真结果是否符合要求,用户可以通过二种方法来判断。一种是应用软件自动判断。即通过TestBench或其他软件(如MATLAB)对仿真输出结果和期望输出结果进行对比,从而得到分析结果:另外一种是人工判断.即设计者自行对仿真输出结果和期望输出结果进行对比,从而得到分析结果。
9 S: B0 |/ R) l; F . m4 i0 v8 \ C0 Z4 |$ J# d
* t# N9 n k: s6 b
0 V p% Y. @" u Q* ` 3 仿真测试实例8 I1 ]- o0 Y* c0 Z5 X
' b1 s, u6 F2 n
- ], Z1 w- A7 i
0 n+ c- M' q8 U" W3 [1 C
3.1 电视图像实时目标捕获单元功能
& Z* o% T6 h$ n9 r2 } " K9 }6 _6 c- C u2 i5 a4 M4 G: a6 P
3 N( S6 Q! B' q( ~5 I8 x
. Q9 ]/ [# A) A& O0 L" d 电视图像实时目标捕获单元(以下简称待测单元)具有对电视图像中的目标图像进行实时捕获的功能。本例将用TEXllO和MATLAB辅助Test-Bench对待测单元进行仿真测试。
, T, r( S& I' r/ b! r & Y+ S+ t1 o! U l. `
- N# b5 y% {% C" ]8 _6 ^+ q
! R5 @. G+ a- j+ S+ j; ~% |
3.2 需要产生的测试信号及波形) x$ g/ `, t' _: z0 V
) {5 k! |, e5 H/ n
1 J9 T. f+ |1 {( ~ 4 R$ {9 E) N% X; e
待测单元输入信号的时序如图2所示。其中,clk、vsy、hsy和ccd分别代表像素时钟、数字化后的场同步、行同步和二值图像信号。5 V& f; a8 H7 r& o; j. q
. x" p& A+ J/ H" |
- H6 y0 L' U3 {3 A: L6 x
. [/ A* Q9 b! M+ L + D% q7 T& Z/ S& S9 \3 F$ {
2 M4 G* u6 e. R: {5 i( `. b$ C# F
用户设计的测试激励信号即测试激励文件中输入信号的激励数据,应符合图2所示时序的要求。) d2 N, S& {0 e- z3 r) J
0 Z1 g1 N1 J; r) c/ v 6 P. c9 Y Q! b2 B5 y/ x
2 M5 K! l* J# j$ L" i# h6 s& { 3.3 测试信号的产生
% @3 l3 C" ]# H* F) Y& O- i % a0 L+ @4 L) w1 ?
3 W" A" d7 A# E; O6 v6 Z* j c$ X% ~! e 7 Y( m; ~6 x; W. H2 V' f
在MATLAB的开发环境中.通过编程可以生成测试激励文件。
# s- g- s4 u6 Z7 n ( b5 c" p- M$ {
1 K5 Z, I8 h }
6 n5 O& ^$ h" X1 w% ? 以下是生成测试激励程序的核心代码:
% @3 b* U2 l* e/ h2 P7 g J' E 4 ~4 B( S4 v9 K' Q* D* ^
image=imread(‘pic.bmp’);%读取图像文件; S) [9 e& D5 I0 Z5 m5 i. C
& m Z" l! ~9 S8 Y- P [YN,XN]=size(image); %得到图像大小
8 D% R ~9 e% g0 B
: O. z7 ]. {+ } \) j FZ=20; %晶体振荡器频率(MHz)
x0 l( u# k( Y2 C
# f: R4 {: K0 r O %定义常数 %对应于图2所示的时序1 Y2 c% Y" ?$ X* R ^
) `( J2 s; ~7 ^5 j, A W8 P/ B POSTIME=52.2; %行正程时间(μ8)$ I" H4 i- g/ X6 I _3 k! z
. W# O6 a5 V1 `
NEGTIME=11.8; %行逆程时间(μs)
' i( }7 }2 H# Z+ q; }# t* e \
; @3 i4 h6 N5 P3 l! z. e- I HORTIME=64;%行正逆程总时间
& G% b9 o0 Z8 Q/ b& ^7 T) p( H
! `5 x( ^5 ^' Y; z+ a+ x( d! d VSYTIME=1615; %场信号时间(μB)
/ N, e% y& K" b* f ' Y" S& V) q3 c
PPDOT=POSTIME*FZ/XN; %行正程时间*晶体振
/ v3 L% Z5 L' j% L* F, [# W, }
+ H( \" ?3 g5 G [; ~ 荡器频率,图像X方向分辨率0 J5 ?# u1 V1 k, G& f
3 A4 ] s7 Z) y0 ^ ……6 B; t* W- B5 A
" p f% R. G8 H8 H3 |+ t' f6 S
3 H% @& F* A* O. ^# D3 t6 E - ~) Z- K- C ^; U+ k) Z% W
fid=fopen(‘TestVectors.inp’,‘W’) ;%指定测试激励文件的文件名称
5 Z: y6 X& W7 y ( j) S* S k+ j) Z
for j=1:1:YN;% u2 H& H7 `' g1 S2 E; U
4 c5 X9 L$ q9 T( ~1 i! P, x8 k0 s2 q
yy_j;xx=0;
/ L( z! {; E2 |- o& b1 i
4 N- [9 o2 o; l' F for i=l:1:HORTIME*FZ;
/ |9 R4 p0 |; m: d ' P6 Q# h. S* |# m: I7 P
%产生行同步激励
) O( b- D( B! o) [8 w5 \ _ 5 e# P, `5 Z0 n) G5 j6 g
if(i<(HFNTIME+HDLTIME)*FZ)(i>(HFNTIME+HDLTIME+HSYTIME)*FZ)0 X/ G d7 J9 ~# v* o+ n+ l5 q$ n
4 W* ~9 f3 L$ f( { hsy=l;4 S" D7 A$ u4 t7 o% ^
% p4 R3 }: X& A( C, i- F
else
. @ ?( ?6 M3 r1 F( U ( o! i2 c4 W8 Z- p; w. [% O
hsy=0;
" K( R0 J, s; ? G
1 W0 g! {7 E3 H6 f$ n2 w end;+ c5 `3 f3 Z! K9 I: b' M
. N; T' x8 }. ?, z0 }2 i" j %产生像素时钟激励1 J0 k2 q/ S" x3 {1 m
, B) B1 ?: @9 K
if clk==1
8 N, m6 p2 K5 f$ d8 c& {2 O
6 @* y' f- I5 ?! q clk=0;5 B- s. H( U6 `/ i
2 C8 g3 p' G3 C* s else* d: z/ i% i( Z; x, V. s
: f; c" L2 Z) b! t4 d) a, ^
clk=l;$ x1 F7 M; d& }# f+ V8 Q
) v! e( k& N3 _- J4 ?! W3 r
end;' \5 ?' N. ?/ N h! L& ^+ {- @: D; A
& K5 a5 D; Y; ?2 q
%产生CCD激励
6 V; W5 X/ C$ x# x: m, `2 y
: M& E" a" T2 Z' e4 R if i>NEGTIME*FZ! g; f" x" H7 q' x: {8 v, o- V
: z7 U3 o# t6 c xx=round((i-NEGTIME*FZ)/PPDOT+0.45):8 m% A) Y7 n8 X4 L
% M- [7 z/ D9 t, c5 E5 D- c
ccd=round(image(yy,xx));5 q3 L0 M% u% \2 @* U' G/ w
2 }3 n4 h6 ], L% e# z4 h! f
else' s$ g9 f- Z1 t, X* S# d; i/ ]% U% A4 N
/ A( V( T) e# `' z- ~$ J ccd=0;. l& }6 q# R: r1 M4 k0 b0 g# P* {
5 l; x' I O- v$ z, k. o. S end;
6 r! m0 g2 V: v5 I F$ K1 P8 O _
) H, I; w; ?: J %将激励写入测试激励文件0 \5 k! e+ J; ], p. l* \8 N
' ]9 C% D) h3 `: x6 P& B fprintf md.‘%d%d%d%d%d%d、Il’,clk,ccd,hsy,vsy);9 M( A( b6 v/ d4 t
6 E/ [/ Z. x4 m' D0 ~ end;9 ]5 R2 `1 \' [2 y* f; Z" A
! P5 t i4 G# P w9 |0 a' W
end;
( Q9 i7 d+ o% Y; g! d" Q
: Q0 d e8 ^8 ~2 ?' p5 h. c' K 产生的测试激励文件名称为TestVectors.inp,激励内容以ASCII码表示,信号之间用空格隔开,且一行代表一次激励。下面是测试激励文件中的一段内容,激励包含clk,ccd,hsy,vsy 4个信号:
( s; G) n' U" b % g& k0 w6 j5 \+ f7 R2 B
0 0 1 1—clk=0 eed=0 hsy=l vsy=l- W0 i+ a6 D2 v
t( k5 P' j, W5 P3 h Y
1 0 1 1—clk=l ccd=0 hsy=l vsy=1
/ t$ G! M* A6 T/ c
" ^1 v& e8 U0 I0 y …6 ?% u$ f- U- P- ]# [0 k u
; D! r3 G. U* O, V+ w 8 X( X% n' m( e7 Y
" K- _. B. n1 {& F9 Y$ U 0 0 0 1——clk=O ccd=0 hsy=0 vsy=1
# J0 I/ Y, y8 M4 Q0 }9 Y# v 6 @! {$ K0 b4 F1 X( A
…) _& M0 B! H2 ]" K1 C
3 l7 R8 Q! T) j
9 {& ^1 \( O$ N2 G ! u6 v/ m# S* C9 N1 s& [/ x4 s
进行仿真时。TestBeneh应用TEXTIO通过逐行读取测试激励文件得到待测单元输入信号的激励。9 X2 C7 S7 b6 K1 a1 c; n6 x
" s2 Y3 X. N8 w+ L6 q1 j* ]
" {. M9 F* P+ j
- H& Y+ H% P5 G
3.4 编写TestBench
0 z- [8 T7 E+ S3 \
X$ o9 A. _, g2 ?8 l0 z- X ) f2 \( s: t2 q, o: C+ z
: L! R$ d: o# u8 P* Y4 b" ~' p TestBench调用TEXTIO读取测试激励文件得到激励,然后将这些激励分别驱动到待测单元的输入端口。同时,TestBench读取待测单元的输出结果,调用TEXTIO将仿真输出结果写入文件名称为Re-sult.out的仿真结果输出文件。7 P: W: m% y6 {; `; m2 ]
- _$ H& @3 F/ G ) L( T8 k, K! s' W
5 W) R) w8 a1 ^/ C c; N' _ 以下是TestBeneh的核心代码:
6 N! e* k9 m4 E( B- B+ \ 0 R" D; Z" W5 P, d1 c% p
testprocess:process
( T0 c& d+ D4 W8 g/ k8 m 2 \/ D- k9 v5 a4 i/ h
file vector_file:text open read_mode is“TestVectors.
) ~6 ~+ F0 O! ^* P- x5 j5 Q1 [9 u & s# y5 l+ @6 a
inp”:一指定测试激励文件0 k" L! a% O2 J1 M: k1 a8 _
" r5 P0 P% b4 a' F: r4 i" P4 @3 Z file output_file:text open write_mode is“Reset.out”:3 o( W& a5 j7 E! ]3 e
3 E: j/ c5 d* Q 一指定仿真结果输出文件$ j( E6 w' |# f
\4 Z/ f. B* G: ` A$ {; E9 U
variable invecs,outvecs:line;- ^, c$ h2 t/ l8 a: }) E
) q0 p2 H9 h* o: M
variable good:boolean;: ~( N: i6 Y0 I+ G
* I- t$ [* Y) b8 ^% t" i6 e variable eh:eharacter;9 I: X5 F# S5 {) \9 N/ M* G
: @2 Q; d" W1 K- u5 n3 u ……
2 y/ y. r. m5 x( P8 t- n. s 7 i$ x: P: S0 i9 n+ X# c
: v4 W3 h1 g! \- H- q. K( \+ [
) Y1 L% t9 e/ `# G+ r& m; K while not endfile(veetor_file)loop" ~8 e! d3 q0 U, ~
) Y7 ?! W" a% k( d, b% v z$ d
readline(veetor_file.invecs);一读出测试激励文件一行内容.得到激励
* e+ e* G+ o3 B& g# T; q5 H: y# q
1 \ R v. C' P T read(invees,vclk,good); 一一读取一个值给信号vclk) c4 U! R: K# c
8 [) @4 Y# S0 @( z* e! B; \
read(invees,ch); 一一读取空格. b( j. P) p- |' s- B: S! c
& R% p) y7 h" W& Q4 n
……
" j7 Q9 x1 V0 Q
4 C: K9 w( N: f( V9 L ~( w5 p% n8 w& K% O4 X
( a1 k' ^8 }& \3 e( \3 l8 m+ f |/ n4 V read(invees,wBy,good); 一读取一个值给信号vvsy, m+ ?0 R9 P; ?: _
% C) C) q# \0 F/ ^
read(invecs,ch); 一读取空格$ E2 M6 d2 ~2 p3 }* B$ A
! Q7 f; T: D) A
……2 P5 [. L( Z1 k7 U* g
! [0 I" M" L1 @2 d- h
( Q N `3 V% m4 G6 |$ v4 c2 L
( c/ f1 ~0 K* r% s" J/ C clk<=vclk;一驱动待测单元的输入信号clk- b8 d9 |4 D7 s' z' Z
1 v: o) v5 F* |
ccd<=vced;一驱动待测单元的输入信号ccd( J% |% T! j/ _
$ L0 B3 e g1 V8 o! B! n8 e! v
hsy<=vhsy;一驱动待测单元的输入信号hsy( O3 q& d) L/ G4 y( `+ z+ `: a( E
! n6 g- |) F+ ]; S vsy<=wsy;一驱动待测单元的输入信号vsy2 g& K- W. d8 ]4 `# `
% \' w- t( ], n7 w ……3 @# b8 I6 y! N( I1 Z
. N5 `$ p. `0 t, t: R( h) @# m2 p
" j5 I6 h+ V$ }" h" e . F8 V1 h( f- L, s
caseiis" ?8 D9 \$ J) Z5 n! K
: d6 J7 I( X0 n) f when 0=>out_string:=“frame_Yup0:”:一将目标0左上角Y坐标写入仿真结果/ t2 R, [7 A9 w% D) S+ q
: ?0 l/ \2 i3 V% W
when 1=>out_string=“frame_Ydn0:”:一将目标0右下角Y坐标写入仿真结果% B4 V9 v6 e" C: {' O: t
: t& T- Q$ |2 X( _+ G when 14=>out_strlng:=“frame_Xli3:”:一将目标3左上角X坐标写入仿真结果. i- T7 ?6 D+ C0 A0 q# J, y
+ Y* U% o) x9 Y" b* X" q! E* ] when 15=>out_string:=“frame_Xrt3:”:一将目标3右下角X坐标写入仿真结果! |* j& p4 p: H$ l6 u p
/ x6 f2 ]2 Q3 z8 \
when other8=>null;% ^: o- N% U1 I' x! f: h. U; t+ f8 W
. d y4 b, b: b4 {
end case;
+ n& o0 e2 I6 C" ?
; [5 @% Q; {- t" o- p9 [ write(outvees,string’(out_string));+ g$ x7 @8 _' N
; k3 ^2 e3 ^) v, @% m ……
6 {( G/ ~) n b6 w; O ' o% l/ C4 w" k% E t
8 ?% [4 j# O" ~
4 R% g' N# g! M# i 3.5 Modelsim中显示的测试波形及测试结果7 v% s! j0 A3 ]9 `/ p* q1 Q t' U
' `* D1 h h, M" Y
* W5 R) d ~) @# K 0 i0 A6 t6 Z4 m4 n& _
在Modelsim提供的HDL仿真环境中,运行TestBeneh进行仿真测试,得到测试向量波形(如图3所示)、仿真波形(如图4所示)和仿真输出结果文件ResuIt.out。对仿真输出结果进行分析表明,仿真输出的目标位置与输入电视图像中的目标位置完全一致。+ y- y* j0 _; A* C+ y' Z
5 ?* g* J D; \+ r5 a( K# J, B5 a
9 N4 _( s+ x; q/ k" U# k
. U& W' i6 q1 e
! I3 L3 H* ^/ V1 E' w 0 P* z6 j8 Q+ q" F3 H* r& s# h
6 }( G, w+ @% a# H8 R- G8 m, v5 ~- M
# w" K- Q( A/ c$ V2 F! s. R0 L7 W! M
2 G" H$ W6 g" ~. @$ b; j 2 ^6 Y& A; j' p& L2 p% m' @
本例的结果分析是通过人工对比进行的。还可以将仿真预期输出结果保存在测试激励文件或其他文件中.TestBench调用TEXTIO读取仿真预期输出结果.并和仿真实际输出结果进行对比,然后自动判断结果是否正确。在某些场合下,例如对VHDL编写的处理器进行仿真调试时,用户可以将包括指令类型、源地址、目标地址在内的指令保存成文本文件。TestBench调用TEXTIO读取这些指令。同时.TestBeneh调用TEXTIO将结果及中间变量保存成文本文件,以便设计者事后分析和查找问题的原因。
- B7 @* _! }" @) x* b+ Y" _/ y
9 G- j9 r' P( r ( A2 o. z! c- E
zan