--
--	VHDL을 이용한 FPGA 설계
--
--	3장. Section08. '1' 개수 카운터
--
library ieee;
use ieee.std_logic_1164.all;


entity OneCounter is

	port (
		d		:	in		std_logic_vector (7 downto 0);
		seg		:	out		std_logic_vector (6 downto 0)
	);
	
end OneCounter;


architecture arc of OneCounter is

    -- convert integer value to drive 7-segment
    --
    function toSeg(
        in_value    :   in  integer range 0 to 15
    ) return std_logic_vector is
    begin
     
        case in_value is
         
            when 0      =>   return "1000000";
            when 1      =>   return "1111001";
            when 2      =>   return "0100100";
            when 3      =>   return "0110000";
            when 4      =>   return "0011001";
            when 5      =>   return "0010010";
            when 6      =>   return "0000010";
            when 7      =>   return "1011000";
            when 8      =>   return "0000000";
            when 9      =>   return "0011000";
            when 10     =>   return "0001000";
            when 11     =>   return "0000011";
            when 12     =>   return "0100111";
            when 13     =>   return "0100001";
            when 14     =>   return "0000110";
            when 15     =>   return "0001110";
            when others =>   return "1111111";
 
        end case;
             
    end toSeg;

begin


	process (d)

		variable oneCount	:	integer;
		
	begin
	
	
		oneCount	:=	0;
		
		for i in d'range loop
		
			if d(i) = '1' then
				oneCount	:=	oneCount + 1;
			end if;
			
		end loop;
		
		seg		<=	toSeg(oneCount);


	end process;


end arc;



Posted by 쿨한넘