2017-10-27 7 views
1

저는 VHDL을 처음 접했고 8 개의 스위치로 8 비트 숫자를 만들어서 7 개의 세그먼트 디스플레이 두 개를 표시 할 수있는 16 진수로 변환 할 수 있습니다.VHDL 8 비트 숫자를 16 진수로 변환합니다.

여기 내 현재 코드입니다. 여기에서 어디로 가야할지 모르겠다.

ENTITY swToHex IS 
    PORT ( 
     SW : IN STD_LOGIC_VECTOR(7 DOWNTO 0); 
     HEX : OUT STD_LOGIC_VECTOR(5 DOWNTO 0) 
    ); 
END swToHex; 

ARCHITECTURE Structural OF swToHex IS 
    SIGNAL A : STD_LOGIC_VECTOR(7 downto 0); 
BEGIN 
    A(7 downto 0) <= SW(7 downto 0); 
END Structural; 

VHDL 및 컴퓨터 아키텍처 학습을 시작하기 만하면 도움이 될 것입니다.

답변

1

7 세그먼트 표시에 16 진수를 직접 지정할 수 없습니다. 이를 위해 디코더를 사용해야합니다. 코드를 VHDL code for Hexadecimal to 7-Segment Display Converter.

library IEEE; 
use IEEE.STD_LOGIC_1164.ALL; 

entity to_7seg is 
    Port (A : in STD_LOGIC_VECTOR (3 downto 0); 
      seg7 : out STD_LOGIC_VECTOR (6 downto 0) 
      ); 
end to_7seg; 

architecture Behavioral of to_7seg is 

begin 

--'a' corresponds to MSB of seg7 and 'g' corresponds to LSB of seg7. 
process (A) 
BEGIN 
    case A is 
     when "0000"=> seg7 <="0000001"; -- '0' 
     when "0001"=> seg7 <="1001111"; -- '1' 
     when "0010"=> seg7 <="0010010"; -- '2' 
     when "0011"=> seg7 <="0000110"; -- '3' 
     when "0100"=> seg7 <="1001100"; -- '4' 
     when "0101"=> seg7 <="0100100"; -- '5' 
     when "0110"=> seg7 <="0100000"; -- '6' 
     when "0111"=> seg7 <="0001111"; -- '7' 
     when "1000"=> seg7 <="0000000"; -- '8' 
     when "1001"=> seg7 <="0000100"; -- '9' 
     when "1010"=> seg7 <="0001000"; -- 'A' 
     when "1011"=> seg7 <="1100000"; -- 'b' 
     when "1100"=> seg7 <="0110001"; -- 'C' 
     when "1101"=> seg7 <="1000010"; -- 'd' 
     when "1110"=> seg7 <="0110000"; -- 'E' 
     when "1111"=> seg7 <="0111000"; -- 'F' 
     when others => NULL; 
    end case; 
end process; 

end Behavioral; 

두 개의 16 진수로 복사하십시오. 따라서 to_7seg 엔티티를 두 번 인스턴스화해야합니다. 그런 다음 이들 모듈의 출력을 FPGA 보드의 7 세그먼트 입력 포트에 연결하십시오.

seg1 : to_7seg port map(A(3 downto 0),HEX0); 
seg2 : to_7seg port map(A(7 downto 4),HEX1); 

또한 16 진수는 6 비트가 아니며 일반적으로 7 비트 여야합니다.

+0

감사합니다. 정확히 제가 알아야 할 것이 었습니다. –

관련 문제