¿Es posible usar '. *' en SystemVerilog para registrar elementos de interfaces?

-1

Digamos que tengo una interfaz, me gustaría

interface myIf;
  logic a;
  logic b;
  logic c;
  logic d;
  logic e;
  logic f;
endinterface

interface mypartIf;
  logic b;
  logic c;
  logic d;
endinterface

module top (
  input clk,
  myIf interf
)

  mypartIf part();

  always_ff @(posedge clk) begin
    part.* <= interf.*; // should match b,c,d names in both interfaces
  end
endmodule

Por supuesto, este ejemplo no funciona.

Podría reemplazar mypartIf con un struct y registrar el struct , pero en ese caso tendré un espacio de nombres diferente.

typedef struct packed {
  logic b;
  logic c;
  logic d;
} mypartIf;

interface myIf;
  logic a;
  mypartIf othernamespace;   // HERE
  logic e;
  logic f;
endinterface

module top (
  input clk,
  myIf interf
)

  mypartIf part;

  always_ff @(posedge clk) begin
    part <= interf.othernamespace; // This should work
  end
endmodule

Me gustaría hacerlo lo más simple posible, la coincidencia de nombres sería una buena solución sin agregar struct . Además, agregar struct no me permite usar campos de cruce.

¿Cuáles son las mejores prácticas para utilizar elementos de cruce como este?

    
pregunta Alexis_FR_JP

1 respuesta

0

No, no puedes hacer esto. Un interface solo le ayuda a recopilar un grupo de señales y hacer conexiones a otros puertos como grupo. Aún necesita acceder a todas las señales individualmente dentro del módulo como si fueran puertos separados.

Si desea acceder a los valores como grupo, use struct . Solo asegúrate de colocar el typedef para el struct en un package común. Entonces no tendrás un problema de espacio de nombres.

    
respondido por el dave_59

Lea otras preguntas en las etiquetas