电子产业一站式赋能平台

PCB联盟网

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

IP核的使用有什么要求吗

[复制链接]

571

主题

910

帖子

4781

积分

四级会员

Rank: 4

积分
4781
发表于 2022-11-3 13:51:18 | 显示全部楼层 |阅读模式
刚接触Verilog不久,需要做个FPGA解二阶微分方程。
# j5 P# R, g! _: k9 a- A我用欧拉法解得,但调用IP核总是出毛病
0 I3 B# g/ Z6 k, ~/ k比如
" O4 o% B) m! S2 U/ J( gError (10170): Verilog HDL syntax error at Eeler.v(22) near text "add_sub_inst";  expecting "<=", or "="/ ]+ T( f: ?5 y; h8 `/ |+ }2 \
Error (10149): Verilog HDL Declaration error at Eeler.v(25): identifier "mult_inst" is already declared in the present scope
( h. `) r$ l* CError (10149): Verilog HDL Declaration error at Eeler.v(26): identifier "add_sub_inst" is already declared in the present scope
2 Z, a) _( d+ k& U3 {/ a! N) o) \Error (10149): Verilog HDL Declaration error at Eeler.v(27): identifier "mult_inst" is already declared in the present scope- ^  A8 H% W8 q; O+ _9 U
Error (10149): Verilog HDL Declaration error at Eeler.v(28): identifier "add_sub_inst" is already declared in the present scope
; y* z5 y4 A7 B( o# D3 y) |( o; d% OError (10170): Verilog HDL syntax error at Eeler.v(30) near text "$display";  expecting "endmodule"5 C# e( w7 r  P3 P) O3 c2 t
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& a0 J9 O, V3 [# ?9 O
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
7 \4 r/ i) e$ Y6 vError (10759): Verilog HDL error at Eeler.v(30): object z declared in a list of port declarations cannot be redeclared within the module body/ Q, r4 k: F$ I% W8 y  K1 H9 V! W
Error (10170): Verilog HDL syntax error at Eeler.v(30) near text ")";  expecting ";"5 H# W' `# c; V( y# o; G4 ~
Error (10112): Ignored design unit "Eeler" at Eeler.v(1) due to previous errors
, a& V( S0 w0 q' K0 c编的源程序这样
1 `9 M. I' t1 Z* z* X, N, v: h  s. Emodule Euler" @0 T- q8 `8 Y3 j4 @- o$ S
(
4 j6 J, b, B; s! h7 z4 rinput wire           clk,2 _# O( a' I9 P) w
input wire    [31:0]   x,      //定义输入量,单精度32位浮点数6 P& D# m3 ^5 s6 R5 w: w
input wire    [31:0]   y,
4 ~0 x- t) c0 G9 i8 F( l. \3 `5 ~input wire    [31:0]   z,0 ]9 v3 z( ^, j# Q4 f' O5 o
input wire    [31:0]   h,+ C- u2 ]! ~% s7 R0 E  J
output wire    n1
. _9 a% I4 C6 K);1 C( M. L/ \4 x6 E/ C9 n6 r
; t5 Z, \2 S; k4 f
0 N, W& O' t- a4 i

9 s, |+ h" o1 ^  l8 e; ]- I6 o9 G; x. x3 _5 m7 j
reg[31:0] z11;
  K6 ]  ^. ?/ c& |# A, o5 jreg[31:0] z1;- C# ^- ~2 S9 p  v1 J& `& u
reg[31:0] y11;
( |- R  n6 e( Z, ~reg[31:0] y12;# [% k6 k* ^/ m$ S* j
integer n;
3 ~2 p! |1 }1 I$ {
8 S- e) f  ]: e. Z* [8 c0 R5 z, L# _4 S" a
initial
7 j9 C$ Z! \$ M$ `' [2 o //开始迭代
. H' ~1 Q; h5 ^" dfor (n = 0; n < 10; n=n+1)      
% F% T1 j8 ?3 @7 l( {( v" gadd_sub add_sub_inst( .clock ( clk),  .dataa ( x ),.datab ( h ),.result ( x )); " [* e* N" o# n" k  {1 p1 s
mult mult_inst( .clock ( clk ),  .dataa ( x),.datab ( z ),.result ( z11 ));             " F+ ^7 Q$ T  F( V# d0 z2 i
add_sub add_sub_inst( .clock ( clk),  .dataa ( z11 ),.datab ( y ),.result ( z1 ) );       8 W5 `" i3 p& ^4 ]* `: C
mult mult_inst( .clock ( clk ),  .dataa ( h),.datab ( z),.result ( y11 ) );         - W; d" @* \2 L* s5 U" x
add_sub add_sub_inst( .clock ( clk),  .dataa ( y ),.datab ( y11 ),.result ( y ) );   
# u* _$ I5 }8 o( vmult mult_inst( .clock ( clk ),  .dataa (h),.datab ( z1 ),.result ( z12 ));         
) u9 [% I9 L/ Q" ]" e. kadd_sub add_sub_inst( .clock ( clk),  .dataa ( z ),.datab ( z12 ),.result ( z ) );
4 x/ r6 i4 r, x
# {$ K9 n' R: Y1 T* \
. t5 x: w  S& ?9 z6 B" s$display ("n=%d x=%b  y=%b z=%b\n",n,x,y,z );8 {2 d2 F: g3 ]% d8 s# }: i
endmodule1 ~7 s) j5 r4 i+ D2 {9 t" R, \+ z
想问一下,是IP调用有问题吗?还是IP核不能在循环或函数里调用
回复

使用道具 举报

591

主题

959

帖子

5157

积分

四级会员

Rank: 4

积分
5157
发表于 2022-11-3 13:51:56 | 显示全部楼层
用另一种方式也有问题
2 u% Y* {& u# x3 @module Euler8 f' C4 n  K0 E' O3 \2 \$ K
(
* a7 ?) k: Z4 g1 [$ R+ ?" Einput wire           clk,
  l. U8 J% D# V2 t" Vinput wire    [31:0]   x,      //定义输入量,单精度32位浮点数
4 c2 \8 F# u* qinput wire    [31:0]   y, / e/ e0 i# Q! C4 d4 i! l/ s
input wire    [31:0]   z,
8 Y! C$ |9 b5 K/ B" Linput wire    [31:0]   h,5 J) D; C0 F6 C& A8 b( w
output wire    n1
; N% j% }1 b' B9 R' z);1 Y9 P( c+ \2 B' ]: k5 V! v- b

5 B) P' p3 u% J8 W
2 s6 y3 [$ h( E& A0 Bfunction   [31:0]   g;//加法器函数
( A" X2 Q! B' W3 u, x  input   reg   [31:0]   x;
2 o! a/ Z% ~8 x  }9 n$ j  input   reg   [31:0]   y;0 }4 R& T  \: X- ^7 a( N" _0 t
          reg   [31:0]   z;  , e. J0 T, m+ t2 e
begin         
+ ?& k# |) y  `# H4 d3 ^  q: Padd_sub add_sub_inst(
$ t$ r  G) L2 n4 l  E   //调用浮点数加法IP( d! n$ B, A- ?, U1 A& ]
.clock ( clk),7 G" l: a/ p$ ?: F
.dataa ( x ),# }' c: g- W0 Z( F  h- M
.datab ( y ),
& Y9 a- a1 ]: a6 T.result ( z )! ]$ [% ^8 D! z* C
    );
, t! D- x$ a5 @! b+ @6 c" v& n    g    =    z;
" h" v" v/ i6 x% K. X2 Q0 ]# Gend: U% r* W  G9 M1 o# x+ S
endfunction
/ R9 |" P$ j; v+ s; b( k" m" y9 n! J% C

; R) g! x6 }" \4 C. w7 q; b' M$ I8 M; ?
/ k; {* X; n6 J" B/ o9 W+ f. N( B
function[31:0]f;       //乘法器函数8 ]/ v9 R8 H" t' A; X1 T: e/ H) O
  input reg [31:0]x;
9 o: p! [$ d$ u' I  input reg [31:0]y;
1 x" L4 `7 Y0 M" L: j& S# ?   reg [31:0]z;
- B. u& p5 i. r4 X1 ~2 M2 r) l$ Sbegin   . \! o) V% E1 x8 w  w
mult mult_inst( ( Q9 Z. y3 U' @$ ?2 T0 W/ G
  //调用浮点数乘法IP, T& m6 x- b/ d0 w. [8 J0 H+ N2 n
.clock ( clk ),
( Y% f" W7 z' p5 Z5 U9 X.dataa ( x),
8 P" G& n9 |: ~& v) b1 Y6 \" n. S$ ~.datab ( y ),' F' _) ~2 O  C' S4 ^& {
.result ( z )
4 P: M5 T7 {( M- _: C );. Y' }4 o0 r, ?* V$ e. c
  f = z;, D: v3 e( `" o5 H  T
end
" n. i. z" `9 v0 pendfunction
0 X9 a# k9 I9 d! L. I5 p% t5 [& V- u% c7 \9 a( s) S
& x% B) ]+ W$ K8 l9 S
reg[31:0] z11;- r( I7 v" N7 I4 J  M& Q6 D
reg[31:0] z1;6 U; L) J+ E( @* u
reg[31:0] y11;% V! V( P: i, p' j4 \
reg[31:0] y12;+ K* N. T  \9 y- b
integer n; 9 a$ B3 ^5 e; A$ c6 g6 \$ j" X; D

: z1 Q1 E  I0 i; g. O
: R" V8 u% x% L, e* W, Jinitial3 e! N/ T( X4 O+ B' S' [1 R$ l
begin& f) O2 S* H7 N9 o- }& h" r. T
                     //开始迭代: I- h$ }0 T: `" A% E- V7 L
for (n = 0; n < 10; n=n+1)
/ q4 o6 W2 q) X2 c8 e5 R      begin1 V7 L1 ^$ ~+ |. s# ?/ M, |
        x   = g(x,h);" C* l( f0 B6 B# p1 K9 _5 y
        z11 = f(x,z);5 |# V% q* t6 b" w7 G
        z1  = g(z11,y);
$ Z: y4 D: v- g: Y- e        y11 = f(h,z);9 b- N/ l+ D% t( R- w
        y   = g(y,y11);
2 R) I- c/ @* f( ?" d/ V- @        z12 = f(h,z1);  b/ t' S$ \& r* R9 W/ ^
        z   = g(z,z12);2 b; D. |- g# }+ s0 i  V0 R$ \5 q
       $display ("n=%d x=%b  y=%b z=%b\n",n,x,y,z );
% }0 R/ x5 s# j2 N4 I- W      end
: c8 W7 R- }0 \; dend
7 `  `4 r& ^( x1 nendmodule8 Z4 \, ~+ J. k" n% l- o, {
错误报告是
) A  ~! f7 k, Y7 b1 |1 gError (10170): Verilog HDL syntax error at Eeler.v(16) near text "(";  expecting ";"
* e9 E1 j" Y( r3 ]% ]+ E( j5 FError (10170): Verilog HDL syntax error at Eeler.v(33) near text "(";  expecting ";"
! k( A' d% q; Z! e3 v/ _/ T  f6 tError (10112): Ignored design unit "Euler" at Eeler.v(1) due to previous errors
回复 支持 反对

使用道具 举报

发表回复

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

本版积分规则


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