Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2011-12-4 20:13:29 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
剛接觸,看不懂,希望先進們可以解說一下程式,還有一直編譯錯誤,我不懂為什麼錯誤,如果可以也想請教一下
! H$ z) E0 i. ^7 R& u
0 x+ m0 J# O' J: W& O0 ~! \'timescale 1ns/1ns
) ^" w/ n8 b  ?+ _( o" @
- ?7 U0 g6 Y+ `1 h, tmodule the_2-4_decoder_testing_and_certification_program;
3 ^0 Q. T2 n/ t3 J$ C
( N% c  H& l# M' W2 t0 ^- G% ewire[3:0]y;
; r0 I9 P' I, a- m, ~: H6 xreg a;8 `7 G) C3 |7 ~& D3 Q
reg b;
9 X& G4 ?/ x9 D3 \3 w9 B
. O, q' q7 ]; I0 [; u, ndeco2_4g UUT(+ q& x' q, ]' }; p3 T
        .y(y),/ u; W3 B3 [$ \* [
        .a(a),5 U- }6 s, K. ~% P, n& ~/ y
        .b(b));* Q6 C0 B; ?; M( ^" s0 y& ^; i% q
       
8 Z" n7 y( `% Z# [! d; Rinteger TX_FILE;
. x4 t% h( E7 e+ Linteger TX_ERROR;% {  P4 M) z+ t5 a+ X

! q- v  A6 E+ n: O, jinitial
+ @( H" {$ C& U) [0 D! Ubegin! T5 d3 R  h$ Y& d
        TX_ERROR=0;
- v, @  p& q! |% ~        TX_FILE=$fopen("result.txt");% q' M1 a) g$ K  P& J% M
        2 p8 Z  T3 J2 r* ]- A7 h  V
        a=1'b0; 3 s* K! H9 u* @" h6 n
        b=1'b0;! X! b$ b  b6 x
        8 {3 Z: D. J% q. h
        #1003 O) A, j8 [- Y$ J( w3 n
        a=1'b1;
- A4 I4 @$ P% {. z/ _2 S       
' w5 {- Q- G1 B4 C& |  A        #1005 @: H) {9 R8 |8 \2 W
        a=1'b0;                
# Q% O* X4 ?5 V7 O* F& ]        b=1'b1;
& u- ?! b) A/ y9 {! J       
" J" L2 A) a$ X$ ]        #100
  {* r$ F3 i( x# k: s: t' U2 o, {9 ?/ I        b=1'b1;' o$ ^5 m1 `* d# N
        % f9 G  a9 P: o' @  f! `/ o9 b
        #1501 n+ c$ x) P  l" h4 ~7 G
        if(TX_ERROR==0). l! O$ p& I! A2 r( t% l4 Y
        begin6 s6 \3 K. x0 _& [* r4 `! R  w5 f
                $display("No errors or warning");
9 H3 a0 d: H: ^) O% e2 g4 j                $display(TX_FILE,"No errors or warning");) g. t; I: n- C
        end else begin. ]+ R* @+ T5 ~/ i4 x5 K  U& C: `
                $display("%d errors found in simulation",TX_ERROR);
+ j% a5 ]" V+ [+ W' D; r                $display(TX_FILE,"%d errors found in simulation",TX_ERROR);
0 A* d1 s+ s6 x0 X4 C3 ~7 K7 B        end ' P% h/ e/ d* O2 |
                $fclose(TX_FILE);7 I5 v5 |) Q( x7 C1 p) ~. `
                $stop;9 A8 }5 a2 Y2 @; L' X
        end
8 B$ ^0 {$ O$ U5 X        , o9 s0 ?7 Q' T
        task CHECK_y;+ x# F" E& i; A
        input[3:0]NEXT_y;, q7 R) z: T$ Q- U, r' u4 d: q1 N; R
        #0 begin5 \9 |+ b2 y1 B" P
                if(NEXT_y!==y)begin
  b3 J6 f# m  w6 ?                        $display("Error at time=%dns y=%b,expected=%b",
! _# D% f9 M$ |0 t8 b6 @2 h2 B9 P                        $time,y,NEXT_y);
! @+ w8 A: j2 ^9 \8 L1 N2 X" V" g                        $fdisplay(TX_FILE,"Error at time=%dns y=%b,expected=%b",                               
' l& |- Q5 ]* s; e* D                        $time,y,NEXT_y);
5 F, ~9 C7 x/ A3 W9 p% k4 R                        TX_ERROR=TX_ERROR+1;) \$ V4 j% a9 b
                end
5 f* t+ f) _! u( \/ ?        end
/ |; _8 Y, s4 bendtask3 k* V" j+ Z! q/ c% K1 F. ?- H
endmodule
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2013-2-5 22:51:28 | 只看該作者
本帖最後由 card_4_girt 於 2013-2-5 10:54 PM 編輯 - p) N8 ?8 i0 T2 e
3 r; |( ?% o" B; i  P! W( G
你的錯誤有以下幾點: (關於指令解釋以及程式檔請見此帖最底下): N( n$ U5 c  X% a
1. `timescale 1ns/1ns (請把第一行改成跟這裡一樣的"標點符號")
2 L+ r% C9 ]3 Q/ U7 ^! l6 d" k2. module the_2-4_decoder_testing_and_certification_program;
" T9 C# u: P2 @- Z* k; D) |  S    必須改成
$ _! w5 k/ ~! @" F# @% k1 v    module the_2_4_decoder_testing_and_certification_program;3 l9 j. a) t3 g0 e2 p9 M
! ?0 ~% _* X6 r# M6 Z+ ^
編譯雖過但必須注意的地方:
, q- g) d. x$ d4 G) N4 w1. fopen可以適時在後面加入要寫入或讀出,會比較知道動作,比如說
0 b- T4 v. F' G+ l' [$ l% e    $fopen("result.txt","w");0 v- Y+ X; Q( |
    模式有w(寫入至未存在或已存在的檔案)、r(讀出)、a(寫入至已存在的檔案)等
, z- F7 z. J- X+ j# X    w的寫入方式是尚未存在的檔案會自動創造且寫入程式訊息,或是對存在的檔案進行覆蓋性寫入,因此每次執行完的結果會把上次結果全部蓋掉
$ U2 y" d" v* [    a的寫入方式是尚未存在的檔案會自動創造且寫入程式訊息,或是對存在的檔案進行非覆蓋性寫入,因此每次執行完的結果會顯示在上次結果之後# P" G& _3 A8 u. g1 n! @. a
    你也可以參考下面的頁面:
- u' M" ^9 T0 W0 W( Q$ W& _# l3 ?    http://www.asic-world.com/verilog/verilog2k3.html
! \" S! Q" Z7 r( H2 d# u3 o) v% P4 U% Z
2. 因為你的程式含有$stop任務,對testbench會使模擬暫停,因此對後面才定義的task宣告來說並沒有作用到,最好是能在initial begin...end區塊之前就定義好task, P8 H# p) x. P4 r3 B
3. 你沒有呼叫你的"CHECK_y" task,所以就算把測試的pattern寫出來也沒有作用,應該要想辦法代個值給CHECK_y,才有機會知道TX_ERROR是否為0,並輸出對應的訊息以利debug
' p3 D" o3 X. f: b4. 不清楚哪一個是你的第一個輸入,不過我是把它當成{b,a}={00,01,10,11}來看,那麼你應該將刪除線部分改成紅色部分,不然會少一種輸入的可能性4 A+ ]- D: D5 J3 v( M
       //{b,a}=2'b00;
( l3 j) q) T3 n! X$ N8 X( E       a=1'b0;
% `* s/ o9 @8 g        b=1'b0;* g( |5 j, T0 c3 j9 H
        //{b,a}=2'b01;       # i" k7 P6 T& h. |7 N
        #100
+ j! [2 I/ m9 }+ t/ W        CHECK_y(4'bxxxx);, M7 s* p7 K6 v- V& B
        a=1'b1;% l1 i* f" o9 R$ j5 r
       //{b,a}=2'b10;
  z5 I& Z- ]. g3 I; a        #100: ) _6 A/ W" a" V$ h
        CHECK_y(4'bxxxx);
8 ~0 A# m! p+ P9 y( K8 q, K        a=1'b0;                 
& u" {3 e3 A- ~- o5 O        b=1'b1;
( k- H* N7 {; ?" z$ D0 E        //{b,a}=2'b11;      
# ~; x4 v3 m& `. J4 R- [7 S: l        #1009 Q  t: ^6 l4 P" |  M5 H
        CHECK_y(4'bxxxx);* A% {3 Q) a7 X, L9 n* K0 I
        b=1'b1;  //{b,a}=2'b10;7 q9 f- S- W! r
        a=1'b1;  //{b,a}=2'b11;
9 S7 ~6 l3 U" z' L        #1502 L; v; J3 J  J
        CHECK_y(4'bxxxx);) W2 d7 d- q/ x/ ^. A

6 [: H8 W5 |; l$ [$ O' K4 m. K, X5. 關於詳細的解釋,以及可用ModelSim 6.2版模擬的do file(.do)、改過的testbench以及2 to 4 decoder的設計檔,都在下面這個附件中,可參考看看
( H  H! U0 j& y) m. A, F- D; O* h& i4 u, [
, t8 Z! s# M3 U, |! t9 z0 b
希望對你有幫助!!

本帖子中包含更多資源

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

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

本版積分規則

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

GMT+8, 2024-5-9 02:11 AM , Processed in 0.110006 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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