VHDL TRANSMISSÂO ASSINCRONO VHDL
Por: Fabiano Azambuja • 9/8/2015 • Trabalho acadêmico • 567 Palavras (3 Páginas) • 355 Visualizações
INTERFACE RX ASSINCRONO:
library IEEE;
use IEEE.std_logic_1164.all;
package envioAssincrono is
type ESTADO_RECEPCAO is (esperaSend, baixaAck);
end envioAssincrono;
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use work.envioAssincrono.all;
entity InterfaceAssincronaRX is
port(clock : in STD_LOGIC;
reset : in STD_LOGIC;
-- Interface de comunicacao assincrona
receive : in STD_LOGIC;
accept : out STD_LOGIC;
dataIn : in STD_LOGIC_VECTOR(7 downto 0);
-- Interface com a maquina local
dadoParaMaq : out STD_LOGIC_VECTOR(7 downto 0);
dadoRecebido: out STD_LOGIC
);
end InterfaceAssincronaRX;
architecture InterfaceAssincronaRX of InterfaceAssincronaRX is
signal estadoRx: ESTADO_RECEPCAO;
signal regDataIn: STD_LOGIC_VECTOR(7 downto 0);
begin
dadoParaMaq <= regDataIn;
Recepcao: process(clock, reset)
begin
if(reset = '1') then
dadoRecebido <= '0';
accept <= '0';
estadoRx <= esperaSend;
elsif(clock'event and clock='1') then
case estadoRx is
when esperaSend =>
if receive = '1' then
accept <= '1';
regDataIn <= dataIn;
dadoRecebido <= '1';
estadoRx <= baixaAck;
end if;
when baixaAck =>
if receive = '0' then
dadoRecebido <= '0';
accept <= '0';
estadoRx <= esperaSend;
end if;
when others=> null;
end case;
end if;
end process;
end InterfaceAssincronaRX;
INTERFACE TX ASSINCRONO:
library IEEE;
use IEEE.std_logic_1164.all;
package definicoesTransmissaoAssincrona is
type ESTADO_TRANSMISSAO is (esperaDados, esperaAck, esperaFimAck);
end definicoesTransmissaoAssincrona;
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use work.definicoesTransmissaoAssincrona.all;
entity InterfaceAssincronaTX is
port(clock : in STD_LOGIC;
reset : in STD_LOGIC;
-- Interface de comunicacao assincrona
send : out STD_LOGIC;
ack : in STD_LOGIC;
dataOut : out STD_LOGIC_VECTOR(7 downto 0);
-- Interface com a maquina local
dadoDaMaq : in STD_LOGIC_VECTOR(7 downto 0);
prontoParaProximoDado: out STD_LOGIC;
transmitirDado: in STD_LOGIC
);
end InterfaceAssincronaTX;
architecture InterfaceAssincronaTX of InterfaceAssincronaTX is
signal estadoTx: ESTADO_TRANSMISSAO;
signal regDataOut: STD_LOGIC_VECTOR(7 downto 0);
begin
dataOut <= regDataOut;
Transmissao: process(clock, reset)
begin
if(reset = '1') then
estadoTx <= esperaDados;
prontoParaProximoDado <= '0';
send <= '0';
elsif(clock'event and clock='1') then
case estadoTx is
when esperaDados =>
prontoParaProximoDado <= '0';
if transmitirDado = '1' then
send <= '1';
regDataOut <= dadoDaMaq;
estadoTx <= esperaAck;
end if;
when esperaAck =>
if ack = '1' then
send <= '0';
estadoTx <= esperaFimAck;
end if;
when esperaFimAck =>
if ack = '0' then
prontoParaProximoDado
...