搜索
您的当前位置:首页正文

个人编写的signed数据取负数的verilog代码

来源:好土汽车网


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。

因篇幅问题不能全部显示,请点此查看更多更全内容

Top