структура generi c в системверилоге - PullRequest
0 голосов
/ 27 января 2020

У меня есть интерфейс с несколькими портами, 2 порта являются структурами:

Я хочу иметь возможность использовать любую структуру, которая мне нужна, с моим интерфейсом, есть ли какая-либо опция в SystemVerilog, которая позволяет это?

Я искал обобщенные c структуры, но не смог найти никаких результатов.

это пример моего интерфейса:

interface My_Interface;

typedef struct {
    logic something;
} str1;

typedef struct {
    logic something;
} str2;

logic [15:0] data;      
logic [3:0] data2;      
logic wr_str1;
logic wr_str2;
str1 str1_r;
str2 str2_r;

endinterface: My_Interface

У меня есть что-то вроде 30 структур, я хочу иметь возможность использовать любую структуру, которая мне нужна, структуры разные. у них разные поля.

1 Ответ

1 голос
/ 27 января 2020

Как упоминалось в dave_59, в verilog нет обобщенных c структур. Но вы можете параметризовать интерфейс с параметром типа, как в следующем примере:

interface a_if #(type T = int)(input T svar);
endinterface

module top;
  int p1;
  a_if simple(p1); // default type is 'int'

  bit [3:0] p2;
  a_if#(.T(bit[3:0])) bit3(p2);

  typedef struct packed {
    logic a,b,c;
  } S;
  S p3;
  a_if#(.T(S)) sif(p3);

endmodule

Вышеприведенное позволяет вам иметь порты и не порты типа, определенного при создании экземпляра интерфейса.

...