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

 
 
> Почему не работает case, но работает if-else
unixwz
сообщение Jan 30 2017, 10:51
Сообщение #1





Группа: Участник
Сообщений: 8
Регистрация: 25-01-17
Из: Russia
Пользователь №: 95 152



Здравствуйте, меня интересует почему не работает следующий код:
Код
case cmd is
    when C_ADD =>  q <= (f_op + s_op);
    when C_SUB =>  q <= (f_op - s_op);
    when others => null;
end case;


Но при этом если переписать под if-else, то будет работать.
Код
if (cmd = C_ADD) then
    q <= (f_op + s_op);
elsif (cmd = C_SUB) then
     q <= (f_op - s_op);
end if;


А самое интересное то, что при компиляции ошибок нет, но в ModelSim он отказывается симулировать схему, а именно загружать файл симуляции (не знаю как его правильно назывют - al_vhd_tst, который по тестбенчу работает), пишет:
# ** Error: (vsim-3173) Entity '/home/user/Development/freyacpu/cpu/simulation/modelsim/rtl_work.alu' has no architecture.
# Load interrupted
# Error loading design

И список сигналов соответственно не открывается. С if-else всё работает.

Возможно это одна из не синтезируемых конструкций? Прошу помощи у опытных людей!

Сообщение отредактировал unixwz - Jan 30 2017, 10:52
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 11)
andrew_b
сообщение Jan 30 2017, 11:13
Сообщение #2


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

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



Цитата(unixwz @ Jan 30 2017, 13:51) *
Здравствуйте, меня интересует почему не работает следующий код:
Код абсолютно нормальный. Причин может быть множество, но где-то в другом месте.
Go to the top of the page
 
+Quote Post
iosifk
сообщение Jan 30 2017, 11:28
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(andrew_b @ Jan 30 2017, 14:13) *
Код абсолютно нормальный. Причин может быть множество, но где-то в другом месте.

Поддерживаю. А зачем Вам АЛУ для светофора?


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
unixwz
сообщение Jan 30 2017, 11:53
Сообщение #4





Группа: Участник
Сообщений: 8
Регистрация: 25-01-17
Из: Russia
Пользователь №: 95 152



Цитата(iosifk @ Jan 30 2017, 14:28) *
Поддерживаю. А зачем Вам АЛУ для светофора?


Я так полагаю это случай так называемого сарказма.
Как мне выявить данную ошибку? В варнингах ничего особенного нет.

UPD: Всё спасибо, если скомпилировать vhd файлы по отдельности в ModelSIM, то будут показаны ошибки. Буду разбираться.

Сообщение отредактировал unixwz - Jan 30 2017, 11:53
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Jan 30 2017, 12:36
Сообщение #5


В поисках себя...
****

Группа: Свой
Сообщений: 729
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140



Цитата(unixwz @ Jan 30 2017, 14:53) *
Я так полагаю это случай так называемого сарказма.
Как мне выявить данную ошибку? В варнингах ничего особенного нет.

UPD: Всё спасибо, если скомпилировать vhd файлы по отдельности в ModelSIM, то будут показаны ошибки. Буду разбираться.

Modelsim не всегда все ошибки находит. Например я компилирую проект в Quartus'е и он находит ошибки там, где Modelsim их пропустил.
UPD: Вернее правильнее сказать, что есть некоторые недочёты, которые могут и не являться ошибками, которые ModelSIM не отмечает. Например неправильная передача сигналов между клоковыми доменами, неуказанный процесс в списке чувствительности, создание защёлки, несинхронизированный асинхронный сброс, и пр.

Сообщение отредактировал Flip-fl0p - Jan 30 2017, 12:53
Go to the top of the page
 
+Quote Post
Александр77
сообщение Jan 30 2017, 18:15
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 608
Регистрация: 10-07-09
Из: Дубна, Московская область
Пользователь №: 51 111



Несколько раз натыкался на то, что конструкцию case, ModelSim не хотел переваривать. Переписывал на if-else.
Go to the top of the page
 
+Quote Post
iosifk
сообщение Jan 30 2017, 19:08
Сообщение #7


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(Александр77 @ Jan 30 2017, 21:15) *
Несколько раз натыкался на то, что конструкцию case, ModelSim не хотел переваривать. Переписывал на if-else.

Давайте уточним.
У Вас case был полностью определен для всех комбинаций? Потому как если это не сделать, то компилятор может навтыкать латчей...
А вот else позволяет полностью определить все "другие" комбинации и сделать дешифратор на чистой логике....
Атрибутами пользуетесь?


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
Александр77
сообщение Jan 30 2017, 19:46
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 608
Регистрация: 10-07-09
Из: Дубна, Московская область
Пользователь №: 51 111



Цитата(iosifk @ Jan 30 2017, 22:08) *
Давайте уточним.
У Вас case был полностью определен для всех комбинаций?

Давайте.
Писал вот так
Код
case var is
   when X"1" => ......
   when x"2" =>......
   when others =>...
end case;

Причем, квартус вполне все делал как надо. Но при подсовывании моделсиму, приходилось заменять case на if-elsif-else.
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Jan 31 2017, 05:28
Сообщение #9


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

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



Цитата(Flip-fl0p @ Jan 30 2017, 15:36) *
UPD: Вернее правильнее сказать, что есть некоторые недочёты, которые могут и не являться ошибками, которые ModelSIM не отмечает. Например неправильная передача сигналов между клоковыми доменами, неуказанный процесс в списке чувствительности, создание защёлки, несинхронизированный асинхронный сброс, и пр.
Моделсим не телепат и не знает, что вы пишете. Он поддерживает все возможности языка, включая, разумеется, несинтезируемые конструкции, которые активно используются при написании тестбенчей. А вот то, что вы перечислили, является недочетами с точки зрения реализации в железе, но не с точки зрения языка. Тут вы сами должны понимать, что вы делаете.
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Jan 31 2017, 06:15
Сообщение #10


В поисках себя...
****

Группа: Свой
Сообщений: 729
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140



Цитата(andrew_b @ Jan 31 2017, 08:28) *
Моделсим не телепат и не знает, что вы пишете. Он поддерживает все возможности языка, включая, разумеется, несинтезируемые конструкции, которые активно используются при написании тестбенчей. А вот то, что вы перечислили, является недочетами с точки зрения реализации в железе, но не с точки зрения языка. Тут вы сами должны понимать, что вы делаете.

С этим трудно поспорить. Поэтому я считаю, что иногда стоит схему прогнать через Quartus, ISE и пр. среды разработки от производителя микросхемы. И только после этого моделировать. Возможно по мере набора опыта, я сменю своё мнение.
Go to the top of the page
 
+Quote Post
iosifk
сообщение Jan 31 2017, 07:46
Сообщение #11


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(unixwz @ Jan 30 2017, 13:51) *
Возможно это одна из не синтезируемых конструкций? Прошу помощи у опытных людей!

Вы попробуйте отключить оптимизацию при моделировании...


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
Александр77
сообщение Jan 31 2017, 16:01
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 608
Регистрация: 10-07-09
Из: Дубна, Московская область
Пользователь №: 51 111



Цитата(Flip-fl0p @ Jan 31 2017, 09:15) *
Поэтому я считаю, что иногда стоит схему прогнать через Quartus, ISE и пр. среды разработки от производителя микросхемы. И только после этого моделировать.

Как раз всё наоборот. В моделсиме надо отлаживать на функциональном уровне задолго до программирования железа. По мере разрастания проекта, выловить ошибки в нем будет гораздо труднее.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 22:16
Рейтинг@Mail.ru


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