赞
踩
条件:数据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

所以,从该实验得出的结论如下,
1, verilog中直接加“负号”,等效于讲数据取反加一。
2, 位宽为N的signed data的范围为,-2^( N - 1) ~ 2^( N - 1) – 1, 比如说4bit signed data范围为-8 到7。若想取相反数,必须符号位扩展1bit,然后取反加1。
另外一种途径,不扩展,对-8做特殊处理,讲其近似为7。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。