реклама на сайте
подробности

 
 
> ModelSim-Altera ругается на одинаковые имена в разных struct, А именно на названия констант в перечислимых типах.
flammmable
сообщение Jul 11 2018, 10:42
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 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

Что я делаю не так?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
RobFPGA
сообщение Jul 11 2018, 11:16
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643



Приветствую!
Цитата(flammmable @ Jul 11 2018, 13:42) *
Сделал в одном модуле несколько структур (struct) с разными именами. Внутри каждой структуры есть перечислимый тип (состояния конечного автомата). Ну и у каждой структуры есть состояние автомата IDLE. Сам Quartus собирает проект без ошибок. Но ModelSim-Altera говорит Enum literal name 'IDLE' already exists..
...
Что я делаю не так?
Enum в пределах одного compilation unit имеет глобальный scope то есть внутри одного модуля/package не может быть определено несколько елементов разных enum с оним и тем же именем. В разных модулях/package - на здоровье.
Quartus судя по всему на это болт кладет что чревато последствиями.
Код
...
    struct{enum{IDLE=1,
                SOME_STAGE_1} FSM;
             logic some_register;
            } first_machine;
    struct{enum{IDLE=2,
                SOME_STAGE_2} FSM;
             logic some_register;
            } second_machine;            
wire [1:0] w_idle=IDLE; ??? // что присвоит Quartus?


Удачи! Rob.
Go to the top of the page
 
+Quote Post
flammmable
сообщение Jul 11 2018, 11:32
Сообщение #3


Участник
*

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



Цитата(RobFPGA @ Jul 11 2018, 14:16) *
Приветствую!
Enum в пределах одного compilation unit имеет глобальный scope тоесть внутри одного модуля/package не может быть определено несколько елементов разных enum с оним и тем же именем. В разных модулях/package - на здоровъе.

Удачи! Rob.

Эмм. Внутри самого Quartus удается вполне успешно обращаться к одинаковым именам enum-ов в различных struct.
Типа того...
Код
first_machine.FSM <= first_machine.IDLE;
first_machine.FSM <= first_machine.SOME_STAGE_1;
second_machine.FSM <= second_machine.IDLE;
second_machine.FSM <= second_machine.SOME_STAGE_2;

И Quartus на такой синтаксис не ругается.
Т.е. не понятно:
1) если struct организует ограничение видимости, то чего хочет ModelSim?
2) если struct НЕ организует ограничение видимости, то начерта такой struct нужен?
3) если struct организует ограничение видимости, но только для переменных регистров, а для enum - нет и при этом сам Quartus ошибок не выдает, то... Я даже не знаю, то - что?

P.S. На меня Quartus ругнулся, когда я разным переменным регистрам из одного struct сделал блокирующее и неблокирующее присвоение. Он сказал "Нет уж! Или всем регистрам так, или всем регистрам эдак!". Но обсуждаемом случае никаких ошибок от Quartus не было.

Сообщение отредактировал flammmable - Jul 11 2018, 11:37
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Jul 11 2018, 11:49
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643



Приветствую!

Цитата(flammmable @ Jul 11 2018, 14:32) *
Эмм. Внутри самого Quartus удается вполне успешно обращаться к одинаковым именам enum-ов в различных struct.
Типа того...
Код
first_machine.FSM <= first_machine.IDLE;
first_machine.FSM <= first_machine.SOME_STAGE_1;
second_machine.FSM <= second_machine.IDLE;
second_machine.FSM <= second_machine.SOME_STAGE_2;
Хм странно - в структурах first_machine/second_machine нет элемента IDLE! Есть FSM который может иметь занчение IDLE. wacko.gif И ModelSim об этом ругается.
Цитата(flammmable @ Jul 11 2018, 14:32) *
И Quartus на такой синтаксис не ругается.
?! cranky.gif Печалька какая.

Цитата(flammmable @ Jul 11 2018, 14:32) *
Т.е. не понятно:
1) если struct организует ограничение видимости, то чего хочет ModelSim?
2) если struct НЕ организует ограничение видимости, то начерта такой struct нужен?
3) если struct организует ограничение видимости, но только для переменных регистров, а для enum - нет и при этом сам Quartus ошибок не выдает, то... Я даже не знаю, то - что?
Нужно учитывать что это все же не С/С++ Надо немного по другому структуировать дизайн. Вынесите объявление типов enum и структур в отдельные package. Потом в модуле их импортируйте и пользуйте на здоровье не забывая ссылаться на соотвествующий package при использовании одинаковых имен элементов enum.

Удачи! Rob
Go to the top of the page
 
+Quote Post
flammmable
сообщение Jul 11 2018, 12:24
Сообщение #5


Участник
*

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



Цитата(RobFPGA @ Jul 11 2018, 14:49) *
Надо немного по другому
- Как?
- Иначе!

©Badcomedian

Хорошо, это не C/C++. Поэтому, например, исходя из каких-то соображений элементы struct могут иметь или блокирующее или не блокирующее присвоение. Хотя такое ограничение несколько странно, но допустим дело в том, что компилятор расположит отдельные биты этих элементов рядом и... (и что дальше?) и не знаю, но допустим это как-то связано со структурой ПЛИСов. Ладно, то - такое.
Но! Как вы верно отметили "IDLE" - сугубо синтаксическая абстракция. Для нее. Надо. Просто. Сделать. Ограничение. Видимости. Потому как в противном случае ситуация следующая:
1. Есть конечный автомат как некая сущность.
2. У этого автомата есть некоторые атрибуты.
3. Эти атрибуты можно сгруппировать в struct.
4. В этот же struct можно внести и список состояний автомата.
5. Причем значения этих состояний можно получать через "имя_структуры.имя_состояния".
6.1. Но! IDLE, который есть у большинства автоматов надо вынести отдельно и обращаться к нему напрямую!
6.2. Или придумать для каждой машины свое название IDLE. Имена регистров повторяются - на здоровье. Имена состояний - ни за что!
6.3. Или атрибуты сгруппировать в struct, а состояния целиком вынести в блок параметров, хотя синтаксис позволяет enum-у находится внутри struct.
6.4. Или вообще не пользоваться struct.

Мне сложно поверить, что дело в синтаксисе SystemVerilog. Он не мог быть сделан так тупо. Я уверен - дело в каких-то настройках ModelSim и/или Quartus.

Сообщение отредактировал flammmable - Jul 11 2018, 13:28
Go to the top of the page
 
+Quote Post
Sergey_Bekrenyov
сообщение Jul 11 2018, 12:48
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 323
Регистрация: 14-12-10
Из: Королёв
Пользователь №: 61 599



1. Несколько конечных автоматов в одном модуле держать не рекомендуется.
2. Есть два подхода к присваиваниям - или все неблокирующие, или логика с блокирующими, триггеры с блокирующими.

Следуя набору элементарных рекомендаций можно съэкономить кучу времени.
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Jul 11 2018, 13:07
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(Sergey_Bekrenyov @ Jul 11 2018, 15:48) *
1. Несколько конечных автоматов в одном модуле держать не рекомендуется.
Ерунда полная.
Go to the top of the page
 
+Quote Post
Sergey_Bekrenyov
сообщение Jul 11 2018, 13:17
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 323
Регистрация: 14-12-10
Из: Королёв
Пользователь №: 61 599



Цитата(andrew_b @ Jul 11 2018, 17:07) *
Ерунда полная.


CummingsSNUG2003SJ_SystemVerilogFSM.pdf

"There are a few FSM coding guidelines that apply to all FSM coding styles[2]. The common guidelines are:
Guideline: Make each FSM design a separate Verilog module.
It is easier to maintain the FSM code if each FSM is a separate module, plus third-party FSM optimization tools
work best on isolated and self-contained FSM designs"

Go to the top of the page
 
+Quote Post
andrew_b
сообщение Jul 11 2018, 13:23
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(Sergey_Bekrenyov @ Jul 11 2018, 16:17) *
CummingsSNUG2003SJ_SystemVerilogFSM.pdf
Ну и что? Мало ли кто что напишет.
Go to the top of the page
 
+Quote Post
Sergey_Bekrenyov
сообщение Jul 11 2018, 20:17
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 323
Регистрация: 14-12-10
Из: Королёв
Пользователь №: 61 599



Цитата(andrew_b @ Jul 11 2018, 17:23) *
Ну и что? Мало ли кто что напишет.

"Ну и что? Мало ли кто что напишет."
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- flammmable   ModelSim-Altera ругается на одинаковые имена в разных struct   Jul 11 2018, 10:42
|||- - 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
- - flammmable   Спасибо за комментарии. Кое-что удалось выяснить. ...   Jul 12 2018, 11:28
|- - RobFPGA   Приветствую! Цитата(flammmable @ Jul 12 2...   Jul 12 2018, 13:48
|- - flammmable   Цитата(RobFPGA @ Jul 12 2018, 16:27) Прос...   Jul 12 2018, 14:02
|- - RobFPGA   Приветствую! Цитата(flammmable @ Jul 12 2...   Jul 12 2018, 14:34
|- - flammmable   Цитата(RobFPGA @ Jul 12 2018, 17:34) Тогд...   Jul 12 2018, 15:40
|- - RobFPGA   Приветствую! Цитата(flammmable @ Jul 12 2...   Jul 12 2018, 15:55
- - dxp   Цитатаstruct не создает scope struct создаёт scope...   Jul 12 2018, 12:53
- - flammmable   Цитата(dxp @ Jul 12 2018, 15:53) struct с...   Jul 12 2018, 13:12


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 2nd August 2025 - 05:48
Рейтинг@Mail.ru


Страница сгенерированна за 0.01484 секунд с 7
ELECTRONIX ©2004-2016