【发布时间】:2021-10-28 00:43:11
【问题描述】:
当我查看一些代码时,我发现了一些奇怪的东西。
看来是来自扩展和操作优先级。
(我知道因为“sig”是用 'signed' 声明的,所以 $signed 不是必需的,而且 '-sig' 是正确的,无论如何..)
reg signed [9:0] sig;
reg signed [11:0] out;
initial
begin
$monitor ("%0t] sig=%0d, out=%0h", $time, sig, out);
sig = 64;
out = $signed(-sig);
#1
out = -$signed(sig);
#1
sig = -512;
out = $signed(-sig);
#1
out = -$signed(sig);
#1
$finish;
end
以上代码的模拟结果是,
0] sig=64, out=-64
2] sig=-512, out=-512
3] sig=-512, out=512
当sig=-512时,我预计10位sig在取反前会扩展为12位,但在取反后却被扩展了。
所以-512的否定还是-512,展开后是-512。
我猜“$signed() 阻止扩展..知道会发生什么吗??
【问题讨论】: