Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2011-12-4 20:13:29 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
剛接觸,看不懂,希望先進們可以解說一下程式,還有一直編譯錯誤,我不懂為什麼錯誤,如果可以也想請教一下
( [9 q( |9 L5 b+ Y* ~5 C# v) A# f' I( S" o) ^, v, U
'timescale 1ns/1ns
, y( ^0 v, O  B, A8 W3 E( n
/ {. b- x  y# j2 W2 Rmodule the_2-4_decoder_testing_and_certification_program;$ [7 Q6 t8 P9 i
: T8 B- N0 Q8 M, E% N: B
wire[3:0]y;: A: h! [7 r" V' `; D( |' |
reg a;! J  r- ?4 I0 t
reg b;
. f0 S5 K, b" L0 c9 }" b. g0 x
8 R4 K; s' O  M; rdeco2_4g UUT(
: I0 N) i6 e# C. e" n* C7 h        .y(y),
% N$ H8 Q" u( S" U8 |1 Z- i/ x  F        .a(a),
0 {3 n1 W$ g; D. g) z        .b(b));7 K" W2 x3 r( h) m- Y; a2 B- {+ r
        # L$ E) h. D5 b* Y4 R" ?/ C/ f
integer TX_FILE;- {- h# ?4 Z" ^/ \& E9 D  R
integer TX_ERROR;
6 u3 m: _' E  g' a% C9 i. R0 x. o8 `4 v8 z. W2 r
initial
, ~1 W2 \% Y3 ^+ k: ~* j# n5 I) Kbegin! a$ t3 G9 P! c# Q# \; E5 b# d6 L
        TX_ERROR=0;
6 d; S" R! [) V+ o# F        TX_FILE=$fopen("result.txt");
6 I7 \  f- g6 j        + o' z( \0 Y" j6 `$ |5 l8 S4 H
        a=1'b0; , S; V/ A: }, m* G" h, a
        b=1'b0;
0 M- r* T% A0 n& B% {        # o- \# h: d1 x# ~) b
        #100
4 S( J$ a7 e$ J9 j5 S        a=1'b1;
$ k6 q' E7 y1 C# S8 H, X9 k" t       
* m+ D7 D1 I( w  ?  ~8 f3 V# F6 T        #100
% b* ^7 A  _4 @: R. Y7 ~. y! g        a=1'b0;                 1 {/ i" Z" X! D; ]: b" ^- o
        b=1'b1;% _% P) i1 Q) M  x! ^# X9 L
       
+ `, C2 f; E# ^4 X4 l        #100
- }# a$ U. `- h) G1 t        b=1'b1;* F4 B+ D2 x! U! c; m
       
- Q/ H3 X8 r% l9 ?0 x        #150% l- T+ K5 i( H9 `
        if(TX_ERROR==0)( x+ l' ~5 H( u9 S
        begin, ~2 a* Q3 r" y0 S4 n
                $display("No errors or warning");! M9 [7 i( B* z6 X: s4 Q
                $display(TX_FILE,"No errors or warning");
" D, t$ [& s' ?" g$ H9 F& m        end else begin9 B' I$ p& b& T/ H4 b; V
                $display("%d errors found in simulation",TX_ERROR);( r; W9 j/ q: f6 P( ]! o2 k$ Q/ m
                $display(TX_FILE,"%d errors found in simulation",TX_ERROR);
2 [8 B( w1 h0 o) W! P- ~# F* ?        end ! N* ^: F7 P6 M1 E
                $fclose(TX_FILE);
4 s1 Y$ S" F3 F3 x" ]4 N9 }                $stop;
- e7 ]" y3 a8 r. S        end / V7 ~9 V- Y5 \1 i* g
        ! }- Z% L' b( ]. ^
        task CHECK_y;. {0 x5 k" p, L' M
        input[3:0]NEXT_y;4 v4 d1 y1 F0 ~6 E' J
        #0 begin- R' M& v9 l- c- G7 |% c, ]  c& l% [
                if(NEXT_y!==y)begin
* G; d: F5 g' `                        $display("Error at time=%dns y=%b,expected=%b",/ X: U( z- @3 ~6 ?4 h
                        $time,y,NEXT_y);  k2 b3 w+ w; c8 E
                        $fdisplay(TX_FILE,"Error at time=%dns y=%b,expected=%b",                               
( f7 B# e2 B6 k* t3 Q                        $time,y,NEXT_y);' R. ~; r7 H" A8 k) q
                        TX_ERROR=TX_ERROR+1;
$ m, B, C) C2 j# i                end : Q! N8 y' A+ x. `/ m
        end
: {$ h& t4 E9 Lendtask
. J# ]' w6 Z8 m3 F' H# a7 l+ Eendmodule
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2013-2-5 22:51:28 | 只看該作者
本帖最後由 card_4_girt 於 2013-2-5 10:54 PM 編輯
" R: A/ |( T/ A6 \2 @5 y$ x7 L( b0 n
你的錯誤有以下幾點: (關於指令解釋以及程式檔請見此帖最底下), Z* Y# J* T! ]# ^1 q  s% ^
1. `timescale 1ns/1ns (請把第一行改成跟這裡一樣的"標點符號")
" c, y" B3 ^' @* d1 v$ ?- {2. module the_2-4_decoder_testing_and_certification_program;
1 g% y; |3 I% \8 ?& b    必須改成5 l8 v2 v! B/ Q8 o5 j
    module the_2_4_decoder_testing_and_certification_program;7 C& `8 Z5 f* b: @+ o) k. P

8 @& }6 i' @7 o3 y( l. p/ D" C編譯雖過但必須注意的地方:, P8 G. F+ o6 D% `( @' l
1. fopen可以適時在後面加入要寫入或讀出,會比較知道動作,比如說
. Y: g$ z% c$ _& M    $fopen("result.txt","w");
: p2 V- n" B6 D; t. ~    模式有w(寫入至未存在或已存在的檔案)、r(讀出)、a(寫入至已存在的檔案)等/ b% f# w: u; r
    w的寫入方式是尚未存在的檔案會自動創造且寫入程式訊息,或是對存在的檔案進行覆蓋性寫入,因此每次執行完的結果會把上次結果全部蓋掉9 ]/ D9 @7 T5 a2 U5 t' w: E9 E4 f
    a的寫入方式是尚未存在的檔案會自動創造且寫入程式訊息,或是對存在的檔案進行非覆蓋性寫入,因此每次執行完的結果會顯示在上次結果之後, Q( }* b5 d, @
    你也可以參考下面的頁面:: K9 X! [. Y  X2 e8 F6 r
    http://www.asic-world.com/verilog/verilog2k3.html# u" }7 g+ n! S+ H: d6 S
, v  I% W, y0 I
2. 因為你的程式含有$stop任務,對testbench會使模擬暫停,因此對後面才定義的task宣告來說並沒有作用到,最好是能在initial begin...end區塊之前就定義好task
, Q- a/ u/ m+ Q) n3. 你沒有呼叫你的"CHECK_y" task,所以就算把測試的pattern寫出來也沒有作用,應該要想辦法代個值給CHECK_y,才有機會知道TX_ERROR是否為0,並輸出對應的訊息以利debug$ M6 s  M: m$ o2 i, K
4. 不清楚哪一個是你的第一個輸入,不過我是把它當成{b,a}={00,01,10,11}來看,那麼你應該將刪除線部分改成紅色部分,不然會少一種輸入的可能性
* Q) w" P3 _. b; Q# [/ R0 `- g' l       //{b,a}=2'b00;
- _8 d+ I+ x7 Q' O6 y       a=1'b0;" `* v1 S/ W% Y0 E
        b=1'b0;6 H4 V( x  i) n1 Q
        //{b,a}=2'b01;       * T0 M2 @0 w4 N% A& ~
        #100
; [' ?) L) w; ^' C/ R  m+ `2 i        CHECK_y(4'bxxxx);3 V8 e6 j0 S) a
        a=1'b1;" g- z* B9 m3 s
       //{b,a}=2'b10;) @( @3 x* B7 a8 b2 w7 k2 L5 a
        #100: 4 t6 a' r( B% |* q2 a, ?
        CHECK_y(4'bxxxx);
. S' \) p& ?- `        a=1'b0;                 
' u3 A. p$ [) h        b=1'b1;$ B0 U8 J6 u+ ?/ G7 \: v
        //{b,a}=2'b11;      
# M' n8 a7 z$ N% }8 U        #100
, W4 a1 {0 q% p/ L! i7 [        CHECK_y(4'bxxxx);! Q* g" O. J9 [$ ~
        b=1'b1;  //{b,a}=2'b10;+ i2 q. h$ g0 ^2 A4 d+ ^
        a=1'b1;  //{b,a}=2'b11;0 a/ V: L8 B% D* @* E. |
        #150" @: A2 R! F# n$ v7 Q! r0 }0 B" S' j' K
        CHECK_y(4'bxxxx);* X+ L: B2 @; ~5 b' ?
0 j* C7 ]; g+ g& {8 P* L8 C! o* |
5. 關於詳細的解釋,以及可用ModelSim 6.2版模擬的do file(.do)、改過的testbench以及2 to 4 decoder的設計檔,都在下面這個附件中,可參考看看3 j& A8 a0 H& s; n9 L' g
& A# X7 c0 P4 V

% g  ~( x2 K% e; \8 K( S希望對你有幫助!!

本帖子中包含更多資源

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

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

本版積分規則

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

GMT+8, 2024-5-7 10:18 PM , Processed in 0.108006 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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