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

FPGA设计中的加法乘法

[复制链接]
  • TA的每日心情
    开心
    2019-11-19 15:19
  • 签到天数: 1 天

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2019-5-31 09:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    EDA365欢迎您登录!

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

    x
    FPGA设计中的加法乘法

    2 M$ J4 I' i3 R2 w) g) S" m
    9 z$ F5 n1 G/ H5 O' a5 }    加减乘,在fpga设计中,使用verilog hdl语言来描述,简单的很,直接就是+、-、*,没有任何疑问,但是计算过程中的信号的位宽,却值得认真揣摩。" s% J0 b, G' O& I* q
    ( V' q$ z$ i" X
        数学运算,必然涉及到有符号数与无符号数的区别,因此在写hdl代码时,必须明确参与运算的信号是否是有符号数。建议:参与运算的符号要么都是有符号数,要么都是无符号数,不建议使用有符号数与无符号数进行数学运算,如果在参与运算的两个信号一个是有符号数,而另外一个是无符号数的话,建议把无符号数扩展一位,将其转换成有符号数来进行处理。
    3 k3 f& `7 u5 U1 ~0 l+ Q    无符号数扩展成有符号数的方法(以verilog为例):7 X5 A; v6 l1 v
        input [7:0] data;7 p" v/ h6 t: z( X8 A  M4 K2 Y& C6 ^
        wire  [8:0] data_r;  E- W0 m* P, ~& A: W, y5 ]2 P
        assign data_r = {data[7],data};/ r. j. E7 s; _$ e9 @
    : K& G& L0 g1 H2 q% C% I; S
        加法运算中的位宽处理:
    1 h5 B  E3 ]1 `6 d- j! _  S    input [7:0] data_a;
    ! M0 K& O* G' `* |7 M8 g    input [7:0] data_b;
    ; X& r5 c& M% e7 o    output [8:0] data_x;4 c7 H6 s  c( |& b4 o
        wire [8:0] data_x;8 D& C+ s& y& v; R2 C4 k
        assign data_x = data_a + data_b;
    1 F( U, m% p  U3 k    如上面的代码,在做加法运算的时候,建议:
    ' S/ l+ L+ e7 C2 j6 x    1、加法运算符两边的信号,位宽一致;( M! M) O, ]2 l/ D+ w$ b" E
        2、加法运算符两边的信号,要么都是有符号数,要么都是无符号数;
    + l& c- b" U5 s9 d1 O& m    2、考虑到加法可能产生进位,输出信号比输入信号多1bit即可。: h/ ?& R8 `: n# V: Z
    % J/ g  d" I, ~, |
        乘法运算中的位宽处理:
    ; R8 [" I. s" a' i8 g    1. 两个无符号数相乘4 d* ^$ ^( k3 Z
        input [7:0] data_a;" [. B2 h6 `" Q+ `( l5 O" o
        input [4:0] data_b;
    9 x5 F( h3 q' l4 P& F" K    output [12:0] data_x;6 \- Y- c& A" k8 b( O
        wire   [12:0] data_x;+ y3 I! T' c5 Y# J6 ]; Z
        assign data_x = data_a * data_b;$ P% e6 r7 h- v4 A
        两个无符号数相乘,输出信号位宽直接定义成两个输入信号位宽之和即可。  e; i  s) R( X% @
       
    & X9 _" O5 N' @2 @! ^$ p0 u    2. 两个有符号数相乘7 I6 r3 N1 J( Q6 z3 r
        reg signed [7:0] data_a;& B8 V1 V# X& b6 H
        reg signed [4:0] data_b;
    % A# u4 H2 K9 _4 H3 I5 u    output [12:0] data_x;
    ' T' T  V# @3 D- M7 I; G. v( f    wire signed  [11:0] data_x;& j& z" s0 J7 g3 n+ y: f4 _* o
        assign data_x = data_a * data_b;6 L( z( Q, Z: Z7 w" u: |0 _
        两个有符号数相乘,考虑到符号位可以合并成一位,输出信号位宽定义成两个输入信号位宽之和-1即可。
    $ X" g0 Z, P7 {+ @1 g' }5 s$ N
      j. P; d' @* ~+ e    3. 平方运算
    - _. a- ?' T9 K& ^$ \    如果输入信号是无符号数,则输出信号位宽等于输入信号位宽2倍;+ M2 r/ E* P+ k2 m+ f& X$ {- f( r
        如果输入信号是有符号数,则输出信号位宽等于输入信号位宽2倍-29 v0 N  m" {2 K: c; n

    & `' x7 F4 K* ]5 |" r' A4 P
    & W. u) \: d. n4 o4 ~" h9 S6 q  l5 l% K! I9 m3 ^. g" i- O: H

    该用户从未签到

    2#
    发表于 2019-5-31 16:00 | 只看该作者
    发帖是心得 回帖是美德
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-10-10 06:33 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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