Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2011-12-4 20:13:29 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
剛接觸,看不懂,希望先進們可以解說一下程式,還有一直編譯錯誤,我不懂為什麼錯誤,如果可以也想請教一下
2 D7 a3 ?* I# N; |+ N( X6 `+ Z; g1 `5 Q% @
'timescale 1ns/1ns
, i) x  I) j/ @& {' |, X6 s$ i! y2 M! h, |$ r! i0 V1 K/ Y9 ~
module the_2-4_decoder_testing_and_certification_program;
6 R2 ^5 z6 T( k) H0 H% j4 I" B0 g" x9 A
wire[3:0]y;
2 h# m5 J+ X4 y6 k# S; j5 Freg a;; d( |: `4 q# e) L9 j  q, B
reg b;! e2 L, o$ q% Y+ F
* P+ n  e* a8 x7 T. B  N  n3 E% Z' K
deco2_4g UUT(( T+ d# D$ E/ s; T
        .y(y)," `* |* G& m9 l9 D4 p) w0 ^: h
        .a(a),
' y5 ?' I7 i* z* k- v9 T" r        .b(b));  r6 X# [8 ~9 ^: G8 s
        ( [. O: c( @5 A
integer TX_FILE;% _* s% g+ o! E: \
integer TX_ERROR;" v2 ^+ ?; q2 e6 x! ~
4 ~8 G( D9 v5 n. U& i, R
initial - e" X; ?  f! G5 Z: m+ i
begin$ P8 J  E7 z  O/ ~) F# @
        TX_ERROR=0;
  k. {  g1 |1 I8 r) S) U0 P' b        TX_FILE=$fopen("result.txt");
- g; s* }+ r* z( z1 ]' S        ' x7 R& Q/ L' n1 @( g
        a=1'b0;
. E& P: b6 Y4 R5 }1 g* R' ~        b=1'b0;! l1 c6 G9 R  S' q
       
. \7 J: |) G! ]. h4 Q" U        #1004 s2 |! i6 S) z  ]. R
        a=1'b1;5 C1 z* L! F3 V
        1 D" s# Q& `/ R; M8 ^
        #1002 F- y) V/ W/ |. b; x1 Z; Z
        a=1'b0;                 ' A7 b3 O) W# }/ D; l3 F& v5 b+ |, ~
        b=1'b1;
+ {/ b* L5 M5 j       
1 l' p' v0 S" z) M+ t        #100
6 H1 y: R+ j( t        b=1'b1;$ |6 B$ u6 S: h3 u0 g
       
3 d- U4 g, Q4 i+ ?: Y        #150
5 p$ s# [, ]9 V& M4 ~        if(TX_ERROR==0)
2 w) Y; T! @' C- h        begin
& F1 @& q+ Z$ N' c( B5 c4 Z                $display("No errors or warning");
% U8 c; {/ L3 r5 j7 [8 ]                $display(TX_FILE,"No errors or warning");
! |5 [- w' y$ |* B$ b9 h! }        end else begin
9 v; _7 H  A. E  w, K  ^: m                $display("%d errors found in simulation",TX_ERROR);3 Q/ o! w, ], _) i
                $display(TX_FILE,"%d errors found in simulation",TX_ERROR);. g1 C1 `: w' s
        end ' N8 G: n: U, l
                $fclose(TX_FILE);0 N, r4 Y! M- q' b
                $stop;# f$ W% G+ y1 B: x0 L$ |. U
        end & E7 L' v" P# v7 Y# R
        ( o/ N. [! I$ z2 H) V
        task CHECK_y;
) [% K$ O7 ?' K3 D! |1 [        input[3:0]NEXT_y;
3 H0 v4 j9 x+ n" ]4 ?- f1 v2 c        #0 begin
6 d, V  s+ B: w$ n$ `                if(NEXT_y!==y)begin
6 s/ {3 ~% X* ], ?7 b                        $display("Error at time=%dns y=%b,expected=%b",: u) _; @# H1 l: t" t
                        $time,y,NEXT_y);
0 k: z4 u8 T: |7 i5 G                        $fdisplay(TX_FILE,"Error at time=%dns y=%b,expected=%b",                                , `4 m8 k0 E2 @: k% f
                        $time,y,NEXT_y);
& g% H( i9 x# W( K8 _2 |( O                        TX_ERROR=TX_ERROR+1;  Z( S% K) A( X4 R
                end % {& ^2 j+ b5 C% [  C0 U
        end0 s5 A. R4 E4 u* I4 w
endtask- u  K# S8 Z3 p, X1 b8 @! D- K
endmodule
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2013-2-5 22:51:28 | 只看該作者
本帖最後由 card_4_girt 於 2013-2-5 10:54 PM 編輯
3 F) g& ?7 ~6 f
; H" U7 x6 r3 j' ?2 ]; d你的錯誤有以下幾點: (關於指令解釋以及程式檔請見此帖最底下)% h/ q9 J- T9 `8 n
1. `timescale 1ns/1ns (請把第一行改成跟這裡一樣的"標點符號"), M5 K  e1 u- x5 U1 Y6 @
2. module the_2-4_decoder_testing_and_certification_program;7 k* l' [) z. ?
    必須改成
& ]* s# Z4 b6 x; a/ _    module the_2_4_decoder_testing_and_certification_program;
1 `, `* N2 m& C8 B. i& ^) X+ q& w; S1 D6 d. ~  d3 J
編譯雖過但必須注意的地方:
9 u$ A( y9 I5 c, {! K" A1. fopen可以適時在後面加入要寫入或讀出,會比較知道動作,比如說& y2 _& _/ k# P5 w  G5 o- `  @
    $fopen("result.txt","w");
) E. Q$ R# J6 |; N* G    模式有w(寫入至未存在或已存在的檔案)、r(讀出)、a(寫入至已存在的檔案)等
* h7 k, N. F$ P; S9 w* F/ W+ D& x    w的寫入方式是尚未存在的檔案會自動創造且寫入程式訊息,或是對存在的檔案進行覆蓋性寫入,因此每次執行完的結果會把上次結果全部蓋掉: j4 V, T! n% t+ ~4 ^" @
    a的寫入方式是尚未存在的檔案會自動創造且寫入程式訊息,或是對存在的檔案進行非覆蓋性寫入,因此每次執行完的結果會顯示在上次結果之後5 u: {2 g6 Z4 W4 b) i) C5 K
    你也可以參考下面的頁面:
/ k" s; x. y( ^    http://www.asic-world.com/verilog/verilog2k3.html/ U+ f: \5 ~0 E3 X2 y
# x7 i  D! N1 b& Y
2. 因為你的程式含有$stop任務,對testbench會使模擬暫停,因此對後面才定義的task宣告來說並沒有作用到,最好是能在initial begin...end區塊之前就定義好task
  D( u  t9 m( q( l8 r1 Y3. 你沒有呼叫你的"CHECK_y" task,所以就算把測試的pattern寫出來也沒有作用,應該要想辦法代個值給CHECK_y,才有機會知道TX_ERROR是否為0,並輸出對應的訊息以利debug
6 |2 z5 W2 U  ~# M$ _- i- i0 x2 v4. 不清楚哪一個是你的第一個輸入,不過我是把它當成{b,a}={00,01,10,11}來看,那麼你應該將刪除線部分改成紅色部分,不然會少一種輸入的可能性
1 T2 B. _* C4 T+ b. X- e- j" V+ N       //{b,a}=2'b00;1 Z1 g2 R8 t# M# p' y  w% B5 w
       a=1'b0;
+ Y9 C  X& _: g/ \9 E! V$ v        b=1'b0;
  B3 L# E+ k9 L0 Q" x/ n        //{b,a}=2'b01;       4 z) A, z" z* L# P3 n/ D
        #100
7 `7 B( \, E* S2 |% @        CHECK_y(4'bxxxx);
& a! W  R6 M, M% X# `& ^        a=1'b1;: f/ l% U9 ^+ a: o+ U  m  w# a
       //{b,a}=2'b10;
+ m' }- f5 a& V( l! G4 y8 r+ `/ |        #100:
% `0 i1 f# j9 q% g+ J, |        CHECK_y(4'bxxxx);
% I2 ]8 Y7 W% d( q) Q& E        a=1'b0;                 * N$ z0 e! U+ k. J8 K9 H
        b=1'b1;
/ @. |/ r# Y" }4 d6 j! s        //{b,a}=2'b11;       0 b9 d0 i- C" m' s4 f
        #1000 Q. [) R" N6 S5 ^
        CHECK_y(4'bxxxx);" \9 }/ ~% o4 g1 ]+ E
        b=1'b1;  //{b,a}=2'b10;
7 f8 _2 y5 Y6 G( S5 U7 G. a        a=1'b1;  //{b,a}=2'b11;& Q( V! L$ F, ]3 l! r& F3 g0 J* b$ Q  ?+ A
        #150
3 h8 s3 ?1 h( E. V* ]9 H        CHECK_y(4'bxxxx);
5 Q8 P& r  n3 g9 K; U( `; o+ {! j  ]# d' U. ?0 s$ f4 `0 r  [
5. 關於詳細的解釋,以及可用ModelSim 6.2版模擬的do file(.do)、改過的testbench以及2 to 4 decoder的設計檔,都在下面這個附件中,可參考看看
+ `) F/ S/ d  k& M# j1 l" R
7 `6 X, C, u  @
7 a/ Q7 z* [- k2 Z6 ^希望對你有幫助!!

本帖子中包含更多資源

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

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

本版積分規則

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

GMT+8, 2024-6-18 07:57 AM , Processed in 0.138517 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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