【问题标题】:SystemVerilog $bits() return type?SystemVerilog $bits() 返回类型?
【发布时间】:2021-08-06 09:01:44
【问题描述】:

我从 SystemVerilog 3.1a 语言参考手册中了解到“$bits 系统函数返回将表达式保存为位流所需的位数。”

  1. 这个函数返回什么类型?
  2. 这种类型的机器是否取决于最大尺寸?
  3. 这是最大的 systemverilog 类型 longint 吗?

任何能揭示这个谜团的规范或文档的链接都将不胜感激。

【问题讨论】:

  • 你为什么要关心它的类型?你有一个重要的用例吗?
  • 感谢您的关注,鲍勃!例如。我可以尝试使用 $bits(vec) ,其中 vec 的宽度超过 $bits() 可以计算的范围。但可能我无法创建这么宽的向量。
  • 我可能想在某些参数中保存 $bits() 返回值。在这种情况下,如果我的参数类型能够适合 $bits() 的整个值,我必须小心。这是一个更现实的用例。
  • SystemVerilog 3.1a LRM 已有 17 年历史。当前的IEEE 1800-2017 SystemVerilog LRM 是公开的。

标签: system-verilog


【解决方案1】:

根据系统 Verilog 标准:

20.6.2 表达式大小系统函数 $bits 系统函数返回将表达式保存为位流所需的位数。这 返回类型是整数

6.11 整数数据类型 整数 -- 4 态数据类型,32 位有符号整数

【讨论】:

  • 谢谢你,谢尔盖!那是对的。我的 SystemVerilog 3.1a 语言参考手册已过时,没有此类信息。
  • @Oleg 你应该停止使用史前文件:-)。尝试查找最新的标准IEEE1800-2017
【解决方案2】:

就位数而言,您可以使用类似这样的代码在模拟器中进行测试

`define inspect(arg) \
  $display(`"arg = %b = %d (%0d bits)`", arg, arg, $bits(arg));

module bit_width;
  reg [4:0] x;
  reg [4'd4:4'd0] y;
  initial begin
    `inspect($bits(x));
    `inspect($bits(y));
  end
endmodule

在 Icarus Verilog 中打印

$bits(x) = 00000000000000000000000000000101 =          5 (32 bits)
$bits(y) = 00000000000000000000000000000101 =          5 (32 bits)

建议两者都会给出 32 位,固定大小。

说实话,在阅读了您的问题之后,在测试之前,我希望 $bits(y) 有 4 位。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-11
    • 2014-12-09
    • 1970-01-01
    • 1970-01-01
    • 2021-04-15
    • 1970-01-01
    • 1970-01-01
    • 2020-02-29
    相关资源
    最近更新 更多