Обработка параметризации в пакетах SystemVerilog

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

10
задан toolic 16 October 2010 в 22:37
поделиться