SystemVerilog变量的符号

过年这几天,偷懒了,没有认真创作,但是素材收集了一些,今天专门聊聊变量的符号,我们只从书中的一个点来切入。

引用《漫游》原文:

SystemVerilog变量的符号_第1张图片

从仿真器得到的结果是:

SystemVerilog变量的符号_第2张图片

如果按照有符号和无符号的类型划分,那么可以将常见的变量类型划分为:
·有符号类型:byte、shortint、int、longint、integer。
·无符号类型:bit、logic、reg、net-type(如wire、tri)。

上文的“signed_ved = -128”这里的负数,它的二进制编码是:8'b1000_0000,这里是会让人迷惑的,因为这里牵扯到计算机中的负数表示,我相信,很多验证的同僚都“恐负”,下面就引用豆包和deepseek(AI工具)的答复,将这里说清楚:

实际上计算机中的数,都是用补码表示的,计算机使用补码主要有以下几个原因:

简化运算

  • 统一加减法:使用补码可以将减法运算转化为加法运算。在计算机中,只需要设计加法器电路就可以完成加减法运算,从而简化了硬件设计。比如计算,可以转化为,的补码为,的补码为,将它们相加得到,即,结果正确。
  • 减少硬件开销:若不使用补码,计算机需要分别设计加法器和减法器,增加了硬件的复杂性和成本。而采用补码后,用同一套加法电路就可实现加减法,提高了硬件资源的利用率。

解决符号位问题

  • 正确处理符号:补码能让符号位自然地参与运算,无需特殊处理。符号位和数值位一样参与运算,使得运算规则统一。例如,的补码是,的补码是,相加后得到,即,结果符合预期。
  • 唯一表示零:在原码和反码表示中,和的表示不同,会给计算机判断和处理带来麻烦。而补码中只有一种表示,避免了这种问题,使计算机对的处理更简单和统一。

充分利用编码空间

       扩大表示范围:以 8 位二进制为例,原码和反码能表示的范围是到,而补码能表示到,多利用了一个编码来表示,有效扩大了可表示的数值范围,能更充分地利用有限的二进制编码空间。

那么如何得到补码呢?我们以-127为例进行描述:

在 8 位有符号二进制数中,最高位为符号位,0 表示正数,1 表示负数 。求 -127 的有符号二进制数,可通过如下步骤:

  1. 确定绝对值的二进制表示:
    127的二进制表示为 01111111。

  2. 取反(得到反码):
    将每一位取反,得到 10000000。

  3. 加1(得到补码):
    在反码的基础上加1,得到 10000001。

所以,8 位有符号二进制中 -127 表示为 1000_0001 。

再以-128为例:

  1. 确定绝对值的二进制表示:
    128的二进制表示为 10000000。

  2. 取反(得到反码):
    将每一位取反,得到 01111111。

  3. 加1(得到补码):
    在反码的基础上加1,得到 10000000。

正文就说到这里,希望这篇文章能消除咱们验证同僚的“恐负”。

聊点题外话:有时候,我在想,AI这么厉害,人的价值体现在哪里?通过这里,我想,能提出好问题,就是我们强于AI的一个方面。

你可能感兴趣的:(功能测试)