Chip123 科技應用創新平台

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

作者: ultraman    時間: 2011-12-4 08:13 PM
標題: 2-4解碼器測試驗証程式編譯錯誤
剛接觸,看不懂,希望先進們可以解說一下程式,還有一直編譯錯誤,我不懂為什麼錯誤,如果可以也想請教一下
/ j) N9 Y' H( b& A% F. o" W  u" ~/ g- m
'timescale 1ns/1ns
" t% K; e$ _' C/ S
  l  o# ]" f0 \/ k2 q; V! I+ b: {module the_2-4_decoder_testing_and_certification_program;& }5 o7 ^7 f4 e1 l
( j+ `# X5 W: [& K
wire[3:0]y;2 C8 `& w! P# Z3 h) w* P
reg a;
) \8 t" Z$ M# x7 B* |reg b;- [! i/ C7 @# ]7 T# o

) o( V7 q, T- x8 \. U1 q( \' t2 mdeco2_4g UUT(4 K1 n. @+ f/ l" X2 N3 s9 _' ~
        .y(y),2 |: y" j) m4 x7 ]: d5 i0 a) H* u
        .a(a),
) t) N" l: _) }" K; ~        .b(b));, q2 I+ [! T4 |) c7 _
       
# e3 a. {" \9 R, X& |: Minteger TX_FILE;
/ ]0 g% h3 u( k% ?integer TX_ERROR;
3 W2 q2 @3 ?5 H' e* e0 N/ B$ {, G4 W7 X" j! u( S- p% E
initial
6 E( F# _7 L* O( Kbegin
4 F7 z! q8 _1 d; R6 m) ?        TX_ERROR=0;
  |. ?( x* E) ^$ H% ]% b) h% j$ [        TX_FILE=$fopen("result.txt");
3 P  O. r7 i' e' E( g        4 u* d7 ~; d0 K6 e0 _1 m& F
        a=1'b0;
) k3 S  k! ?3 C! R" V$ B% s        b=1'b0;0 D  ]3 [! ?, n) j, ]* J3 g  p, \
       
0 ?: c; a. \3 W7 v        #100
- t5 m5 g6 Y0 j1 I        a=1'b1;
# Z. ]1 p; b; b5 j        5 A4 C. o6 {1 U9 }, g. p
        #100  V! y) x0 P: j3 D
        a=1'b0;                 4 Y' i/ g6 @/ Z( w
        b=1'b1;& a/ G3 j: V# V
       
& K# q, y" p0 u' i5 X+ `        #100
5 f6 v0 T5 _! R% O  e# Z        b=1'b1;4 ~  F- b0 ?: z$ s( I7 ~+ P0 Q, a$ z+ G
       
0 i& G6 \1 }4 T) K& d) I# `        #1502 K7 H: h- o2 h: M6 S" S+ l0 I6 C
        if(TX_ERROR==0)* P7 [, l, V; c1 X3 l5 [
        begin( C% a8 p7 Q$ B1 i7 k
                $display("No errors or warning");
3 N* x5 h' N  \7 @5 W( W# G; D                $display(TX_FILE,"No errors or warning");$ ~% k6 K# [4 A& F6 v
        end else begin
' u: `, S/ I! t. K                $display("%d errors found in simulation",TX_ERROR);
" t/ j1 M9 m0 {, Y1 P4 A6 e: C                $display(TX_FILE,"%d errors found in simulation",TX_ERROR);
% h+ B" e' y7 b& J' e        end
& D( S9 G1 R. U/ b! z8 e                $fclose(TX_FILE);
! z4 h- c, T0 n# W                $stop;
- f' C, Q# X  F( X+ g, p- A( j        end
- u8 E4 q- h8 q% m3 l' W1 A       
. u. C7 t4 T* B        task CHECK_y;; e, W" V. L  A9 T# {$ v/ h7 P
        input[3:0]NEXT_y;4 s  E0 Q0 [. |3 s2 |/ Q1 y
        #0 begin
, y# V! y! D4 N" V( x                if(NEXT_y!==y)begin
2 F  h; h) I! c; N! v                        $display("Error at time=%dns y=%b,expected=%b",* y& B# I9 m4 r3 D/ x
                        $time,y,NEXT_y);+ d& T. o- o8 J& i) H
                        $fdisplay(TX_FILE,"Error at time=%dns y=%b,expected=%b",                               
2 o$ M; f% o9 w9 {                        $time,y,NEXT_y);
  [1 [" w- J, q( R' d! I/ ^( U2 T* ?, \                        TX_ERROR=TX_ERROR+1;
; Z, n. v, p( ?                end 8 ]( y& d( h2 X8 [9 X7 A3 D3 {# H/ ]
        end
* r6 Q. H/ m: d+ }  q+ z4 Wendtask
$ L2 c$ C; t) D8 F( Rendmodule
作者: card_4_girt    時間: 2013-2-5 10:51 PM
本帖最後由 card_4_girt 於 2013-2-5 10:54 PM 編輯 ) P/ R) ]  t! q% W# R+ Y6 S. O7 x6 i
! Q+ C: e. g8 \9 e
你的錯誤有以下幾點: (關於指令解釋以及程式檔請見此帖最底下)/ ^5 H! L: a" @' V) W& d- I9 E
1. `timescale 1ns/1ns (請把第一行改成跟這裡一樣的"標點符號")5 V. l6 Y3 x" X" q: t$ Y
2. module the_2-4_decoder_testing_and_certification_program;8 b& |/ Z9 N: k+ L. h+ F
    必須改成
2 s: g, |5 l3 p4 @* o    module the_2_4_decoder_testing_and_certification_program;" I7 e5 q7 `( r7 O
: g/ w" a5 s& _2 Z; l( m
編譯雖過但必須注意的地方:
% b' X6 t% M# S1. fopen可以適時在後面加入要寫入或讀出,會比較知道動作,比如說
: H) g" ~3 m- E/ J* q    $fopen("result.txt","w");9 |; i+ J9 k( |" b# i( M
    模式有w(寫入至未存在或已存在的檔案)、r(讀出)、a(寫入至已存在的檔案)等
/ |  \2 S/ a3 _    w的寫入方式是尚未存在的檔案會自動創造且寫入程式訊息,或是對存在的檔案進行覆蓋性寫入,因此每次執行完的結果會把上次結果全部蓋掉" H6 q5 |% ]- C+ B; \2 d' H
    a的寫入方式是尚未存在的檔案會自動創造且寫入程式訊息,或是對存在的檔案進行非覆蓋性寫入,因此每次執行完的結果會顯示在上次結果之後
7 A$ U' h3 M/ u$ F2 b5 j7 m    你也可以參考下面的頁面:
9 N6 g9 L9 D3 W; y, |    http://www.asic-world.com/verilog/verilog2k3.html" {: m9 G, P# b; z/ [

% S) Z: Q) n! e, b5 a, ]& H3 F2. 因為你的程式含有$stop任務,對testbench會使模擬暫停,因此對後面才定義的task宣告來說並沒有作用到,最好是能在initial begin...end區塊之前就定義好task3 v1 x% I( U; D+ u2 W# S' X
3. 你沒有呼叫你的"CHECK_y" task,所以就算把測試的pattern寫出來也沒有作用,應該要想辦法代個值給CHECK_y,才有機會知道TX_ERROR是否為0,並輸出對應的訊息以利debug7 L1 t& q2 h0 x1 F! g5 |
4. 不清楚哪一個是你的第一個輸入,不過我是把它當成{b,a}={00,01,10,11}來看,那麼你應該將刪除線部分改成紅色部分,不然會少一種輸入的可能性
7 L' s8 {# Q8 q       //{b,a}=2'b00;8 P/ a& k( E$ ?4 S1 V
       a=1'b0;
/ t- f7 `# |+ c! C- S  V        b=1'b0;" a8 X, j, N+ m& I- [& L4 X) ^
        //{b,a}=2'b01;      
; I9 p. d  L8 O- c        #100: Y5 z+ W- c2 i2 K# l
        CHECK_y(4'bxxxx);, x0 j8 U) c; U' D* p: ]0 z
        a=1'b1;
; [% `$ i7 C+ f- O1 {       //{b,a}=2'b10;
7 {5 n7 d+ N& V5 g/ x1 r0 U* e        #100:
9 X6 h' S5 c- _6 s7 I        CHECK_y(4'bxxxx);
2 }1 i5 _( W3 w1 W  A, ]) m5 Q        a=1'b0;                 + m. X$ F/ `3 o& N
        b=1'b1;
2 H5 u1 z1 k" V  O' d+ e        //{b,a}=2'b11;      
9 X2 J5 t$ q+ n; k        #100" P- ?2 J/ d: P+ c6 ?" z# b
        CHECK_y(4'bxxxx);
7 l5 j2 }: S! k& T. A        b=1'b1;  //{b,a}=2'b10;4 i4 Y- o- N+ l2 \# J( f
        a=1'b1;  //{b,a}=2'b11;  |. ]8 O" u: ?( G7 W7 @; K
        #1502 T% m# ^3 i- q+ B' S
        CHECK_y(4'bxxxx);
! s& }! a# F6 X3 F
, n, q- Z5 f: p: i' ~# t. h5. 關於詳細的解釋,以及可用ModelSim 6.2版模擬的do file(.do)、改過的testbench以及2 to 4 decoder的設計檔,都在下面這個附件中,可參考看看9 @0 i" q- U$ Q" p  f- `3 |* r
[attach]18054[/attach]
$ b) h5 d, W& Z  w% S+ n" w& B6 c3 [9 {0 N
希望對你有幫助!!




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