Chip123 科技應用創新平台
標題:
有關verilog 錯誤
[打印本頁]
作者:
laasong
時間:
2010-12-27 01:54 PM
標題:
有關verilog 錯誤
小弟我是新手 想把呼叫function函數改成呼叫task 但不知道是哪邊有問題會一值出現 希望高手們能幫我一下
3 h! p7 C! v! J
我猜應該是在always和呼叫連結不起來的問題 卻不知道如何下手
7 b* S2 B. M0 r+ P
ncvlog: *W,FAAOP1 (shift.v,49|7): task or function call does not specify all formal output arguments [10.2.2][10.3(IEEE)].
$ D6 D! O. M" R) ~% C1 C% C4 g$ z
output [7:0] mout;
' Q% |1 v( O2 v2 X" r9 B) Z' W5 t
|
: q% ]: V3 h1 p! |" d- m) H$ B; |
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)].
N9 I. d. k* E9 {- A: y2 w
multdiv8(right,indata,mout);
" L# V3 D f: Y( Q ^: v1 K0 p
|
$ z6 q: d# G: y, |' |. j$ y
ncvlog: *W,FAAOP1 (shift.v,51|7): task or function call does not specify all formal output arguments [10.2.2][10.3(IEEE)].
1 x# ^% P# |- b/ T& o/ ~$ q, M
output [7:0] mout;
, c( z$ r7 Z* ]/ s! ~! b! d
, E8 E6 t& F8 X3 Y3 K. s/ ]& G
4 f& R3 g( a, h7 M% p: W
原本的code:
- e$ n) d7 k0 M8 M$ c
$ F9 w/ N+ ~0 u# |# b3 o' @
module shift(indata,qout,mout);
" |6 r$ m$ q/ y: p2 k
4 A( W5 D! S" L$ Y7 M! `
output [7:0] qout;
+ h* [0 Q. `' T* @3 {
output [7:0] mout;
8 S- d% O/ L) M# p
input [7:0] indata;
5 O7 b& c2 w' `: X5 ?, Y0 i% ~
5 T% B0 d0 h# j; }# V6 C
reg [7:0] qout;
. ]8 w; F' ]- L# H9 Q* F
reg [7:0] mout;
6 r o/ [% w& z# o# {
parameter left=1;
1 P% ~+ p7 m" N
parameter right=0;
9 n: f8 `; T S+ X9 f! o- {
! W. [/ y2 N6 z+ L
always@(indata)
/ T: x0 q* t, y# S
" Y+ j% Q! x0 U. t. g) s7 i
begin
9 D. X. ?& o* g1 u
' s R: T# J( m: Y; {2 F
mout=multdiv8 (left,indata);
$ U3 D* a+ A. y
qout=multdiv8 (right,indata);
4 e+ p ~( M& ] r* ~
6 `8 v6 V. V" S& q) ~& z9 j
end
$ E. V7 J: t( Y9 h$ F
4 j) t* i1 q2 s1 L* t" x. |/ w
function [7:0] multdiv8;
; O3 m& c* B- Z1 O1 b
6 C3 N9 u d& |4 G
input fcn_left :
1 \$ b |# V M; P+ s
input[7:0] fcn_in;
7 z, d5 Q9 x$ R9 W) C
begin
: }) d7 R/ W% Z# b" p0 {1 G
multdiv8=(fcn_left==1)?(fcn_in<<3): (fcn_in>>3);
6 t9 R! g& R# E* _. V& k/ ]
end
2 A3 _ N+ ]4 @
endfunction
6 e; t6 _( O5 h5 K/ G: x8 j
1 D1 w' ]- z/ J3 }0 c
endmodule
( d, [' l; i2 x' v( G
: o1 i' ]8 v$ x
以下是我自己寫的
" e9 K2 E9 w: r
+ Q g4 K) `& Y! d3 J
module (qout, mout,indata);
$ C1 z0 s$ @% f" J2 H9 B% T0 t
0 }/ Q: |( K" X
output [7:0] qout;
2 V5 g6 _& b0 |6 A) E7 M# `! l
output [7:0] mout;
: a7 q# j- \/ B. h1 T
input [7:0] indata;
$ x" t Y( X) {
reg [7:0] qout;
4 g$ D/ B: k# i
reg [7:0] mout;
- F2 o( i6 B0 G! H4 L$ `2 w1 j
parameter left=1;
3 c& q* x" a: R: P
parameter right=0;
3 p( j' {. ^9 [! W9 P
. y" U4 M) m' O" K
always@(indata) begin
: m4 _7 u8 f! s7 B% d: x: d
: P% V0 \" E' ]
multdiv8 (left,indata,qout);
; R5 S& Y O5 D+ s# L+ n+ Q' D
multdiv8 (right,indata,mout);
% z! |3 I Z7 X! c
7 n) ~1 u# f2 X8 ]" h8 i
end
, h+ d& Z k- J L1 N
' F/ ^ t0 P+ v+ _* `( r
task multdiv8;
& ~+ }5 L( T2 w4 @5 {
4 s: O5 N9 T& s7 r3 z
input fcn_left;
2 e2 B9 `" J: X6 i
input [7:0] fcn_in;
: l8 _- E# \/ e( H: O
output [7:0] qout;
3 \+ u" m' }- W. M r+ I$ C3 k" G
output [7:0] mout;
; Y6 r1 _+ N$ Y
' W9 p! k) e+ U! {8 T9 ~- \2 r3 ?8 [
7 K$ I! U5 N d! T$ `+ [
if (fcn_left==1)
# F4 z x$ e) H: i* |
qout=fcn_in<<3;
0 A8 w4 g3 V& \3 f# X' r& J
else
& y4 B4 Y7 S! n5 W
mout=fcn_in>>3;
; A1 T+ L" ?* L( m
; v c X# G1 y
endtask
% T7 o+ l* r6 f+ e+ w, W
endmodule
作者:
chienw
時間:
2010-12-29 01:19 PM
you did not specify qout when you called the task, which is the error message tries to tell you.
作者:
laasong
時間:
2010-12-29 04:34 PM
我知道我問題所在了 task的port和宣告的port不一致
' s4 |6 {. ?" @& U! O. ~
$ p6 k E% ?1 U0 q% n ~5 c! @3 c
要在task後面多打qout and mout 這樣就OK了
歡迎光臨 Chip123 科技應用創新平台 (http://free.vireal.world/chip123_website/innoingbbs/)
Powered by Discuz! X3.2