Chip123 科技應用創新平台
標題:
2-4解碼器測試驗証程式編譯錯誤
[打印本頁]
作者:
ultraman
時間:
2011-12-4 08:13 PM
標題:
2-4解碼器測試驗証程式編譯錯誤
剛接觸,看不懂,希望先進們可以解說一下程式,還有一直編譯錯誤,我不懂為什麼錯誤,如果可以也想請教一下
/ j) N9 Y' H( b& A
% F. o" W u" ~/ g- m
'timescale 1ns/1ns
" t% K; e$ _' C/ S
l o# ]" f0 \/ k2 q; V! I+ b: {
module the_2-4_decoder_testing_and_certification_program;
& }5 o7 ^7 f4 e1 l
( j+ `# X5 W: [& K
wire[3:0]y;
2 C8 `& w! P# Z3 h) w* P
reg a;
) \8 t" Z$ M# x7 B* |
reg b;
- [! i/ C7 @# ]7 T# o
) o( V7 q, T- x8 \. U1 q( \' t2 m
deco2_4g UUT(
4 K1 n. @+ f/ l" X2 N3 s9 _' ~
.y(y),
2 |: y" j) m4 x7 ]: d5 i0 a) H* u
.a(a),
) t) N" l: _) }" K; ~
.b(b));
, q2 I+ [! T4 |) c7 _
# e3 a. {" \9 R, X& |: M
integer TX_FILE;
/ ]0 g% h3 u( k% ?
integer TX_ERROR;
3 W2 q2 @3 ?5 H' e* e0 N/ B$ {, G
4 W7 X" j! u( S- p% E
initial
6 E( F# _7 L* O( K
begin
4 F7 z! q8 _1 d; R6 m) ?
TX_ERROR=0;
|. ?( x* E) ^$ H% ]% b) h% j$ [
TX_FILE=$fopen("result.txt");
3 P O. r7 i' e' E( g
4 u* d7 ~; d0 K6 e0 _1 m& F
a=1'b0;
) k3 S k! ?3 C! R" V$ B% s
b=1'b0;
0 D ]3 [! ?, n) j, ]* J3 g p, \
0 ?: c; a. \3 W7 v
#100
- t5 m5 g6 Y0 j1 I
a=1'b1;
# Z. ]1 p; b; b5 j
5 A4 C. o6 {1 U9 }, g. p
#100
V! y) x0 P: j3 D
a=1'b0;
4 Y' i/ g6 @/ Z( w
b=1'b1;
& a/ G3 j: V# V
& K# q, y" p0 u' i5 X+ `
#100
5 f6 v0 T5 _! R% O e# Z
b=1'b1;
4 ~ F- b0 ?: z$ s( I7 ~+ P0 Q, a$ z+ G
0 i& G6 \1 }4 T) K& d) I# `
#150
2 K7 H: h- o2 h: M6 S" S+ l0 I6 C
if(TX_ERROR==0)
* P7 [, l, V; c1 X3 l5 [
begin
( C% a8 p7 Q$ B1 i7 k
$display("No errors or warning");
3 N* x5 h' N \7 @5 W( W# G; D
$display(TX_FILE,"No errors or warning");
$ ~% k6 K# [4 A& F6 v
end else begin
' u: `, S/ I! t. K
$display("%d errors found in simulation",TX_ERROR);
" t/ j1 M9 m0 {, Y1 P4 A6 e: C
$display(TX_FILE,"%d errors found in simulation",TX_ERROR);
% h+ B" e' y7 b& J' e
end
& D( S9 G1 R. U/ b! z8 e
$fclose(TX_FILE);
! z4 h- c, T0 n# W
$stop;
- f' C, Q# X F( X+ g, p- A( j
end
- u8 E4 q- h8 q% m3 l' W1 A
. u. C7 t4 T* B
task CHECK_y;
; e, W" V. L A9 T# {$ v/ h7 P
input[3:0]NEXT_y;
4 s E0 Q0 [. |3 s2 |/ Q1 y
#0 begin
, y# V! y! D4 N" V( x
if(NEXT_y!==y)begin
2 F h; h) I! c; N! v
$display("Error at time=%dns y=%b,expected=%b",
* y& B# I9 m4 r3 D/ x
$time,y,NEXT_y);
+ d& T. o- o8 J& i) H
$fdisplay(TX_FILE,"Error at time=%dns y=%b,expected=%b",
2 o$ M; f% o9 w9 {
$time,y,NEXT_y);
[1 [" w- J, q( R' d! I/ ^( U2 T* ?, \
TX_ERROR=TX_ERROR+1;
; Z, n. v, p( ?
end
8 ]( y& d( h2 X8 [9 X7 A3 D3 {# H/ ]
end
* r6 Q. H/ m: d+ } q+ z4 W
endtask
$ L2 c$ C; t) D8 F( R
endmodule
作者:
card_4_girt
時間:
2013-2-5 10:51 PM
本帖最後由 card_4_girt 於 2013-2-5 10:54 PM 編輯
) P/ R) ] t! q% W# R+ Y6 S. O7 x6 i
! Q+ C: e. g8 \9 e
你的錯誤有以下幾點: (關於指令解釋以及程式檔請見此帖最底下)
/ ^5 H! L: a" @' V) W& d- I9 E
1.
`
timescale 1ns/1ns (請把第一行改成跟這裡一樣的"標點符號")
5 V. l6 Y3 x" X" q: t$ Y
2. module the_2
-
4_decoder_testing_and_certification_program;
8 b& |/ Z9 N: k+ L. h+ F
必須改成
2 s: g, |5 l3 p4 @* o
module the_2
_
4_decoder_testing_and_certification_program;
" I7 e5 q7 `( r7 O
: g/ w" a5 s& _2 Z; l( m
編譯雖過但必須注意的地方:
% b' X6 t% M# S
1. fopen可以適時在後面加入要寫入或讀出,會比較知道動作,比如說
: H) g" ~3 m- E/ J* q
$fopen("result.txt","w");
9 |; i+ J9 k( |" b# i( M
模式有w(寫入至未存在或已存在的檔案)、r(讀出)、a(寫入至已存在的檔案)等
/ | \2 S/ a3 _
w的寫入方式是尚未存在的檔案會自動創造且寫入程式訊息,或是對存在的檔案進行
覆蓋性寫入
,因此每次執行完的結果會把上次結果全部蓋掉
" H6 q5 |% ]- C+ B; \2 d' H
a的寫入方式是尚未存在的檔案會自動創造且寫入程式訊息,或是對存在的檔案進行
非覆蓋性寫入
,因此每次執行完的結果會顯示在上次結果之後
7 A$ U' h3 M/ u$ F2 b5 j7 m
你也可以參考下面的頁面:
9 N6 g9 L9 D3 W; y, |
http://www.asic-world.com/verilog/verilog2k3.html
" {: m9 G, P# b; z/ [
% S) Z: Q) n! e, b5 a, ]& H3 F
2. 因為你的程式含有$stop任務,對testbench會使模擬暫停,因此對後面才定義的task宣告來說並沒有作用到,最好是能在initial begin...end區塊之前就定義好task
3 v1 x% I( U; D+ u2 W# S' X
3. 你沒有呼叫你的"CHECK_y" task,所以就算把測試的pattern寫出來也沒有作用,應該要想辦法代個值給CHECK_y,才有機會知道TX_ERROR是否為0,並輸出對應的訊息以利debug
7 L1 t& q2 h0 x1 F! g5 |
4. 不清楚哪一個是你的第一個輸入,不過我是把它當成{b,a}={00,01,10,11}來看,那麼你應該將刪除線部分改成紅色部分,不然會少一種輸入的可能性
7 L' s8 {# Q8 q
//{b,a}=2'b00;
8 P/ a& k( E$ ?4 S1 V
a=1'b0;
/ t- f7 `# |+ c! C- S V
b=1'b0;
" a8 X, j, N+ m& I- [& L4 X) ^
//{b,a}=2'b01;
; I9 p. d L8 O- c
#100
: Y5 z+ W- c2 i2 K# l
CHECK_y(4'bxxxx);
, x0 j8 U) c; U' D* p: ]0 z
a=1'b1;
; [% `$ i7 C+ f- O1 {
//{b,a}=2'b10;
7 {5 n7 d+ N& V5 g/ x1 r0 U* e
#100:
9 X6 h' S5 c- _6 s7 I
CHECK_y(4'bxxxx);
2 }1 i5 _( W3 w1 W A, ]) m5 Q
a=1'b0;
+ m. X$ F/ `3 o& N
b=1'b1;
2 H5 u1 z1 k" V O' d+ e
//{b,a}=2'b11;
9 X2 J5 t$ q+ n; k
#100
" P- ?2 J/ d: P+ c6 ?" z# b
CHECK_y(4'bxxxx);
7 l5 j2 }: S! k& T. A
b=1'b1;
//{b,a}=2'b10;
4 i4 Y- o- N+ l2 \# J( f
a=1'b1;
//{b,a}=2'b11;
|. ]8 O" u: ?( G7 W7 @; K
#150
2 T% m# ^3 i- q+ B' S
CHECK_y(4'bxxxx);
! s& }! a# F6 X3 F
, n, q- Z5 f: p: i' ~# t. h
5. 關於詳細的解釋,以及可用ModelSim 6.2版模擬的do file(.do)、改過的testbench以及2 to 4 decoder的設計檔,都在下面這個附件中,可參考看看
9 @0 i" q- U$ Q" p f- `3 |* r
[attach]18054[/attach]
$ b) h5 d, W& Z
w% S+ n" w& B6 c3 [9 {0 N
希望對你有幫助!!
歡迎光臨 Chip123 科技應用創新平台 (http://chip123.com/)
Powered by Discuz! X3.2