电子产业一站式赋能平台

PCB联盟网

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

IP核的使用有什么要求吗

[复制链接]

571

主题

910

帖子

4781

积分

四级会员

Rank: 4

积分
4781
发表于 2022-11-3 13:51:18 | 显示全部楼层 |阅读模式
刚接触Verilog不久,需要做个FPGA解二阶微分方程。
1 H& W- w: Y* C1 H; O我用欧拉法解得,但调用IP核总是出毛病1 q% g6 J; x0 O9 c* K; I" f; h% _
比如8 J8 r8 z5 r# e+ P8 f( N
Error (10170): Verilog HDL syntax error at Eeler.v(22) near text "add_sub_inst";  expecting "<=", or "="
! s/ I0 g. F- I4 Y2 ^; u4 pError (10149): Verilog HDL Declaration error at Eeler.v(25): identifier "mult_inst" is already declared in the present scope6 ^& W+ F, n6 I
Error (10149): Verilog HDL Declaration error at Eeler.v(26): identifier "add_sub_inst" is already declared in the present scope
& U0 n$ B1 d+ uError (10149): Verilog HDL Declaration error at Eeler.v(27): identifier "mult_inst" is already declared in the present scope1 `6 h1 K; [) |8 x; X& S
Error (10149): Verilog HDL Declaration error at Eeler.v(28): identifier "add_sub_inst" is already declared in the present scope. Q/ m( |6 O' q, o$ T' p% k
Error (10170): Verilog HDL syntax error at Eeler.v(30) near text "$display";  expecting "endmodule"
. t7 h/ r) a% j2 T0 j( k4 RError (10759): Verilog HDL error at Eeler.v(30): object x declared in a list of port declarations cannot be redeclared within the module body
) Y& Q0 a( T/ AError (10759): Verilog HDL error at Eeler.v(30): object y declared in a list of port declarations cannot be redeclared within the module body* p( c9 d2 m5 j. b9 k5 n
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: y& W% j/ E. r6 E6 e6 S
Error (10170): Verilog HDL syntax error at Eeler.v(30) near text ")";  expecting ";"5 f8 g0 r+ M) t( E$ c- a
Error (10112): Ignored design unit "Eeler" at Eeler.v(1) due to previous errors; P/ R, J- S: J1 p, c/ ]8 p9 H, ~! n( t
编的源程序这样
5 G/ q% N/ ]% W- |9 L4 ]0 n' h  Nmodule Euler( O2 Y0 F) o: r9 M! s
(
' Q; a; k/ P4 n8 @  |5 N0 Dinput wire           clk,) E" D/ a1 S* b" R
input wire    [31:0]   x,      //定义输入量,单精度32位浮点数
0 n1 X# l/ ^( _; o% `input wire    [31:0]   y, 2 w* x  G+ s1 f- X
input wire    [31:0]   z,# K8 a* `& I' P! R. _: `* R; `/ _. [) w
input wire    [31:0]   h,
- \5 q$ Y2 A5 G/ q7 U' l" ioutput wire    n1$ w# e3 b$ U* I9 u' ^* \" p& v1 B
);
) _5 i% M1 \' ?
* {* r0 M# P- P8 E  X( d
" [& B# T5 i( K# I# @8 o, p
# G2 F! l1 [- D: `+ ]. o1 [
& I- }- x- U/ ^* s" L, ^! v$ E3 yreg[31:0] z11;
5 Q% e4 l" p5 ~reg[31:0] z1;! e' X) M# ~1 a9 w. b" }. f
reg[31:0] y11;
9 ~$ _" U! g2 b& i% y3 Xreg[31:0] y12;* M5 m! X& a+ ]8 [9 S  [" Q
integer n;
" @4 d! Q7 k8 I& H) e
5 C; y9 x2 M& h) m
, k+ i" G0 R9 D0 ^2 n3 einitial2 I& z7 Y2 u( a8 C  w  V
//开始迭代
7 C0 L6 c. ~3 a7 n  C; X  S# Yfor (n = 0; n < 10; n=n+1)      
% O* N# E4 a# [, I. j' |5 Madd_sub add_sub_inst( .clock ( clk),  .dataa ( x ),.datab ( h ),.result ( x )); & ^6 j# r# R5 {
mult mult_inst( .clock ( clk ),  .dataa ( x),.datab ( z ),.result ( z11 ));            
/ |3 ~% ?9 O5 h/ _; ?/ `add_sub add_sub_inst( .clock ( clk),  .dataa ( z11 ),.datab ( y ),.result ( z1 ) );      
' B( `! C6 b4 smult mult_inst( .clock ( clk ),  .dataa ( h),.datab ( z),.result ( y11 ) );         + e6 ?: G: w4 I$ p, v( `
add_sub add_sub_inst( .clock ( clk),  .dataa ( y ),.datab ( y11 ),.result ( y ) );   
! D) ^' i) S2 u9 Mmult mult_inst( .clock ( clk ),  .dataa (h),.datab ( z1 ),.result ( z12 ));         ! I0 I0 c" F( N: x
add_sub add_sub_inst( .clock ( clk),  .dataa ( z ),.datab ( z12 ),.result ( z ) );* A0 V0 H/ J2 P7 ?0 x( K* c% E3 m& p
9 ]- M5 X3 l' D1 D8 b1 A! F- d

' Z3 g0 `  L/ K  o$ ^$ V/ j$display ("n=%d x=%b  y=%b z=%b\n",n,x,y,z );- V/ C' x* p, v& i* I8 S
endmodule- s$ q7 S8 s) N/ s7 P
想问一下,是IP调用有问题吗?还是IP核不能在循环或函数里调用
回复

使用道具 举报

591

主题

959

帖子

5157

积分

四级会员

Rank: 4

积分
5157
发表于 2022-11-3 13:51:56 | 显示全部楼层
用另一种方式也有问题; ~4 k* e0 G+ U. Y, x1 a. P
module Euler
) I$ V% F) C2 q; Y. H(
1 B- ^1 @3 ]* cinput wire           clk,0 f1 g. Q  o# }( h  ~) Y# T
input wire    [31:0]   x,      //定义输入量,单精度32位浮点数3 A( t$ x" o8 w
input wire    [31:0]   y,
0 t0 ]& ~, m! V) n. ~4 I- X8 M4 H6 N4 L$ Binput wire    [31:0]   z,! m3 C% w" j8 c: Q/ m" o
input wire    [31:0]   h,
  ^% d; {; m& `- l- aoutput wire    n1
$ |( ?  q: f! i) `2 Q+ h);
- F$ w5 g3 q) g2 c( U$ k6 B  s4 T: _1 n0 x6 b
0 V& N- Y. @3 w" K1 }+ g! \6 V) U
function   [31:0]   g;//加法器函数
9 A2 p( l) d% x5 r- f% K  input   reg   [31:0]   x;
0 y8 \$ p0 l0 d0 B1 L4 K0 A  input   reg   [31:0]   y;( Q, v# D/ v7 t! ?' r. q  w( I9 j
          reg   [31:0]   z;  
* N5 y: t* B2 `( X% ^! ]begin         
6 z7 G$ a! l& I$ f' q- `4 Vadd_sub add_sub_inst(
% M1 {( T1 c# |( I   //调用浮点数加法IP
  S+ g+ s+ I1 Y! f3 S. J.clock ( clk),, O9 O" R( m% L
.dataa ( x ),
' |, P$ ?- P* r7 u* q9 t.datab ( y ),3 e6 p6 F9 X# f( z9 l
.result ( z )6 Y( o2 [; O/ A7 }4 X) G2 y* ^
    );9 c$ h9 d$ A9 k' w9 _; C
    g    =    z;" M  X! q0 f5 B
end6 A3 K! i! B* y- P- B/ j2 A6 f
endfunction. V% L4 c3 k: r' W7 p8 C0 R1 |
8 Z, g1 _5 G& k% K1 j

9 H( k# V7 ?! V+ T$ p
/ X5 ?0 K2 M8 ]& M, c; f- I/ [8 e: E7 W  }1 |4 v8 c* Y  s
function[31:0]f;       //乘法器函数
, N. l% V+ Y/ j. `: o- l  input reg [31:0]x;
" ]/ J/ i% Y! a6 g( c  input reg [31:0]y;- Q' E8 T* Z1 |4 p: ?/ ^6 O
   reg [31:0]z;: q5 D  D( Z+ \% ?
begin   
" L- \# x# P$ z" q" [mult mult_inst( 1 V9 s4 p4 O- H. f1 q1 v
  //调用浮点数乘法IP
* c, O# F  r) D* L.clock ( clk ),
9 F' n# w  O: {1 y2 R) a8 [2 D.dataa ( x),
' e- G5 m) d' r8 y$ C$ Z1 y.datab ( y ),* F4 }8 x9 B7 U" `, @
.result ( z )1 `4 {5 j, J  U0 |, r* M
);1 c, U2 u- m8 L% f
  f = z;
( N7 N3 ~! K; V5 d% x6 Q* x end
1 o! g* X6 [( G/ i, d7 t! \  H7 X1 \7 |endfunction, d( I% o' E: f0 C

* S) e1 i& }- w; d0 q6 K& a/ E
0 m: k: @# u! O; W/ yreg[31:0] z11;
0 C- W" E: i! F, C5 Jreg[31:0] z1;
3 ^: `$ P: j! [) Nreg[31:0] y11;
% {# }0 Q6 d2 ?0 U$ L& X7 ^reg[31:0] y12;3 f3 p* e( [. k+ d7 a8 k
integer n; 6 z" B# @; a3 C& Y- o, k8 L: E1 p$ M
! {7 P+ G' n0 X* A, J9 ]

1 V( i! |+ t3 d; uinitial: R! {7 e; \- [# ]# a6 M
begin' S' G, x7 }' Z* n! b
                     //开始迭代. w( t. a. P6 [, D( L8 E' f, W
for (n = 0; n < 10; n=n+1)
, `; |9 Q' P$ E2 Q, t1 _, M3 c. i* r      begin
/ k" `! q7 J! G' z% I# I        x   = g(x,h);$ A8 c  j& ?* n1 L: Y9 L5 v
        z11 = f(x,z);% c: b  P* ]; [  O0 p/ R
        z1  = g(z11,y);
1 d8 [! }9 V/ c" c  r2 o6 B        y11 = f(h,z);
$ b/ Q  y" v5 |        y   = g(y,y11);* `1 }5 a* r! v6 D6 u
        z12 = f(h,z1);
5 m. g* e( z4 w        z   = g(z,z12);
1 g* v4 i+ n  V" D: i) z) x2 n       $display ("n=%d x=%b  y=%b z=%b\n",n,x,y,z );
( {6 y' M# W. I, X5 t1 j, m  |      end
8 `8 \+ e9 d1 u3 x2 }3 {end6 N3 l* v7 d( m& W( D$ e
endmodule! j& ]2 |8 {$ `/ ?7 Z
错误报告是% E4 {% |* I: z6 P. P+ S$ B6 P! `
Error (10170): Verilog HDL syntax error at Eeler.v(16) near text "(";  expecting ";"
( j" z- R. A3 u0 g) Q" ^! HError (10170): Verilog HDL syntax error at Eeler.v(33) near text "(";  expecting ";"
. F. M( H1 w& |1 QError (10112): Ignored design unit "Euler" at Eeler.v(1) due to previous errors
回复 支持 反对

使用道具 举报

发表回复

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

本版积分规则


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