[an error occurred while processing this directive]
|
а квартус генерит два сумматора, хотя понятно что комбинационная схема должна бать проще. Научите пожалуйста как писать поведенчески, чтобы не генерировались в "лоб" лишние схемы.
library ieee,work;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use work.pack.all;
entity add is
generic
(
width : INTEGER := 16
);
port
(
add_sub : in STD_LOGIC;
dataa : in STD_LOGIC_VECTOR (width-1 downto 0);
datab : in STD_LOGIC_VECTOR (width-1 downto 0);
result : out STD_LOGIC_VECTOR (width downto 0)
);
end add;
architecture first of add is
begin
process (add_sub, dataa, datab)
variable temp_a, temp_b : SIGNED(width-1 downto 0);
variable temp_r : SIGNED(width downto 0);
begin
if (add_sub = '1') then
temp_a := SIGNED(dataa);
temp_b := SIGNED(datab);
else
temp_a := SIGNED(dataa);
temp_b := -SIGNED(datab);
end if;
temp_r := (temp_a(width-1) & temp_a) + (temp_b(width-1) & temp_b);
result <= STD_LOGIC_VECTOR(temp_r);
end process;
end first;
E-mail: info@telesys.ru