Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2011-12-4 20:13:29 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
剛接觸,看不懂,希望先進們可以解說一下程式,還有一直編譯錯誤,我不懂為什麼錯誤,如果可以也想請教一下
  e# @$ ~! N& `' Y7 v/ z4 U8 P
) c+ n4 h6 f) M+ n0 {! F1 I'timescale 1ns/1ns( r7 u4 y3 j; B* a3 u2 s
9 z& v8 b4 g* t/ S* m5 f
module the_2-4_decoder_testing_and_certification_program;
. L  W( u. F1 H1 S- S
0 h8 H* o) N5 Hwire[3:0]y;
" }) }9 [3 Q8 V4 Ereg a;
9 C: p2 b) r2 Z8 _% K; i4 jreg b;
4 Q7 C) E$ U% \: J) d
. `5 m# o5 l1 g, N: I5 f4 J% C8 adeco2_4g UUT(
& T4 ?2 V2 d( u/ y        .y(y),
0 z' @  }3 e" C& m) G; z3 p" p5 v        .a(a),' B+ {! V* d8 N6 o6 F0 y
        .b(b));% t+ T% G% L, I, p6 q& z4 I
        ! i+ x/ T8 s4 U4 V
integer TX_FILE;
1 G% n9 N7 L/ K8 X$ C' W" n2 q, Ninteger TX_ERROR;3 B. d* F- j' J
, W9 @( q0 a. U% j3 ]) e5 w) H
initial
: L# V2 K) ?: _begin4 H8 E+ P5 Q. w( U
        TX_ERROR=0;
+ @& D, _/ K$ p1 }+ x        TX_FILE=$fopen("result.txt");) T; p: U( b6 J* T% ?. }- b" P' d5 ?, R
       
7 j5 I3 I! A$ u3 z+ p3 W        a=1'b0; 6 N( }) Y  l2 h3 c* E
        b=1'b0;' C: X7 P* H% D/ f4 f+ H
        $ Z5 ]6 j$ {$ m5 \3 {+ r$ `1 W3 o
        #100+ X" X( G6 s: B. t( R( f) I; C
        a=1'b1;& n% ^6 L" X* U7 [2 Z% D, T
       
' U& v" ]/ T% b4 s        #100, l& z3 G* m5 z; `
        a=1'b0;                 : r6 O7 f+ x4 k7 W+ n
        b=1'b1;# j" M7 M# F0 _" T
        - `. ~9 N$ T2 k4 ^* J! T8 F
        #100$ I$ n, }: J3 j7 \
        b=1'b1;
; B' q$ Z/ v$ ?7 Y3 X5 A0 }/ k       
8 S  S) Z: N' U* p+ l        #150
% j2 v) U4 a5 x! o        if(TX_ERROR==0)
' J1 x. _+ I. C1 y2 ~        begin
$ y9 X5 ?: |) x                $display("No errors or warning");- Y; T7 V/ Y" o0 q! S+ \# T
                $display(TX_FILE,"No errors or warning");9 o. k; {  h9 I* M8 `, M
        end else begin
/ m# B) `" k1 n6 W& p# h( e9 O. ^                $display("%d errors found in simulation",TX_ERROR);9 M1 C: D( w/ T8 K- A
                $display(TX_FILE,"%d errors found in simulation",TX_ERROR);
: E% ~- {* v3 o2 X2 R        end 6 [( W  Y% w; I+ C7 b
                $fclose(TX_FILE);
* r0 Z0 N+ t. Y: u                $stop;# u) V7 `, O% _% `9 [& n. a
        end
0 s7 s# [# o( L6 O* _       
6 _7 H0 M* ^  L6 \# L& ~5 Q% t        task CHECK_y;# w( e8 o% M7 c4 y7 @
        input[3:0]NEXT_y;
* N# z& I6 ^4 a! F& X$ B" j3 ?- d        #0 begin  w2 m% a! O3 r& k# J6 @
                if(NEXT_y!==y)begin: R: L& P7 D3 {5 r- C9 b/ @
                        $display("Error at time=%dns y=%b,expected=%b",
6 k' a7 n& w+ x7 N- m                        $time,y,NEXT_y);
! U$ n$ I1 O( N, M, G3 P/ X/ ?# k                        $fdisplay(TX_FILE,"Error at time=%dns y=%b,expected=%b",                               
1 K# M5 e  J4 @  N! r                        $time,y,NEXT_y);
6 A: o9 l2 X8 N- o" t                        TX_ERROR=TX_ERROR+1;0 ^) R) ^  @6 m$ Q; E/ j
                end ' q7 {: u+ k! t$ E
        end) p6 {4 ]. [2 R0 I+ L4 {' L
endtask' `& V3 d% b; e1 [
endmodule
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2013-2-5 22:51:28 | 只看該作者
本帖最後由 card_4_girt 於 2013-2-5 10:54 PM 編輯 $ w4 C* K% v& y# J+ C. g. n* ?

* C6 `0 R/ n. q% z! M! B你的錯誤有以下幾點: (關於指令解釋以及程式檔請見此帖最底下)
( {, i& L( c/ L/ S; K5 M1. `timescale 1ns/1ns (請把第一行改成跟這裡一樣的"標點符號")" S# y* O7 t) ?$ a' C: z; I# }
2. module the_2-4_decoder_testing_and_certification_program;
' [! @  N# ~6 h    必須改成# G3 ?; h9 S: b$ {$ O! f
    module the_2_4_decoder_testing_and_certification_program;( U5 q2 s: J5 T
+ v1 w+ R6 V. b
編譯雖過但必須注意的地方:
) ]4 u) \! \( I1. fopen可以適時在後面加入要寫入或讀出,會比較知道動作,比如說
. I6 ?: n0 ?. I' i9 k8 e5 w* y- s    $fopen("result.txt","w");9 j7 O7 q: A0 j- H- y9 w1 R
    模式有w(寫入至未存在或已存在的檔案)、r(讀出)、a(寫入至已存在的檔案)等
+ M! H, v: {4 ]- ~    w的寫入方式是尚未存在的檔案會自動創造且寫入程式訊息,或是對存在的檔案進行覆蓋性寫入,因此每次執行完的結果會把上次結果全部蓋掉4 }, @8 P$ `  C
    a的寫入方式是尚未存在的檔案會自動創造且寫入程式訊息,或是對存在的檔案進行非覆蓋性寫入,因此每次執行完的結果會顯示在上次結果之後. x' F& k/ n4 [
    你也可以參考下面的頁面:
) U4 O8 u2 b6 `8 Q0 q% Y    http://www.asic-world.com/verilog/verilog2k3.html
3 b7 v' @5 g9 l3 y3 G1 a) s' h
+ Y6 a# _( g% w2. 因為你的程式含有$stop任務,對testbench會使模擬暫停,因此對後面才定義的task宣告來說並沒有作用到,最好是能在initial begin...end區塊之前就定義好task7 B9 p' O3 y( D; |' t
3. 你沒有呼叫你的"CHECK_y" task,所以就算把測試的pattern寫出來也沒有作用,應該要想辦法代個值給CHECK_y,才有機會知道TX_ERROR是否為0,並輸出對應的訊息以利debug
, ?9 t  P5 O; Z4 k, D7 U4. 不清楚哪一個是你的第一個輸入,不過我是把它當成{b,a}={00,01,10,11}來看,那麼你應該將刪除線部分改成紅色部分,不然會少一種輸入的可能性5 J  V/ j9 e4 n8 i" ]3 h
       //{b,a}=2'b00;
2 q) X! b* ~: t: E       a=1'b0;
( d7 ^5 ^. x, `6 C9 E        b=1'b0;1 F) t: L3 O( B5 ?3 X0 f1 n
        //{b,a}=2'b01;       ; [: i; Z6 n$ r. q! O3 F) G, e- `
        #1003 N; d% S% O: H9 L6 k
        CHECK_y(4'bxxxx);
. r  E, b% C9 C2 J# J& t/ B# L: ]        a=1'b1;2 P' Q: {, o# {2 t+ ]0 H3 B
       //{b,a}=2'b10;
) W  ^' S- W. S& }        #100: & U, p! }7 R6 a& C6 h
        CHECK_y(4'bxxxx);- N4 q4 n" [. n+ a  T6 f. u
        a=1'b0;                 & z& J2 }! L$ N: l: O' \
        b=1'b1;9 J. ^9 u8 j. j6 j% x
        //{b,a}=2'b11;      
. e: U  s% I8 d# ?* P% Z5 U        #100# R% S& @9 Q' F( `) c- \7 N. o
        CHECK_y(4'bxxxx);
. g2 s; Q; A! i  |0 P6 ?        b=1'b1;  //{b,a}=2'b10;7 f( Q$ X) n( b1 i( `
        a=1'b1;  //{b,a}=2'b11;% F. X( n, A, [- v# r
        #1505 @, X' J9 {3 n0 Y
        CHECK_y(4'bxxxx);
9 R( N0 G5 z9 d% ?7 c. e' p) p; ^
5. 關於詳細的解釋,以及可用ModelSim 6.2版模擬的do file(.do)、改過的testbench以及2 to 4 decoder的設計檔,都在下面這個附件中,可參考看看1 w* H- n* G/ O, i2 _' P2 A

: b1 Y+ W$ W4 v' Z, S8 ~# _; \: U2 w4 Y4 P
希望對你有幫助!!

本帖子中包含更多資源

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

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

本版積分規則

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

GMT+8, 2024-5-6 12:37 PM , Processed in 0.102006 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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