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

 
 
> Почему не работает 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
Ответов
Александр77
сообщение Jan 30 2017, 18:15
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 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
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 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
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 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



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

 


RSS Текстовая версия Сейчас: 30th July 2025 - 00:35
Рейтинг@Mail.ru


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