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, позволяющее более безопасное повторное использование кода, но это ограничение довольно серьезное.