Chip123 科技應用創新平台

標題: 2-4解碼器測試驗証程式編譯錯誤 [打印本頁]

作者: ultraman    時間: 2011-12-4 08:13 PM
標題: 2-4解碼器測試驗証程式編譯錯誤
剛接觸,看不懂,希望先進們可以解說一下程式,還有一直編譯錯誤,我不懂為什麼錯誤,如果可以也想請教一下8 j/ Q- M8 b" F+ o3 p3 V5 S. c

; M0 O  j5 [1 I'timescale 1ns/1ns1 V7 [( ?/ _& H( E& S6 o
* l& W% s/ [$ }' T. f( L$ U
module the_2-4_decoder_testing_and_certification_program;2 b* R' z! l* L  k/ a- N* \
3 \/ o4 N+ O4 V# |2 \0 E
wire[3:0]y;9 k! A! t5 ^$ r7 O; @# ]: I) i3 U7 s
reg a;
  e! d2 G- W1 A' ^reg b;
2 l/ C9 }% ]1 x# f* Z7 n7 f6 I  a8 d3 Y9 U/ m# k+ A
deco2_4g UUT(
1 i4 z( t# P2 p, b- R2 r" ~        .y(y),
( F6 e" a6 a8 Z# P' H; r        .a(a),3 q, x+ x& s. m3 X' Y
        .b(b));+ W# p2 K, \+ h, ]; J5 u9 l& b
        9 T% ?. T7 S# e" {6 W
integer TX_FILE;
: i- Y* h0 k' [" |4 A# U$ ainteger TX_ERROR;# H4 y8 g' \9 i/ ^3 l. s
; a& y$ i2 A0 _9 O$ B
initial
2 V- k/ o; j# j! }" t) x6 E3 `& kbegin$ ]2 E9 d0 d" E+ c! X
        TX_ERROR=0;
) t3 t  z' [; j        TX_FILE=$fopen("result.txt");
* i; @1 O" s0 ]" {5 p$ S       
' v. ^! t! W% |. H* V8 A        a=1'b0;
. v6 q  L! P. ]; [# C        b=1'b0;
* b  {. }+ C( r) K: b        * @  t% D0 e5 s7 i( ~7 O5 I3 a
        #100- a, E! y+ r2 e5 O  G3 A
        a=1'b1;# D# o+ I" n0 \, V
        * m+ g1 M7 h# F$ c# Z7 ^/ n; L
        #100
+ Q# X5 p( ?6 Y3 a* y; A! t/ g5 C        a=1'b0;                 6 O# b* L4 [: D  W! x
        b=1'b1;
* `9 Z: v8 ^% t       
7 W( b+ r& j1 O' ^( i  G9 X4 \1 w        #100# R3 t" H* B2 x2 n6 p. B% X
        b=1'b1;8 S7 o. C5 J$ ~' ~" m. [2 O
       
$ ?: a3 }4 B6 k' E) d        #150
$ x4 K4 G% r3 P" E- P8 x" W        if(TX_ERROR==0)( N0 e( u# ~- n9 W* \6 f. O- b& z
        begin
- s5 y: f( C" A/ R                $display("No errors or warning");! P! _8 _$ I( f6 G5 ~# q  @2 M, S
                $display(TX_FILE,"No errors or warning");
) T9 |% T: R6 k. X, a; w        end else begin6 F0 B- o3 e0 g" t/ V7 ], O  W
                $display("%d errors found in simulation",TX_ERROR);8 g8 e3 p, a! T3 o
                $display(TX_FILE,"%d errors found in simulation",TX_ERROR);
9 ]5 J2 u1 i9 {) `5 I        end
' _, S/ j4 E: A                $fclose(TX_FILE);4 m9 ]& _* R) ?& X1 `, u2 C
                $stop;
: v; ~3 W5 q2 N. ^; s' C8 c* y$ n        end
5 K3 J" I- {$ j        4 Y/ a1 |- t: Z7 I
        task CHECK_y;# g$ w' }! c) |) ^5 G
        input[3:0]NEXT_y;
- j5 U' p1 p  B5 H- [1 ]2 C9 l6 ^        #0 begin# S6 f, C# Y% o6 |, _. {. ^3 l/ t
                if(NEXT_y!==y)begin
$ w5 b* r( }# e- l9 j! O* o& y5 ]                        $display("Error at time=%dns y=%b,expected=%b",: A/ j$ V8 r% v3 g( A% x6 e
                        $time,y,NEXT_y);6 l5 ^5 u3 L, x  m0 V
                        $fdisplay(TX_FILE,"Error at time=%dns y=%b,expected=%b",                               
% E% y: M! ~* A% |; F5 d& }- F; C                        $time,y,NEXT_y);
4 y9 @. @1 S) u" x$ z+ c# P                        TX_ERROR=TX_ERROR+1;- y5 H! ~/ [  Z! b
                end
0 G3 V5 h" W8 A3 c) r* T7 P# t        end5 L  n- z+ G# B9 X% @
endtask' W/ ~* r1 K) E9 l* @
endmodule
作者: card_4_girt    時間: 2013-2-5 10:51 PM
本帖最後由 card_4_girt 於 2013-2-5 10:54 PM 編輯 " y( B* E6 U6 t, Y+ E
3 Q' b/ I6 f' W) e
你的錯誤有以下幾點: (關於指令解釋以及程式檔請見此帖最底下)
6 U4 M1 a8 j# b- c1. `timescale 1ns/1ns (請把第一行改成跟這裡一樣的"標點符號")% C5 p2 t6 k2 o" Q+ f* j1 V# H
2. module the_2-4_decoder_testing_and_certification_program;: m. g# L  t' V- P# \5 d) n
    必須改成- }/ |8 t+ K! a- [, n3 E1 C" Z
    module the_2_4_decoder_testing_and_certification_program;
$ |- j8 ], o" c' Q1 \' r
( o* t8 F, m( L9 n. T3 u" Z% Q編譯雖過但必須注意的地方:# x& L6 J, ?- l0 B4 o
1. fopen可以適時在後面加入要寫入或讀出,會比較知道動作,比如說
: N7 |! M4 m) v! {) r; y    $fopen("result.txt","w");
* ]+ }9 D4 S, J( m3 H    模式有w(寫入至未存在或已存在的檔案)、r(讀出)、a(寫入至已存在的檔案)等
8 l2 ]4 U1 f! K4 n' m2 j    w的寫入方式是尚未存在的檔案會自動創造且寫入程式訊息,或是對存在的檔案進行覆蓋性寫入,因此每次執行完的結果會把上次結果全部蓋掉
) i( j+ [) O3 I  R; D  f9 Y5 Z    a的寫入方式是尚未存在的檔案會自動創造且寫入程式訊息,或是對存在的檔案進行非覆蓋性寫入,因此每次執行完的結果會顯示在上次結果之後* t2 S; o. p: `: y7 ~, w
    你也可以參考下面的頁面:
* `+ }& h% m, m0 Y' h7 s; o    http://www.asic-world.com/verilog/verilog2k3.html8 Y3 v# p& ]$ U/ r- S
5 _, C0 D6 a: L; w, U
2. 因為你的程式含有$stop任務,對testbench會使模擬暫停,因此對後面才定義的task宣告來說並沒有作用到,最好是能在initial begin...end區塊之前就定義好task
  v8 R1 f8 F! x1 L$ w1 A6 H3. 你沒有呼叫你的"CHECK_y" task,所以就算把測試的pattern寫出來也沒有作用,應該要想辦法代個值給CHECK_y,才有機會知道TX_ERROR是否為0,並輸出對應的訊息以利debug5 D7 B9 Q% a- S
4. 不清楚哪一個是你的第一個輸入,不過我是把它當成{b,a}={00,01,10,11}來看,那麼你應該將刪除線部分改成紅色部分,不然會少一種輸入的可能性, F9 j& U. V3 b" v: e& z
       //{b,a}=2'b00;
9 P* t/ ~$ b$ r       a=1'b0;" [! ^" F$ P$ x* l" {
        b=1'b0;9 N% ^6 ^/ a5 l3 J& c! |# s
        //{b,a}=2'b01;      
: p7 x, S9 D% m1 M        #100
6 H) T" q) r) e        CHECK_y(4'bxxxx);
/ W0 q; X& O& z. V3 C8 t" G2 P        a=1'b1;& |8 w% C; ?2 m5 w$ Q9 q( T: O
       //{b,a}=2'b10;7 ~; v1 `/ i- c- `& t) @9 Q4 a0 |* k
        #100:
1 P) F+ V: y# e        CHECK_y(4'bxxxx);
) w# a$ H7 r, _% u2 Y) e; v        a=1'b0;                 
1 j3 R& S: S0 X3 ~3 v2 \- Y) ?! l        b=1'b1;
! j& ]' q$ Y9 b* j0 A        //{b,a}=2'b11;       " f9 z8 Y) y7 v1 [2 J- ^% y3 T+ Z
        #100
8 U" B1 @" u* _        CHECK_y(4'bxxxx);# W# j1 b9 i0 ]2 O+ N/ Q
        b=1'b1;  //{b,a}=2'b10;
+ |( h  S8 o4 y% H        a=1'b1;  //{b,a}=2'b11;+ I% \, q3 N( Z8 n5 M
        #150
( s) o! o0 _) T+ R        CHECK_y(4'bxxxx);; J5 I0 F3 g, Q: H

% t5 P' z2 h6 i$ o5. 關於詳細的解釋,以及可用ModelSim 6.2版模擬的do file(.do)、改過的testbench以及2 to 4 decoder的設計檔,都在下面這個附件中,可參考看看
+ J  _. J, d  e* D3 z: ^' \0 h[attach]18054[/attach]1 f3 k! o0 a  w3 u
: S  n8 ?4 c# p0 p$ b. u
希望對你有幫助!!




歡迎光臨 Chip123 科技應用創新平台 (http://www.chip123.com.tw/) Powered by Discuz! X3.2