Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Почему не работает case, но работает if-else
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
unixwz
Здравствуйте, меня интересует почему не работает следующий код:
Код
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 всё работает.

Возможно это одна из не синтезируемых конструкций? Прошу помощи у опытных людей!
andrew_b
Цитата(unixwz @ Jan 30 2017, 13:51) *
Здравствуйте, меня интересует почему не работает следующий код:
Код абсолютно нормальный. Причин может быть множество, но где-то в другом месте.
iosifk
Цитата(andrew_b @ Jan 30 2017, 14:13) *
Код абсолютно нормальный. Причин может быть множество, но где-то в другом месте.

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


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

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

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

Modelsim не всегда все ошибки находит. Например я компилирую проект в Quartus'е и он находит ошибки там, где Modelsim их пропустил.
UPD: Вернее правильнее сказать, что есть некоторые недочёты, которые могут и не являться ошибками, которые ModelSIM не отмечает. Например неправильная передача сигналов между клоковыми доменами, неуказанный процесс в списке чувствительности, создание защёлки, несинхронизированный асинхронный сброс, и пр.
Александр77
Несколько раз натыкался на то, что конструкцию case, ModelSim не хотел переваривать. Переписывал на if-else.
iosifk
Цитата(Александр77 @ Jan 30 2017, 21:15) *
Несколько раз натыкался на то, что конструкцию case, ModelSim не хотел переваривать. Переписывал на if-else.

Давайте уточним.
У Вас case был полностью определен для всех комбинаций? Потому как если это не сделать, то компилятор может навтыкать латчей...
А вот else позволяет полностью определить все "другие" комбинации и сделать дешифратор на чистой логике....
Атрибутами пользуетесь?
Александр77
Цитата(iosifk @ Jan 30 2017, 22:08) *
Давайте уточним.
У Вас case был полностью определен для всех комбинаций?

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

Причем, квартус вполне все делал как надо. Но при подсовывании моделсиму, приходилось заменять case на if-elsif-else.
andrew_b
Цитата(Flip-fl0p @ Jan 30 2017, 15:36) *
UPD: Вернее правильнее сказать, что есть некоторые недочёты, которые могут и не являться ошибками, которые ModelSIM не отмечает. Например неправильная передача сигналов между клоковыми доменами, неуказанный процесс в списке чувствительности, создание защёлки, несинхронизированный асинхронный сброс, и пр.
Моделсим не телепат и не знает, что вы пишете. Он поддерживает все возможности языка, включая, разумеется, несинтезируемые конструкции, которые активно используются при написании тестбенчей. А вот то, что вы перечислили, является недочетами с точки зрения реализации в железе, но не с точки зрения языка. Тут вы сами должны понимать, что вы делаете.
Flip-fl0p
Цитата(andrew_b @ Jan 31 2017, 08:28) *
Моделсим не телепат и не знает, что вы пишете. Он поддерживает все возможности языка, включая, разумеется, несинтезируемые конструкции, которые активно используются при написании тестбенчей. А вот то, что вы перечислили, является недочетами с точки зрения реализации в железе, но не с точки зрения языка. Тут вы сами должны понимать, что вы делаете.

С этим трудно поспорить. Поэтому я считаю, что иногда стоит схему прогнать через Quartus, ISE и пр. среды разработки от производителя микросхемы. И только после этого моделировать. Возможно по мере набора опыта, я сменю своё мнение.
iosifk
Цитата(unixwz @ Jan 30 2017, 13:51) *
Возможно это одна из не синтезируемых конструкций? Прошу помощи у опытных людей!

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

Как раз всё наоборот. В моделсиме надо отлаживать на функциональном уровне задолго до программирования железа. По мере разрастания проекта, выловить ошибки в нем будет гораздо труднее.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.