Спасибо за комментарии. Кое-что удалось выяснить.
1. Зачем вся эта тема нужна?Вот пара примеров группировки атрибутов (при помощи модуля и при помощи структуры):
Модуль:Код
module test013_LITERAL (
output some_output
);
logic reg_C;
logic reg_A_for_submodul;//первое упоминание reg_A
logic reg_B_for_submodul;
logic reg_C_for_submodul;//придумать уникальное название во избежание пересечения имен
submodul(.reg_A(reg_A_for_submodul),//второе и третье упоминание reg_A
.reg_B(reg_B_for_submodul),
.reg_C(reg_C_for_submodul));
assign some_output = reg_C_for_submodul;
endmodule
module submodul(
input reg_A,//четвертое упоминание reg_A
input reg_B,
output reg_C
);
endmodule
Структура:Код
module test013_LITERAL (
output some_output
);
logic reg_C;
struct{logic reg_A; //только одно упоминание reg_A
logic reg_B;
logic reg_C;//можно не опасаться пересечения имен
} struct_example;
assign some_output = struct_example.reg_C;
endmodule
Вам как было бы удобней производить группировку?
2. Вопрос веры
Некоторые полагают, что элементы enum не вызвать через точку. Другие полагают, что можно, но синтаксис SystemVerilog таков, что вынесет элементы enum во внешнюю область видимости.
Рабочий пример:Код
module test013_LITERAL (
output [3:0]first_literal,
output [3:0]second_literal
);
struct{enum{SOME_LITERAL_0_FIRST,
SOME_LITERAL_1_FIRST,
IDLE,
SOME_LITERAL_3_FIRST,
SOME_LITERAL_4_FIRST} enum_reg;
} first_struct;
struct{enum{SOME_LITERAL_0_SECOND,
SOME_LITERAL_1_SECOND,
SOME_LITERAL_2_SECOND,
IDLE,
SOME_LITERAL_4_SECOND} enum_reg;
} second_struct;
assign first_literal = first_struct.IDLE;
assign second_literal = second_struct.IDLE;
endmodule
Результаты компиляции на Quartus Prime 17.1.0 для MAX-10 10M02SCE144C8G:
Info (293000): Quartus Prime Full Compilation was successful. 0 errors, 32 warningsРезультат работы прошивки на лампочках демоплаты (линейка из восьми светодиодов): 0010 0011
3. Кто что говорит.Altera-forum -
молчит.
Verification Academy от Mentor -
молчит.
StackOverflow -
говорит, что на одном из трех симуляторов мой код заработал. Так же там ссылаются на раздел 23.9 стандарта IEEE 1800-2017 и утверждают, что struct не создает scope (пффф, а зачем он тогда вообще нужен?), но проверить это утверждение пока не представляется возможным ввиду отсутствия у меня IEEE 1800-2017.
Мы продолжаем следить за событиями.