Здравствуйте люди добрые, помогите допилить код. Нужно построить устройство вычитания двух 16-разрядных чисел, представленных в прямом коде. Использовать синхронный сброс. Код | entity kurs is port ( A, B : in std_logic_vector (15 downto 0); Clk, Rst : in std_logic; S: out std_logic_vector (16 downto 0); SignA , SignB: in std_logic; -- 1 положит/ 0 отритц P : out std_logic ); end ts2; architecture Behavioral of kurs is signal bA : signed(15 downto 0); signal bB : signed(15 downto 0); signal bS : signed(16 downto 0); begin bA <= to_signed(A, 16); bB <= to_signed(B, 16); bS <= Std_logic_vector(to_signed(S, 16)); process (Rst, Clk) begin If (Clk='1' and Clk'event) then if Rst='1' then bS <= 0; P <= '0'; if SignA = '1' and SignB = '0' then bS <= bA + bB; P <= '1'; -- A+B elsif SignA = '0' and SignB = '1' then bS <= bA + bB; P <= '0'; -- -A-B elsif SignA = '1' and SignB = '1' then -- A-B if bA > bB then bS <= bA - bB; P <= '1'; -- A > B else bS <= bB - bA; P <= '0'; -- A =< B end if; elsif SignA = '0' and SignB = '0' then -- -A-(-B) if bA >= bB then bS <= bA - bB; P <= '0'; -- A=>B else bS <= bB - bA; P <= '1'; -- A < B end if; end if; end if; end process; end Behavioral;
|
|