Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2011-12-4 20:13:29 | 只看該作者 回帖獎勵 |正序瀏覽 |閱讀模式
剛接觸,看不懂,希望先進們可以解說一下程式,還有一直編譯錯誤,我不懂為什麼錯誤,如果可以也想請教一下/ I6 ]  d0 H" n  p) T: S

6 S) A- m0 w" O# j# e'timescale 1ns/1ns+ @2 E0 _: b  O( ~1 q. ^2 \9 O5 H2 Z
4 `  y6 J+ y& K4 {4 s' T
module the_2-4_decoder_testing_and_certification_program;
! I7 C1 J( s% ?6 v9 T. F4 E2 _& W/ G2 c& B8 l* X& j
wire[3:0]y;
6 b5 F! K4 _4 Greg a;
( a) w% H) e) o: J& K, |reg b;4 d7 t" \- k+ \" `* _

+ J2 b. a# c" c$ v$ h( G+ ~deco2_4g UUT(
( g* K/ `; H. M, W8 v        .y(y),  k( N* P8 W8 K. U0 F' ~; F
        .a(a),
% j3 t* I( t% E        .b(b));
: R) @  ?/ \* Y. W: m4 f        9 ^$ `7 S) S" S, `" P
integer TX_FILE;1 ~' |8 V2 u1 g. J: I
integer TX_ERROR;  i1 N( p& x( {; N6 L4 k

7 Q3 ~8 S0 s; K1 `8 B: Winitial
& N3 A7 ^, q0 q4 O* M0 ubegin3 @( M( z7 v) z1 t
        TX_ERROR=0;0 E& N5 O. i2 q9 v: b2 {
        TX_FILE=$fopen("result.txt");6 m; H5 {; i6 n' q4 O; t
       
0 |7 Y, c) V* v: t5 d# x" y5 _! [        a=1'b0;
* N) E* ]% Z$ v1 v* b        b=1'b0;2 x; I3 T9 ?6 S$ E9 D8 X
        4 s' i. l0 {' q% W! P7 F4 `
        #1007 i2 d  [* i; K# p
        a=1'b1;
: T$ C  f" C: @. U+ s       
2 S* D  i+ G' i        #100
: N& Z: c- ]  G+ `+ K5 L  r3 C        a=1'b0;                
! K# K! Y6 n' l4 a        b=1'b1;" z* ?( s& e! {/ ^# {! a2 G
        ! g* M& X. H9 J" F& p0 y% k
        #100+ B) R5 O* K. {5 e+ K
        b=1'b1;
2 {- v" y$ h) d8 E6 o. n        1 \  U( u1 u6 `* [; u" T% ?
        #150
; d2 f& o9 k+ G$ l# R9 s8 _        if(TX_ERROR==0)8 v; y4 S; L3 m7 B
        begin3 ^; o. r9 M. y
                $display("No errors or warning");
- w/ q9 p* f" C6 y* B                $display(TX_FILE,"No errors or warning");* Q7 K1 m& v9 F6 G6 @
        end else begin0 b" u2 O9 L+ `# l7 t( N, ~  I! B
                $display("%d errors found in simulation",TX_ERROR);
. ^9 C6 M& h  [0 W2 t% ~9 H' ?                $display(TX_FILE,"%d errors found in simulation",TX_ERROR);2 j8 s. \; F2 A& X9 y5 r+ G
        end
. [/ ^. e  l+ ^# S( w- ?                $fclose(TX_FILE);7 O& ^' e/ a1 I! j( x
                $stop;
/ r9 T8 ~# z0 e* Z8 l        end
* n3 q- }8 T4 E       
2 [1 S/ p5 ]0 ~( E! M: Y, T! t        task CHECK_y;$ C0 `5 a9 [3 t4 z7 B4 Z
        input[3:0]NEXT_y;
" [* N+ g3 u( f0 U        #0 begin
& E/ ]) K; ~4 L! C% ?, b                if(NEXT_y!==y)begin
% P" w9 e* U, g5 q1 w& S                        $display("Error at time=%dns y=%b,expected=%b",+ A& p. ?+ ^, v. j" g  s5 r+ B9 P
                        $time,y,NEXT_y);, c* \2 S, Y' w! d7 k% D6 b
                        $fdisplay(TX_FILE,"Error at time=%dns y=%b,expected=%b",                               
# J; O9 p1 u5 |6 M6 Z& b                        $time,y,NEXT_y);
  E( g" H9 S& M, S; ^7 D                        TX_ERROR=TX_ERROR+1;
2 M9 d1 }6 c2 n                end ) V$ r9 N4 o/ [
        end
5 Q" }1 `! f- S+ B* b+ e) X+ Eendtask0 R  t7 J9 ?+ }) {
endmodule
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2013-2-5 22:51:28 | 只看該作者
本帖最後由 card_4_girt 於 2013-2-5 10:54 PM 編輯
; {2 z; X+ E8 E+ Q: ^1 I0 m
* C" ?% _9 ], K. F  r5 j8 K. R& F你的錯誤有以下幾點: (關於指令解釋以及程式檔請見此帖最底下)" w/ o  _1 |$ S6 Q/ G: ^1 \
1. `timescale 1ns/1ns (請把第一行改成跟這裡一樣的"標點符號")9 [5 t8 v# t' H3 v: y' |
2. module the_2-4_decoder_testing_and_certification_program;* z7 A; U; U( a& z
    必須改成! K/ m' n- W- z
    module the_2_4_decoder_testing_and_certification_program;' e9 B7 w& m' q% k

) x+ P* K! s7 v* D編譯雖過但必須注意的地方:
; A! H+ |6 P. Q, O1. fopen可以適時在後面加入要寫入或讀出,會比較知道動作,比如說
2 n# |! |, U5 V8 _+ U    $fopen("result.txt","w");+ U, Q5 z: a8 p6 ^, l7 r
    模式有w(寫入至未存在或已存在的檔案)、r(讀出)、a(寫入至已存在的檔案)等
4 x4 Z2 y! J" p# K- p1 j    w的寫入方式是尚未存在的檔案會自動創造且寫入程式訊息,或是對存在的檔案進行覆蓋性寫入,因此每次執行完的結果會把上次結果全部蓋掉
/ h, f4 Z4 @4 H+ W, M+ k    a的寫入方式是尚未存在的檔案會自動創造且寫入程式訊息,或是對存在的檔案進行非覆蓋性寫入,因此每次執行完的結果會顯示在上次結果之後9 ?( H' i( ]& [, |) s  y4 Z
    你也可以參考下面的頁面:4 U% }) V1 |- L, d9 {) h5 E
    http://www.asic-world.com/verilog/verilog2k3.html1 E* [9 ]' z  Y* P

% B% s0 p, G, l4 \& g2. 因為你的程式含有$stop任務,對testbench會使模擬暫停,因此對後面才定義的task宣告來說並沒有作用到,最好是能在initial begin...end區塊之前就定義好task
7 O" }: }7 I$ M" j/ @: m3. 你沒有呼叫你的"CHECK_y" task,所以就算把測試的pattern寫出來也沒有作用,應該要想辦法代個值給CHECK_y,才有機會知道TX_ERROR是否為0,並輸出對應的訊息以利debug# H4 g: e. I3 b
4. 不清楚哪一個是你的第一個輸入,不過我是把它當成{b,a}={00,01,10,11}來看,那麼你應該將刪除線部分改成紅色部分,不然會少一種輸入的可能性' [" c5 Z; v; U, @
       //{b,a}=2'b00;( j2 i1 ?& B- _- [; `( u
       a=1'b0;
6 |# @, N4 l/ @* w2 `7 f        b=1'b0;
! n- w( b) \. A' ?9 n        //{b,a}=2'b01;       8 e5 g# i% h! _7 [* ]7 q
        #100
. {: g5 q4 m6 A        CHECK_y(4'bxxxx);
" F' p) r6 t! m( J$ |; o        a=1'b1;5 a, l+ ~/ a# i! S9 k9 w# t
       //{b,a}=2'b10;
! `& b2 j% n( X8 V        #100: 0 \7 u# G5 E; _+ \
        CHECK_y(4'bxxxx);
+ |6 y. X: d2 ^% e* u* d7 P        a=1'b0;                 0 S# q6 C$ d+ e+ A( z0 w( b5 r- r
        b=1'b1;
1 j" J- f9 J6 I6 B* u        //{b,a}=2'b11;       7 A- I" _9 j6 G& S: `
        #100
( Z4 q3 ~0 M" d4 E3 x( d# n        CHECK_y(4'bxxxx);
. d  m; I3 w# ]4 d. r        b=1'b1;  //{b,a}=2'b10;5 L6 a4 T' `+ J* R2 v, `
        a=1'b1;  //{b,a}=2'b11;
7 @6 _" b, u2 Z% k/ z% \        #150$ y) y5 X& w. [" q; v/ d5 g4 J
        CHECK_y(4'bxxxx);" u0 i# O, j% U# S. _1 V& |& c8 P. @
5 v, j4 i7 @$ v5 _1 q, e
5. 關於詳細的解釋,以及可用ModelSim 6.2版模擬的do file(.do)、改過的testbench以及2 to 4 decoder的設計檔,都在下面這個附件中,可參考看看. A' B8 E* j5 r5 ]1 C

8 i. G# H8 b6 Z# r5 |
" z/ V! P0 g/ w1 a希望對你有幫助!!

本帖子中包含更多資源

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

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

本版積分規則

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

GMT+8, 2024-5-20 05:44 AM , Processed in 0.112015 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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