Verilog求相反数

条件:数据data为signed  

目的操作:将数据取相反数。即8变-8,-7变7。 

误区:仅仅是“取反加1”  

误区操作的后果: 若data=1000,表示为-8,取反加一后仍为1000,仍为-8


module minusdata;  
  reg clk; 
  reg [3:0]cnt; 
  wire [3:0]minuscnt; 
  wire [3:0]notadd1cnt; 
  wire [4:0]extcnt; 
 
  initial begin
    cnt = 4'd0;   
    clk = 0;     
    forever #10 clk = !clk;  
  end  
  
  always @(posedge clk) begin    
    cnt <= cnt + 1'b1;  
  end
  
  
  assign minuscnt = -cnt; 
  assign notadd1cnt= ~cnt + 1'b1; 
  assign extcnt = -{cnt[3],cnt};      //求相反数,符号位扩展必须
 
 endmodule

ModelSim仿真图如下:



所以,从该实验得出的结论如下,  

1,    verilog中直接加“负号”,等效于讲数据取反加一。  

2,    位宽为N的signed data的范围为,-2^( N - 1)  ~ 2^( N - 1) – 1,  比如说4bit signed data范围为-8 到7。若想取相反数,必须符号位扩展1bit,然后取反加1。

          另外一种途径,不扩展,对-8做特殊处理,讲其近似为7。


评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值