247和-9是相同的位模式,所以算术是正确的。有符号与无符号是位模式的解释。
注意: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
endmodule
显示,在基数变化无符号,小数给出不同的结果,我同意。但是我陷入了一个特殊的情况。 参数n = 256; input [n-1:0] x; 输出y; 初始开始 x = 0; (0> = unsigned'(x-9)) y = 1;其他 y = 0; 结束 在这里,我期待Y为0,因为我的'if'逻辑是“0小于0-9,即247”但是变为1.我认为我遵循错误的编码方法。你能帮我解决这个问题吗? – 2014-11-21 08:22:11
@VinayakHiremath我已经添加了一个例子,向您展示如何为您的条件使用'$ unsigned'。如果这仍然导致问题添加评论和更新答案与最新信息。 – Morgan 2014-11-21 08:36:03