SystemVerilog добавил пакеты для предоставления пространств имен для общих частей кода (функций, типов, констант и т. Д.). Но поскольку пакеты не создаются, они не могут быть параметризованы, поэтому работа с параметризованными членами проблематична. На практике я нашел это довольно ограничивающим, поскольку очень часто мои пользовательские типы имеют некоторые параметры, определяющие ширину поля и т. Д.
Я обычно имею дело с этим, используя параметры со значениями по умолчанию и просто понимая, что мне потребуется вернуться к изменению исходного кода пакета для некоторых приложений, что мне кажется очень неправильным. Но мне еще предстоит найти способ справиться с этим более чисто. Например:
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
Кто-нибудь нашел более чистый способ борьбы с этим? Мне бы очень хотелось услышать об этом, так как я считаю, что пакеты являются очень мощным дополнением к SV, позволяющим безопасное повторное использование кода, но это ограничение довольно серьезное.