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

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

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

IP核的使用有什么要求嗎

[復(fù)制鏈接]

571

主題

910

帖子

4781

積分

四級會員

Rank: 4

積分
4781
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2022-11-3 13:51:18 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
剛接觸Verilog不久,需要做個FPGA解二階微分方程。2 q/ ~' y: x1 }5 X$ K% J4 e- h3 j
我用歐拉法解得,但調(diào)用IP核總是出毛病1 x3 v8 N8 S' v7 n1 ~% _$ q
比如1 {2 C0 i: e- p
Error (10170): Verilog HDL syntax error at Eeler.v(22) near text "add_sub_inst";  expecting "<=", or "="" b; V  N9 G/ E. c- L: \
Error (10149): Verilog HDL Declaration error at Eeler.v(25): identifier "mult_inst" is already declared in the present scope
5 m9 p# V& W! M) U3 FError (10149): Verilog HDL Declaration error at Eeler.v(26): identifier "add_sub_inst" is already declared in the present scope
5 }: h+ j' L9 ^" l; iError (10149): Verilog HDL Declaration error at Eeler.v(27): identifier "mult_inst" is already declared in the present scope
" @( X  K4 _) S1 }; Z; a2 |9 P9 x* yError (10149): Verilog HDL Declaration error at Eeler.v(28): identifier "add_sub_inst" is already declared in the present scope6 t9 u3 l# _& O. B+ k8 a2 `
Error (10170): Verilog HDL syntax error at Eeler.v(30) near text "$display";  expecting "endmodule"
& i4 M6 m0 m8 }6 p5 @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, a7 z4 k+ I1 j, B( f
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  m$ ?6 B- E! B* B
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; b! @( p, @7 v3 y" r
Error (10170): Verilog HDL syntax error at Eeler.v(30) near text ")";  expecting ";"
8 u" m& \# ]3 B* PError (10112): Ignored design unit "Eeler" at Eeler.v(1) due to previous errors
  _) G- M0 b% k; z* s' E編的源程序這樣
3 t. y5 }! b/ f/ E" Rmodule Euler
9 ?7 q" w$ g& G: _/ F% b(1 o& f6 f+ a: u4 u8 R
input wire           clk,; ?: c1 x+ l& N) T
input wire    [31:0]   x,      //定義輸入量,單精度32位浮點數(shù)$ `4 z4 a( ?0 {2 X& b. }/ a0 A& p
input wire    [31:0]   y,
$ w0 {# b% e! V8 P  {! p# R8 Q5 p' xinput wire    [31:0]   z,+ {9 S% p3 O" W- K0 j
input wire    [31:0]   h,
# z8 f# v4 \/ y! P. Doutput wire    n1
# x; |. x& N( ^" Q/ _3 B, m);
( P0 Q! U+ d8 w) S& P8 d1 ~" P) u- v- k6 Z, A6 f7 u2 C
; f  Q: {9 {  u! Y/ b8 D8 X

& {9 n2 L5 }9 D: A" F: r" L; g6 W) i( T
reg[31:0] z11;) j3 z  S7 m2 p5 `& l# h
reg[31:0] z1;' U9 X6 a! G% G
reg[31:0] y11;
: _2 o1 L5 b) ?4 Y  i3 ]8 H& Kreg[31:0] y12;( k" B( c+ U8 x" D7 F6 N& B
integer n; 5 K2 m# [. h$ ^7 y/ S' W; D5 r
! X. s9 q7 R4 O
: @8 a" S2 }1 ]) U9 ?- w! l3 f
initial+ N: J1 o8 |, K4 U6 j% p4 ]& c
//開始迭代
5 ~0 W# D4 ^- J& ~2 b7 yfor (n = 0; n < 10; n=n+1)      1 z5 `' f9 V- g, P
add_sub add_sub_inst( .clock ( clk),  .dataa ( x ),.datab ( h ),.result ( x )); 8 I8 t1 O2 E' ^0 V
mult mult_inst( .clock ( clk ),  .dataa ( x),.datab ( z ),.result ( z11 ));             5 i2 O8 c2 K: D3 H. y
add_sub add_sub_inst( .clock ( clk),  .dataa ( z11 ),.datab ( y ),.result ( z1 ) );      
. H& j3 r- T# D1 N1 x) Rmult mult_inst( .clock ( clk ),  .dataa ( h),.datab ( z),.result ( y11 ) );         
4 q- d3 x! H' R* ~add_sub add_sub_inst( .clock ( clk),  .dataa ( y ),.datab ( y11 ),.result ( y ) );   5 O! p8 G: u5 w1 b
mult mult_inst( .clock ( clk ),  .dataa (h),.datab ( z1 ),.result ( z12 ));         
- f, n0 v7 p5 o/ ^, ^3 iadd_sub add_sub_inst( .clock ( clk),  .dataa ( z ),.datab ( z12 ),.result ( z ) );
- F( ?4 k: b$ l: n+ Z
5 {- x) E* o' X- _+ @5 T6 }3 x, F" b7 Y; L
$display ("n=%d x=%b  y=%b z=%b\n",n,x,y,z );! J3 |$ j0 e. ^! c
endmodule
( j& ?, O' J) X" k& u. I: V想問一下,是IP調(diào)用有問題嗎?還是IP核不能在循環(huán)或函數(shù)里調(diào)用
回復(fù)

使用道具 舉報

591

主題

959

帖子

5157

積分

四級會員

Rank: 4

積分
5157
沙發(fā)
發(fā)表于 2022-11-3 13:51:56 | 只看該作者
用另一種方式也有問題9 j1 `/ m2 q, E4 \( A7 W6 H' `
module Euler. n2 j8 b& x0 i# B8 z
(1 ~1 u- W  h0 J# x% Q8 C
input wire           clk,
9 S5 k3 K1 t5 Tinput wire    [31:0]   x,      //定義輸入量,單精度32位浮點數(shù), U, v( E1 N& }& o! Y8 `- L; T
input wire    [31:0]   y,
  ~7 D+ [8 X" n; O6 Iinput wire    [31:0]   z,
" o! e8 `) x  ~0 \) O3 ainput wire    [31:0]   h,
0 W9 g( ^- J' g/ B; O: Coutput wire    n1
. d7 }) b0 G& F" e% y0 e% _);/ X4 i; d8 |& t/ _0 e, b- s

  B2 f* C& a& p/ W( H$ P! o  D
* G' n7 X' ]8 U# J+ U" ?8 jfunction   [31:0]   g;//加法器函數(shù)
7 B% a9 u, }0 N' S  input   reg   [31:0]   x;
2 O* J% b: w6 L% ^4 ^, Z  input   reg   [31:0]   y;2 }* {9 `+ P8 h' O4 s8 _& c6 T
          reg   [31:0]   z;  
9 I6 A% @6 @" x: J/ S9 Nbegin          2 A4 c. n+ r$ s) U& Q! ~, r1 A: U
add_sub add_sub_inst(   S( d  J" T% D
   //調(diào)用浮點數(shù)加法IP
# P' ~" I( u: f- u5 B.clock ( clk),
1 c" y. m% n# Z& |' w" P.dataa ( x ),
" S. K! V% ]. i( \* m4 W1 q/ \2 K2 Y' b3 F.datab ( y ),
" U2 m/ ?$ _$ o, ].result ( z )# f6 D/ H6 {1 h# H5 C
    );/ X) |/ z6 d5 w. i
    g    =    z;
7 F( O9 k4 o! _. _4 T9 \8 oend
5 @: ~* |) p0 w6 L2 _endfunction
# e2 h- ?  X0 d, y. B9 Y0 i- G' y) y# f) F
5 [/ @4 a2 e5 Y2 B2 u( X- N. ]* j8 d  _

) N9 }+ c; {$ ~0 k+ g( [' j) t0 g2 @
function[31:0]f;       //乘法器函數(shù)
6 r! b+ E# a6 x% N7 P  input reg [31:0]x;: k4 U2 a$ Q7 R# h) {8 v& n9 U& _
  input reg [31:0]y;- n; R& }% Z. K( r' [4 T" L# T6 x
   reg [31:0]z;- k$ B1 g/ E6 L& P
begin   ! T. d( s- r7 e# n' p9 s
mult mult_inst(   _# v* ~; [3 C9 |2 J; O
  //調(diào)用浮點數(shù)乘法IP
% Q1 X* g: \/ o; f4 o) J; Z.clock ( clk ),
. V# Q- G" Y. @- _( M7 @.dataa ( x),5 ]: ?" A6 f7 x% p9 ^
.datab ( y ),
9 C7 l# M) T* E' O/ Y, w  M9 O  S6 f.result ( z ), b1 l1 h; L1 `& m9 S
);
6 |, U% O! Z+ |& C1 i0 i# o/ ?  f = z;3 ]% m+ q5 a1 P# i% l% D
end
! S6 O* A# i9 {/ U" s. `endfunction
% M' ]" f+ a4 f$ c0 f5 g% `+ n8 O
! Z- A4 `  E9 \/ S+ c
reg[31:0] z11;' _) R. O& s& `! e
reg[31:0] z1;0 t. }# W) [! ~
reg[31:0] y11;3 {* `. Z0 z8 q& R3 X
reg[31:0] y12;
7 K% [) c0 Z1 W/ m+ v( l) v( qinteger n;
+ x5 F8 u; o6 z( a+ m
2 L$ E+ W8 ~9 t# @" j8 f
" j( s, Q9 \* F* y* E: Finitial4 D8 |  e1 Q/ M) M" `
begin& o, w# n' i0 ?) A& Q
                     //開始迭代' c2 H) O3 h: C$ p1 z6 E
for (n = 0; n < 10; n=n+1)
6 N7 `) p; r9 R/ n, p$ I      begin8 ~2 y, e% o& s. \
        x   = g(x,h);
  [3 p6 |; k! \7 a        z11 = f(x,z);% w# _3 n3 F2 k
        z1  = g(z11,y);5 M7 z( n9 ], Q" N  T+ u0 V0 R
        y11 = f(h,z);
# e7 B3 ]! f0 J- }" H% {8 @        y   = g(y,y11);- t5 g2 I, T- }: _! W
        z12 = f(h,z1);. P6 E6 m; z) ]$ b; w0 p) L
        z   = g(z,z12);. M8 V* E- u5 V3 F) ?
       $display ("n=%d x=%b  y=%b z=%b\n",n,x,y,z );7 w+ D. p! A5 g; U: C
      end% j8 o! [6 N/ c  p" R
end$ P* k. x. y* r0 S- A' L, U
endmodule. Y: a  X3 E* O# u9 K# M. U
錯誤報告是
) L/ Y5 Q0 V" KError (10170): Verilog HDL syntax error at Eeler.v(16) near text "(";  expecting ";"( I4 c5 ^; {* _$ D) M8 B
Error (10170): Verilog HDL syntax error at Eeler.v(33) near text "(";  expecting ";"/ h( E0 [- B! P0 f0 ?
Error (10112): Ignored design unit "Euler" at Eeler.v(1) due to previous errors
回復(fù) 支持 反對

使用道具 舉報

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

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

本版積分規(guī)則


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