Как я могу проверить выносимость при использовании вычитания вектора без знака? - PullRequest
0 голосов
/ 28 февраля 2019

Я пытаюсь реализовать архитектуру, которая имеет только 8-разрядный сумматор-вычитатель.Но есть проблема, которую я не могу решить.Когда я использую архитектуру вычитателя, мне нужно вычислить вынос, но я не смог.

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use ieee.numeric_std.all;

entity sub is
            port ( a  : in std_logic_vector(7 downto 0);
                   b  : in std_logic_vector(7 downto 0);
                   o  : out std_logic_vector(7 downto 0)
                );
end sub;

architecture Behavioral of sub is
  signal a2,b2 : unsigned (7 downto 0);
begin
            a2<=unsigned(a);
            b2<=unsigned(b);

            o<=std_logic_vector(a2-b2);
 end Behavioral;

Редактировать: я говорю о "c1"и" c5 "сигналы на рисунке.

1 Ответ

0 голосов
/ 02 марта 2019

Вам необходимо расширить оба операнда на один бит, чтобы выполнение было собрано в MSB результата.Результат разлагается на бит переноса c и результат вычитания o.

library IEEE;
use     IEEE.STD_LOGIC_1164.ALL;
use     IEEE.numeric_std.all;

entity sub is
  port (
    a  : in  std_logic_vector(7 downto 0);
    b  : in  std_logic_vector(7 downto 0);
    o  : out std_logic_vector(7 downto 0);
    c  : out std_logic
  );
end entity;

architecture rtl of sub is
begin
  (c, o) <= std_logic_vector(unsigned('0' & a) - unsigned('0' & b));
end architecture;

Примечание. Это код VHDL-2008.

...