DimiD
-
Постов
3 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные DimiD
-
-
12 минут назад, yes сказал:
может получится избежать тем, что в объявлении сигнала CT дописать :="00000000";
Я присваиваю CT значение как CT <= delta; delta объявлено в ENTITY как delta : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
-
Опубликовано · Изменено пользователем DimiD · Пожаловаться
Здравствуйте, дорогие друзья!
Разбираюсь с 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 такой тупой, то ли я. Может стоит использовать какую-то интовую переменную (тоже в цикле не меняется, как ни стараюсь). Рассмотрю все возможные решения. Заранее спасибо.
Проблемы с циклами VHDL
в Языки проектирования на ПЛИС (FPGA)
Опубликовано · Пожаловаться
Здравствуйте, друзья
Хочу сказать большое спасибо всем, кто откликнулся на просьбы о помощи.
Проблема, как и ожидалось, решилась сама. Очень помогла вот эта статья
https://riptutorial.com/ru/vhdl/example/21010/сигналы-против-переменных--краткий-обзор-семантики-моделирования-vhdl
Видимо, я слишком быстро полез в VHDL, но в итоге всё получилось.