+ q7 x$ y& `9 E, U; W 在对复杂数字系统进行仿真测试时,设计者常常面对测试向量数量庞大而难以实现的问题。以数字图像处理系统的仿真测试为例,如果采用完备性测试方法.那么所需测试向量的数量将非常巨大,甚至无法实现:而采用测试向量波形图或者用HDL语言描述等常用方法.不仅仿真测试工作的效率低下,而且工作量巨大。在数字图像处理系统中,一帧320x240的数字图像所产生的测试向量数量达到320x240x2=153 600个。无论采用完备性测试方法还是向量波形图或者.HDL语言描述的方法,由于测试向量的数量极其巨大,采用这些方法都难以进行仿真测试。 + `8 Y# R ?; W2 i o6 v- i1 Z, d; N/ |7 M m
j. ?; b: d9 r( O : O/ j0 }4 j. {" J: C8 f! C. t! N 待测单元输入信号的时序如图2所示。其中,clk、vsy、hsy和ccd分别代表像素时钟、数字化后的场同步、行同步和二值图像信号。! j# q6 s; B G! H; F1 x) ?' Z
5 ]/ n7 N; I; }. K1 L5 }
: h k9 ]) S$ G! [# ~1 Q! N; `8 e' Q/ P) T m
" k/ K8 {$ _! r7 s4 I
- D; T) U: U" v0 L/ Y, j
用户设计的测试激励信号即测试激励文件中输入信号的激励数据,应符合图2所示时序的要求。; w5 P% ]1 R2 V+ i3 \
" s$ o9 W2 c# x, r - [ V! y: ?3 x1 T4 ] A% @
. }' u5 V6 w" w. t 3.3 测试信号的产生* Z7 r( @6 |. n& w& ]% N/ i
; A- U+ f1 ^) w' u; E9 w8 I 6 M9 O5 p' U6 z* T- V; G7 T9 V5 |$ n ; t5 E% j+ E6 f# `- Q' U 在MATLAB的开发环境中.通过编程可以生成测试激励文件。 * R% k- I- r2 D1 ^" e/ A1 H# Q+ j1 s- _5 C( O6 J6 m* ~
% c2 N5 z" X# m( H# l
1 E0 s$ ^) t: ~ 以下是生成测试激励程序的核心代码:7 }. q6 a! X, S
" h x) k) P( T+ W image=imread(‘pic.bmp’);%读取图像文件 # o7 i; l+ j8 ?7 u5 e. b1 r' E( C , D- D% {5 n( `( ~ [YN,XN]=size(image); %得到图像大小 % A( H: C, h- F G' p3 P! j1 b. R; y+ g b
FZ=20; %晶体振荡器频率(MHz) ( i( U- [6 H+ s8 q& d1 c, A. c) N0 U- ]4 O
%定义常数 %对应于图2所示的时序 : L; _3 i' n1 _& R/ _/ M" T, E V& U- G3 N+ M3 Y
POSTIME=52.2; %行正程时间(μ8) % }- P6 G! s" J& f % q0 {6 [6 X. N4 f! Y* l, O( a. C NEGTIME=11.8; %行逆程时间(μs) 4 }- Q% S! |/ { 3 Y% n* t1 K/ R4 ~ HORTIME=64;%行正逆程总时间: ]% S- N& [0 f( {
1 r* b4 o+ \5 B. q6 J, G8 C* \ VSYTIME=1615; %场信号时间(μB) % e, H& |! C7 l& Z; D$ x1 D2 b' I- B7 y9 I
PPDOT=POSTIME*FZ/XN; %行正程时间*晶体振" u- D7 f, Q) m+ x) _
# v$ u7 P& B \1 i; j: a
荡器频率,图像X方向分辨率8 q) B9 [3 V3 S- e. r
5 l# f' x% P- P/ b. {: [0 n) Q: O ……; c6 D# a8 {/ i$ n5 U! U3 s
/ j1 e5 g) ?: T" w7 C
# b6 J) N2 S Y. _
?* Z; u# O) w9 o8 ]; @9 x fid=fopen(‘TestVectors.inp’,‘W’) ;%指定测试激励文件的文件名称 2 X9 e& [% ]+ `, l' B) Y; G 9 l3 T- ?2 n8 F( l. F5 f: @+ B for j=1:1:YN;) s! b" @2 @ X) S$ k/ P& L2 a
1 i6 O/ z$ ~: t7 H8 y) d yy_j;xx=0;6 v& l7 T/ `9 j S- t
; \+ n# R3 G" _: m for i=l:1:HORTIME*FZ;. q# T6 j( C% A% Y
! N3 n: _" }3 Y i" R %产生行同步激励 + I5 C9 \2 r# Z' @: n5 S6 s0 Q, P+ X1 Q8 V& c) z: z
if(i<(HFNTIME+HDLTIME)*FZ)(i>(HFNTIME+HDLTIME+HSYTIME)*FZ) ( I: \: c+ Y2 \4 _$ {, I+ r : e2 ]4 J* z! C# @3 { hsy=l; " S" }$ ~/ y1 U& q' A# r3 }/ l. c/ o' i* D$ }. e: ]% [( g9 X+ s U
else 0 R$ f. D! P) m& H+ q) L r* j; @9 U
hsy=0;2 l5 Z+ F ~0 X
( F H" Q M& }, O end; ; Z" {$ {6 p. ^; S( ?# T1 K8 Z' ~& E$ g4 ^5 W- X& n$ S
%产生像素时钟激励% }8 w$ t6 j& `2 e( s: ~# Y* Q
' x% X: d1 F" }4 U, h
if clk==1 % u6 X' U( w! y! I% n0 B |7 l6 s5 v0 X3 q% o# i- W$ k* c
clk=0; % i- [4 j; p4 r! N9 R" `9 x) Y, I4 L: V! S
else 6 I; G# c6 [3 ~7 W; I' t 5 X# z/ w! z% K clk=l;5 q6 O( A5 L& H
4 e- S7 N1 |- p& k7 K+ @) @ end; ( Y! J$ r0 _% @, Z4 o- W9 ]! a; y4 h
%产生CCD激励 # f4 u" a6 b. `( i$ O8 I# a6 M) ~# t5 \
if i>NEGTIME*FZ# d* H8 p$ Z0 E4 ~
" ^) K3 M; P' }6 R" Y8 k* V
xx=round((i-NEGTIME*FZ)/PPDOT+0.45): ( k! A/ @& y# @* _! y+ I9 h8 e2 C9 {3 G
ccd=round(image(yy,xx));2 Z9 y h1 m/ z- X6 V( S
* b A+ E5 I7 [. s$ j8 I9 }
else+ J9 K2 d3 N0 @: Z9 l3 H! ]! D
$ A/ V% z- J. H& r6 ?6 N9 ^1 T ccd=0;8 T8 a' D. a& c3 U1 u
9 _4 ~6 x+ n _3 X$ a, I$ h* b/ W0 B: @" {/ a; v
caseiis" Q& u2 R3 }. E( E# j8 j
) N+ H( @6 U0 M0 E6 p5 l
when 0=>out_string:=“frame_Yup0:”:一将目标0左上角Y坐标写入仿真结果7 D+ ^9 y6 D# _" u& y! J5 |( a) a
% ]$ P2 X; g# I
when 1=>out_string=“frame_Ydn0:”:一将目标0右下角Y坐标写入仿真结果) h7 v% q6 T! w; e! M
* s" X: X t# _' \3 T& K
when 14=>out_strlng:=“frame_Xli3:”:一将目标3左上角X坐标写入仿真结果' m/ E- X' U' g. T
. l0 p: P: P7 ~3 x2 E# u# |% \( ? when 15=>out_string:=“frame_Xrt3:”:一将目标3右下角X坐标写入仿真结果 2 h& A' G5 g: d+ S9 B: R! I , [7 w( l1 b( @ J+ [9 l- w when other8=>null;: s5 R. x$ Q. D& Y: T+ b% b
5 ~9 [# g4 r) m2 M, q5 T
end case;0 x0 G2 k2 w: L
$ g. M& l% L5 y. _6 E% e3 |% _! P6 y
write(outvees,string’(out_string));7 d6 m/ o2 D; X
$ c m: N1 l( Y4 G& _! \$ Y4 G L" x ) h* R& W; e+ a& f( a0 p" o1 n
4 D0 o; \ n' Z4 p# ^/ h
3.5 Modelsim中显示的测试波形及测试结果" F& B( W) Q9 v8 U
) R- h4 ~$ T6 o
; v, _7 r% e1 t; {# M% { 3 v9 K3 H2 c0 d1 Q- ]- T! [6 I 在Modelsim提供的HDL仿真环境中,运行TestBeneh进行仿真测试,得到测试向量波形(如图3所示)、仿真波形(如图4所示)和仿真输出结果文件ResuIt.out。对仿真输出结果进行分析表明,仿真输出的目标位置与输入电视图像中的目标位置完全一致。 " i/ Y5 g \! B8 j1 }) d7 A 7 K b! @# M* W6 v, N / R& Y& b% M+ F4 G' p* C/ {7 x; u& S
8 g" k: { p8 b& d5 O1 _ % P% v. e+ q3 {/ A0 V: x& X 1 v1 f7 ]- t/ p5 ?, i; Y; C
' P: S. P: g5 k {$ p, p0 W
' U3 h, w7 |& Z2 F
" e* C1 ?% X0 o0 p. j3 l 本例的结果分析是通过人工对比进行的。还可以将仿真预期输出结果保存在测试激励文件或其他文件中.TestBench调用TEXTIO读取仿真预期输出结果.并和仿真实际输出结果进行对比,然后自动判断结果是否正确。在某些场合下,例如对VHDL编写的处理器进行仿真调试时,用户可以将包括指令类型、源地址、目标地址在内的指令保存成文本文件。TestBench调用TEXTIO读取这些指令。同时.TestBeneh调用TEXTIO将结果及中间变量保存成文本文件,以便设计者事后分析和查找问题的原因。 K- m% x {6 e$ y! W