在线时间 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 引言3 s5 N! Y( ~# b! R& G! Z4 x
, `, m5 f0 X( N6 w% g7 t8 _
' w5 |" T" `1 b( w! c, P4 e4 H9 _
3 o2 Y& U1 J# y
在对复杂数字系统进行仿真测试时,设计者常常面对测试向量数量庞大而难以实现的问题。以数字图像处理系统的仿真测试为例,如果采用完备性测试方法.那么所需测试向量的数量将非常巨大,甚至无法实现:而采用测试向量波形图或者用HDL语言描述等常用方法.不仅仿真测试工作的效率低下,而且工作量巨大。在数字图像处理系统中,一帧320x240的数字图像所产生的测试向量数量达到320x240x2=153 600个。无论采用完备性测试方法还是向量波形图或者.HDL语言描述的方法,由于测试向量的数量极其巨大,采用这些方法都难以进行仿真测试。
1 U8 l. F+ }; u& R3 n e. D
% i/ V9 A7 V& p( n* Y
& z/ j( @) ^ O" J }( t- s: B' G; C 1 m' M7 ~) O) k9 F2 H9 q" f
针对这个难题,笔者提出一种进行仿真测试的新方法.该方法应用TEXTI0和:MATLAB来辅助仿真测试过程.使测试向量数量巨大、难以处理的难题得到很好的解决。以电视视频系统中实时多目标捕获单元的仿真测试为例.对这种新方法进行全面的讨论。) B1 p3 _7 W. G$ f3 ~( }
* a0 }) c# P( y+ O7 V0 m
7 s6 B w8 C/ L d2 {( \( v
! {3 I+ w& ?% F
2 基于TEXTIO的VlII)L仿真2 s9 }3 q6 H+ m& I$ v" M ~4 T
m( W- ^! _( D2 A
3 T' H. a/ Y- I ? D* X2 \7 L 5 [' A" z2 I3 g
2.1 TEXTIO的功能
$ W' [3 O1 W8 T# X3 y
6 v' e; V4 a! C5 y
( z t. c( ? ]8 W/ C' ~; Y
! x' U& A- d5 v- n$ U TEXXTl0是VHDL标准库STD中的程序包(Package),它提供了VHDL与磁盘文件直接访问的桥梁。TEXTIO定义了3种类型:LINE类型、TEXT类型及SIDE类型。TEXTI0在程序包中定义了一些访问文件的过程(Procedure)。
. z# B* Z/ Q/ e4 p ( r/ q( z9 ^' S: R' r
1 C! E2 C P7 R4 s# }. m
+ p) s3 n, e7 b/ X
TEXTIO提供的基本过程有: U e" i" B- H. o
/ y+ g( z, _4 y1 q" f/ ]
; P* c% o7 k: z% l( ^ # d5 d4 k" n7 _+ z
(1)procedure READLNE(文件变量,行变量),用于从指定文件读取一行数据到行变量中;/ J. V L" t9 X; v- \" q2 w3 I
9 E/ m, o& k& @& @' L3 o
(2)procedure WRITELNE(文件变量,行变量),用于向指定文件写入行变量所包含的数据;* C8 \* U* ^3 J0 y
5 [ D# C) ~7 Q8 C. } O+ q1 W (3)procedure READ(行变量,数据类型),用于从行变量中读取相应数据类型的数据.根据参数的数据类型及参数个数的不同.有多种重载方式,TEX-TIO提供了bit、bit、bit_vector、BOOLEAN、character、in-teger、real、string、time数据类型的重载;
+ w3 _5 `6 Q8 I/ N; h1 a
$ ?/ b: u+ R* T3 ]& S6 t& w; g (4)mcedure WRITE(行变量,数据变量,写入方式,位宽),该过程将数据写入行变量。其中,写入方式表示写在行变量的左边还是右边,其值只能为left或right,位宽表示写入数据时占的位宽。例如write(Oufljne,OutData,left,2/表示将变量OutData写入LINE 变量OutLine的左边,占2个字节。* x: `3 h2 M0 `5 b4 U$ {
$ K% y3 w0 Z) U; S2 C0 O% G/ h0 O 3 j& v; M% N) p3 |
4 s* \6 H* e& T2 D! p8 e7 c# [
2.2 仿真测试方案; ^8 W( L8 w6 X- d7 w' Y9 ~
8 r# n) l( b' ~ R
: T' z7 B: R+ I/ a" C! U % W& h( u$ V. j8 d- F7 E
使用TEXTO和MNTLAB辅助TestBench进行复杂数字系统仿真的方案框图如图1所示。
& D$ B1 O" M0 l
1 p% W5 _8 r# |3 u( @
7 E) Q9 A4 k% V4 m, \ ) d" Y; j$ r) x, S
- V9 z, x" c" s% s# l
5 ?# s3 l9 L( ?5 N& j: q d
" U7 l: P/ f% n' g+ y5 O
2 e5 _; s( h, W 2.3 仿真测试步骤
* x* f, [/ ~% Q, F7 P
]2 A9 t9 z& |: Z
; Z) R) I/ |$ S4 P& A
% s1 S2 @; v9 R# d5 y5 v9 _$ l 2.3.1 使用MATLAB生成测试激励文件
2 p3 x2 Y- p) r6 P7 g - f5 P% {+ l$ z* w9 a! b: Q
- n# r( f) J$ }3 g/ E1 [
( @6 R2 z1 U# }9 V MATLAB是矩阵实验室(Matrix Laboratory)的缩写,是1984年MathWorks公司推出的软件。经过20多年的发展,MATLAB已成为通用科技计算、图视交互系统和程序语言,广泛应用于研究和解决各种具体工程问题。& i9 T2 z; h7 U+ {
, j m6 _2 t. Z
- R* y6 J# X: u" V9 E
! H m7 a, G" |! V7 g) _; W 在复杂数字系统仿真中,用户可以利用MAT-LAB的强大处理功能生成测试激励文件。测试激励文件的数据格式由设计者自行定义。测试激励文件应包含输入信号的测试激励数据.也可以包含输出信号的期望输出数据.这些内容常常以.ASCII码表示。, L0 E' k2 }: x" Z% g1 _2 K3 I U' P
) o( V* L8 F+ ^9 l/ Y l& Z; ^" w4 |. ~3 u, M
$ r7 X s' A( U% j) a
2.3.2 编写TestBench m* D2 W' u; K) g
2 i" }9 u, H A& G: d! J, k
- _2 P3 T# y; s3 `/ i7 j: s* V
2 f' H f/ f# \* O
TestBench是测试平台程序。TEXTI0的使用是通过TestBench来进行的,TestBench利用TEXTIO读取测试激励文件或写入仿真结果输出。进行复杂数字系统仿真时,用户根据测试的目的和要求设计TestBench。0 y: W: M+ h3 D) q
- p, R1 w e+ \: I4 ~% i
0 h+ F0 |7 W" j1 x1 w3 Q
) o. z) [! s1 o
2.3.3 在Modelsim中进行仿真7 t+ i; V# ]9 D0 G
) c) D" |- l- H4 ^9 _& `
9 P4 ~. }& a/ _! i0 l ) l0 E# e) y) K3 K+ M( u- h, ]5 l
Modelsim是Model Technology(Mentor Graphics的子公司)的HDL(Hardware Description Language)仿真软件。可以实现VHDL、Verilog及VHDL一Ver-ilog混合设计的仿真。Modelsim为’TestBench提供一种良好的HDL仿真环境。+ `6 P+ _6 k2 O- @( |% M! E8 ]3 V/ l
^( j& I5 E4 l. t0 y
/ s, Y: ~2 c$ H2 l: R
5 ~6 S0 w$ l( a+ [ 2.3.4 结果分析) p# v2 c6 X8 t. M
4 b0 o6 J! y" ?& c$ z2 P) m; b . `" a+ M- Q7 h% G
; U U9 w6 z& |- u 仿真结束后,仿真结果是否符合要求,用户可以通过二种方法来判断。一种是应用软件自动判断。即通过TestBench或其他软件(如MATLAB)对仿真输出结果和期望输出结果进行对比,从而得到分析结果:另外一种是人工判断.即设计者自行对仿真输出结果和期望输出结果进行对比,从而得到分析结果。" [3 ~5 g5 O. ^3 l3 l
& j" g4 Q$ O: k- a- z
- l4 Y* X" I' \+ ^$ e( ^
' u/ z- t/ G' |: t+ q' d- S 3 仿真测试实例6 {7 E1 S0 u7 y- q. j
- `: z4 O# h7 F. j
( z2 B+ K5 t( b8 g: O* ]5 a
5 s$ ~" t' A$ Z 3.1 电视图像实时目标捕获单元功能
/ N5 [) P# ^5 \ g0 ~
' }* d6 C* I/ o
6 f+ b, j! e+ U4 S- v1 }
7 X/ U$ ]5 ?& |/ G, p0 ] 电视图像实时目标捕获单元(以下简称待测单元)具有对电视图像中的目标图像进行实时捕获的功能。本例将用TEXllO和MATLAB辅助Test-Bench对待测单元进行仿真测试。0 ~+ F" ?4 ~+ Y
7 y) ] P8 X' i3 Y: K# O 0 _& J; x, n U3 R3 N) c# ]2 |
% V) Y, I* w. ]% d2 ?$ V0 q9 m- D 3.2 需要产生的测试信号及波形
7 P$ t7 H w1 H1 _, k. ? ! c+ u( K' s4 K; U3 d( p0 W
, r) ]% S; U% t! Q- d: `3 H - i% v% C, ]% f ~4 n2 X
待测单元输入信号的时序如图2所示。其中,clk、vsy、hsy和ccd分别代表像素时钟、数字化后的场同步、行同步和二值图像信号。
' ~* l1 R y" f5 B" f0 }$ J: ` " l: m' O" o+ ^1 o* ?% c3 g* s, Z$ Q
( P5 ]. A5 T" U/ F3 n
' z# q6 x' N2 U9 J+ h4 f) i M/ S, }3 L' a
1 F" z- P+ X: z% r: `
用户设计的测试激励信号即测试激励文件中输入信号的激励数据,应符合图2所示时序的要求。. l! ^. G3 E9 Q* i, V/ |9 K' l
+ `1 c( b* D" n- R
) p) \2 e3 D* w- S
3 q! X) @8 m0 D( l/ W1 | { 3.3 测试信号的产生, v# W2 y6 Q$ @+ ~- C( K/ [. e
, ~3 v! o$ ~, }: ]
0 `$ X! Z% z( O# \2 [$ Q3 Q. u 1 u/ E/ u- {4 }6 ^3 M9 a
在MATLAB的开发环境中.通过编程可以生成测试激励文件。
2 h0 b& \& B) X8 H. R2 V6 ?) m: y5 Y % y# ^+ ?" _0 _/ C8 A5 ?5 H
! N/ C, k& i5 b * n7 u ^( e% ^! b0 Y1 P
以下是生成测试激励程序的核心代码:% [" r4 f9 \) Y7 A) j
7 A9 V1 F- T* K. X
image=imread(‘pic.bmp’);%读取图像文件# w! i* ]. a! y8 P6 t
2 T5 d" _% o' H, L6 q [YN,XN]=size(image); %得到图像大小 H0 ~2 X5 }' i$ H* n, F4 ^
9 A" g, n: l" ^2 v! s6 C
FZ=20; %晶体振荡器频率(MHz), U$ y) y! m- a- L* ]7 U
; M, I% v4 [8 M: q
%定义常数 %对应于图2所示的时序
/ b( X Y# n9 O' n/ V6 ?- I* A' c
' L# c' J( F% z2 l: r* P% n POSTIME=52.2; %行正程时间(μ8)7 O7 ~4 `9 C4 ^% ]
/ K4 z) G' B4 X- @' o( q5 [
NEGTIME=11.8; %行逆程时间(μs)
; k8 U. k9 \5 G4 P, l) `) `
) S* W+ H7 C( t HORTIME=64;%行正逆程总时间
" W) ~3 H* }' l2 ]" Y8 a" _ ' c2 w4 R# z/ c
VSYTIME=1615; %场信号时间(μB)7 G' p/ g. P/ a5 h8 _
) ~8 c8 n0 I7 ]( C5 g PPDOT=POSTIME*FZ/XN; %行正程时间*晶体振# t8 Z9 d; |% |! W1 f
% X. Q g3 D: p& t( q& z4 L# Y
荡器频率,图像X方向分辨率
8 V& a+ {7 d* a& V0 ^$ R1 Y; M
8 y1 i4 B3 e5 k- }# G5 A ……
$ D% j) `. a% Z: U6 w* P, z 3 ^2 l, {( l) L% v& J T
% T& U# \( ~. L+ W( d* F# s
0 Z* e* X; x1 ^5 D fid=fopen(‘TestVectors.inp’,‘W’) ;%指定测试激励文件的文件名称, `1 v( K3 }( |/ C+ n2 [
" u, s. J3 ^2 Y% T {: n
for j=1:1:YN;9 e! O% p8 |1 F' X
9 O7 K: q8 @6 r+ p2 O
yy_j;xx=0;: ]. M& F8 M/ a2 `, B( E, g
; w" g# B; J' Q
for i=l:1:HORTIME*FZ;3 n6 @& ^3 L w
2 E8 @% N. p3 b( N
%产生行同步激励6 W+ f' T) u! U+ |' ^: @" n6 y8 `. ]
- }: J5 ?& z1 H0 k9 ^ if(i<(HFNTIME+HDLTIME)*FZ)(i>(HFNTIME+HDLTIME+HSYTIME)*FZ)" }% g2 b1 K: Y6 P+ R0 Z) J3 t) t
: H! m4 e' A7 Y/ y# H6 m# V' F" | hsy=l;
* |4 q( A, P' }: h, q$ T 4 d7 v6 U& U0 Y6 e4 f/ F7 J
else
" M5 a* C8 @, |8 O' n4 T6 E! _5 R% G* D
8 L5 ]; X1 v" O4 W hsy=0;+ x1 F+ {/ J, U" P& ?' j
5 T6 P0 I* m1 C6 k" n, g end;9 [/ d5 [0 L7 X% W
$ ?( Z8 O! \( K5 i8 T( `) Y8 q %产生像素时钟激励, c! ~8 J' b: N9 F
3 F1 P- o9 U" {. G5 }4 t/ Y. C, \$ }
if clk==16 C# [5 g Y: x n
& |4 N/ ?3 C6 ]0 p; \) b clk=0;
& _9 G$ x8 j3 g 4 X7 I" W. Q& \/ Q, |$ X. I7 l; P
else
4 j* T( }9 p5 ]3 `3 B$ X) F$ W 6 \+ G) n$ e& N6 t$ a
clk=l;: f* S) ]$ M& K# x: Q1 J& B
) Y, p, j2 p; Y( i+ z
end;
9 H: v+ T, q5 S& [; t 5 H6 c; m( G& [; D4 v7 E9 r
%产生CCD激励
M- F1 o7 R# D 2 V: U4 m, _7 R
if i>NEGTIME*FZ
0 [. J7 p! o M2 f) R1 k; x 8 ~: Z! {* l3 V* k6 I9 V8 X
xx=round((i-NEGTIME*FZ)/PPDOT+0.45):* b8 E6 M9 j' F# @4 a; f
- J" K9 O9 j+ b0 b3 @5 [' t ccd=round(image(yy,xx));2 x5 f/ ?" O6 x
/ _' v' H. R8 |9 D/ @ else
6 \5 L u9 R" m1 w 4 q7 h6 n! q$ b7 ]# r
ccd=0;
5 {, `3 G* o' h% O 9 T$ ?( d' ^3 Z Y; G* h
end;
% v' A, _% g: R8 F' ^ G' t
$ M/ c6 J0 P( p %将激励写入测试激励文件
0 ~/ J5 a3 r. ^ 2 b7 f. M5 I+ P+ l
fprintf md.‘%d%d%d%d%d%d、Il’,clk,ccd,hsy,vsy);+ X* s2 R: R0 p. f4 N
4 O& \( b6 L& @4 q3 |0 z( Q
end;
. m1 z" v P+ X
: g/ ?. A+ J' I end;
: A- Z W% a7 P; K) c' h
6 u3 k) Q& p6 j$ ?6 p* } I 产生的测试激励文件名称为TestVectors.inp,激励内容以ASCII码表示,信号之间用空格隔开,且一行代表一次激励。下面是测试激励文件中的一段内容,激励包含clk,ccd,hsy,vsy 4个信号:1 B: I% H! B: y
2 d# g3 A. B- C6 \9 z
0 0 1 1—clk=0 eed=0 hsy=l vsy=l
; u7 t2 M# P8 D4 Y4 @ A7 w
5 u4 J' R& K7 D; n 1 0 1 1—clk=l ccd=0 hsy=l vsy=1
$ l5 ?' G- A6 H1 l: n0 B: X
* E/ w7 f* I' z1 u R) y …3 J% B* _/ _# s [4 w' A
/ ~' r$ L; u, v5 Y) v7 i& @) v" I
( |1 l# m" X" M* ]/ ~6 H* F9 r; E
5 a* w7 J1 @# |* F( [. Z 0 0 0 1——clk=O ccd=0 hsy=0 vsy=1* H6 C1 C5 ?* w4 e8 d; c+ s8 `( p
# {7 H/ K+ |+ A …+ p0 H% P2 U* x- y8 v
, o Z4 S Y% ^ e( M# j
6 _; h7 E! z1 a) j. s& z% {
+ b$ e' k( R! N& j 进行仿真时。TestBeneh应用TEXTIO通过逐行读取测试激励文件得到待测单元输入信号的激励。
( P4 ^5 ]* w4 b l" V* t$ b* X* B4 q
" z! ~0 p# c0 ^- f; t
: k: O7 d; J9 K5 Z
) `; ]& b- X* u, \! P. N! V 3.4 编写TestBench1 Q* T# C. L6 b
. Z. p3 K* ?/ D( j+ k { ; d3 \* N% D- f& j
% Z+ {& p1 |! _4 e TestBench调用TEXTIO读取测试激励文件得到激励,然后将这些激励分别驱动到待测单元的输入端口。同时,TestBench读取待测单元的输出结果,调用TEXTIO将仿真输出结果写入文件名称为Re-sult.out的仿真结果输出文件。 h1 J' ^+ A1 l* O+ A
2 H0 h3 i+ H6 e0 | q2 ^" J' J* W
3 z- G" L% {. D- | S4 |9 O
) C4 Z; u+ a% D! u) l; F" D# e l
以下是TestBeneh的核心代码:
: {0 V, m3 A2 X6 [, U " m) o/ u9 b( N7 e( r8 }& |
testprocess:process
' n( b# N% \* p; u- E) P+ u; x ( U1 Y3 M! g# g7 S1 t! _
file vector_file:text open read_mode is“TestVectors.7 v4 b8 D" T; J3 f
( O# [; ^ A8 T- B+ \& w
inp”:一指定测试激励文件
# O0 v; z# P, w
) g( S) f1 E- g. K file output_file:text open write_mode is“Reset.out”:; K3 b. A) ~ j9 m( n: x
0 \1 R" n0 B( l/ o# p
一指定仿真结果输出文件
' t! h' W; S& X5 }) \$ y 5 d! c9 ?* S" x9 _: Y
variable invecs,outvecs:line;
1 ^/ r' z0 }# V1 N
9 R( G9 G; i, m+ }) Q0 X! @ variable good:boolean;; _$ x, ^- V5 ^3 ?
, y5 _3 I& F- |
variable eh:eharacter;' \5 S! | Q3 h8 ~7 _
4 q" t% y' w" I# e; W9 m! ^" f+ b ……
: s' D! a0 i- X# m. v1 N
/ K5 H5 K8 O ^6 t" T8 M3 V' ?
1 Z. L9 S" [6 g! I1 O' [
7 X5 \' q# I4 O3 P; m8 | while not endfile(veetor_file)loop
$ O8 V6 |, }! R, C1 w2 a! L* w3 c ' s5 p( |4 t& X) a- `8 D8 O/ q
readline(veetor_file.invecs);一读出测试激励文件一行内容.得到激励
+ _( y1 S A8 N7 ^
) J1 b& k) x8 N, x# H read(invees,vclk,good); 一一读取一个值给信号vclk
9 \6 \( r! H6 l
8 C) T* O z& V read(invees,ch); 一一读取空格1 [7 x. |; j6 s: y
' }( G# K( o u6 r0 z- M% r
……
, u3 L+ t. v0 i4 |8 ]/ l; f
9 u5 K1 c$ l* j9 ]& v
) W4 |8 n0 t2 d3 ] - L) I$ J6 C9 _) f, Y
read(invees,wBy,good); 一读取一个值给信号vvsy
" n# o* Z, G7 O) Z+ v! O$ Z# J9 m 9 F( S2 N5 j W) \! W% Q
read(invecs,ch); 一读取空格
1 D0 T7 f ?7 V - l2 S% P* y0 |' ^+ P" X: x
……
^( K9 A9 K. ]# f l1 m6 [) `
& j7 I" y+ F9 C* ?( n# w/ ?
2 q0 G/ k# d" M3 x' E1 ~ & ^& A' }* O1 X3 I0 F x6 d
clk<=vclk;一驱动待测单元的输入信号clk3 n+ W6 F% {4 m7 f4 E) `& ? J. f
! q9 m) ]" ~3 O; B& M ccd<=vced;一驱动待测单元的输入信号ccd8 e1 V% L6 b i- q$ m" L: X
8 d8 H' U( X2 [ hsy<=vhsy;一驱动待测单元的输入信号hsy
1 d5 U7 [) n7 I8 k) u- Y
# Y; n- S. ^* Q' a0 L, ^4 P vsy<=wsy;一驱动待测单元的输入信号vsy
9 q7 |. @! L# I7 K* t * a! d% k* \/ j% Z6 e8 e2 C
……5 y$ r5 `! o! ~( k9 y i6 ^* R1 m
& O) i2 F- h- L2 _: p% u* {3 A
# S8 P' O/ E7 J) d; {- Z- H9 W
0 c+ V# q- w' a, j4 T$ r/ k caseiis) k' h. ?0 U5 u0 [ ?3 z% V
0 F F' G$ j( k n1 l when 0=>out_string:=“frame_Yup0:”:一将目标0左上角Y坐标写入仿真结果- y+ E- S. \# _* k
4 O5 J3 M# b# Y3 ? when 1=>out_string=“frame_Ydn0:”:一将目标0右下角Y坐标写入仿真结果% r2 m2 v* b& W: T' h
J. I$ z* x( s$ T6 K: P1 A when 14=>out_strlng:=“frame_Xli3:”:一将目标3左上角X坐标写入仿真结果
; x, [( [6 J. g) s) ^ 9 q4 } P4 K5 Q v! \7 r- p$ T5 m
when 15=>out_string:=“frame_Xrt3:”:一将目标3右下角X坐标写入仿真结果
' R2 @) k! P' {8 t& X9 [% u9 e5 a 4 _ N* y- c% k, |1 Q! f
when other8=>null;9 D* o1 m0 J+ h+ ^
! |7 q, x0 ?5 J, }8 O6 b
end case;( d4 Q. _' o7 z* z% t! h" }, r4 p
4 |& q/ w: K# ]0 { write(outvees,string’(out_string));
8 z {, Z# ]* B E7 U 4 m5 L$ |& r5 s( |( u
……
7 i: U0 r0 l7 `0 M8 q
6 v4 r/ p$ b7 |- x; E4 _
/ C. _+ O3 _4 |% d+ b$ S
" v' W; T, m) s4 N/ A 3.5 Modelsim中显示的测试波形及测试结果* \" z/ z ^# c. a. `/ D% v
9 l2 r7 z$ g) ^+ {8 N9 g 9 ~$ M$ C! H1 `2 H7 S8 V. Y& O
, K8 u4 l4 k1 R5 _4 s A [2 T
在Modelsim提供的HDL仿真环境中,运行TestBeneh进行仿真测试,得到测试向量波形(如图3所示)、仿真波形(如图4所示)和仿真输出结果文件ResuIt.out。对仿真输出结果进行分析表明,仿真输出的目标位置与输入电视图像中的目标位置完全一致。& j7 ]4 |$ {" _+ `# p6 }* ^
/ e* Z1 I% L2 W9 {# X
1 W' X1 i1 O9 b! J: h8 M # j; ]' b) F4 ~- w% }
( A% o: t$ J; A+ W. ^
. w" q6 l: f' A+ y1 W " w/ U! f' n* p' a& R
% l/ B1 j* Q# m; g7 S: A! F
/ Y0 U( u1 Z: @0 `4 u
- }1 Z6 ^7 Q# E. | 本例的结果分析是通过人工对比进行的。还可以将仿真预期输出结果保存在测试激励文件或其他文件中.TestBench调用TEXTIO读取仿真预期输出结果.并和仿真实际输出结果进行对比,然后自动判断结果是否正确。在某些场合下,例如对VHDL编写的处理器进行仿真调试时,用户可以将包括指令类型、源地址、目标地址在内的指令保存成文本文件。TestBench调用TEXTIO读取这些指令。同时.TestBeneh调用TEXTIO将结果及中间变量保存成文本文件,以便设计者事后分析和查找问题的原因。
8 @) ]0 S7 w3 I ) Z. z5 F& N% z. y# S" @1 V
3 H4 O# T5 h# G$ e2 c4 \5 J G
zan