我正在尝试创建一个函数来获取最大值(我正在使用带符号的数字)。
这是我的功能:
function integer max(input integer a, input integer b, input integer c, input integer d);
integer i;
begin
max = a;
if ($signed(b) > $signed(max))
max = b;
if ($signed(c) > $signed(max))
max = c;
if ($signed(d) > $signed(max))
max = d;
end
endfunction
由于某种原因,这不是计算有符号数的最大值。这是将数字视为未签名。
有人可以帮我这个吗?
答案 0 :(得分:0)
我刚刚在模拟器中运行了代码,发现max
函数按预期工作。
我可以想到三个原因:
答案 1 :(得分:0)
您的问题是您假设max
函数的参数是无符号的,这就是您尝试使用$signed
函数的原因。但是作为调用函数的一部分,它们已经被转换为有符号整数。您正在尝试传入8位无符号值,这些值将0扩展为32位有符号值。您需要执行以下操作之一:
$signed
是有意义的。