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

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

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

IP核的使用有什么要求嗎

[復(fù)制鏈接]

571

主題

910

帖子

4781

積分

四級會員

Rank: 4

積分
4781
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2022-11-3 13:51:18 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
剛接觸Verilog不久,需要做個FPGA解二階微分方程。; R1 q( ^, {8 F0 W4 r, k  M
我用歐拉法解得,但調(diào)用IP核總是出毛病
& t1 L3 m/ p, I3 Z8 e, R比如
7 b7 F! c( w# }* I% n" u5 M% i7 {Error (10170): Verilog HDL syntax error at Eeler.v(22) near text "add_sub_inst";  expecting "<=", or "="
9 O9 Q. u& T, E$ Q- ^+ H8 kError (10149): Verilog HDL Declaration error at Eeler.v(25): identifier "mult_inst" is already declared in the present scope4 B- k( {- I, c+ O2 @
Error (10149): Verilog HDL Declaration error at Eeler.v(26): identifier "add_sub_inst" is already declared in the present scope. w( y# c0 [: `
Error (10149): Verilog HDL Declaration error at Eeler.v(27): identifier "mult_inst" is already declared in the present scope
3 j8 _: A3 w9 L7 g" HError (10149): Verilog HDL Declaration error at Eeler.v(28): identifier "add_sub_inst" is already declared in the present scope8 [3 I8 W2 g8 A
Error (10170): Verilog HDL syntax error at Eeler.v(30) near text "$display";  expecting "endmodule"* d. v( j; u; w, f  M+ }/ }
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% x' N* ~2 @3 V- U
Error (10759): Verilog HDL error at Eeler.v(30): object y declared in a list of port declarations cannot be redeclared within the module body
2 d* T* c( k& W, [- g& Z( ?Error (10759): Verilog HDL error at Eeler.v(30): object z declared in a list of port declarations cannot be redeclared within the module body
% T* ]$ W4 N/ Q7 d1 v' NError (10170): Verilog HDL syntax error at Eeler.v(30) near text ")";  expecting ";"# ]4 ]; M/ I3 Y" _/ }$ }  m- i. c
Error (10112): Ignored design unit "Eeler" at Eeler.v(1) due to previous errors  A. E' E% d* V7 ~7 k. _2 Y
編的源程序這樣" |4 Q1 y" \; ~
module Euler6 L; s( N# Q7 G1 G1 }: e, K
(1 o2 U+ [# r9 D+ I2 _6 }) R
input wire           clk,4 T8 u' o# d( h/ H- j
input wire    [31:0]   x,      //定義輸入量,單精度32位浮點(diǎn)數(shù)' A8 L5 l3 R/ @' l% M+ j
input wire    [31:0]   y, 4 D) {& `2 w$ f! }' C' z1 m3 U
input wire    [31:0]   z,4 p% A$ b+ U! }- `
input wire    [31:0]   h,6 I- _& w# M" `- ~8 F
output wire    n1
9 u8 m% r& c( J. g);: E& W7 w1 }/ F/ n( i( T
7 `) G) Q; X7 s7 f( i4 Y
5 _# u0 t2 s7 }% Z0 J

1 o2 z; W$ ~* s. `
0 E* P8 Q* a$ d8 Z$ I, ~reg[31:0] z11;
5 Q7 h! \  E* D$ Q0 E+ N5 ]+ v- freg[31:0] z1;3 e: W: e' _; `& ]  m% V
reg[31:0] y11;' v3 r' m5 d* V" G8 V
reg[31:0] y12;
  d( l( m" ^' \9 X8 e3 ~integer n; 3 y  B$ Z; V* ?+ x7 X
% o4 }# ^3 S: }3 A
/ Z$ k3 x' B% Q' C' X
initial
7 |, _. ?; [9 w2 t# P( b //開始迭代
$ }+ Y: c0 E# P# X( A, rfor (n = 0; n < 10; n=n+1)      
9 H$ L; X$ x" f7 ^. Kadd_sub add_sub_inst( .clock ( clk),  .dataa ( x ),.datab ( h ),.result ( x ));
) w$ t+ o0 D- Fmult mult_inst( .clock ( clk ),  .dataa ( x),.datab ( z ),.result ( z11 ));             . k8 v0 g9 z4 O" Y
add_sub add_sub_inst( .clock ( clk),  .dataa ( z11 ),.datab ( y ),.result ( z1 ) );       # |# c& x( t- y4 a9 N/ G
mult mult_inst( .clock ( clk ),  .dataa ( h),.datab ( z),.result ( y11 ) );         
( I5 {/ }/ H: d, wadd_sub add_sub_inst( .clock ( clk),  .dataa ( y ),.datab ( y11 ),.result ( y ) );   / K! U9 e8 P- ~3 T
mult mult_inst( .clock ( clk ),  .dataa (h),.datab ( z1 ),.result ( z12 ));           i7 R& J; O- s9 B* B
add_sub add_sub_inst( .clock ( clk),  .dataa ( z ),.datab ( z12 ),.result ( z ) );! F, l( T4 }7 O! F7 p  Z" w
7 I! ]/ K  g2 K! _) E* w  I( A

6 n% y$ e5 H& @' k$display ("n=%d x=%b  y=%b z=%b\n",n,x,y,z );
8 p0 v2 u7 E; ]endmodule
1 K8 p' Q1 o( O$ e3 w! s想問一下,是IP調(diào)用有問題嗎?還是IP核不能在循環(huán)或函數(shù)里調(diào)用
回復(fù)

使用道具 舉報

591

主題

959

帖子

5157

積分

四級會員

Rank: 4

積分
5157
沙發(fā)
發(fā)表于 2022-11-3 13:51:56 | 只看該作者
用另一種方式也有問題
7 C: ~8 A" H, s8 ^; Mmodule Euler0 C# J' P5 o$ k0 l, d- E; M1 r
(
* D. S5 t! r$ l1 G4 ]% jinput wire           clk,7 T/ z6 ^8 M( G6 V9 T
input wire    [31:0]   x,      //定義輸入量,單精度32位浮點(diǎn)數(shù)
1 r8 Z4 c5 _  o% k: s6 vinput wire    [31:0]   y,
1 L  _% j  h7 k) x- D1 l$ ~! Minput wire    [31:0]   z,- X7 Y' P5 q* L' z5 O7 h8 E, q
input wire    [31:0]   h,
4 v( {+ u6 e/ r& houtput wire    n1( z: v6 v  @" v5 q! Q
);
' l) \" J6 v7 g' b0 P  l" B7 u  z* [+ d9 t

) Y" b5 H( w' G; |$ ?/ g1 X3 V- hfunction   [31:0]   g;//加法器函數(shù)
* G& l/ x% S& D  input   reg   [31:0]   x;
+ {- _. I' }% A8 ?- S  input   reg   [31:0]   y;- W$ [/ j0 }0 E
          reg   [31:0]   z;  5 S( p# M, q7 a2 K, E
begin         
" S, L! l. e+ p1 e9 Q9 N- eadd_sub add_sub_inst( ) C! A0 V9 `! z! I
   //調(diào)用浮點(diǎn)數(shù)加法IP1 A7 I5 F) `7 K/ w% `
.clock ( clk),
, m1 i+ A/ }8 j; L9 r7 ^.dataa ( x ),
; ]. }4 }7 |0 Y' d! @.datab ( y ),, N* C: K; P$ F4 Y; v; ~, b
.result ( z )& {0 Y% }2 P6 O7 |
    );+ F* u# e4 W6 e' S' l8 Q
    g    =    z;* k2 z4 ~' `, B; M1 u$ o
end
) i8 k6 l& U( P$ ]endfunction' y' U5 T9 p+ I$ J

  {; Q$ L! u& J2 m( @. S' ]7 E  l; w( {& D
0 R# N2 c+ j* I+ @$ Q# N
1 E  q$ I1 d& ~
function[31:0]f;       //乘法器函數(shù)
' l7 I  T1 f- R& |  input reg [31:0]x;8 P" g0 L: Z! R* `: h
  input reg [31:0]y;0 s! K7 d( k4 d4 V% i- c/ z. Y
   reg [31:0]z;5 K2 i, }% t  F
begin   9 g) `- J  h" G' D
mult mult_inst( 0 I/ ]% i+ n: [1 s  S; v5 p
  //調(diào)用浮點(diǎn)數(shù)乘法IP( t* q9 D# D8 G+ d; G! i. D( q3 n
.clock ( clk ),
7 \; d. v' B" U0 d.dataa ( x),8 y9 B2 L+ y3 z/ ~
.datab ( y ),& v9 `0 m2 p6 A3 s
.result ( z )
9 T( D' G4 ]6 b1 h );
  E) l" t$ z4 F0 K  f = z;$ a: |( O& j6 d0 Y, z" M( Q
end& w! D8 p6 k; _3 y1 a& s
endfunction- {: t9 N/ f3 r& k+ e7 [" y* D3 L
% Z. A" ~3 q$ r. S/ H
( t5 O. y$ M/ R+ ~# c/ l
reg[31:0] z11;
3 t5 C9 T/ @5 p' C9 {$ {3 c0 k6 breg[31:0] z1;8 f2 }8 l! y' y9 o9 A$ r! z  _% c
reg[31:0] y11;+ ~  p, c3 L4 T2 B% {
reg[31:0] y12;2 k( r2 f. f/ j* t" V6 C
integer n;
! I- B$ c; n! y2 g- r- z. q0 M/ D
$ ]6 T  P$ p8 j
8 j$ n& e$ W" L: M0 M* F! uinitial+ @7 R0 m' \* n4 Y" j3 q0 a) f
begin
/ G6 c- y* w8 b: w: k1 `                     //開始迭代, I9 x: ^! B! e5 H7 J7 O
for (n = 0; n < 10; n=n+1)
* C) H2 `7 [9 p# W; A# U      begin- \$ B! }2 ]0 h0 [& l
        x   = g(x,h);" ~' ]# g6 L6 J$ u9 f* }2 ?- I
        z11 = f(x,z);
( {' P# m, Q$ @( t" p* b- V  i        z1  = g(z11,y);& T+ |, z" V& p2 ^4 f
        y11 = f(h,z);! z5 |' P* ~+ U
        y   = g(y,y11);
6 h, O) f) ?8 i6 S- k( ^9 F        z12 = f(h,z1);
- I7 Q) X3 ~- \  C        z   = g(z,z12);1 b% X+ i3 X- x5 y0 C! L
       $display ("n=%d x=%b  y=%b z=%b\n",n,x,y,z );
+ s9 M9 F9 }6 z9 y% Y      end
0 L$ V. t" U, u: b. Gend
& @; M  }1 m6 c: Y+ w- o! b5 _endmodule
6 \$ P4 t. ~, H6 T( k% S; \錯誤報告是
) s  R9 @+ S3 ~7 o- g5 t% k  zError (10170): Verilog HDL syntax error at Eeler.v(16) near text "(";  expecting ";"+ J7 W% B. Z& W+ r( Y- P  e
Error (10170): Verilog HDL syntax error at Eeler.v(33) near text "(";  expecting ";"
* G0 |; ^" W/ G( @. ^0 [Error (10112): Ignored design unit "Euler" at Eeler.v(1) due to previous errors
回復(fù) 支持 反對

使用道具 舉報

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

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

本版積分規(guī)則


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