FPGA设计中的加法乘法的输入输出位宽处理

数学运算,必然涉及到有符号数与无符号数的区别,因此在写hdl代码时,必须明确参与运算的信号是否是有符号数。建议:参与运算的符号要么都是有符号数,要么都是无符号数,不建议使用有符号数与无符号数进行数学运算,如果在参与运算的两个信号一个是有符号数,而另外一个是无符号数的话,建议把无符号数扩展一位,将其转换成有符号数来进行处理

无符号数扩展成有符号数的方法(以verilog为例):
input [7:0] data;
wire [8:0] data_r;
assign data_r = {data[7],data};

加法运算中的位宽处理:

input [7:0] data_a;
input [7:0] data_b;
output [8:0] data_x;
wire [8:0] data_x;
assign data_x = data_a + data_b;
如上面的代码,在做加法运算的时候,建议:
1、加法运算符两边的信号,位宽一致;
2、加法运算符两边的信号,要么都是有符号数,要么都是无符号数;
3、考虑到加法可能产生进位,输出信号比输入信号多1bit即可

乘法运算中的位宽处理:

1. 两个无符号数相乘

input [7:0] data_a;
input [4:0] data_b;
output [12:0] data_x;
wire [12:0] data_x;
assign data_x = data_a * data_b;
两个无符号数相乘,输出信号位宽直接定义成两个输入信号位宽之和即可。

2. 两个有符号数相乘

reg signed [7:0] data_a;
reg signed [4:0] data_b;

output [12:0] data_x;

wire signed [11:0] data_x;

assign data_x = data_a * data_b;
两个有符号数相乘,考虑到符号位可以合并成一位,输出信号位宽定义成两个输入信号位宽之和-1即可。

3. 平方运算

如果输入信号是无符号数,则输出信号位宽等于输入信号位宽2倍;
如果输入信号是有符号数,则输出信号位宽等于输入信号位宽2倍-2

  • 13
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值