Usando generar para crear puertos de módulo en systemverilog

1

Hola, estoy tratando de hacer algo como esto

'define PORTS 4
module mulitplexer
(
  input logic clock,

generate
 for(genvar  n = 0; n < 'PORTS; n++) begin 
    output  a_t       multiplx_a_[n],
    input   a_fc_t    a_multiplx_[n],
    input   b_t       multiplx_b_[n],
    input   logic     ready_[n],
 end

endgenerate

input logic reset
);

pero recibo una advertencia sobre la falta de un puerto en la lista de puertos ansi, no he podido encontrar ninguna respuesta a lo que estoy haciendo mal. Cualquier ayuda será muy apreciada

    
pregunta rasmus

1 respuesta

1

Esto es algo que no se puede hacer en SystemVerilog; en realidad varias cosas.

No puede usar una construcción generada en medio de otra construcción, en su caso, un encabezado de módulo que declara una lista de puertos. E incluso si pudiera, no puede usar generar para construir identificadores como logic ready_0, ready_1 , etc. Tampoco podría usarlo para declarar elementos individuales de una matriz, como logic ready_[0], ready_[1] .

Tiene varias alternativas, la más fácil es declarar estos puertos como matrices.

'define PORTS 4
module mulitplexer
(
  input logic clock,
    output  a_t       multiplx_a_['PORTS],
    input   a_fc_t    a_multiplx_['PORTS],
    input   b_t       multiplx_b_['PORTS],
    input   logic     ready_['PORTS],
input logic reset
);

También puede crear estructuras con estos campos, pero tendría que separar las entradas de las salidas. Finalmente, podría encontrar un preprocesador de macros que le permita escribir un bucle 'for' como macro. SystemVerilog no tiene eso incorporado.

    
respondido por el dave_59

Lea otras preguntas en las etiquetas