Перейти к содержанию
    

Проблемы с циклами VHDL

Здравствуйте, дорогие друзья!
Разбираюсь с 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 такой тупой, то ли я. Может стоит использовать какую-то интовую переменную (тоже в цикле не меняется, как ни стараюсь). Рассмотрю все возможные решения. Заранее спасибо.

Изменено пользователем DimiD

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

предположу, что когда дойдет до впихивания в ПЛИС столкнетесь с удивительным

но пока, для модели: UUUUU - означает неопределенно к нему сколько ни прибавь все-равно будет неопределенно

может получится избежать тем, что в объявлении сигнала CT дописать :="00000000";

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

12 минут назад, yes сказал:

может получится избежать тем, что в объявлении сигнала CT дописать :="00000000";

Я присваиваю CT значение как CT <= delta; delta объявлено в ENTITY как delta : IN STD_LOGIC_VECTOR(7 DOWNTO 0);

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А delta чем инициализируется? Может всё таки прислушаться к совету yes?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, DimiD said:

Я присваиваю CT значение как CT <= delta; delta объявлено в ENTITY как delta : IN STD_LOGIC_VECTOR(7 DOWNTO 0);

поставьте там точку останова и посмотрите, когда происходит это присваивание (может не происходит?)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Здравствуйте, друзья

Хочу сказать большое спасибо всем, кто откликнулся на просьбы о помощи.

Проблема, как и ожидалось, решилась сама. Очень помогла вот эта статья

https://riptutorial.com/ru/vhdl/example/21010/сигналы-против-переменных--краткий-обзор-семантики-моделирования-vhdl

Видимо, я слишком быстро полез в VHDL, но в итоге всё получилось.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...