電子產(chǎn)業(yè)一站式賦能平臺

PCB聯(lián)盟網(wǎng)

搜索
查看: 2248|回復(fù): 1
收起左側(cè)

IP核的使用有什么要求嗎

[復(fù)制鏈接]

571

主題

910

帖子

4781

積分

四級會員

Rank: 4

積分
4781
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2022-11-3 13:51:18 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
剛接觸Verilog不久,需要做個FPGA解二階微分方程。% q* @* K) L% ]) d6 p7 w8 z+ n  X
我用歐拉法解得,但調(diào)用IP核總是出毛病2 D* e% H& M. C+ ?4 P! j8 l8 u; a1 @
比如
  d- W' K: ?+ _# W2 F* a- f& ?Error (10170): Verilog HDL syntax error at Eeler.v(22) near text "add_sub_inst";  expecting "<=", or "="$ D: ^1 n% s' {/ I% |8 ~1 [8 k, L3 I
Error (10149): Verilog HDL Declaration error at Eeler.v(25): identifier "mult_inst" is already declared in the present scope! N0 N# ?# x( i( r
Error (10149): Verilog HDL Declaration error at Eeler.v(26): identifier "add_sub_inst" is already declared in the present scope3 N! a0 Z, f8 U2 V) u+ O
Error (10149): Verilog HDL Declaration error at Eeler.v(27): identifier "mult_inst" is already declared in the present scope
; g4 m! b5 M8 |& cError (10149): Verilog HDL Declaration error at Eeler.v(28): identifier "add_sub_inst" is already declared in the present scope4 U6 g" h8 |1 }2 N. j, P
Error (10170): Verilog HDL syntax error at Eeler.v(30) near text "$display";  expecting "endmodule"$ c8 q! X8 R. ?0 ?2 S9 B) h
Error (10759): Verilog HDL error at Eeler.v(30): object x declared in a list of port declarations cannot be redeclared within the module body
1 ]& K+ w$ ?$ m. X6 z) ~. CError (10759): Verilog HDL error at Eeler.v(30): object y declared in a list of port declarations cannot be redeclared within the module body
) V$ T2 ~" g* M# W' WError (10759): Verilog HDL error at Eeler.v(30): object z declared in a list of port declarations cannot be redeclared within the module body/ e+ M9 N$ a1 m* k* `' T! S
Error (10170): Verilog HDL syntax error at Eeler.v(30) near text ")";  expecting ";"' S  O! Q6 L: f$ I0 u6 N; h& A  U
Error (10112): Ignored design unit "Eeler" at Eeler.v(1) due to previous errors
. |, [/ O0 `2 D8 U6 t" U/ E# l) K編的源程序這樣$ K" s* c6 i2 Z/ \5 ^
module Euler! {8 `0 p6 X7 Y
() E& f# K7 {. r) m
input wire           clk,
" o- \9 ^5 ]& S0 X" A% K% b* X. Xinput wire    [31:0]   x,      //定義輸入量,單精度32位浮點數(shù)
# x3 e; k* O- n. c# rinput wire    [31:0]   y,
% i, _# t5 e$ minput wire    [31:0]   z,& }" A$ n5 I6 x! r0 [5 I
input wire    [31:0]   h,' `! S! Z$ u, x6 t: ?* v
output wire    n1
+ j3 T2 h- c- B5 x2 F3 c);( W5 |+ i& b6 I

1 x7 v& d8 r3 ^  R: Z$ u# A8 z
( X% |# d! d! S) ]4 ~% |- j# d0 T5 P2 z9 n7 c* C* g, Z# L

1 e5 z  X! z- j' k. M" ?1 areg[31:0] z11;
2 G- g! q$ u! F- breg[31:0] z1;
: Q* H1 v" [: p& Qreg[31:0] y11;! e: z2 b) G3 g. m* S7 C
reg[31:0] y12;
: q) Q2 }$ }6 |integer n;
7 d5 I; v  s- w! {" i2 H. h
, g' W  x+ h9 z) [1 H3 E* G( j0 `5 h. x6 C- q# G, o
initial- m' ^  R- y; |! ~( f
//開始迭代* o( ]/ t. ?; z3 J  z5 R& ^+ [$ s
for (n = 0; n < 10; n=n+1)      
7 A( u! j. L" z& O- Ladd_sub add_sub_inst( .clock ( clk),  .dataa ( x ),.datab ( h ),.result ( x ));
' v, g5 @: v. _, A0 R) D5 K$ ^: ?! x4 h  nmult mult_inst( .clock ( clk ),  .dataa ( x),.datab ( z ),.result ( z11 ));            
* E5 ~8 z1 I- ]6 W0 b& fadd_sub add_sub_inst( .clock ( clk),  .dataa ( z11 ),.datab ( y ),.result ( z1 ) );      
$ S. F% F8 K9 g' M8 i- n9 I3 dmult mult_inst( .clock ( clk ),  .dataa ( h),.datab ( z),.result ( y11 ) );         
3 _; P/ I$ G2 t" A# j! ~add_sub add_sub_inst( .clock ( clk),  .dataa ( y ),.datab ( y11 ),.result ( y ) );   
6 A- N" A" d" i0 E; V+ N' ^mult mult_inst( .clock ( clk ),  .dataa (h),.datab ( z1 ),.result ( z12 ));         
+ x5 C; ~/ b! k, x8 zadd_sub add_sub_inst( .clock ( clk),  .dataa ( z ),.datab ( z12 ),.result ( z ) );
; Q5 [6 r% a; D. \% R8 D" x5 [  q7 Z  ~' n* {* k+ A& S' |
- K: u! W  ^4 |; F; R. x
$display ("n=%d x=%b  y=%b z=%b\n",n,x,y,z );
6 Q9 E9 z! c& o9 g5 f$ F# k* |" ?endmodule
, Y# Q, M5 m3 d想問一下,是IP調(diào)用有問題嗎?還是IP核不能在循環(huán)或函數(shù)里調(diào)用
回復(fù)

使用道具 舉報

591

主題

959

帖子

5157

積分

四級會員

Rank: 4

積分
5157
沙發(fā)
發(fā)表于 2022-11-3 13:51:56 | 只看該作者
用另一種方式也有問題
5 @  ~0 A7 k% F" D7 R7 X0 Amodule Euler- D, b, V. N- k* g
(% [2 k# z6 c+ c" v
input wire           clk,1 @/ J# m* y* e7 H& b" ]* |" F& U
input wire    [31:0]   x,      //定義輸入量,單精度32位浮點數(shù)
  Q' }) D7 V3 Einput wire    [31:0]   y,
) |5 @; f, o8 G) Y. D8 c' S0 Rinput wire    [31:0]   z,/ c1 M. Y  ~, [0 [$ G; B
input wire    [31:0]   h,3 A. c# U( u! p" u) q
output wire    n1
7 A  r# [4 f4 w4 S" _9 Q3 K);' t8 s/ y3 P% D
- E: C+ {' ~) j: U$ p: e" C
! S, P! s: H; J, ]
function   [31:0]   g;//加法器函數(shù)9 R/ M# M' ]& k3 v! N
  input   reg   [31:0]   x;5 y0 l4 ]$ D3 B( K* E2 r9 w
  input   reg   [31:0]   y;
1 y) _* K1 z& Z' x4 f          reg   [31:0]   z;  7 ^* C  v7 i0 q( o* W2 m' D
begin          8 j7 d6 l: r: V4 X4 d
add_sub add_sub_inst( + j) z9 m% C7 F7 S. e
   //調(diào)用浮點數(shù)加法IP7 i5 O/ {& I6 s( b6 @( r
.clock ( clk),
$ v) E- m5 Z" Y0 n+ N0 @" r.dataa ( x ),
- P1 ?8 f& \7 C/ f.datab ( y ),
2 E7 Y! J4 b) c& w.result ( z )
( ~' X3 I! j+ ?. R1 `8 d* ?    );
+ V5 w" V2 K. Y! m7 u' J6 ^    g    =    z;" x' U& i. b6 ?% e
end
0 H% C; ~: Y2 e5 xendfunction
9 B& D) R; g- }9 z8 M5 Y! d# ]
" ]) D9 h# J% ^+ S4 h) c8 |3 F4 J/ _$ k% J6 _" @9 p7 X; D7 q

5 X% E8 n: T) N5 v2 o6 ^3 [$ f# t& Y; i
function[31:0]f;       //乘法器函數(shù)
4 e+ K2 o$ M9 x  input reg [31:0]x;
* E+ y) a4 D& a+ [  input reg [31:0]y;
. Q. L: j$ N+ a2 I4 R   reg [31:0]z;2 |; i% W- N. F' ^
begin   
' v* E2 W  r2 Bmult mult_inst( 5 o( `0 @2 z: ~  d3 n
  //調(diào)用浮點數(shù)乘法IP
1 @! _* Y* U0 C.clock ( clk ),
( w: F/ d1 Q" m4 C+ B! u; i.dataa ( x),- {# b5 q0 p- {& a- ?2 L' t, e
.datab ( y ),# Z8 Y& f- h& a# D1 z3 a! T2 W3 u
.result ( z ), ^  {4 ]9 d7 i+ N! t
);
9 {* j) R. V4 z, J# d  f = z;
8 T  c7 u( N$ y end
- O3 @! I4 o# b: z1 q! ?endfunction
7 l( ^- S& p) ?, x* O4 P. v; M
% p: Z; y9 V; T( E9 n: X; ^: S% o
- ^& L7 T2 I2 e. d6 @8 K6 jreg[31:0] z11;" E9 o* j0 F2 S. O
reg[31:0] z1;
) g2 p6 Q; B* Q4 P% q: T7 P$ Z& ~reg[31:0] y11;- e' v) [# b( r! s& s" m4 L
reg[31:0] y12;3 d. d: `2 c9 B* t' T5 `
integer n;
" m: }+ z% X; G. e
' ?+ K, ~  V5 l7 i
, d/ p4 A( l2 K6 Q: H; x3 h3 Einitial
2 b- E* Z3 [: ^% n9 E% @' D2 dbegin
& T+ p) t- C- ]! l; ~: Y; |                     //開始迭代
$ `. T8 O$ e+ S7 S  Wfor (n = 0; n < 10; n=n+1)5 \( i4 W, U2 M8 |& X
      begin
5 W/ a# @/ z4 `+ J+ V5 h        x   = g(x,h);8 u1 H; k3 ~+ f& Z/ V# h
        z11 = f(x,z);9 }4 |6 ~6 j/ k3 K
        z1  = g(z11,y);
, x1 d! ]* y! m  C& ]  U        y11 = f(h,z);
5 C$ T0 w  g- `7 D! l7 B        y   = g(y,y11);( ]8 X$ V( H+ ]$ I! d) G
        z12 = f(h,z1);5 f" F7 q/ b  ?9 }( f* v
        z   = g(z,z12);
/ @, u3 c4 h$ M9 J& n- K1 B       $display ("n=%d x=%b  y=%b z=%b\n",n,x,y,z );( w7 V4 u( j  w# Y8 w0 r
      end9 J6 _, O6 i. Q- f
end" j# D4 M7 N8 Y/ ]! K3 j
endmodule7 t  s. }/ r2 d( m: S
錯誤報告是" m0 `  Z! Y$ [! H4 r
Error (10170): Verilog HDL syntax error at Eeler.v(16) near text "(";  expecting ";"4 n2 j2 D- ?. U
Error (10170): Verilog HDL syntax error at Eeler.v(33) near text "(";  expecting ";"9 w) z9 q# a. v* \# F; c
Error (10112): Ignored design unit "Euler" at Eeler.v(1) due to previous errors
回復(fù) 支持 反對

使用道具 舉報

發(fā)表回復(fù)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則


聯(lián)系客服 關(guān)注微信 下載APP 返回頂部 返回列表