SystemVerilog agregó paquetes para proporcionar espacios de nombres para piezas de código comunes (funciones, tipos, constantes, etc.). Pero como los paquetes no se crean instancias, no se pueden parametrizar, por lo que tratar con miembros parametrizados es problemático. En la práctica, he encontrado esta limitación ya que muy a menudo mis tipos personalizados tienen algunos parámetros que dictan anchuras de campo, etc.Parametrización de manejo en paquetes SystemVerilog
En general, trato de esto usando parámetros con valores predeterminados y entendiendo que tendré que volver a cambiar el paquete código fuente para algunas aplicaciones, lo cual me parece muy incorrecto Pero todavía tengo que encontrar una manera de manejar esto más limpiamente. Por ejemplo:
package my_pkg;
parameter ADDR_MSB = 7;
parameter DATA_MSB = 31;
typedef struct {
logic [ADDR_MSB:0] address;
logic [DATA_MSB:0] data;
} simple_struct_t;
endpackage
¿Alguien ha encontrado una forma más limpia de manejar esto? Me encantaría saberlo, ya que creo que los paquetes son una adición muy poderosa a SV que permite la reutilización segura de los códigos, pero esta limitación es bastante severa.
Bastante, pero estaba más interesado en el código de diseño que en el código de banco de pruebas, y hasta la fecha las clases no son sintetizables. – JeffW
También relacionado con el comentario macro, no veo cómo esto realmente cambia algo. Usando macros o parámetros, puede modificar el código para redefinir o cambiar el valor en el tiempo de compilación. De hecho, para los parámetros, este cambio de valor puede diferirse al tiempo de elaboración, que es un poco más flexible. De cualquier manera, se crea un código confuso, ya que el valor utilizado no sería obvio para un revisor. – JeffW