【问题标题】:SystemVerilog Parameters with defined width具有定义宽度的 SystemVerilog 参数
【发布时间】:2016-02-16 23:08:51
【问题描述】:

我有以下 VHDL 代码,它定义了一个特定宽度的常数。

constant WIDTH : natural := 16
constant X : std_logic_vector(WIDTH - 1 downto 0) := std_logic_vector(to_unsigned(16#0#, WIDTH));

如何在 SystemVerilog 中定义这样的内容?

我会假设这样的事情会对应

parameter WIDTH = 16
parameter X = WIDTH'd1231413412

但这似乎不适用于我的 Verilog 编译器

【问题讨论】:

  • 16#0# 是什么意思?我知道 SystemVerilog,但我对 VHDL 不是很熟悉
  • 没有。 16#0# 是基于文字(IEEE Std 1075-2008 15.5.3 Based literals)。该表达式的含义是基数为 16 (0) 的 0。如果您尝试定义一个 16 '0' 的数组值,它将沿着 16d"0" 的行。 (0 不是字符枚举,这是位字符串文字 (15.8)。
  • 那可能是constant X: std_logic_vector (WIDTH -1 downto 0) := (others => '0');

标签: vhdl constants system-verilog


【解决方案1】:

在 Verilog 中,您很少需要指定无符号常量的宽度。但如果你确实需要,那就是:

parameter WIDTH = 16
parameter bit [WIDTH-1:0] X = 'd1231413412

请注意,一旦定义了具有数据类型的参数,就只能覆盖其值,而不能覆盖其类型。

【讨论】:

    【解决方案2】:

    应该是这样的:

    parameter WIDTH = 16;
    parameter [WIDTH-1:0] X = 0;
    

    它将与 SystemVerilog (IEEE1800) 和自 2001 年以来的 Verilog (IEEE1364-2001) 一起使用。如果你被一个只支持 Verilog 1995 (IEEE1364-1995) 的老式模拟器卡住了,它就无法工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多