|
ModelSim-Altera ругается на одинаковые имена в разных struct, А именно на названия констант в перечислимых типах. |
|
|
|
Jul 11 2018, 10:42
|
Участник

Группа: Участник
Сообщений: 30
Регистрация: 4-06-18
Пользователь №: 104 848

|
Сделал в одном модуле несколько структур (struct) с разными именами. Внутри каждой структуры есть перечислимый тип (состояния конечного автомата). Ну и у каждой структуры есть состояние автомата IDLE. Сам Quartus собирает проект без ошибок. Но ModelSim-Altera говорит Enum literal name 'IDLE' already exists.. "Очищенный" пример: Code.svКод `timescale 1 ns/ 1 ns module test013_LITERAL ( input A, input B, output C ); struct{enum{IDLE, SOME_STAGE_1} FSM; logic some_register; } first_machine; struct{enum{IDLE, SOME_STAGE_2} FSM; logic some_register; } second_machine; assign C = A ^ B; endmodule testbench.vtКод `timescale 1 ns/ 1 ns module testbench(); reg test_A; reg test_B; wire test_C; test013_LITERAL DUT (.A(test_A), .B(test_B), .C(test_C)); initial begin #100 test_A = 0; test_B = 0; #100 test_A = 1; test_B = 0; #100 test_A = 0; test_B = 1; #100 test_A = 1; test_B = 1; end endmodule Что я делаю не так?
|
|
|
|
|
 |
Ответов
|
Jul 12 2018, 11:28
|
Участник

Группа: Участник
Сообщений: 30
Регистрация: 4-06-18
Пользователь №: 104 848

|
Спасибо за комментарии. Кое-что удалось выяснить. 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. Мы продолжаем следить за событиями.
|
|
|
|
|
Jul 12 2018, 13:48
|
Профессионал
    
Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643

|
Приветствую! Цитата(flammmable @ Jul 12 2018, 14:28)  Вот пара примеров группировки атрибутов (при помощи модуля и при помощи структуры): ... Вам как было бы удобней производить группировку? Простите не уловил что тут хотелось бы увидет? Какую задачу должна решать эта гуппировка? Я пытаюсь давать имена портам и сигналам чтобы хоть как то отображать их функционал. Ну и приведеные примеры функционально разные. Мне ни кто не мешает делать так Код ... logic sig_AAA, sig_BBB; submodul i_sub ( .reg_A(sig_AAA), .reg_B(sig_BBB), .reg_C(some_output) ); В свою очередь хотелось бы от Вас услышать как в таком случае будете выкручиватся вместе с Qu? Код struct{ enum {IDLE=1, SOME_LITERAL_1_FIRST, SOME_LITERAL_2_FIRST} enum1_reg; enum {IDLE=2, SOME_LITERAL_1_SECOND, SOME_LITERAL_2_SECOND} enum2_reg; } first_and_second_struct; assign some_litera = first_and_second_struct.IDLE; ... Удачи! Rob. P.S. Ну и для прикола - если уж так хочется в одном модуле иметь геморой одинаковые элементы в разных enum то есть способ  Код module test2 (input int A, output int B,C);
generate begin : gg begin : g_fsm1 enum {IDLE=3, SOME_STAGE_2} FSM; end begin : g_fsm2 enum {IDLE=4, SOME_STAGE_2} FSM; end ... end endgenerate
assign B = gg.g_fsm1.IDLE; assign C = gg.g_fsm2.IDLE;
endmodule Только нафиг такая групировка нужна? этж скооко писанины лишней  Да и проверять сложно если где ошибся.
|
|
|
|
|
Jul 12 2018, 14:02
|
Участник

Группа: Участник
Сообщений: 30
Регистрация: 4-06-18
Пользователь №: 104 848

|
Цитата(RobFPGA @ Jul 12 2018, 16:27)  Простите не уловил что тут хотелось бы увидеть? Хотелось бы увидеть нормальную группировку атрибутов сущности. Хотелось бы увидеть как атрибут сущности объявляется один раз (а не один раз во внешнем модуле, один раз во внутреннем модуле и еще два раза его имя нужно написать при подключении этого модуля). Цитата(RobFPGA @ Jul 12 2018, 16:27)  Какую задачу должна решать эта группировка? А какую задачу решает конструкция struct? Цитата(RobFPGA @ Jul 12 2018, 16:27)  В свою очередь хотелось бы от Вас услышать как в таком случае будете выкручиватся вместе с Qu? Код struct{ enum {IDLE=1, SOME_LITERAL_1_FIRST, SOME_LITERAL_2_FIRST} enum1_reg; enum {IDLE=2, SOME_LITERAL_1_SECOND, SOME_LITERAL_2_SECOND} enum2_reg; } first_and_second_struct; assign some_litera = first_and_second_struct.IDLE; ... Никак. Данный пример не соберется ни в Квартусе, ни в МоделСиме. Заглавный же пост о том, что один и тот же код одной системой считается верным, а другой системой - ошибочным. О том, что интерпретация инженерами Ментора стандарта SystemVerilog обессмысливает одну синтаксическую конструкцию. И о том, как бы побороть это зло.
|
|
|
|
|
Jul 12 2018, 14:34
|
Профессионал
    
Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643

|
Приветствую! Цитата(flammmable @ Jul 12 2018, 17:02)  Хотелось бы увидеть нормальную группировку атрибутов сущности. Хотелось бы увидеть как атрибут сущности объявляется один раз (а не один раз во внешнем модуле, один раз во внутреннем модуле и еще два раза его имя нужно написать при подключении этого модуля). Тю и всего то ... Код package fsm1_pq; typedef enum {IDLE=1, SOME_STAGE_1} e_FSM_t; typedef struct packed { logic some_register; e_FSM_t cur_fsm; } st_FSM_t; endpackage
package fsm2_pq; typedef enum {IDLE=2, SOME_STAGE_1} e_FSM_t; typedef struct packed { logic some_register; e_FSM_t cur_fsm; } st_FSM_t; endpackage
import fsm1_pq::*; module test (input st_FSM_t A, output int B,C); st_FSM_t fsm1; fsm2_pq::st_FSM_t fsm2;
assign fsm1.cur_fsm = (A.cur_fsm==fsm1_pq::e_FSM_t'(fsm2_pq::IDLE)) ? IDLE : fsm1_pq::e_FSM_t'(int'(IDLE)+1); //;) assign fsm2.cur_fsm = fsm2_pq::IDLE;
endmodule Цитата(flammmable @ Jul 12 2018, 17:02)  Никак. Данный пример не соберется ни в Квартусе, ни в МоделСиме. Заглавный же пост о том, что один и тот же код одной системой считается верным, а другой системой - ошибочным. О том, что интерпретация инженерами Ментора стандарта SystemVerilog обессмысливает одну синтаксическую конструкцию. И о том, как бы побороть это зло. Тогда это скорее Qu чудит - так как один и тот же синтаксис то синтезирует то нет. Удачи! Rob.
|
|
|
|
|
Jul 12 2018, 15:40
|
Участник

Группа: Участник
Сообщений: 30
Регистрация: 4-06-18
Пользователь №: 104 848

|
Цитата(RobFPGA @ Jul 12 2018, 17:34)  Тогда это скорее Qu чудит - так как один и тот же синтаксис то синтезирует то нет. Не, Qu не синтезирует ваш пример. И ModelSim не синтезирует ваш пример. Вообще, я не очень понимаю зачем и к чему вы его написали. Пример из первого поста Qu синтезирует стабильно, так же стабильно его не синтезирует ModelSim
Сообщение отредактировал flammmable - Jul 12 2018, 15:41
|
|
|
|
|
Jul 12 2018, 15:55
|
Профессионал
    
Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643

|
Приветствую! Цитата(flammmable @ Jul 12 2018, 18:40)  Не, Qu не синтезирует ваш пример. И ModelSim не синтезирует ваш пример. Вообще, я не очень понимаю зачем и к чему вы его написали. Пример из первого поста Qu синтезирует стабильно, так же стабильно его не синтезирует ModelSim Затем что с точки зрения синтаксиса пример #1 поста и мой одинаков! Поэтому есть неоднозначность синтеза в Qu и стабильное поведения в ModelSim. IMHO первое хуже второго. Удачи! Rob.
|
|
|
|
Сообщений в этой теме
flammmable ModelSim-Altera ругается на одинаковые имена в разных struct Jul 11 2018, 10:42 RobFPGA Приветствую!
Цитата(flammmable @ Jul 11 2... Jul 11 2018, 11:16 flammmable Цитата(RobFPGA @ Jul 11 2018, 14:16) Прив... Jul 11 2018, 11:32  RobFPGA Приветствую!
Цитата(flammmable @ Jul 11 ... Jul 11 2018, 11:49   flammmable Цитата(RobFPGA @ Jul 11 2018, 14:49) Надо... Jul 11 2018, 12:24    Sergey_Bekrenyov 1. Несколько конечных автоматов в одном модуле дер... Jul 11 2018, 12:48     andrew_b Цитата(Sergey_Bekrenyov @ Jul 11 2018, 15... Jul 11 2018, 13:07      Sergey_Bekrenyov Цитата(andrew_b @ Jul 11 2018, 17:07) Еру... Jul 11 2018, 13:17       andrew_b Цитата(Sergey_Bekrenyov @ Jul 11 2018, 16... Jul 11 2018, 13:23        Sergey_Bekrenyov Цитата(andrew_b @ Jul 11 2018, 17:23) Ну ... Jul 11 2018, 20:17       flammmable Цитата(Sergey_Bekrenyov @ Jul 11 2018, 16... Jul 11 2018, 13:38        Sergey_Bekrenyov Цитата(flammmable @ Jul 11 2018, 17:38) Х... Jul 11 2018, 16:55    RobFPGA Приветствую
Цитата(flammmable @ Jul 11 2018, ... Jul 11 2018, 14:22 dxp Цитата(RobFPGA @ Jul 11 2018, 18:16) Enum... Jul 12 2018, 04:09 dxp Цитатаstruct не создает scope
struct создаёт scope... Jul 12 2018, 12:53 flammmable Цитата(dxp @ Jul 12 2018, 15:53) struct с... Jul 12 2018, 13:12
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|