#vhdl
#vhdl
Вопрос:
Какой самый простой или простой способ проверить, является ли целочисленный сигнал четным или нечетным в VHDL?
Ответ №1:
if (A mod 2) = 0 then
-- it's even
else
-- it's odd
end if;
Комментарии:
1. Компилятор ModelSim на самом деле будет жаловаться, если вы явно не напишете
if((A mod 2) = 0)
, но спасибо!2. А? Это наоборот. Если целое число mod 2 = 0, то оно четное. (РЕДАКТИРОВАТЬ: я вижу, вы это исправили)
3. @Martin Thompson: Я не заметил, что оно было отредактировано в первый раз. Логика (не синтаксис) в исходном ответе была правильной. Это доступно, щелкнув время редактирования.
4. @SixHouse: смотрите Мой комментарий чуть выше.
5. @Jonathan M: Извините, я согласен, было бы лучше, если бы я отредактировал его на /= 0 и сохранил комментарии таким же образом!
Ответ №2:
В качестве примечания, если сигнал является вектором, вы можете выполнить следующее:
if (A(0)) then
-- it's odd
else
-- it's even
Комментарии:
1. В качестве дополнительного примечания приведение типов также всегда возможно, если тип неверен.
Ответ №3:
function is_even(val : integer) return boolean is
constant vec: signed(31 downto 0) := to_signed(val, 32);
begin
return vec(0) = '0';
end;
или
function is_even(val : integer) return boolean is
begin
return val mod 2 = 0;
end;
в зависимости от того, достаточно ли у вас яркий синтезатор, чтобы вычислить mod 2
Комментарии:
1. Знаем ли мы какой-либо синтезатор, который недостаточно умен, чтобы вычислить mod 2?
2. Насколько я знаю, я просто параноик 🙂
Ответ №4:
Другой способ, если вы не сохраняете как целое число *, — зарегистрировать LSB из стандартного логического вектора, содержащего значение, и проверить, равно ли оно 0 или 1.
РЕДАКТИРОВАТЬ: повторное сохранение целых чисел
удалено * (что может быть проблемой для многих ПЛИС)
Моя ошибка здесь в том, что я думал о двух разных путях и перепутал их. У меня возникли проблемы перед передачей символьных и строковых типов между компонентами при кодировании на FPGA. Хотя я не могу сразу перечислить сообщения об ошибках, я взял на заметку использовать логические векторы std вместо типов предварительной компиляции. Я обнаружил, что они всегда, казалось, работали в симуляции, но никогда на плате.
Комментарии:
1. Можете ли вы объяснить, почему сохранение в виде целого числа является проблемой для ПЛИС?