【问题标题】:Parameterized interface in systemverilogsystemverilog中的参数化接口
【发布时间】:2020-01-24 00:04:29
【问题描述】:

我有一个完整的 AXI 接口和一个精简的 AXI 接口,如下所示:

interface axi_full ();
  logic [63:0] wdata;
  logic .      wid;
  logic wcredit;
endinterface

interface axi_lite();
  logic [63:0] wdata;
  logic wcredit;
endinterface

有没有一种方法可以让我只使用一个带有如下参数的接口而不是两个单独的接口?唯一的区别是在 AXI lite 的情况下没有 wid。

interface axi #(bit Lite = 1'b0) ();
  ...
  ...
endinterface

【问题讨论】:

    标签: system-verilog


    【解决方案1】:

    很遗憾没有。您应该可以使用axi_full 并让wid 信号不使用。

    【讨论】:

      【解决方案2】:

      标准中没有任何内容可以阻止在接口内使用生成块。因此,以下应该起作用:

      interface axi #(FULL=1)();
        logic [63:0] wdata;
        logic       wid;
        if (FULL != 0) begin: fff
            logic wcredit;
        end
      endinterface
      
      module top;
        axi#(1) full();
        axi#(0) lite();
        imod fm(full);
        //imod lm(lite);
      endmodule
      
      module imod(axi i);
        initial begin
          $display(i.wdata, i.wid, i.fff.wcredit);
        end
      endmodule
      

      问题始终存在于供应商实施中。以上似乎在节奏的nc 中运行良好。取消注释 'lite' 字符串会导致它产生错误。

      但是,synopsys vcs,至少 eda playground 中的那个拒绝编译它,抱怨 xmrs 的未实现功能到接口中。

      Synthesis 可能对此有自己的想法。因此,最好的方法是使用单独的定义。

      这也取决于你如何使用它们,modports 可以很方便。它们实现得更好,以下示例应该适用于任何地方:

      interface axi_if;
        logic [63:0] wdata;
        logic       wid;
        logic wcredit;
        modport full (input wdata, wid, wcredit);
        modport lite(input wdata, wid);
      endinterface
      
      module top;
        axi_if intf();
        fmod fm(intf);
        lmod lm(intf);
      endmodule
      
      
      module fmod(axi_if.full i);
          initial begin      
            $display(i.wdata, i.wid, i.wcredit);
          end
      endmodule
      
      module lmod(axi_if.lite i);
          initial begin      
            $display(i.wdata, i.wid); //, i.wcredit);
          end
      endmodule
      

      【讨论】:

        【解决方案3】:

        你说的是不可能的,但你可以将 wid 信号放在`ifdef compile 指令中,如下所示

        interface axi();
          logic [63:0] wdata;
        `ifdef AXI_FULL
          logic       wid;
        `endif
          logic wcredit;
        endinterface
        

        在不使用 AXI-Lite 时定义 AXI_FULL 连接axi接口的时候也要考虑到这个东西

        【讨论】:

        • 如果您希望在同一个仿真中同时使用 AXI 和 AXI Lite 接口,这将不起作用。
        • 是的,如果你想同时使用这两个接口那么它没有任何意义。
        猜你喜欢
        • 1970-01-01
        • 2020-01-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-21
        • 1970-01-01
        相关资源
        最近更新 更多