【问题标题】:Systemverilog: Is it possible to treat a macro like an array that can be indexed?Systemverilog:是否可以将宏视为可以索引的数组?
【发布时间】:2018-01-11 21:49:32
【问题描述】:

在 SystemVerilog 中,是否可以为长层次引用的宏建立索引?即

`define CONDENSED top.DUT.mod.sub_module.register_map

然后执行以下操作:

`CONDENSED.reg1[0]

【问题讨论】:

    标签: macros system-verilog


    【解决方案1】:

    宏只是简单的文本替换。除了标记是什么(字符串、数字文字、标识符、注释)之外,执行替换的文本预处理器对 SystemVerilog 语法一无所知。只要生成的文本是合法的 SystemVerilog 文本,您就可以使用任何宏。 (并注意有关拆分组成标记的文本的规则)。

    【讨论】:

      【解决方案2】:

      您甚至可以在宏中包含索引:

      `define MY_SELECTION(index0, index1) c0_a[index0].c1_a[index1].a
      
      class c1;
        int a;
      endclass
      
      class c0;
        c1 c1_a[10];
      
        function new();
          foreach(c1_a[idx]) begin
            c1_a[idx] = new();
          end
        endfunction
      endclass
      
      module top;
        initial begin
          automatic c0 c0_a[10];
      
          foreach(c0_a[idx]) begin
            c0_a[idx] = new();
          end
      
          `MY_SELECTION(5, 6) = 8;
          $display("my_value: %0d", `MY_SELECTION(5, 6));
      
          `MY_SELECTION(5, 6)[0] = 1;
          $display("my_value: %0d", `MY_SELECTION(5, 6));
        end
      endmodule
      

      这段代码的输出是这样的:

      my_value: 8
      my_value: 9
      

      您可以在 EDA Playground 上运行此示例 - https://www.edaplayground.com/x/4EZZ

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-24
        • 1970-01-01
        • 2014-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多