library ieee; use ieee.std_logic_1164.all; entity mycounter is port ( q0, q1, q2, q3: inout bit; clk: inout bit ); end; entity FA is port ( a, b: in bit; c: out bit; uin: in bit; uout: out bit ); end; entity ripple_carry_adder is port ( a0, a1, a2, a3: in bit; b0, b1, b2, b3: in bit; c0, c1, c2, c3: out bit; uin: in bit; -- carry in uout: out bit -- carry out ); end; entity my_rs_latch is port ( r, s: in bit; q1, q2: inout bit ); end; entity clock_state_controlled_rs_latch is port ( s, r: in bit; c: inout bit; q1, q2: inout bit ); end; entity clock_state_controlled_d_latch is port ( d: in bit; c: inout bit; q1, q2: inout bit ); end; entity ms_d_flip_flop is port ( d: in bit; q: inout bit; c: inout bit ); end; entity reg is port ( d0, d1, d2, d3: in bit; q0, q1, q2, q3: inout bit; c: inout bit ); end; architecture Behavioral of my_rs_latch is begin q1 <= (not r) nor q2; q2 <= (not s) nor q1; end Behavioral; architecture Behavioral of clock_state_controlled_rs_latch is component my_rs_latch port ( r, s: in bit; q1, q2: inout bit ); end component; signal s1, r1: bit; begin r1 <= r and c; s1 <= s and c; rs: my_rs_latch port map (r=>r1, s=>s1, q1=>q1, q2=>q2); end Behavioral; architecture Behavioral of clock_state_controlled_d_latch is component clock_state_controlled_rs_latch port ( r: in bit; s: in bit; q1, q2: inout bit; c: inout bit ); end component; signal notd: bit; begin notd <= d; rs: clock_state_controlled_rs_latch port map (r=>d, s=>notd, q1=>q1, q2=>q2, c=>c); end Behavioral; architecture Behavioral of ms_d_flip_flop is component clock_state_controlled_d_latch port ( d: in bit; q1, q2: inout bit; c: inout bit ); end component; signal notc, d1: bit; begin dlatch1: clock_state_controlled_d_latch port map (d=>d, q1=>d1, c=>c); notc <= not c; dlatch2: clock_state_controlled_d_latch port map (d=>d1, q1=>q, c=>c); end Behavioral; architecture Behavioral of reg is component ms_d_flip_flop is port ( d: in bit; q: inout bit; c: inout bit ); end component; begin bit1: ms_d_flip_flop port map (d=>d0, q=>q0, c=>c); bit2: ms_d_flip_flop port map (d=>d1, q=>q1, c=>c); bit3: ms_d_flip_flop port map (d=>d2, q=>q2, c=>c); bit4: ms_d_flip_flop port map (d=>d3, q=>q3, c=>c); end; architecture Behavioral of FA is begin c <= a xor b xor uin; uout <= (a and b) or ((a or b) and uin); end; architecture Behavioral of ripple_carry_adder is component FA port ( a, b: in bit; c: out bit; uin: in bit; uout: out bit ); end component; signal u0, u1, u2: bit; begin fa1: FA port map (a => a0, b => b0, c => c0, uin => uin, uout => u0); fa2: FA port map (a => a1, b => b1, c => c1, uin => u0, uout => u1); fa3: FA port map (a => a2, b => b2, c => c2, uin => u1, uout => u2); fa4: FA port map (a => a3, b => b3, c => c3, uin => u2, uout => uout); end; architecture Behavioral of mycounter is component ripple_carry_adder port ( a0, a1, a2, a3: in bit; b0, b1, b2, b3: in bit; c0, c1, c2, c3: out bit; uin: in bit; -- carry in uout: out bit -- carry out ); end component; component reg port ( d0, d1, d2, d3: in bit; q0, q1, q2, q3: inout bit; c: inout bit ); end component; signal a0, a1, a2, a3 : bit; -- addierer Eingang1 signal b0, b1, b2, b3 : bit; -- addierer Eingang2 signal c0, c1, c2, c3 : bit; -- addierer Ausgang signal uin, uout: bit; begin a0 <= '1'; a1 <= '0'; a2 <= '0'; a3 <= '0'; uin <= '0'; myreg : reg port map (d0 => c0, d1 => c1, d2 => c2, d3 => c3, q0 => b0, q1 => b1, q2 => b2, q3 => b3, c => clk); rpcadd: ripple_carry_adder port map ( a0 => a0, a1 => a1, a2 => a2, a3 => a3, b0 => b0, b1 => b1, b2 => b2, b3 => b3, c0 => c0, c1 => c1, c2 => c2, c3 => c3, uin => uin, uout => uout ); q0 <= c0; q1 <= c1; q2 <= c2; q3 <= c3; end; entity testbench is end entity testbench; architecture behave of testbench is component ripple_carry_adder port ( a0, a1, a2, a3: in bit; b0, b1, b2, b3: in bit; c0, c1, c2, c3: out bit; uin: in bit; -- carry in uout: out bit -- carry out ); end component; signal a3, a2, a1, a0 : bit; signal b3, b2, b1, b0 : bit; signal c3, c2, c1, c0 : bit; signal uin : bit; signal uout : bit; begin sum: ripple_carry_adder port map ( a3 => a3, a2 => a2, a1 => a1, a0 => a0, b3 => b3, b2 => b2, b1 => b1, b0 => b0, c3 => c3, c2 => c2, c1 => c1, c0 => c0, uin => uin, uout => uout ); uin <= '0'; b3 <= '0' after 0 ns; b2 <= '1' after 0 ns; b1 <= '0' after 0 ns; b0 <= '1' after 0 ns; % a0 <= '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; a1 <= '0' after 0 ns, '0' after 10 ns, '1' after 20 ns, '1' after 30 ns, '0' after 40 ns, '0' after 50 ns, '1' after 60 ns, '1' after 70 ns, '0' after 80 ns, '0' after 90 ns, '1' after 100 ns, '1' after 110 ns, '0' after 120 ns, '0' after 130 ns, '1' after 140 ns, '1' after 150 ns; a2 <= '0' after 0 ns, '0' after 10 ns, '0' after 20 ns, '0' after 30 ns, '1' after 40 ns, '1' after 50 ns, '1' after 60 ns, '1' after 70 ns, '0' after 80 ns, '0' after 90 ns, '0' after 100 ns, '0' after 110 ns, '1' after 120 ns, '1' after 130 ns, '1' after 140 ns, '1' after 150 ns; a3 <= '0' after 0 ns, '0' after 10 ns, '0' after 20 ns, '0' after 30 ns, '0' after 40 ns, '0' after 50 ns, '0' after 60 ns, '0' after 70 ns, '1' after 80 ns, '1' after 90 ns, '1' after 100 ns, '1' after 110 ns, '1' after 120 ns, '1' after 130 ns, '1' after 140 ns, '1' after 150 ns; end architecture behave;