|
Почему не работает case, но работает if-else |
|
|
|
Jan 30 2017, 10:51
|
Группа: Участник
Сообщений: 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
|
|
|
|
|
 |
Ответов
(1 - 11)
|
Jan 30 2017, 11:53
|
Группа: Участник
Сообщений: 8
Регистрация: 25-01-17
Из: Russia
Пользователь №: 95 152

|
Цитата(iosifk @ Jan 30 2017, 14:28)  Поддерживаю. А зачем Вам АЛУ для светофора? Я так полагаю это случай так называемого сарказма. Как мне выявить данную ошибку? В варнингах ничего особенного нет. UPD: Всё спасибо, если скомпилировать vhd файлы по отдельности в ModelSIM, то будут показаны ошибки. Буду разбираться.
Сообщение отредактировал unixwz - Jan 30 2017, 11:53
|
|
|
|
|
Jan 30 2017, 12:36
|

В поисках себя...
   
Группа: Свой
Сообщений: 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
|
|
|
|
|
Jan 30 2017, 19:08
|
Гуру
     
Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369

|
Цитата(Александр77 @ Jan 30 2017, 21:15)  Несколько раз натыкался на то, что конструкцию case, ModelSim не хотел переваривать. Переписывал на if-else. Давайте уточним. У Вас case был полностью определен для всех комбинаций? Потому как если это не сделать, то компилятор может навтыкать латчей... А вот else позволяет полностью определить все "другие" комбинации и сделать дешифратор на чистой логике.... Атрибутами пользуетесь?
--------------------
www.iosifk.narod.ru
|
|
|
|
|
Jan 30 2017, 19:46
|
Знающий
   
Группа: Свой
Сообщений: 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.
|
|
|
|
|
Jan 31 2017, 05:28
|
Профессионал
    
Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757

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

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

|
Цитата(andrew_b @ Jan 31 2017, 08:28)  Моделсим не телепат и не знает, что вы пишете. Он поддерживает все возможности языка, включая, разумеется, несинтезируемые конструкции, которые активно используются при написании тестбенчей. А вот то, что вы перечислили, является недочетами с точки зрения реализации в железе, но не с точки зрения языка. Тут вы сами должны понимать, что вы делаете. С этим трудно поспорить. Поэтому я считаю, что иногда стоит схему прогнать через Quartus, ISE и пр. среды разработки от производителя микросхемы. И только после этого моделировать. Возможно по мере набора опыта, я сменю своё мнение.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|