library ieee;
use ieee.std_logic_1164.all;
use ieee.fixed_pkg.all;

entity tf is
end entity tf;

architecture testbench of tf is
    signal sx : sfixed (3 downto 0)  := "1001";
    signal sy : sfixed (3 downto -3) := "0101110";
    signal sz : sfixed (3 downto -3);
    signal sci : std_ulogic := '1';
    signal sco : std_ulogic;
begin
  tt : process is
    variable x : sfixed (3 downto 0) := sx;
    variable y : sfixed (3 downto -3) := sy;
    variable z : sfixed (3 downto -3);
    variable ci : std_ulogic := sci;
    variable co : std_ulogic;
    constant eres : sfixed(3 downto -3) := b"1110_111";
  begin
    add_carry (L => x, R => y, c_in => ci, result => z, c_out => co);
    sz <= z;
    sco <= co;
    wait for 1 ns;
    assert z = eres;
    report to_bstring(z);

    x := b"1101";
    y := b"0111_000";
    ci := '1';
    add_carry (L => x, R => y, c_in => ci, result => z, c_out => co);
    wait for 1 ns;
    report "res=" & to_bstring(z) & ", co=" & to_string(co);
    wait;
  end process tt;
end architecture testbench;