DimiD 0 27 мая, 2020 Опубликовано 27 мая, 2020 (изменено) · Жалоба Здравствуйте, дорогие друзья! Разбираюсь с VHDL и до того как засунуть что-то в FPGA, решил для наглядности промоделировать в Active-HDL. Моделирую устройство сложения/вычитания чисел с плавающей запятой (дипломный проект). Пока в коде всё идет линейно - проблем нет. Но как только я дохожу до цикла, в частности цикла сдвига мантисс при выравнивании порядков, у меня возникают проблемы. Вот кусок кода. Цитата ---- Цикл сдвигов мантисс PROCESS (CT) BEGIN LOOP -- Признак delta == 0 IF CT = "00000000" THEN EXIT; END IF; IF CT(7) = '1' THEN CT <= CT + 1; RMA(21 DOWNTO 0) <= RMA(22 DOWNTO 1); RMA(22) <= '0'; ELSE CT <= CT - 1; RMB(21 DOWNTO 0) <= RMB(22 DOWNTO 1); RMB(22) <= '0'; END IF; END LOOP; END PROCESS; delta здесь - разница между порядками чисел. Не вглядывайтесь в алгоритм, суть в том, что значение CT не меняется. Я не могу посмотреть его при отладке (всегда UUUUUUUU), и цикл получается вечным. Подскажите, то ли Active-HDL такой тупой, то ли я. Может стоит использовать какую-то интовую переменную (тоже в цикле не меняется, как ни стараюсь). Рассмотрю все возможные решения. Заранее спасибо. Изменено 27 мая, 2020 пользователем DimiD Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yes 5 27 мая, 2020 Опубликовано 27 мая, 2020 · Жалоба предположу, что когда дойдет до впихивания в ПЛИС столкнетесь с удивительным но пока, для модели: UUUUU - означает неопределенно к нему сколько ни прибавь все-равно будет неопределенно может получится избежать тем, что в объявлении сигнала CT дописать :="00000000"; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DimiD 0 27 мая, 2020 Опубликовано 27 мая, 2020 · Жалоба 12 минут назад, yes сказал: может получится избежать тем, что в объявлении сигнала CT дописать :="00000000"; Я присваиваю CT значение как CT <= delta; delta объявлено в ENTITY как delta : IN STD_LOGIC_VECTOR(7 DOWNTO 0); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_sda 0 27 мая, 2020 Опубликовано 27 мая, 2020 · Жалоба А delta чем инициализируется? Может всё таки прислушаться к совету yes? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yes 5 27 мая, 2020 Опубликовано 27 мая, 2020 · Жалоба 1 hour ago, DimiD said: Я присваиваю CT значение как CT <= delta; delta объявлено в ENTITY как delta : IN STD_LOGIC_VECTOR(7 DOWNTO 0); поставьте там точку останова и посмотрите, когда происходит это присваивание (может не происходит?) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DimiD 0 30 мая, 2020 Опубликовано 30 мая, 2020 · Жалоба Здравствуйте, друзья Хочу сказать большое спасибо всем, кто откликнулся на просьбы о помощи. Проблема, как и ожидалось, решилась сама. Очень помогла вот эта статья https://riptutorial.com/ru/vhdl/example/21010/сигналы-против-переменных--краткий-обзор-семантики-моделирования-vhdl Видимо, я слишком быстро полез в VHDL, но в итоге всё получилось. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться