Files
Bluetooth_VHDL/display.vhdl

78 lines
3.0 KiB
VHDL

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity display is --Implementao do componente Display
port( NUM7, NUM6, NUM5, NUM4, NUM3, NUM2, NUM1, NUM0: in std_logic_vector(3 downto 0);
CLK: in std_logic;
CS, Dout: out std_logic);
end display;
architecture comportamento of display is
--Declarao e inicializao das variveis---------------------
signal EN: std_logic_vector(8 downto 0):="000000000"; --ontador de 9 bits
signal palavra, proxpalavra: std_logic_vector(15 downto 0):="0000000000000000"; --palavra na fila de bits e proxpalavra
signal proxnum, proxdisplay: std_logic_vector(3 downto 0); --sinais de controle de algarismo e posicao do display
signal Dis: std_logic_vector(2 downto 0); --Sinal da posicao da posicao a partir do contador de 9 bits
signal proxfig,Fig: std_logic_vector(1 downto 0):="00"; --Sinal que pega o bit mais significativo e o sexto bit, para a logica de configuraao da palavra
signal configur: std_logic:='0';
---------------------------------------------------------------
begin
Dis<=EN(7 downto 5); --Posicao do display baseada no contador de 9 bits
proxnum <= NUM1 when Dis="001" else
NUM2 when Dis="010" else
NUM3 when Dis="011" else
NUM4 when Dis="100" else
NUM5 when Dis="101" else
NUM6 when Dis="110" else
NUM7 when Dis="111" else
NUM0;
proxdisplay <= "0010" when Dis="001" else
"0011" when Dis="010" else
"0100" when Dis="011" else
"0101" when Dis="100" else
"0110" when Dis="101" else
"0111" when Dis="110" else
"1000" when Dis="111" else
"0001";
proxpalavra<= "0000110000000001" when (configur = '0' and Dis = "000") else -- modo normal
"0000101111111111" when (configur = '0' and Dis = "001") else -- scan todos
"0000101000001111" when (configur = '0' and Dis = "010") else -- intensidade
"0000100111111111" when (configur = '0' and Dis = "011") else -- BCD
--"1111111111111111" when (configur = '0' and Dis = "100") else
--"0000001100000111";
--"0000001101010101";
--"0000"&"0001"&"01010111";
"0000"&proxdisplay&"0000"&proxnum;
process(CLK) --Processo que atualiza os valores do componente
begin
if(CLK'event and CLK='0') then -- As configuraes de proximo estado podem ser feitas a qualquer momento
EN<=EN+"000000001";
configur <= EN(8) or configur;
if(EN(4) = '0') then --Coloca a proxpalavra na fila de bits no "final" do CS='1'
palavra<=proxpalavra;
else
palavra<=palavra(14 downto 0)&'0'; --Coloca o proximo bit da fila no bus a cada clock quando CS='0'
-- palavra<='0'&palavra(15 downto 1); --Coloca o proximo bit da fila no bus a cada clock quando CS='0'
end if;
end if;
end process;
Dout<=palavra(15); --Bus: sinal sendo passado para o display
-- Dout<=palavra(0); --Bus: sinal sendo passado para o display
CS <= not EN(4); --Sinal CS que controla a habilitao da escrita no display
end comportamento;