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

FPGA中的除法运算及初识AXI总线

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-4-25 15:18 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x

  X& h0 Z: b$ B  U1 bFPGA中的硬件逻辑与软件程序的区别,相信大家在做除法运算时会有深入体会。若其中一个操作数为常数,可通过简单的移位与求和操作代替,但用硬件逻辑完成两变量间除法运算会占用较多的资源,电路结构复杂,且通常无法在一个时钟周期内完成。因此FPGA实现除法运算并不是一个“/”号可以解决的。
7 x; K" M! A2 f6 ~+ S' m; _# {& l& I, R! u6 l
  好在此类基本运算均有免费的IP核使用,本人使用的VIVADO 2016.4开发环境提供的divider gen IP核均采用AXI总线接口,已经不再支持native接口。故做除法运算的重点从设计算法电路转变成了调用AXI总线IP核以及HDL中有符号数的表示问题,极大降低了开发难度。以下就上述两个方面进行探讨。
9 w! L9 g( ^3 c' r6 {; @( x0 t# p5 I8 }
  VerilogHDL中默认数据类型为无符号数,因此需要数学运算的场合必须要用“signed”声明,如:reg signed [8-1:0] signal_a;  wire signed [32-1:0] signal_b;需要注意一点,FPGA将所有有符号数视为二进制补码形式,运算的结果同样为补码。再来看看除法器IP核配置界面。
5 `/ x3 y8 K! O; j+ ~' E
1 R) O  m# T) A8 }! g* \  _
5 U/ _, g' t3 d1 y- Y& v. f/ p
* P' \: f  p: e" k3 C+ ^! z # e0 L9 g: e! O1 _# q1 K$ X( u8 g; q
( P" u2 a0 k  M' b
 总共就两页,非常简单。需要重点关注的有三个地方:1 算法实现结构(algorithm type)2 被除数与除数的位宽 3 第二页flow control模式。现来一一说明:
3 `9 y6 e: A/ k. y( q  \
( U) r8 l' P8 d2 K/ D: D, M  就算法结构来说官方文档pg151 LogiCORE IP Product Guide中说得很详细:LUTMult结构操作数最好不要高于12bit,且充分利用DSP slice和BRAM以降低对FPGA 逻辑资源的消耗。Radix-2操作数不要超过16bit,且利用资源与LUTMulti相反,大量使用register和LUT从而将DSP slice和BRAM资源节省出来用在别的地方。最后一个High Radix结构支持超过16bit的大位宽操作数,利用DSPslice等专用硬件资源。根据自己的需求选择即可。- s7 `% `0 ]& B' Q3 D" C' v+ y
$ k. ~3 w7 Z3 s2 r0 ~4 V2 M
  位宽问题没什么好说的,需要特别注意保留位宽满足计算范围,也就是运算之前的“补码符号位扩展”。至于flow control 模式与接口和AXI总线有关。5 m! ?/ Y/ L7 E& s

% @: P' r  }9 _/ ]5 u+ [' A; Y + y5 h0 J) i2 g: i

3 p$ v* Z8 c4 l2 e接口划分得十分清晰,被除数 除数和商通道以及必要的时钟和复位逻辑接口。每个AXI总线通道总是包括tdata tuser tlast 和握手信号tvalid tready,其中tuser为附加信息,tlast表示流模式下最后一个数据,相当于数据包中的包尾处。数据传输仅在tvalid和tready同时拉高时有效并更新。
  f# `- l& M0 }8 }4 w6 k: O5 c2 K' Q0 {

* L) X  ]4 F. J' ]+ A& x
* Q! C: ^0 d; w) m$ \# T 而Non Blocking Mode在除法运算时较常用,一句话概括:IP核接口不带有FIFO缓存,输出通道数据必须被下游模块实时处理。上图就明白了:
" j: D4 {0 D$ e3 i4 M/ m
. o2 ^9 P8 C+ E1 `( ? 0 Q, T2 u1 @. o0 ^4 X9 k% ~
, `; G5 h+ S7 }" K# c4 s; U
这一模式实际上是对AXI总线的简化,很多场合下并不完全需要AXI总线强大的流控功能,特别是在AXI总线模块的上下游均为可进行实时处理的FPGA逻辑电路的情况下。AXI总线的另一个特点就是data packing,需要将不是8bit倍数位宽的数据高位填充从而确保数据最小单位是1byte,具体填充方式有所不同。很容易想到,这样的data packing 功能对SOC中PL与PS部分的交互是十分友好的。
- z3 c: p2 h3 m; G: ]7 e
" Q4 R5 q* a1 t9 U9 H   总体来说,在FPGA中做基本的数学运算没什么难度,即使是指数 对数 开根号之类的复杂运算也有浮点IP Core的支持。本人后续用到复杂算法时,会采用HLS方式开发,仅用于算法验证,欢迎关注。
  • TA的每日心情

    2019-11-29 15:37
  • 签到天数: 1 天

    [LV.1]初来乍到

    2#
    发表于 2022-4-25 16:26 | 只看该作者
    FPGA实现除法运算并不是一个“/”号可以解决的
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-7-27 11:20 , Processed in 0.140625 second(s), 26 queries , Gzip On.

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

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

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