verilog 减法探究

一段代码如下:

module test
(
//test 1
//input  sys_clk     ,
//input  soft_rst_n  ,

input [2:0] minu   ,
input [2:0] subs   ,
input [2:0] subs1  ,

output [2:0] resu0   ,
output [3:0] resu1   ,
output [3:0] resu2   ,
output [3:0] resu3   ,
output [2:0] resu2_1  ,
output [2:0] resu3_1  ,

output [3:0] resu2_2  ,
output [3:0] resu3_2  ,

output [4:0] resu2_3  ,
output [4:0] resu3_3  ,

output [2:0] subs_inv  


);

//wire [2:0] subs_inv      ;
assign  subs_inv = ~subs ;

 assign resu0 = minu - subs;         //a-b
 assign resu1 = minu - subs;         //a-b带进位
 assign resu2 = minu - (~subs)   ;   //a-(~b)带进位
 assign resu3 = minu - subs_inv  ;   //a - b_inv ; b_inv = ~b ; 带进位
 
 assign resu2_1 = minu - (~subs)   ;   //a-(~b)无带进位
 assign resu3_1 = minu - subs_inv  ;   //a - b_inv ; b_inv = ~b ; 无进位
  
 
 assign resu2_2 = minu - (~subs)  - subs1  ;   //a-(~b)无带进位
 assign resu3_2 = minu - subs_inv - subs1  ;   //a - b_inv ; b_inv = ~b ; 无进位
 
 assign resu2_3 = minu - (~subs)  - subs1  ;   //a-(~b)无带进位
 assign resu3_3 = minu - subs_inv - subs1  ;   //a - b_inv ; b_inv = ~b ; 无进位
 
endmodule

综合的电路图如下:

可以看到modelsim平台中,带进位拓展的结果D中,1:C= ~B,2:D=A - C 直接综合成了D=A+B;

而 D= A- (~B),则综合成了 D={~A[MSB] , A+B };

不带进位的D则无区别;见 resu2和resu3;

减法是这样做的:

电路里头 : A - B = A+ (~B) +1 若,B>A则,进位是1,否则进位是0;(resu0和resu1)

 仿真的结果如下:

在 Verilog 中,a-b 表示将变量 b 的值从变量 a 的值中减去。这个操作产生一个有符号的差值。如果 a 和 b 都是有符号数,则结果仍然是有符号数。如果其中一个或两个输入是无符号数,则结果将被解释为无符号数。

具体地说,a-b 操作将对应以下计算:

  1. 如果 a 和 b 都是有符号数,则执行带符号的减法运算。
  2. 如果 a 和 b 都是无符号数,则执行无符号减法运算。                                                            如果 b 大于 a,则结果将是 2^(n+1) - (b - a),其中 n 是变量的位宽。
  3. 如果只有 a 是有符号数,则先将 b 扩展为有符号数,然后执行带符号的减法运算。
  4. 如果只有 b 是有符号数,则先将 a 扩展为有符号数,然后执行带符号的减法运算。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数码逐渐远去

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值