Hallo,

Ik ben laatst begonnen met VHDL en heb nu probeer ik een 4 bits adder te maken, maar om de een om andere reden werkt het 5de bit niet goed (van de uitkomst). Als ik namelijk 1xxx + xxxx optel gaat wordt de uitkomst altijd 1xxxx, maar als ik xxxx + 1xxx dan wordt de uitkomst altijd 0xxxx tenzij ik met 1xxx weer optel. Oftewel van 0 +0 tot 7 + 7 gaat prima, dan komt er ook het goede antwoord uit, en de hogere uitkomsten 13 + 13 tot 16 + 16 gaan ook goed, maar alle uitkomsten daartussenin zijn rare antwoorden weet iemand hoe dit kan en hoe ik dit kan oplossen?
Hier is mijn code:


library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_signed.all;

entity adder is
	port ( a, b, c, d, e, f, g, dp, led1, led2, led3, led4, led5, led6, led7, led8, active1, segA, segB, segC, segD: out std_logic;
			led9, led10, led11, led12, led13, active2: out std_logic;
			switch1, switch2, switch3, switch4, switch5, switch6, switch7, switch8, clk : in std_logic);
end adder;


architecture schakeling of adder is
	
	signal waarde : std_logic_vector (3 downto 0);
	signal waarde2 : std_logic_vector (3 downto 0);
	signal output : std_logic_vector (7 downto 0);
	signal output2 : std_logic_vector (7 downto 0);
	signal output3 : std_logic_vector (7 downto 0);
	signal output4 : std_logic_vector (7 downto 0);
	signal antwoord : std_logic_vector (4 downto 0);
	signal counter : std_logic_vector (1 downto 0);
	signal uitgang : std_logic_vector (7 downto 0);
	signal clock : std_logic;
	signal temp : std_logic_vector (1 downto 0);
		
	
	
begin
--leds aan of uitzetten om waardes weer te geven	
	led1 <= switch1;
	led2 <= switch2;
	led3 <= switch3;
	led4 <= switch4;
	led5 <= switch5;
	led6 <= switch6;
	led7 <= switch7;
	led8 <= switch8;
	active1 <= '1';
	active2 <= '1';

-- waardes inlezen en optellen 
	waarde <= (switch1, switch2, switch3, switch4);	
	waarde2 <= (switch5, switch6, switch7, switch8);	
--hier wordt opgeteld 
	antwoord <= conv_std_logic_vector((conv_integer(waarde) + conv_integer(waarde2)),5);

	
	led9 <= antwoord(0);
	led10 <= antwoord(1);
	led11 <= antwoord(2);
	led12 <= antwoord(3);
	led13 <= antwoord(4);

-- hex omzetten naar 7 segments formaat
	output <= "00000110" when waarde="0001" else
			  "01011011" when waarde="0010" else
			  "01001111" when waarde="0011" else
			  "01100110" when waarde="0100" else
			  "01101101" when waarde="0101" else
			  "11111101" when waarde="0110" else
			  "00000111" when waarde="0111" else
			  "01111111" when waarde="1000" else
			  "11101111" when waarde="1001" else
			  "01110111" when waarde="1010" else
			  "01111100" when waarde="1011" else
			  "00111001" when waarde="1100" else
			  "01011110" when waarde="1101" else
			  "01111001" when waarde="1110" else
			  "01110001" when waarde="1111" else
			  "00111111";
			  
   output2 <= "00000110" when waarde2="0001" else
			  "01011011" when waarde2="0010" else
			  "01001111" when waarde2="0011" else
			  "01100110" when waarde2="0100" else
			  "01101101" when waarde2="0101" else
			  "11111101" when waarde2="0110" else
			  "00000111" when waarde2="0111" else
			  "01111111" when waarde2="1000" else
			  "11101111" when waarde2="1001" else
			  "01110111" when waarde2="1010" else
			  "01111100" when waarde2="1011" else
			  "00111001" when waarde2="1100" else
			  "01011110" when waarde2="1101" else
			  "01111001" when waarde2="1110" else
			  "01110001" when waarde2="1111" else
			  "00111111";
	
   output3 <= "00000110" when antwoord(4)='1' else
			  "00000000";
	
   output4 <= "00000110" when antwoord(3 downto 0)="0001" else
			  "01011011" when antwoord(3 downto 0)="0010" else
			  "01001111" when antwoord(3 downto 0)="0011" else
			  "01100110" when antwoord(3 downto 0)="0100" else
			  "01101101" when antwoord(3 downto 0)="0101" else
			  "11111101" when antwoord(3 downto 0)="0110" else
			  "00000111" when antwoord(3 downto 0)="0111" else
			  "01111111" when antwoord(3 downto 0)="1000" else
			  "01101111" when antwoord(3 downto 0)="1001" else
			  "11110111" when antwoord(3 downto 0)="1010" else
			  "01111100" when antwoord(3 downto 0)="1011" else
			  "00111001" when antwoord(3 downto 0)="1100" else
			  "01011110" when antwoord(3 downto 0)="1101" else
			  "01111001" when antwoord(3 downto 0)="1110" else
			  "01110001" when antwoord(3 downto 0)="1111" else
			  "00111111"; 

-- aansturen 7segment 			  
	a <= uitgang(0);
	b <= uitgang(1);
	c <= uitgang(2);
	d <= uitgang(3);
	e <= uitgang(4);
	f <= uitgang(5);
	g <= uitgang(6);
	dp <= uitgang(7);		  

-- schakelen tussen verschillende display's
process(temp, output, output2, output3, output4)		
begin
		if (temp = "00") then
		segA <= '1';
		segB <= '0';
		segC <= '0';
		segD <= '0';		
		uitgang <= output;
		
	elsif (temp= "01") then
		segA <= '0';
		segB <= '1';
		segC <= '0';
		segD <= '0';
		uitgang <= output2;
	
	elsif (temp = "10") then		
		segA <= '0';
		segB <= '0';
		segC <= '1';
		segD <= '0';
		uitgang <= output3;
		
	elsif (temp = "11") then
		segA <= '0';
		segB <= '0';
		segC <= '0';
		segD <= '1';
		uitgang <= output4;
	end if;
end process; 

--clock vertragen met een factor 128
process(clk)	
variable cnt : std_logic_vector (6 downto 0);
begin		
	if(clk'event and clk = '1') then
		if cnt = "1111111" then
			cnt := "0000000";		
		else				
			cnt := cnt + 1;			
		end if;		
	end if;		
clock <= cnt(6);
end process;

--interne clocksignaal
process(clock)
begin
	if(clock'event and clock='1') then
		temp <= temp + 1;
	end if;
end process;
		 
end schakeling;