cómo pasar la variable de parámetro al módulo en verilog

0

Necesito ayuda para cambiar los parámetros dinámicamente de un módulo

Estoy intentando extraer parte de los datos de red que provienen del módulo superior y van a los módulos internos

En específico tengo un módulo interno (field_extract) que recibe 4 entradas: el reloj, datos (datos de red del módulo superior), una señal que indica el inicio del marco (sof), vld (indica que los datos son válidos) y dos parámetros, uno de ellos es la cantidad de bytes que deseo extraer de los datos y la COMPENSACIÓN de estos bytes desde el inicio del marco, el parámetro que deseo modificar en el tiempo de ejecución es la COMPENSACIÓN

Además, este módulo tiene dos salidas, una es campo (el valor extraído de los datos) y vld (afirma cuándo se extrajeron los datos)

La creación de instancias de este módulo se ve así:

field_extract
#
(
  .BYTES(1),
  .OFFSET(TYPE_OFFSET)
)
Type_extract
(
  .clk(clk),
  .data(data),
  .sof(sof),
  .vld(vld),

  .field(Type),
  .field_vld(Type_vld)
);

mi pregunta es cómo puedo cambiar "TYPE_OFFSET" según los parámetros de una variable

Lo que quiero decir con esto es: quiero extraer "Tipo" en cierto DESPLAZAMIENTO en función de ciertos valores extraídos del marco en el pasado, por lo que "Tipo" no está en la misma posición del marco si la primera parte de El marco contiene ciertos valores como este:

always @ (posedge clk) begin
   if (First_Message_Type == MESSAGE_TYPE_X) TYPE_OFFSET <= 50;
end 

Sé que el último código no es posible porque TYPE_OFFSET es una constante, pero aquí está la pregunta otra vez ... ¿hay alguna forma de modificar esta constante en un momento de ejecución?

Espero que esto haya quedado claro Gracias por su tiempo y ayuda.

    
pregunta Alexis Hernandez

2 respuestas

3

Los parámetros se definen en el momento de la síntesis, no puede cambiarlos en el tiempo de ejecución en función de las señales. Teniendo esto en cuenta, básicamente hay dos opciones: convertir ese parámetro en una señal, o crear instancias de múltiples copias del módulo con diferentes parámetros (constantes), y luego seleccionar adecuadamente cuál usar.

Aquí hay un ejemplo de cómo hacerlo: la salida apropiada seleccionada aquí: enlace .

Cada técnica tiene ventajas y desventajas: la conversión de un parámetro en una señal puede no ser posible dependiendo de cómo se use, o puede generar una gran cantidad de lógica adicional. Varias instancias de módulos también pueden resultar en mucha lógica, pero tal vez menos que convertir un parámetro en una señal, por no mencionar que la cadena de herramientas generalmente puede optimizar la lógica redundante en múltiples instancias que tienen las mismas entradas. O bien, podría escribir un módulo más especializado que sea más específico para lo que está tratando de hacer.

    
respondido por el alex.forencich
1

Si desea que algo cambie mientras su diseño se está ejecutando, tendrá que pasar esa información como una señal al módulo. Recuerde que está describiendo hardware en lugar de usar un lenguaje de programación regular, y piense en cómo esas características se implementarán en hardware.

    
respondido por el Elliot Alderson

Lea otras preguntas en las etiquetas