您的位置:首页 > 其它

signed与unsigned的问题

2012-08-24 19:48 288 查看
以前知道有signed与unsigned的区别,但是很少有真正地碰到过,所以没有什么真正地了解。这次在coding的时候终于碰到,写下来以后好看。

错误的:

module abs(clk,a,b,c);

input clk;

input [7:0] a;

input [7:0] b;

output reg [7:0] c;

always@(posedge clk)

begin

if((a-b)< 0)

c <= b - a;

else if ((b-a)==0)

c <= 0;

else

c <= a - b;

end

endmodule









正确的:

module abs(clk,a,b,c);

input clk;

input signed [7:0] a;

input signed [7:0] b;

output reg signed [7:0] c;

always@(posedge clk)

begin

if((a-b)< 0)

c <= b - a;

else if ((b-a)==0)

c <= 0;

else

c <= a - b;

end

endmodule









其实主要的区别是:

Verilog的運算

Verilog所提供的運算分unsigned與signed兩種:

Unsigned:不含signed bit

以4 bit來說,值域從0000~1111,也就是0 ~ 15

Signed:含signed bit(MSB為signed bit,1為負,0為正,負數使用2補數表示)

以4 bit來說,值域從1000~0111,也就是-8 ~ +7
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: