Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

搜索
1 2 3 4
查看: 12554|回復: 1
打印 上一主題 下一主題

[問題求助] 2-4解碼器測試驗証程式編譯錯誤

[複製鏈接]
跳轉到指定樓層
1#
發表於 2011-12-4 20:13:29 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
剛接觸,看不懂,希望先進們可以解說一下程式,還有一直編譯錯誤,我不懂為什麼錯誤,如果可以也想請教一下
  v, [5 T& g( X! F
7 J) L' u* |- S'timescale 1ns/1ns0 K) Z% p6 q& p* @, `
$ F* ?; J: G1 X1 Z9 u% {
module the_2-4_decoder_testing_and_certification_program;
( n7 g5 I0 z% s  T8 u! I3 P2 W# ?
* l7 U( D$ u$ mwire[3:0]y;
4 c, b6 _5 A& |! h# q- u; Hreg a;
/ [' L/ M, n. \0 Jreg b;
! t' l- F' T- N5 w
) I. D% N0 {( Vdeco2_4g UUT(- E, T, I0 W" S7 O- F8 B
        .y(y),
4 z: q6 j# N6 F! x$ t) \. R& b        .a(a),* a" r. h7 v+ }4 G! k
        .b(b));( Z$ Z& @3 k7 q7 _* Y
       
" Q7 `# L$ V: P1 R& Z% g9 uinteger TX_FILE;+ s  J( K5 X& _9 p+ g! W9 {& g
integer TX_ERROR;
# ^* X4 Q- D% u0 y3 l6 L3 d; R2 n) E" U( ^
initial # X4 \, [$ s/ ]' d" [9 l! T
begin' K# V! e, g& ~
        TX_ERROR=0;
: W" U% _* Q" R3 Z0 A2 N3 r        TX_FILE=$fopen("result.txt");
: b8 Y: p3 F3 o/ l/ `2 t" y0 y2 J        0 |( H0 k4 N/ q/ i/ Y& M! o
        a=1'b0;
0 q& A4 n% ]% G  v        b=1'b0;3 [0 L' W* U2 X- p: g
        8 B4 p* v- F  \" }3 B
        #100
1 D; {5 a( l* F% m& {        a=1'b1;# X' d% [1 N4 b2 W0 B3 h: ^
       
2 u  D3 ^/ k. K# O' i  p0 _: \* C+ ]        #100
3 f3 A/ d* j  J( d6 V        a=1'b0;                
5 b. G8 j5 ~+ S/ X        b=1'b1;4 S* y' h" _; I$ |
        8 {2 L3 V; ^  j$ ]6 y
        #100! a, e/ V& |- C$ o2 b8 n
        b=1'b1;. p0 F2 n+ l- ]% b0 x1 j
       
) ^' q$ e" K$ u3 c  b4 M: q        #150
4 ?; n3 {6 ?2 I# Q9 I        if(TX_ERROR==0)
9 ~, t( a3 h8 N9 M        begin
3 ]) F7 \1 d; `6 @9 g9 |' m+ k0 K- Q                $display("No errors or warning");: @# E5 x/ H" B! I- K! l
                $display(TX_FILE,"No errors or warning");
+ `% O. C7 X$ V. U, i: @        end else begin
5 Y' {  ^$ k1 d                $display("%d errors found in simulation",TX_ERROR);* L# L  H9 S+ r& w# }0 h
                $display(TX_FILE,"%d errors found in simulation",TX_ERROR);; w( d0 P3 D( g3 H; B4 Y
        end
6 R- {3 ^" i0 y3 K" |0 T; a                $fclose(TX_FILE);. ~3 U# S6 ?6 ~; x0 B0 L
                $stop;6 o, f6 x& N6 S0 U- y4 N
        end
$ O/ U9 `. P( [+ l" x        " n  B7 J% l: @, O6 ]
        task CHECK_y;! A" }; `/ x  r3 h+ T
        input[3:0]NEXT_y;( G- \" ]2 {) r$ q! ?
        #0 begin
  d, k  y2 H: ^. u# N8 c                if(NEXT_y!==y)begin& ~$ t4 `0 @# {3 |  @$ Z; B4 G, b
                        $display("Error at time=%dns y=%b,expected=%b",; X4 F7 e4 V" `1 t1 c1 x1 z
                        $time,y,NEXT_y);
8 m7 z7 U, u- f' ~                        $fdisplay(TX_FILE,"Error at time=%dns y=%b,expected=%b",                                4 ]" \4 s, a( ~: f- D& Y0 Q3 H
                        $time,y,NEXT_y);
, H5 x3 y  X% n6 @0 q1 T- G                        TX_ERROR=TX_ERROR+1;
7 y2 I9 c. P$ H                end
! K3 e2 {. s0 C7 c+ k: a* s        end
: ?6 ~$ G1 T5 ?/ Sendtask/ u& R9 k; q" x% D1 w4 T9 w* ~" `
endmodule
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2013-2-5 22:51:28 | 只看該作者
本帖最後由 card_4_girt 於 2013-2-5 10:54 PM 編輯
* f: W6 e' `9 `
2 f, D' W7 U, n你的錯誤有以下幾點: (關於指令解釋以及程式檔請見此帖最底下)  ?, s8 Q8 M+ j$ ~
1. `timescale 1ns/1ns (請把第一行改成跟這裡一樣的"標點符號")$ S9 x8 B* o9 ]% s' B" q& X# _/ u
2. module the_2-4_decoder_testing_and_certification_program;
4 O/ U  O+ S8 \7 j; ~    必須改成8 N( s2 G, o& ^5 m" a$ u
    module the_2_4_decoder_testing_and_certification_program;- Y, x, Y" Z& t  G0 \  `* Q0 i" W
& \# z1 H1 o  p' I' ~2 b
編譯雖過但必須注意的地方:, Q% q( W0 u; U6 c+ o2 E) r
1. fopen可以適時在後面加入要寫入或讀出,會比較知道動作,比如說
6 {; B/ A2 z5 O& r& i    $fopen("result.txt","w");
$ Z) `2 P; L1 w- \2 [5 H    模式有w(寫入至未存在或已存在的檔案)、r(讀出)、a(寫入至已存在的檔案)等
* `% d, E' s  r- S: \8 P- j+ q9 k; w    w的寫入方式是尚未存在的檔案會自動創造且寫入程式訊息,或是對存在的檔案進行覆蓋性寫入,因此每次執行完的結果會把上次結果全部蓋掉
* o/ x+ [7 C- T    a的寫入方式是尚未存在的檔案會自動創造且寫入程式訊息,或是對存在的檔案進行非覆蓋性寫入,因此每次執行完的結果會顯示在上次結果之後* X* z+ b" b2 H8 P. \* ^
    你也可以參考下面的頁面:
6 x% I! w& w: c  V    http://www.asic-world.com/verilog/verilog2k3.html- C) I$ K5 n+ g+ I  z! F) c
) Y; u4 R- T4 J1 v
2. 因為你的程式含有$stop任務,對testbench會使模擬暫停,因此對後面才定義的task宣告來說並沒有作用到,最好是能在initial begin...end區塊之前就定義好task
7 l/ T; e% P8 z3. 你沒有呼叫你的"CHECK_y" task,所以就算把測試的pattern寫出來也沒有作用,應該要想辦法代個值給CHECK_y,才有機會知道TX_ERROR是否為0,並輸出對應的訊息以利debug! ]8 Y; T  O* Z! [1 W  n
4. 不清楚哪一個是你的第一個輸入,不過我是把它當成{b,a}={00,01,10,11}來看,那麼你應該將刪除線部分改成紅色部分,不然會少一種輸入的可能性  ~$ r, |) o+ v" _; l5 t+ }7 y0 Q
       //{b,a}=2'b00;
8 S$ f" ?4 x' B9 G       a=1'b0;" m  K, u! t, g+ K/ k
        b=1'b0;! l8 W3 l) ~, k+ t, s0 F8 @
        //{b,a}=2'b01;       + T* _3 D& _: l* _9 [- U- w
        #100& [" p8 ?5 }+ l6 S
        CHECK_y(4'bxxxx);9 U; v+ k# ^( T
        a=1'b1;
5 r3 T% J& Z! p       //{b,a}=2'b10;; }0 A" c. g1 K% s
        #100:
9 {/ J+ |0 o9 x8 Y, @2 u1 u        CHECK_y(4'bxxxx);  M0 X( \; \! w5 `9 M
        a=1'b0;                 # H& R/ M/ e" I% u% ~7 B  r
        b=1'b1;4 I( ~; t+ t3 c2 u
        //{b,a}=2'b11;      
; N% ^3 h+ M) \3 g8 [! T        #1005 m- y+ ~( L* X. a6 b8 Z( x; A- {
        CHECK_y(4'bxxxx);& Y9 h* A6 l6 [
        b=1'b1;  //{b,a}=2'b10;; S" x; t  r' J( t( O5 g
        a=1'b1;  //{b,a}=2'b11;5 q, [- @3 v: }, u/ w6 O
        #150: X3 i1 g6 c0 W& E& `* e: j% B
        CHECK_y(4'bxxxx);# D  k2 l# e. u
; O% A; @! p1 j. c  @3 s( d! s7 M
5. 關於詳細的解釋,以及可用ModelSim 6.2版模擬的do file(.do)、改過的testbench以及2 to 4 decoder的設計檔,都在下面這個附件中,可參考看看
( `  P6 [/ L: N, ]; r+ \( G: r; c' h

+ i6 `; W. g" P, l  S! l希望對你有幫助!!

本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒有帳號?申請會員

x
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

首頁|手機版|Chip123 科技應用創新平台 |新契機國際商機整合股份有限公司

GMT+8, 2024-6-11 06:57 PM , Processed in 0.340001 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表