------------------------------------------------------------------------
-- IAY0105 - Digitaalsüsteemid. Kodutöö #1.
-- Näidislahendus loogikaelementidega. Testpink.
------------------------------------------------------------------------
-- (C) Peeter Ellervee - 2007 - Tallinn
------------------------------------------------------------------------

entity test_str is
end test_str;

architecture bench of test_str is
  signal a, b, c, d, k_err, l_err, m_err, n_err: bit;
  signal k0, k2, l0, l2, m0, m2, n0, n2: bit;

  component skeem is
    port ( a, b, c, d: in bit; k, l, m, n: out bit );
  end component;
begin
  -- Sisendsignaalid (sammuga 10 ns)
  a <= '0' after 0 ns, '1' after 80 ns, '0' after 160 ns;
  b <= '0' after 0 ns, '1' after 40 ns, '0' after 80 ns, '1' after 120 ns;
  c <= '0' after 0 ns, '1' after 20 ns, '0' after 40 ns, '1' after 60 ns,
       '0' after 80 ns, '1' after 100 ns, '0' after 120 ns, '1' after 140 ns;
  d <= '0' after 0 ns, '1' after 10 ns, '0' after 20 ns, '1' after 30 ns,
       '0' after 40 ns, '1' after 50 ns, '0' after 60 ns, '1' after 70 ns,
       '0' after 80 ns, '1' after 90 ns, '0' after 100 ns, '1' after 110 ns,
       '0' after 120 ns, '1' after 130 ns, '0' after 140 ns, '1' after 150 ns;

  -- Minimeerimise tulemus
  k0 <= ((not a) and (not d)) or (a and c and d) or
        ((not a) and b and (not c)) or (b and (not c) and (not d));
  l0 <= ((not a) and c) or ((not b) and (not c) and d) or
        (b and (not c) and (not d));
  m0 <= ((not a) and c and (not d)) or (b and (not c) and (not d)) or
        (b and d) or (a and (not b) and (not d));
  n0 <= ((not a) and c and (not d)) or (a and c and d) or
        (a and (not b) and (not d)) or ((not b) and c);

  -- Lõplik skeem
  u1: skeem port map ( a, b, c, d, k2, l2, m2, n2 );

  -- Võrdlemine...
  k_err <= k0 xor k2;  l_err <= l0 xor l2;
  m_err <= m0 xor m2;  n_err <= n0 xor n2;

end bench;
