Расчет вычитания VHDL - PullRequest
       11

Расчет вычитания VHDL

0 голосов
/ 04 ноября 2018

Как VHDL выполняет вычисление вычитания? Это делает дополнение двух? Для 2-битного вычитателя мне было показано, что для ввода / вывода используются векторы, но для проверки выхода потребуются 3 входных контакта / переключателя. (Загрузка в DE0 Nano Board). Поэтому я попытался использовать целочисленные значения:

entity TwoBitSubtractor is port(
    x,y         : in integer range 0 to 3;
    result     : out integer range -3 to 3);
end TwoBitSubtractor;

architecture gates of TwoBitSubtractor is
begin
    result <= x - y;
 end gates;

Он успешно скомпилирован, но некоторые выводы на плате меня смущают. Например: 01 - 10 = 100

Вот сс нано платы DE0

enter image description here

Для -1 не будет ли 111 вместо этого?

DE0 характеристики нанобордов http://www.ti.com/lit/ug/tidu737/tidu737.pdf

1 Ответ

0 голосов
/ 06 ноября 2018

Вы рассчитываете с помощью сигналов integer, но вы можете установить IO-выводы только с типом std_logic или несколькими из них, используя std_logic_vector. Итак, где-то в вашей высшей сущности, которую вы нам не показали, есть конверсия между integer и std_logic(_vector). Неявная функциональность отсутствует, вам необходимо привести к типу данных signed или unsigned, посмотрите здесь ( Руководство дизайнера Duolos VHDL ) для функций преобразования.

Полагаю, вы используете unsigned значения, попробуйте использовать signed в сущности верхнего уровня. То же самое для входных данных, вы не можете указать integer с "01" или "10", только с литералами, такими как 0, 1, 2, 3.

...