|
小弟我是新手 想把呼叫function函數改成呼叫task 但不知道是哪邊有問題會一值出現 希望高手們能幫我一下
( ^+ D, G( A3 h9 H我猜應該是在always和呼叫連結不起來的問題 卻不知道如何下手
% p+ |8 V( F& Z& F" P! @, x5 Ancvlog: *W,FAAOP1 (shift.v,49|7): task or function call does not specify all formal output arguments [10.2.2][10.3(IEEE)].( S0 X" z$ h/ ~- F7 [9 M
output [7:0] mout;3 I2 {2 i& u( P; s6 R1 Q
|3 D# d( @0 @# D
ncvlog: *W,FAAOP2 (shift.v,60|16): Formal output argument 'mout' is absent in the task or function call identified by the previous error message [10.2.2][10.3(IEEE)].% W: I! n7 v, n d }
multdiv8(right,indata,mout);9 G+ o7 }! i0 [. G( u! @) ^' U+ b
|
9 p; I) {2 [; D1 e; l F0 kncvlog: *W,FAAOP1 (shift.v,51|7): task or function call does not specify all formal output arguments [10.2.2][10.3(IEEE)].
/ o/ _3 q5 E0 h; [4 z) s9 S, voutput [7:0] mout;8 s# D4 b7 \" {9 ]5 u; P- K2 }
5 z6 K3 j$ w* v) D
6 k$ L8 Y! S r+ L7 u6 J r
原本的code:7 t/ ?- O" X" R" p! P8 g! C
3 | a% m1 d- R) y. o/ @
module shift(indata,qout,mout);
& d) y; U8 z6 j" v. L5 R% L. W" r) a- m7 o0 J/ A
output [7:0] qout;6 A, Y% a: \( O( W
output [7:0] mout;9 S O4 f- `, |& q& q: s
input [7:0] indata;! b% a5 s o6 y
$ v- n* C9 _+ ~+ B. I2 a
reg [7:0] qout;
7 w4 O2 u- C) K9 ~1 ]reg [7:0] mout;
: `& `" g2 k+ h! uparameter left=1;
0 o) X2 \" w9 n( t& hparameter right=0;( p' g. x L( }3 |$ w
! m$ x/ K0 z+ _, P! V/ ?3 ~
always@(indata)
# e( {; P6 n; I( }4 S4 {
7 P! k. C+ z/ X& s' L+ f9 Fbegin1 R, E+ _9 Q6 l
/ O D% `' M- R) Q! x( \: |mout=multdiv8 (left,indata);
! c1 k( R' |4 A) H" eqout=multdiv8 (right,indata);
& [ v) X! U* l. H
6 b& T9 L/ s+ R, cend
+ m1 e3 z0 _* B) v7 |) |, z" \. V. A% p7 B9 j$ |1 ^7 V& D8 s
function [7:0] multdiv8;
$ d$ X/ C0 x% @1 v9 ?7 L: P& l/ P/ k' n( u
input fcn_left :5 T" C# m3 t: q* a6 o
input[7:0] fcn_in;
6 ?) O/ B' h0 j, e; J, z+ x5 xbegin
" B8 E, [- Q9 a3 A6 W& n multdiv8=(fcn_left==1)?(fcn_in<<3): (fcn_in>>3);: k' @/ p5 P) V5 u& z) H
end& Q" R; `6 j& ~7 c0 p
endfunction
8 ?* H$ m0 D4 j/ S' T5 |5 Y. H+ a7 k# j5 O
endmodule
8 w. @0 w, |+ w' u5 M
8 U Q6 s' D: ]+ G3 X6 }) I, g/ B0 F以下是我自己寫的
- n; K7 D4 C8 F# W& d; ` U
/ _8 ~& j' N6 i5 m+ s. Imodule (qout, mout,indata);2 _# {( s: p& b8 {
: i9 ~6 r8 C7 X7 o9 h
output [7:0] qout;' K$ @- N9 A( C: w5 q% I) `; y/ C
output [7:0] mout;
, r# V) ?" z$ i$ U8 ^! [& ~4 Qinput [7:0] indata;
; ~9 y' |' q( `5 ~1 @reg [7:0] qout;" j+ p+ B0 ~- W) z1 }" e
reg [7:0] mout;$ V; Z8 g8 F9 U8 L& W; y
parameter left=1;
+ U W3 _, r" E/ U9 Q. E' x% fparameter right=0;
8 M, Z1 x+ I$ {; h7 J. {- g" q: M1 D! O9 }% U
always@(indata) begin
7 h) w; k" i8 {! \; t) p; @& u+ S! |% X9 J0 m: G& D
multdiv8 (left,indata,qout);
' G, k5 R3 z7 J, b1 n; hmultdiv8 (right,indata,mout);
3 \+ z% P' b+ P& J) P0 g. Q
5 R& y3 A: g& T f; Oend
) X9 F) d. u' ^" _) v0 t0 a+ e1 Q8 O, \) s
task multdiv8;
( w' A4 r* W) Q; c/ Z: _ n0 M' o) Y, {3 H
input fcn_left;
/ U7 _+ F) |* z4 r/ C4 Uinput [7:0] fcn_in;
- C, `' R: {! j) P- x Z* xoutput [7:0] qout;
; n, I# h) f2 |/ V0 Ioutput [7:0] mout;3 ~$ X6 a, Y. G7 N M& f, H
7 V+ ~1 v- ^3 ^6 q9 Z* r9 `* U' U$ Q; L2 u1 E
if (fcn_left==1)
$ q/ _- Z& U% \# n! ^5 @qout=fcn_in<<3;, r! e5 _! Y. e3 H; o' P! V
else& T8 a; s* J2 k+ {% I% _
mout=fcn_in>>3;; s' y0 _+ s. Y% Y( J
" S R& [' @1 K: l5 o+ h) X6 e
endtask $ q( V" Y2 H1 N1 o9 O, w$ ]
endmodule |
|