电子产业一站式赋能平台

PCB联盟网

搜索
查看: 2298|回复: 1
收起左侧

IP核的使用有什么要求吗

[复制链接]

571

主题

910

帖子

4781

积分

四级会员

Rank: 4

积分
4781
发表于 2022-11-3 13:51:18 | 显示全部楼层 |阅读模式
刚接触Verilog不久,需要做个FPGA解二阶微分方程。
! Y0 y( \+ z7 r# y" e2 e2 c我用欧拉法解得,但调用IP核总是出毛病# P" ]! O  w  V/ f
比如2 E1 l) H! E& K) Q2 I, D0 H2 p
Error (10170): Verilog HDL syntax error at Eeler.v(22) near text "add_sub_inst";  expecting "<=", or "="
" ]" _/ p: J) a# J+ e0 r: a: kError (10149): Verilog HDL Declaration error at Eeler.v(25): identifier "mult_inst" is already declared in the present scope4 o) a7 X7 \1 R* \' K
Error (10149): Verilog HDL Declaration error at Eeler.v(26): identifier "add_sub_inst" is already declared in the present scope
5 w3 T) \9 x& v9 _9 NError (10149): Verilog HDL Declaration error at Eeler.v(27): identifier "mult_inst" is already declared in the present scope! j1 F/ j+ D( j6 k
Error (10149): Verilog HDL Declaration error at Eeler.v(28): identifier "add_sub_inst" is already declared in the present scope
! w1 u- T0 c1 |% H7 v! dError (10170): Verilog HDL syntax error at Eeler.v(30) near text "$display";  expecting "endmodule"
/ ]5 y1 h( Z- MError (10759): Verilog HDL error at Eeler.v(30): object x declared in a list of port declarations cannot be redeclared within the module body
' D+ i: {% J! kError (10759): Verilog HDL error at Eeler.v(30): object y declared in a list of port declarations cannot be redeclared within the module body
/ z) W# G4 j! tError (10759): Verilog HDL error at Eeler.v(30): object z declared in a list of port declarations cannot be redeclared within the module body
0 l" a8 r8 m; CError (10170): Verilog HDL syntax error at Eeler.v(30) near text ")";  expecting ";", H3 T5 Y) R; i$ }( w6 t
Error (10112): Ignored design unit "Eeler" at Eeler.v(1) due to previous errors
/ T2 B3 b7 {0 k6 y编的源程序这样
0 y. s- q9 }5 A4 O  t& qmodule Euler& f9 V% }0 H: \5 X  ~
(
+ {  `/ ]5 a' x! x) M  Pinput wire           clk,* j( A5 g) [9 k7 x" s6 Z- \
input wire    [31:0]   x,      //定义输入量,单精度32位浮点数
: X0 Y' m6 e* _0 M# U* ?input wire    [31:0]   y,
* }- L/ M1 L8 t  _8 g: t2 oinput wire    [31:0]   z,+ y2 I9 J9 t/ Q# l& m
input wire    [31:0]   h,
7 L5 k8 m* @. j9 v2 B) d5 youtput wire    n1! h! [! G9 a( \0 P3 H* I, E3 j6 F
);5 R' }; I% u  k8 Y* X: K: l2 y$ a
1 Z! y2 b& m/ A# Q
4 R5 R4 O6 p6 S  s0 Q' V: q
4 N  @6 A. _: ~5 C5 N

6 x0 A. S( A3 R0 Yreg[31:0] z11;# x0 N1 }4 e, K* l* o$ r
reg[31:0] z1;, c8 H' d- Y8 A, ^
reg[31:0] y11;
! p2 A( f3 [3 _! n6 J% preg[31:0] y12;9 F0 S8 G% d& @; ]
integer n;
6 J7 s' e- \0 J
9 @4 ]% p9 ]% S' D) E& k$ y0 H+ ~  K6 n- c- T/ [
initial
1 D, Y2 W. q7 L //开始迭代
9 u* r( C% _1 o7 \$ Cfor (n = 0; n < 10; n=n+1)      7 }+ Q# W, U( d  x) N( V
add_sub add_sub_inst( .clock ( clk),  .dataa ( x ),.datab ( h ),.result ( x ));
6 [* O. Y8 y" X; w- Xmult mult_inst( .clock ( clk ),  .dataa ( x),.datab ( z ),.result ( z11 ));             / W, \9 ]5 t/ i$ l
add_sub add_sub_inst( .clock ( clk),  .dataa ( z11 ),.datab ( y ),.result ( z1 ) );      
+ _6 }( E2 K" v( M7 @mult mult_inst( .clock ( clk ),  .dataa ( h),.datab ( z),.result ( y11 ) );         
7 f; M$ A- g2 q5 [6 O# ]3 u1 iadd_sub add_sub_inst( .clock ( clk),  .dataa ( y ),.datab ( y11 ),.result ( y ) );   3 N) f" ?, M1 B* a: P5 J
mult mult_inst( .clock ( clk ),  .dataa (h),.datab ( z1 ),.result ( z12 ));         " I' B, ]" O; e
add_sub add_sub_inst( .clock ( clk),  .dataa ( z ),.datab ( z12 ),.result ( z ) );
0 \$ W- y7 u6 }0 p6 @9 x* x) M: U, v: t+ k7 i- y

$ r( A5 e) K: E( p: s4 E$display ("n=%d x=%b  y=%b z=%b\n",n,x,y,z );
! P/ J6 f7 b9 r. a* z; f  Lendmodule- y. p+ s3 R7 [* n0 H( t
想问一下,是IP调用有问题吗?还是IP核不能在循环或函数里调用
回复

使用道具 举报

591

主题

959

帖子

5157

积分

四级会员

Rank: 4

积分
5157
发表于 2022-11-3 13:51:56 | 显示全部楼层
用另一种方式也有问题7 F. Z+ B, f% S7 {. T+ ]1 T( h  D$ ~
module Euler
1 _' o, Q0 }$ i  m(
. v' m* l; n. D3 _% Dinput wire           clk,! d/ o8 X- y' O+ s
input wire    [31:0]   x,      //定义输入量,单精度32位浮点数
, P& R4 i. k4 l8 dinput wire    [31:0]   y, 7 g$ l. U% J9 m) Y$ Q4 d
input wire    [31:0]   z,* Y  x$ z  G1 `' R$ k
input wire    [31:0]   h,
4 l% e6 X# e- W! q) S! z3 ?3 aoutput wire    n18 a$ Z. o- m2 J+ c
);  ~) y' {5 V& h
7 S; ]+ z$ I4 s& ]
8 V5 H: _& y7 Z) J4 K4 `0 d: m
function   [31:0]   g;//加法器函数
& j7 w% o( X- ]5 R  input   reg   [31:0]   x;+ x' u4 h, O& ]# I( }( A
  input   reg   [31:0]   y;
2 I( ^  {3 o$ n          reg   [31:0]   z;  
6 o5 @+ Q( E5 K& u, tbegin         
' D6 b$ e: H" kadd_sub add_sub_inst( 1 Z' f( g9 |. C- Z
   //调用浮点数加法IP3 z& m6 V" Y+ b3 S! Z1 f
.clock ( clk),
; P7 O, z# t1 d( e9 `9 y.dataa ( x ),
& z6 d6 R: M0 K.datab ( y ),) B+ n3 s5 E+ a" U6 g& K) O  B
.result ( z )2 I% o& I2 o) n( m( N
    );: z0 E3 ]: h# U1 ], x
    g    =    z;
7 u& R* m0 S! z" ~8 Q' D& jend
- |; c! @. b) [4 wendfunction
7 _# K) d* a& X1 ?" y2 s$ P5 O6 n/ ^4 s- W0 M
  E. V3 d0 v/ S. S( H

- }( t. z& H6 x' U- U4 [* M# a& G/ s9 K7 m9 K& m# @# i
function[31:0]f;       //乘法器函数
0 g% h9 S9 W2 V1 c/ d2 _  input reg [31:0]x;
$ |0 [/ o5 T6 H4 u% g6 \* V5 y  input reg [31:0]y;! m$ k  J  Z: f* b5 r/ P  @# I! X
   reg [31:0]z;% e0 S0 k  q& G; `; U5 y1 b5 `
begin   
4 v% j9 E$ v! I! |# a' [( }  Umult mult_inst(
7 q6 c$ i. z4 A9 \2 C5 N  //调用浮点数乘法IP
1 K5 G8 R' [& O( O% X; W  s7 d; L.clock ( clk ),
. `- o0 K) c8 X! q8 T$ M3 z; M.dataa ( x),! [8 c1 K3 i( l& W2 ]8 t7 Z
.datab ( y ),
6 c5 Q0 P! {! g8 T4 Y, W& I) |: b3 C.result ( z )
6 n$ S6 B5 o( m( {  Z3 q, c );1 p& m  p. o9 x0 v! f% p; N9 x
  f = z;, v6 ~. B2 c6 X- y
end- d, R/ c- d! Y" S3 K2 l. C
endfunction% Y4 ]3 [2 D- W$ s2 j/ z
$ T! w6 ~' t. z( \+ f2 D
" P7 C/ G! r$ o/ m# ^/ ~8 x
reg[31:0] z11;0 Q& X7 B5 D5 c( R' O
reg[31:0] z1;$ m& F) N. e. A3 h2 E
reg[31:0] y11;' V: N$ q  O; g- L- k
reg[31:0] y12;
& M2 R2 y: ?! r3 T/ f" A. g% Yinteger n; & a$ J. L4 U5 o1 k
5 l0 n4 I% b" d  K# y# j. x1 _
! j% ]  H( Y$ r/ D& j( P% s$ \
initial
: f  D( P  L$ K1 |* tbegin
$ B# p9 a& `6 c8 q6 @4 W                     //开始迭代
0 N6 T' B: b2 v- rfor (n = 0; n < 10; n=n+1)9 m" U7 H# s8 Q$ y" c
      begin
% E0 s0 m4 g4 F% \; t        x   = g(x,h);/ l& m2 u% K4 I, Z  p0 V
        z11 = f(x,z);. r$ _' ?" Q0 f9 E: R2 I
        z1  = g(z11,y);
& K$ Z' E- {2 u; ^9 p        y11 = f(h,z);# i2 F; z4 s4 Y: q8 x
        y   = g(y,y11);/ P1 q, }0 V; l- O3 b
        z12 = f(h,z1);8 X* x7 x* U8 ?8 O
        z   = g(z,z12);
1 m! k. b$ {  u) b5 J       $display ("n=%d x=%b  y=%b z=%b\n",n,x,y,z );. I) h: f; e9 a+ z* ~& _. {5 y
      end9 Z) v* F0 `* p, H  ?
end
# h! R; A" Q/ N9 }endmodule3 s" U- V8 r* m: m/ V5 E
错误报告是. ]3 U- d: v: A: f% k2 x7 [
Error (10170): Verilog HDL syntax error at Eeler.v(16) near text "(";  expecting ";". ?9 b+ [& [1 H# ]( S! K: E- g
Error (10170): Verilog HDL syntax error at Eeler.v(33) near text "(";  expecting ";"- E. @  i' \7 }, a3 ~0 ]0 d7 H
Error (10112): Ignored design unit "Euler" at Eeler.v(1) due to previous errors
回复 支持 反对

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


联系客服 关注微信 下载APP 返回顶部 返回列表