78 lines
3.0 KiB
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;
|
|
|