Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2011-12-4 20:13:29 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
剛接觸,看不懂,希望先進們可以解說一下程式,還有一直編譯錯誤,我不懂為什麼錯誤,如果可以也想請教一下
, j0 U: Z+ }. C7 [: \; ~2 W6 ^  p# \8 X! O
'timescale 1ns/1ns# K2 M1 w- Z# H  v% O2 y* v
7 M& o' d% k; W3 Y1 p
module the_2-4_decoder_testing_and_certification_program;
& ^3 D2 P4 G( m/ u- _$ e7 h' j9 o& z- j" u# Q
wire[3:0]y;
7 K& b% L. ~$ D6 g2 b( V8 treg a;; [' d5 `: s# ~
reg b;
5 N+ C: `1 r- g. E
$ ]# j' J, {$ ^5 Q% T) a' V; Qdeco2_4g UUT(7 g( I" H: U) E3 [" W+ \
        .y(y),# }- ^8 ^2 f: S& w0 ~' S  r' z
        .a(a),, L3 m6 a2 _" F
        .b(b));
8 y$ D+ E( D$ u2 Z8 }1 ^: V0 ~1 Z. F        3 n; @7 h2 T' y# Q4 `
integer TX_FILE;
2 i- Q( C/ v0 L  Sinteger TX_ERROR;% ~  n" ]. g5 L, m
$ \! I5 o, x6 M, a, U  _4 v& Y
initial / _0 x, f# U) L6 ]. m" P
begin
, p  g9 L! W( V' u% x8 L        TX_ERROR=0;# j$ g( ?8 u$ }  b' ^6 _
        TX_FILE=$fopen("result.txt");
& N) S5 Y. Q: j7 C6 m& n! c       
( u8 l. y1 |5 Y+ g  v, {        a=1'b0;
& b8 i4 U0 U& [5 ^* b) i* D- \% B0 v        b=1'b0;( e) {( t" W& d! t9 B
       
$ `6 G- }  p/ F9 _1 |        #100
3 V3 n* D- O. e5 D7 W        a=1'b1;
9 j' b" J  R# M/ u2 B) ]        : W0 F+ ~: Z) F* ?# J+ h8 W
        #1002 L# v  \0 C! o/ b4 A
        a=1'b0;                 5 c9 p% A7 j1 }0 y
        b=1'b1;$ q4 ^8 z. N0 h
        % Z8 {8 w1 d, Q2 z9 Y, e
        #100
2 z2 _, d; k  k3 `        b=1'b1;
& A% i- Q1 P1 L8 h/ e/ Q" Y, b       
4 c5 }6 y$ a- k  D+ J        #150
: h, B8 h8 A% Y        if(TX_ERROR==0)
( F4 U: @3 G4 I2 e. q  x        begin
" F& t+ H, ?9 Z! }8 S! S6 K                $display("No errors or warning");3 a0 H  ?4 P! P, _; Y
                $display(TX_FILE,"No errors or warning");
+ S7 w7 b; b/ e# e+ b" O        end else begin
( x& p  [7 F. h5 ^# I9 C: j# e                $display("%d errors found in simulation",TX_ERROR);+ g0 i) w  Q8 L) s$ f
                $display(TX_FILE,"%d errors found in simulation",TX_ERROR);
) l3 ]/ R8 H2 c( s3 L' G1 [        end
, k& @* l/ o' |                $fclose(TX_FILE);  L7 X" \, _3 C' o  F9 c' K
                $stop;
3 `4 p9 n" C  D+ k) p- W        end 4 J3 }8 [4 i- {5 A7 _
        6 C1 g$ @, Y  w4 w: G9 O  @0 ]1 N
        task CHECK_y;. H% |8 f6 e5 T+ c7 Z4 l
        input[3:0]NEXT_y;
( A6 ]7 k; p3 x! a0 {* c( W        #0 begin) j7 s! c  X/ q
                if(NEXT_y!==y)begin
+ w0 i( L* M( {0 V2 V/ h; `                        $display("Error at time=%dns y=%b,expected=%b",! b2 V$ R+ ~4 h2 ^8 \
                        $time,y,NEXT_y);
/ {6 k7 N& V- g+ F                        $fdisplay(TX_FILE,"Error at time=%dns y=%b,expected=%b",                               
$ _2 ~+ x8 i- W                        $time,y,NEXT_y);& e* C8 G# ]6 C( i7 r5 T$ K6 Y, L
                        TX_ERROR=TX_ERROR+1;
! s) U1 q* C# {/ r                end / V$ [" A  v1 W1 i4 S' B
        end
. N& j' t3 C( X% eendtask2 |9 t/ F6 I6 |9 C% F( ]
endmodule
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2013-2-5 22:51:28 | 只看該作者
本帖最後由 card_4_girt 於 2013-2-5 10:54 PM 編輯
/ n" s0 h; d; K  \) P! J$ ]
% @0 t* {1 E  M& f6 c7 d8 N( B你的錯誤有以下幾點: (關於指令解釋以及程式檔請見此帖最底下)3 `/ |6 x: S& Y5 H
1. `timescale 1ns/1ns (請把第一行改成跟這裡一樣的"標點符號")
* N! f5 s+ r* L) Y) Z2. module the_2-4_decoder_testing_and_certification_program;0 J( j. x! S. x0 q/ E
    必須改成4 O2 L  Q: u% r  D
    module the_2_4_decoder_testing_and_certification_program;
" Y1 d4 E0 f$ ]3 @' h- `
7 @% @% r4 n) {8 M* {* a; N編譯雖過但必須注意的地方:
  v1 g3 p5 w3 {# x0 x3 }& ?/ x1. fopen可以適時在後面加入要寫入或讀出,會比較知道動作,比如說
7 Y9 Q0 R% p) a. V/ X* P/ l    $fopen("result.txt","w");
  r$ @9 A" H3 W3 A3 @  x    模式有w(寫入至未存在或已存在的檔案)、r(讀出)、a(寫入至已存在的檔案)等
+ O1 C( ]5 Y+ x* h6 Q    w的寫入方式是尚未存在的檔案會自動創造且寫入程式訊息,或是對存在的檔案進行覆蓋性寫入,因此每次執行完的結果會把上次結果全部蓋掉1 b' d4 g6 Z$ ?& r1 N/ Y
    a的寫入方式是尚未存在的檔案會自動創造且寫入程式訊息,或是對存在的檔案進行非覆蓋性寫入,因此每次執行完的結果會顯示在上次結果之後
/ F8 K; E. p' c: j0 [! f0 k    你也可以參考下面的頁面:: S9 a4 Q7 T6 _
    http://www.asic-world.com/verilog/verilog2k3.html9 \, n0 ^  l* t
5 C# Z) v) x) |) p
2. 因為你的程式含有$stop任務,對testbench會使模擬暫停,因此對後面才定義的task宣告來說並沒有作用到,最好是能在initial begin...end區塊之前就定義好task9 u. m( f5 F3 M* W& T
3. 你沒有呼叫你的"CHECK_y" task,所以就算把測試的pattern寫出來也沒有作用,應該要想辦法代個值給CHECK_y,才有機會知道TX_ERROR是否為0,並輸出對應的訊息以利debug
% z4 D" n- e  K( X2 o" B7 r4. 不清楚哪一個是你的第一個輸入,不過我是把它當成{b,a}={00,01,10,11}來看,那麼你應該將刪除線部分改成紅色部分,不然會少一種輸入的可能性
+ t$ y6 E, e; @       //{b,a}=2'b00;
( a2 l0 y! T7 t9 ], y       a=1'b0;
, U5 ~- {# }5 e+ F        b=1'b0;) @- K  `% M' A. r7 P  I9 v
        //{b,a}=2'b01;      
. a2 L/ \* {: D  g8 Z        #100/ L) B: J: d1 m1 c/ b  X. a
        CHECK_y(4'bxxxx);
# ?6 d: w$ O. H* V( p" Q, h) @        a=1'b1;
7 d* A! I! b3 u/ G       //{b,a}=2'b10;0 ]( L, P" j- h! o. Y3 c! [
        #100:
9 K7 M0 f; a1 V% P" k( d        CHECK_y(4'bxxxx);% P% }* U  v- ?& l, t0 ?% s/ c# T
        a=1'b0;                   P1 l7 p0 y* y& j
        b=1'b1;
! q' i8 r2 w  T& d) Y: [0 G        //{b,a}=2'b11;      
. K, h! R9 d! e! @        #100
% g$ u2 `# o7 m        CHECK_y(4'bxxxx);5 M' W) y' f9 S; e- Q
        b=1'b1;  //{b,a}=2'b10;2 {' v/ s4 w3 G" b2 F  ^
        a=1'b1;  //{b,a}=2'b11;9 W5 |# K' z+ b: z4 E
        #150
( L: {5 G2 P# O0 A8 p2 W        CHECK_y(4'bxxxx);
1 k+ t0 \  |, f% a' I2 |8 N: p5 G. n4 C0 q% d5 P
5. 關於詳細的解釋,以及可用ModelSim 6.2版模擬的do file(.do)、改過的testbench以及2 to 4 decoder的設計檔,都在下面這個附件中,可參考看看/ b' G0 ?9 G! |2 P5 N5 `1 \. n

! j3 o# \" `) X8 ~* R5 W* b
4 ^" ^! |+ G% J2 m0 x, N5 X希望對你有幫助!!

本帖子中包含更多資源

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

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

本版積分規則

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

GMT+8, 2024-12-29 09:33 AM , Processed in 0.165010 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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