SystemVerilog:如何创建一个接口,它是一个具有不同输入的简单接口的数组?

时间:2016-07-13 00:25:46

标签: system-verilog

创建以下逻辑的最佳方法是什么?

interface top_if(input rst_n[NUM_OF_modules],
                input clk[NUM_OF_modules]);

simple_if i_simple_if[NUM_OF_modules](.reset_n(rst_n[?]), .clock(clk[?]));

我需要将rst_n[x]clk[x]发送到相应的i_simple_if[x]吗?什么是最好的方法。 reset_nclock是simple_if的1位输入信号。

endinterface

2 个答案:

答案 0 :(得分:1)

generate循环怎么样:

interface top_if #(parameter NUM_OF_modules = 1) 
                  (input rst_n[NUM_OF_modules],
                   input clk[NUM_OF_modules]);

  generate
    genvar i;
    for (i=0; i<NUM_OF_modules; i++)
      begin : NAME
        simple_if i_simple_if(.reset_n(rst_n[i]), .clock(clk[i]));
      end
  endgenerate

endinterface

http://www.edaplayground.com/x/3ALC

答案 1 :(得分:1)

我尝试了两种不同的方法: 1)为top_if内部的接口生成循环:simple_if。当我将生成的接口传递给模块时,VCS对它不满意并抛出非法连接的接口端口。 2)所以我不得不尝试以下方法。

interface top_if #(parameter NUM_OF_modules = 1) 
              (input rst_n[NUM_OF_modules],clk[NUM_OF_modules]);

   simple_if i_simple_if[NUM_OF_modules]();
endinterface
top_if i_top_if();
generate
for (genvar i=0; i<NUM_OF_modules; i++) begin
assign i_top_if.i_simple_if[i].rst_n = xxx;
assign i_top_if.i_simple_if[i].clk   = yyy;
end
endgenerate