signed数据取负数的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
所以,从该实验得出的结论如下,
1, verilog中直接加“负号”,等效于讲数据取反加一。
2, 位宽为N的signed data的范围为,-2^( N - 1) ~ 2^( N - 1) – 1, 比如说4bit signed data范围为-8 到7。若想取相反数,必须符号位扩展1bit,然后取反加1。或者另外一种途径,不扩展,对-8做特殊处理,讲其近似为7。
因篇幅问题不能全部显示,请点此查看更多更全内容