我有我设计的一部分代码,如下所示。
parameter n=256;
input [n-1:0] x;
output y;
initial begin
x = 0;
if(0 >= unsigned'(x-9))
y = 1;
end我的期望是,无符号减法运算应该返回十进制247,但实际上它返回-9。有没有人有更好的编码方式来实现这一点?我的实际需求是,即使我从较大的值中减去一个较小的值,该值也应该滚动到w.r.t。参数宽度(就好像0-1应为255)。我的问题可能是错的,但这个要求对我的项目来说是必要的。
发布于 2014-11-21 15:54:17
247和-9是相同的位模式,因此算法是正确的。有符号vs无符号是位模式的一种解释。
注意: 0-1只有255个8位数,你已经将它们定义为256位数。
下面的例子应该有助于澄清,我们使用了$signed和$unsigned关键字,它们改变了十进制表示的显示方式,但底层的二进制形式不变。
module tb;
parameter n=8;
logic [n-1:0] x;
logic y;
initial begin
x = 0;
$display("%1d", x-9);
$display("%1b", x-9);
$display("");
$display("%1d", $unsigned(x-9) );
$display("%1b", $unsigned(x-9) );
$display("");
$display("%1d", $signed(x-9) );
$display("%1b", $signed(x-9) );
$display("");
$finish;
end
endmodule以下哪项输出:
4294967287
11111111111111111111111111110111
4294967287
11111111111111111111111111110111
-9
11111111111111111111111111110111对于您的示例,您只需要使用$unsigned
module tb;
parameter n=8;
logic [n-1:0] x;
logic y;
initial begin
x = 0;
if(0 >= $unsigned(x-9)) begin
y = 1;
end
else begin
y = 0;
end
$display("y: %b", y);
$finish;
end
endmodulehttps://stackoverflow.com/questions/27056279
复制相似问题