Как я могу проверить, является ли целое число VHDL четным или нечетным?

#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. Можете ли вы объяснить, почему сохранение в виде целого числа является проблемой для ПЛИС?