找回密码
 注册
关于网站域名变更的通知
查看: 243|回复: 2
打印 上一主题 下一主题

FPGA设计的IP和算法应用

[复制链接]
  • TA的每日心情

    2024-8-26 15:16
  • 签到天数: 1 天

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2020-6-27 07:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    EDA365欢迎您登录!

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
    基于IP的设计已成为目前FPGA设计的主流方法之一,本章首先给出IP的定义,然后以FFT IP核为例,介绍赛灵思IP核的应用。
    / h' |1 t* E6 p1 u& L5 _' L5.7.1 IP核综述
    " [% `; y% `. F: Z0 k1 j6 wIP(Intelligent Property) 核是具有知识产权核的集成电路芯核总称,是经过反复验证过的、具有特定功能的宏模块,与芯片制造工艺无关,可以移植到不同的半导体工艺中。到了SOC 阶段,IP核设计已成为ASIC电路设计公司和FPGA提供商的重要任务,也是其实力体现。对于FPGA 开发软件,其提供的IP核越丰富,用户的设计就越方便,其市场占用率就越高。目前,IP核已经变成系统设计的基本单元,并作为独立设计成果被交换、转让和销售。
    + p1 Q. p; `9 u( S9 @, d7 y从IP核的提供方式上,通常将其分为软核、硬核和固核这3类。从完成IP核所花费的成本来讲,硬核代价最大;从使用灵活性来讲,软核的可复用使用性最高。( 这部分内容前面已经阐述,这里再重申一下)
    . Y% b3 D  q7 v8 _: Z软核(Soft IP Core)
    3 s( }* J2 l/ V6 f3 ^软核在EDA设计领域指的是综合之前的寄存器传输级(RTL) 模型;具体在FPGA设计中指的是对电路的硬件语言描述,包括逻辑描述、网表和帮助文档等。软核只经过功能仿真,需要经过综合以及布局布线才能使用。其优点是灵活性高、可移植性强,允许用户自配置;缺点是对模块的预测性较低,在后续设计中存在发生错误的可能性,有一定的设计风险。软核是IP 核应用最广泛的形式。
    - q, n+ l  w, G9 {2 ?* U固核(Firm IP Core)$ a& h6 r* [& `' n. y4 i- M- `
    固核在EDA设计领域指的是带有平面规划信息的网表;具体在FPGA设计中可以看做带有布局规划的软核,通常以RTL 代码和对应具体工艺网表的混合形式提供。将RTL描述结合具体标准单元库进行综合优化设计,形成门级网表,再通过布局布线工具即可使用。和软核相比,固核的设计灵活性稍差,但在可靠性上有较大提高。目前,固核也是IP核的主流形式之一。
    ( d" n5 W- o' c. U" A硬核(Hard IP Core)5 |$ a4 F" Q2 m$ `
    硬核在EDA 设计领域指经过验证的设计版图;具体在FPGA 设计中指布局和工艺固定、经过前端和后端验证的设计,设计人员不能对其修改。不能修改的原因有两个:首先是系统设计对各个模块的时序要求很严格,不允许打乱已有的物理版图;其次是保护知识产权的要求,不允许设计人员对其有任何改动。IP 硬核的不许修改特点使其复用有一定的困难,因此只能用于某些特定应用,使用范围较窄。, x, ]% h3 W. s' m+ O" V
    IP Core生成器(Core Generator) 是Xilinx FPGA设计中的一个重要设计工具,提供了大量成熟的、高效的IP Core为用户所用,涵盖了汽车工业、基本单元、通信和网络、数字信号处理、FPGA特点和设计、数学函数、记忆和存储单元、标准总线接口等8 大类,从简单的基本设计模块到复杂的处理器一应俱全。配合赛灵思网站的IP中心使用,能够大幅度减轻设计人员的工作量,提高设计可靠性。. K$ ^" y" z6 J- \1 k  N1 p$ N! [
    Core Generator最重要的配置文件的后缀是xco,既可以是输出文件又可以是输入文件,包含了当前工程的属性和IP Core的参数信息。1 R9 a! f/ p: G* T  G6 t. t
    5.7.2 FFT IP核应用示例2 S8 h5 }8 b8 K  p1 x$ q, a3 _$ S
    ISE提供了FFT/IFFT的IP Core,可以完成实数、复数信号的FFT以及IFFT运算。FFT的IP Core提供三种结构,分别为:
    % B5 U& s0 F0 Y1 V( E) J(1) 流水线,Streaming I/O结构:允许连续的数据处理;8 f' l) F1 ?4 A6 C- v
    (2) 基4,Burst I/O结构:提供数据导入/导出阶段和处理阶段。此结构拥有较小的结构,但转换时间较长;! W' F$ ]5 p4 f5 v& H5 j
      i  s  s( N( K4 w
    (3) 基2,Burst I/O结构:使用最少的逻辑资源,同Radix-4相同,提供两阶段的过程。其配置界面有3页,第一页如图5-57所示,主要用于配置实现结构;第二页配置数据位宽以及数据处理操作;第三页配置数据缓存空间。
    9 K/ o; Q0 v+ }3 Z8 i1 x9 @( J3 O9 Z5 f3 J4 L
    图5-57 FFT IP core的用户界面
    在实际硬件操作中,模块的执行速度是很重要的参数,所以本文分析第一种结构,即流水线Streaming I/O结构,以进行连续的数据处理。在进行当前帧的N点数据时,可加载下一帧的N点数据,同时输出前一帧的N点数据。此结构由多个基2的蝶形处理单元构成,每个单元都有自己的存储单元来存储输入和中间处理的数据,其结构如图5-58所示。0 _6 G$ d0 c7 m: F9 J. X
    图5-58 FFT模块的流水线,Streaming I/O结构
    FFT的计算单元具有丰富的控制信号,其详细说明见下文。
    3 o- v8 o5 e: R7 |XN_RE、XN_IM :输入操作数,分别为实部和虚部,以2 的补码输入。在使用时应当确定其位宽。  Y2 [/ ]6 q2 B5 ]" e# {3 `) g6 c
    START :FFT开始信号,高有效。当此信号变高时,开始输入数据,随后直接进行FFT 转换操作和数据输出。一个START脉冲,允许对一帧进行FFT 转换。如果每N 个时钟有一个START脉冲或者START始终为高,,则都可以连续进行FFT。如果在最初的START前,还没有NFFT_WE,FWD_INV_WE,SCALE_SCH_WE信号,则START变高后就使用这些信号的默认值。由于此IP Core支持非连续的数据流,因此在任何时间输入START,即可开始数据的加载。当加载N个数据结束后,就开始FFT转换运算。
    4 @3 j3 s' e$ {0 M) J' u7 M  lUNLOAD :对于Burst I/O结构,此信号将开始输出处理的结果。对于流水线结构和比特逆序输出的情况,此端口不是必要的。
    ; s/ v( [% c6 Q# D+ I; W* vNFFT :此端口只对实时可配置应用时有用。
    ( N- y8 r. e" e" D0 L- KNFFT_WE :此端口是NFFT 端口的使能信号。5 ^: J6 }5 }9 H. J5 r2 W. p
    FWD_INV :用以指示IP Core为FFT还是IFFT,其等于1时IP Core进行FFT运算,否则进行IFFT 运算。至于采用哪种转换运算是可以逐帧变化的。这一端口给FFT的使用提供了很大的方便。
    % `/ A0 E  \1 D3 H1 |% X* sFWD_INV_WE :作为FWD_INV端口的使能信号。
    6 t, n+ }2 ]' o2 D" U7 PSCALE_SCH:(1) 在IP Core设计时,如果选择在计算过程中进行中间数据的缩减,那么此信号才可起作用;(2) 输入的位宽等于2*ceil(NFFT/2),其中NFFT = log2(point size)。(3) 流水线结构中,将每个基2的蝶形处理单元视为一个阶段,每个阶段进行一次数据的缩减,缩减的比例以此输入中对应阶段的两比特表示。(4) 每阶段的两比特数可以是3,2,1或0 :它们表示了数据所需要移动的比特数。
    % h3 w: |/ {5 L' w' l. ZSCALE_SCH_WE :作为SCALE_SCH的使能信号。
    9 d1 r# x& Q, q, HSCLR :可选端口。
    ! x1 j) t% |3 p3 qReset :重置信号端口。Reset=1时,所有工作都停止且初始化。但内部的帧缓存保留其内容。
    ) W2 x. N& y% `& n& b3 UCE :可选端口。% y$ p2 T' H3 r0 k( z  ^: }* N$ y
    CLK :输入时钟。
    # w. Y8 \4 s- r) J3 GXK_RE,XK_IM :输出数据总线,以2 的补码输出。SCALE_SCH_WE有效时,输出位宽等于输入;否则,输出位宽= 输入位宽+NFFT+1。
    / z) v" I! s# Y0 j% \# O# W( VXN_INDEX :位宽等于log2(point size),输入数据的下标。
    4 ~1 s3 U' [$ Z; \4 {' N" _, wXK_INDEX :位宽等于log2(point size),输出数据的下标。
    + ^2 p) M2 w# V3 X# jRFD :数据有效信号,高有效,在加载数据时为高电平。$ o/ i1 {( `5 @# s8 Z% {
    BUSY :IP Core 工作状态的指示信号,在计算FFT 转换时为高电平。  j8 S) V! V% p, c
    DV :数据有效指示信号,当输出端口存在有效数据时变高。4 W1 \% l8 I& [8 o6 x  B+ W! P
    EDONE :高有效。在DONE 信号变高的前一个时钟变为高电平。% ?0 o) m+ K7 G/ N. ~* l
    DONE :高有效。在FFT 完成后变高,且只存在一个时钟。在DONE 变高后,IP Core开始输出计算结果。
    " l0 h, ]% k  ^BLK_EXP :当使用Burst I/O 结构时可用,若选择流水线,则此端口无效) ~, a  V1 ~" V* G$ t. t2 p& t
    OVFLO :算法溢出指示。在数据输出时,如每帧有溢出,此信号变高。在每帧开始处,此信号重置。% i$ }, u% l5 H& T  W& `
    例5.7.1使用IP Core实例化一个16点、位宽为16位的FFT 模块。
    4 H7 b/ t1 _- qIP Core 直接生成的乘法器的Verilog 模块接口为:
    & C- K5 t+ c4 S+ |9 t; ~9 Xmodule fft16(sclr, fwd_inv_we, rfd, start, fwd_inv, dv, scale_sch_we, done, clk, busy, edone, scale_sch,xn_re, xk_im, xn_index, xk_re, xn_im, xk_index);
    4 ^" |- w7 w1 K% {, g9 \8 {input sclr , fwd_inv_we, start, fwd_inv, scale_sch_we, clk;
    8 |- A7 s, W* Q8 p' [input [3 : 0] scale_sch;
    1 b1 s" t7 Q" r3 f! B) w+ |input [15 : 0] xn_re;& T8 ~- f1 J* w7 `
    output rfd, dv, done, busy, edone;* P2 E' X  k( N4 a* l# W
    output [15 : 0] xk_im;* k+ Z0 f% d: q8 n+ B4 w
    output [3 : 0] xn_index;
    1 W% E1 e& @8 Voutput [15 : 0] xk_re;
    ' x+ h9 c2 b. G# J0 A/ c. Linput [15 : 0] xn_im;
    3 Y0 m* \0 p4 V* ]+ Y3 Y5 e7 voutput [3 : 0] xk_index;7 B7 M* r+ J# a# z9 y, I( {  Y* d3 B
    ……7 i* u/ F8 \7 e6 ~- C/ J. C
    endmodule) K9 z5 d7 {# ~4 ?8 d
    在使用时,直接调用multiply 模块即可,如6 m: U9 y. b+ B2 f  e: w
    module fft16(sclr, fwd_inv_we, rfd, start, fwd_inv, dv, scale_sch_we, done, clk, busy,- V+ I4 g# m' ~: X9 j0 ]! z+ c
    edone, scale_sch, xn_re, xk_im, xn_index, xk_re, xn_im, xk_index);5 J0 Y* E" v) C2 ?
    input sclr , fwd_inv_we, start, fwd_inv, scale_sch_we, clk;% l$ r7 ^( @. A7 X. Z
    input [3 : 0] scale_sch;
    5 F& C3 O1 ~5 J( D3 Winput [15 : 0] xn_re;
    . H/ t! K! Q, b/ woutput rfd, dv, done, busy, edone;
    9 Z9 [; z0 L  ]% N5 @output [15 : 0] xk_im;
    % R( m9 X6 W/ Woutput [3 : 0] xn_index;" N3 z. Y1 _& j! v( @( k4 |
    output [15 : 0] xk_re;# z' K1 D( K. `
    input [15 : 0] xn_im;
    0 ~4 I$ T% N9 }( e5 P6 doutput [3 : 0] xk_index;
      D2 m9 }1 l9 s) H# k  Ufft fft1( // 调用FFT 的IPCore/ n0 Q0 ]2 k( O4 c
    .sclr(sclr), .fwd_inv_we(fwd_inv_we), .rfd(rfd), .start(start), .fwd_inv(fwd_inv),. b( |3 a5 `, k# {( X2 C: C8 |1 Y6 f) l
    .dv(dv), .scale_sch_we(scale_sch_we), .done(done), .clk(clk), .busy(busy),
    5 h$ Y( {% O' g9 P$ ^.edone(edone), .scale_sch(scale_sch), .xn_re(xn_re), .xk_im(xk_im),0 x" t/ I& F7 A% T5 b& \
    .xn_index(xn_index), .xk_re(xk_re), .xn_im(xn_im), .xk_index(xk_index));( W5 d3 G$ k' S3 R/ z! \- d
    endmodule
    : ?, Z/ Q# j9 E2 O. S4 x8 M经过仿真测试得到的功能波形图如图5-59所示:; @0 ?0 I3 ?1 n
    图5-59 FFT的IP core仿真波形
    * M2 C! D% c# U, n0 h8 h1 J
  • TA的每日心情
    开心
    2022-12-26 15:46
  • 签到天数: 1 天

    [LV.1]初来乍到

    2#
    发表于 2020-6-28 09:25 | 只看该作者
    基于IP的设计已成为目前FPGA设计的主流方法之一

    该用户从未签到

    3#
    发表于 2020-6-28 16:28 | 只看该作者
    学习了。谢谢分享!
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-8-21 19:22 , Processed in 0.125000 second(s), 23 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表