Verilog$signed(),这是什么?

Verilog$signed(),这是什么?,verilog,Verilog,我刚刚开始使用verilog。我在看一些有人写的浮点乘法的示例代码,我遇到了这个 if ($signed(b_e == -1023) && (b_m == 0)) begin z[63] <= 1; z[62:52] <= 2047; z[51] <= 1; z[50:0] <= 0; state <= put_z;

我刚刚开始使用verilog。我在看一些有人写的浮点乘法的示例代码,我遇到了这个

if ($signed(b_e == -1023) && (b_m == 0)) begin
            z[63] <= 1;
            z[62:52] <= 2047;
            z[51] <= 1;
            z[50:0] <= 0;
            state <= put_z;
          end
if($signed(b_e==-1023)和&(b_m==0))开始

z[63]有许多Verilog系统功能可用于合成和测试台。大多数可合成函数执行某种算术或逻辑转换。SystemVerilog已经用强制转换或内置方法替换了大部分$函数

在本例中,使用$signed对我来说毫无意义,因为比较的结果始终是1-but unsigned值,并且该结果将与另一个1位表达式进行and运算。因此,签署的美元没有任何作用。仅当值需要扩展到更大的宽度或在关系操作中时,将值强制转换为带符号才有意义


您可以在有关SV LRM 1800-2012的。

中找到函数列表:“……有符号和无符号系统函数可用于强制转换表达式的符号性。”。因此,如果我们有
逻辑符号[7:0]myreg
myreg=$signed(4'b1100)
,则MSB被视为有符号位和
myreg=-4
。在您的情况下,检查条件是
be
是否等于
…100000000001
返回的结果是0还是1。使用
$signed
会产生什么区别仍然是一个谜…我只是感到困惑,因为我认为美元符号函数只用于模拟。合成工具解析并忽略系统函数,因此甚至可以包含在可合成的模型中。嗯,但我想知道在那里添加signed有什么意义。