电子产业一站式赋能平台

PCB联盟网

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

IP核的使用有什么要求吗

[复制链接]

571

主题

910

帖子

4781

积分

四级会员

Rank: 4

积分
4781
发表于 2022-11-3 13:51:18 | 显示全部楼层 |阅读模式
刚接触Verilog不久,需要做个FPGA解二阶微分方程。& E! w( V2 Z4 o9 t8 r
我用欧拉法解得,但调用IP核总是出毛病+ B7 y2 C# ^* Y1 R' ]# N2 V' A, x! l- e& z
比如
+ z1 j3 D6 [, c% [  M/ lError (10170): Verilog HDL syntax error at Eeler.v(22) near text "add_sub_inst";  expecting "<=", or "="
7 |. X% i/ E4 K/ w' [9 y$ mError (10149): Verilog HDL Declaration error at Eeler.v(25): identifier "mult_inst" is already declared in the present scope  X% z, c2 a/ V7 \" S1 n
Error (10149): Verilog HDL Declaration error at Eeler.v(26): identifier "add_sub_inst" is already declared in the present scope
8 B, h# m* q4 w6 t/ S: P" SError (10149): Verilog HDL Declaration error at Eeler.v(27): identifier "mult_inst" is already declared in the present scope
7 Y; u' h9 G/ o& C- [3 v  D% nError (10149): Verilog HDL Declaration error at Eeler.v(28): identifier "add_sub_inst" is already declared in the present scope
9 [0 y% `4 M. T4 J% a5 n- v/ AError (10170): Verilog HDL syntax error at Eeler.v(30) near text "$display";  expecting "endmodule"
) B2 w9 `) k+ I) x3 @1 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
6 o$ b6 e! r- @( t) N1 ~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
- o  B0 p( H8 X" }" DError (10759): Verilog HDL error at Eeler.v(30): object z declared in a list of port declarations cannot be redeclared within the module body# L8 a# z9 {' x. K+ I4 x6 k
Error (10170): Verilog HDL syntax error at Eeler.v(30) near text ")";  expecting ";"9 S" W8 M8 V# G; }# P7 r& ^) V0 h
Error (10112): Ignored design unit "Eeler" at Eeler.v(1) due to previous errors; f4 `7 R% @% {# t
编的源程序这样" R  k! y( L0 o/ h+ L/ J. ?
module Euler2 Q0 B# d+ _0 E, s1 l$ {
(1 g% t. X; D1 j6 C; Y1 Y1 H) p
input wire           clk,
  o7 E- r' Z2 }; a) K* x; y, ^input wire    [31:0]   x,      //定义输入量,单精度32位浮点数
7 X# j; Z+ C$ q0 [4 b+ u3 U% L  k, Iinput wire    [31:0]   y, 7 r+ b" ?! c% `# q/ B
input wire    [31:0]   z,
, w# M4 A, P; n# y1 j4 Q. M3 J- Sinput wire    [31:0]   h,
$ I8 l- U# P( v0 L9 g9 ]) Loutput wire    n1
8 ]! ?9 f6 m; Q( J& L1 e5 D" ^( e);
% v9 m5 l* @) Q1 H! l, \( F$ V1 G# `) e- u/ w: N
* t- l! j- S# r

. [" _* L4 ]( Y1 {6 @3 v" j( G0 e1 Y' K& N1 N* k" \; y' `3 D0 n9 w
reg[31:0] z11;- y0 `. p! B1 k3 w5 U
reg[31:0] z1;
7 i# t9 L) i% n/ p% Q' areg[31:0] y11;4 p" _, {$ s' `/ m5 f; F
reg[31:0] y12;
1 X; I9 P0 d6 a' Zinteger n;
  f0 q; R3 y- ~# B- V3 u3 t( z. L1 a+ H# b7 r  q: y; I
$ Z0 V. w+ i& Q. z0 d0 P4 w
initial
6 A- o3 Z9 i3 b  X //开始迭代# {/ ^1 p, T: n* Z/ P
for (n = 0; n < 10; n=n+1)      5 s2 L7 m0 i# w% E  A( V8 ?' h
add_sub add_sub_inst( .clock ( clk),  .dataa ( x ),.datab ( h ),.result ( x )); * R& {( {( F6 h9 V4 ]) p5 c
mult mult_inst( .clock ( clk ),  .dataa ( x),.datab ( z ),.result ( z11 ));             7 w6 }  z' C) Y8 p9 w# L
add_sub add_sub_inst( .clock ( clk),  .dataa ( z11 ),.datab ( y ),.result ( z1 ) );      
' h$ \1 R3 _9 Z" z  B8 mmult mult_inst( .clock ( clk ),  .dataa ( h),.datab ( z),.result ( y11 ) );         " v0 U- B. l0 z$ J
add_sub add_sub_inst( .clock ( clk),  .dataa ( y ),.datab ( y11 ),.result ( y ) );   3 e7 y4 I+ F! Q" \9 `
mult mult_inst( .clock ( clk ),  .dataa (h),.datab ( z1 ),.result ( z12 ));         9 ]( w; Q) O7 {+ n8 \: i& P; D. |
add_sub add_sub_inst( .clock ( clk),  .dataa ( z ),.datab ( z12 ),.result ( z ) );
4 O- G& j) X$ a! m) W$ a- H
, f8 ^  O* h$ J; `, Q: s& k5 t' N9 U& [# F
$display ("n=%d x=%b  y=%b z=%b\n",n,x,y,z );
; n! x6 X5 x  X8 G* }0 [) G+ b! u6 dendmodule" Z2 `0 s8 z4 ^2 {2 M% Y! k- U. ?
想问一下,是IP调用有问题吗?还是IP核不能在循环或函数里调用
回复

使用道具 举报

591

主题

959

帖子

5157

积分

四级会员

Rank: 4

积分
5157
发表于 2022-11-3 13:51:56 | 显示全部楼层
用另一种方式也有问题9 U2 e% q4 B3 l, C
module Euler. g  u5 V* S& f6 N0 D
(: Z* G6 j, h. G  j
input wire           clk,
" [* n( B# a# ^$ a4 y5 V8 C( Q9 K5 `input wire    [31:0]   x,      //定义输入量,单精度32位浮点数
. a0 x( _# T3 D* @1 B9 I% l) ~input wire    [31:0]   y, 1 Y0 `. d3 y3 o/ B. }* T7 X
input wire    [31:0]   z,6 u- v: o; D2 t3 m# a; K2 }' D
input wire    [31:0]   h,3 g+ T6 c1 ^1 R+ v6 j( p. Z
output wire    n10 B1 ]: h7 B/ Q2 W
);; G) ]# y9 y( K& L4 n
6 ~( S$ ]/ `% u% D  `8 w9 M9 \8 o0 W
9 A9 C3 f( V3 F; ]1 H5 i
function   [31:0]   g;//加法器函数2 J' ^7 J) U$ P& y$ x; u
  input   reg   [31:0]   x;! @$ b- {; G& m$ @$ b1 Q2 `4 B
  input   reg   [31:0]   y;
9 i& d. f6 p$ L- L% T) x8 r          reg   [31:0]   z;  
8 F8 z5 `7 c5 b( s. I3 y; obegin         
: o8 s# S% c7 f* u, Oadd_sub add_sub_inst( / g0 F- s$ s0 |( }! V
   //调用浮点数加法IP7 H. C7 N+ X, u2 ^) Q
.clock ( clk),
8 J9 j/ p! d) a9 z.dataa ( x ),
% o4 ]$ c% _) t6 |1 Z% o5 a# v) W& A.datab ( y ),7 M- Z0 D; o# E& l7 M
.result ( z )
. r  C1 g8 X; @: ^3 W8 i    );
: Q3 J. U3 Q+ d& }9 Z$ {# v    g    =    z;& H7 Y. Y: i- Q( P
end
; T9 r1 w  n9 Y' x$ Fendfunction
2 B% B% e$ J# G8 z: r1 J
$ Q, h8 E& {7 B) I3 i( L8 `& o0 x+ j6 z

1 t! e& {8 N0 |3 z2 u/ i7 p& ]# a# h$ p  ^
function[31:0]f;       //乘法器函数3 D& z+ Q: _; e7 O' Z' K
  input reg [31:0]x;
; X( r0 M- B7 h. |. n7 V  input reg [31:0]y;# ?7 R) E, x, M% ~2 p# v* N: C
   reg [31:0]z;( h, P) u; f# }2 d, g8 G! J
begin   0 U5 \' i& n, o' J" j$ F
mult mult_inst( % t( ]/ @- @+ a5 f) s$ T  K; |
  //调用浮点数乘法IP
! _- F$ s- [) g1 v, G.clock ( clk ),8 `. ?/ Y& m" `+ j  H: B* {) c* e
.dataa ( x),  v1 ^% k9 m* V5 @, V/ X
.datab ( y ),
8 L; v; _: r5 J! r1 Z.result ( z )
7 d& y. e8 j8 t4 x( R: b );
6 W+ n5 D5 d0 I: ^8 F# l. \; V* K  f = z;8 K# u) X) Y' ^/ N
end' j* _7 o8 v( F; U8 I" B( A
endfunction3 I8 X2 A7 ?- ~5 h/ s9 ?+ E0 o

2 f. I, f# b5 n& H! I' ?
1 \9 r: s  {# p9 g1 t- M7 Sreg[31:0] z11;3 _# d# i; K4 D2 p1 T  }) o
reg[31:0] z1;
% F2 `, _- F" C8 ~1 h5 vreg[31:0] y11;& X& ~' O; h6 q. f* q5 K
reg[31:0] y12;! p* _. W2 f2 E
integer n;
2 t7 r9 G  d2 w  T- d4 w- v% u+ q  x/ g& t8 t" P8 S# J
4 n5 a9 e5 w- L
initial5 Z: v* k7 _8 I6 V: g+ P0 T1 H2 c
begin
! D# l7 H* f/ }/ w9 n( w                     //开始迭代
6 e% e3 Q" Z5 W' Sfor (n = 0; n < 10; n=n+1)
9 T9 z, n+ N* i( T  N# M# K      begin7 w9 ~% ]# d% R6 U" p9 K' s
        x   = g(x,h);5 ?2 y7 c8 j5 c
        z11 = f(x,z);" ~/ w" E& E" k2 D" a3 u
        z1  = g(z11,y);( K0 J! E' u2 n& J6 g! T9 T! F' D
        y11 = f(h,z);2 V3 k9 M  a8 m( g0 K0 z1 l
        y   = g(y,y11);
* d3 T  W, y; x. z        z12 = f(h,z1);2 q" ^7 r# d# P; h4 A
        z   = g(z,z12);2 P. x+ Q& I+ C
       $display ("n=%d x=%b  y=%b z=%b\n",n,x,y,z );
8 E, m1 W0 u0 V8 L! G      end; f& B) Z6 F# e6 Z3 v4 ~
end
' w$ s0 t8 s+ K2 xendmodule4 l) a7 E% V$ l2 m. Q; u6 R6 I
错误报告是, g2 ^; g% R3 t2 m) ^& i- j# w( s
Error (10170): Verilog HDL syntax error at Eeler.v(16) near text "(";  expecting ";"
+ {( R7 e* E# H9 j4 Y3 x+ w7 |! ZError (10170): Verilog HDL syntax error at Eeler.v(33) near text "(";  expecting ";"
- C5 C( N8 y( A+ UError (10112): Ignored design unit "Euler" at Eeler.v(1) due to previous errors
回复 支持 反对

使用道具 举报

发表回复

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

本版积分规则


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