Este relatório descreve simulações realizadas em laboratório de circuitos digitais sobre um multiplexador e um decodificador implementados em VHDL usando diferentes abordagens. Foram realizadas simulações funcionais e temporais nos circuitos, comparando resultados como atraso e representação gráfica. Conclui-se que as abordagens com SELECT e CASE são mais simples para representar os circuitos.
Mapas Mentais - Português - Principais Tópicos.pdf
Relatório multiplexadores e decodificadores
1. UNIVERSIDADE FEDERAL DE SERGIPE (UFS)
CENTRO DE CIÊNCIAS EXATAS E
TECNOLÓGICAS (CCET)
DEPARTAMENTO DE COMPUTAÇÃO (DCOMP)
DISCIPLINA: LABORATÓRIO DE CIRCUITOS II
PROFESSOR: EDWARD MORENO
RELATÓRIO PRATICAS 1 E 2
MULTIPLEXADOR E DECODIFICADOR
Por
Flavio de Oliveira Rodrigues
Diogo Teobaldo dos Santos
Data: 30/11/2014 Prática DATA: 06/11/2014 Entrega
2. 1. INTRODUÇÃO:
Este relatório descreve as práticas realizadas em laboratório nos dias 23/10 e 30/10
que tiveram por objetivo reforçar e fixar o aprendizado do conteúdo da disciplina Circuitos
Digitais II ministrado em sala de aula. Foram utilizados os softwares especificados para a
realização das atividades e não foram realizados experimentos em circuitos físicos.
2. DESCRIÇÃO PRINCIPAL DA ATIVIDADE
As práticas consistiram de demonstrar o funcionamento e simular os resultados
gerados nos circuitos Multiplexador e Decodificador.
2.1 Multiplexador:
O circuito Multiplexador é usado para juntar (multiplexar) vários sinais de entrada e
transformá-loemumúnicosinal de saída.Esse sinal de saída contém os sinais de entrada que
são alternados através de alguma constante - tempo e frequência, por exemplo. No caso da
nossa simulação, uma variável de controle é usada para selecionar um desses sinais quando
desejamos apresenta-lo.
Foram utilizados 4 sinais de entrada (x1, x2, x3, x4), uma saída (s) e uma variável do
tipo vetor (sel) de 2 bits que é usada para selecionar o sinal a ser exibido na saída.
2.1.1 Metodologia aplicada:
Seguimos os seguintes passos:
Criação de um projeto em uma pasta específica para cada abordagem utilizada;
Implementação do código VHDL (um código para cada abordagem);
Compilação;
Verificação do RTL (diagrama do circuito);
Teste no simulador;
Verificação dos resultados funcional e temporal.
2.1.2 Abordagens:
Foram utilizadas 4 abordagens na implementação do multiplexador. Para cada uma
delas, obviamente, foi gerado um código VHDL.
a) With select:
Códigofonte:
libraryIEEE;
use IEEE.std_logic_1164.all;
3. entitymultiplexadoris
port(x1,x2,x3, x4: IN std_logic;
sel : IN std_logic_vector(1downto0);
s : OUT std_logic);
endentity;
architecture mux of multiplexadoris
begin
WITH (sel) select
s <= x1 WHEN "00",
x2 WHEN "01",
x3 WHEN "10",
x4 WHEN "11",
'0' Whenothers;
endmux;
b) CASE
Códigofonte:
libraryIEEE;
use IEEE.std_logic_1164.all;
entity multiplexador_case is
port(x1,x2,x3, x4: IN std_logic;
sel : IN std_logic_vector(1downto0);
s : OUT std_logic);
endentity;
architecture mux of multiplexador_case is
begin
mux:PROCESS(sel,x1,x2,x3, x4)
begin
CASE sel IS
WHEN "00" => s <= x1;
WHEN "01" => s <= x2;
WHEN "10" => s <= x3;
WHEN "11" => s <= x4;
WHEN OTHERS => s <= 'X';
END CASE;
endPROCESSmux;
endmux;
c) IF – ELSE
Códigofonte:
libraryIEEE;
use IEEE.std_logic_1164.all;
4. entitymultiplexador_if is
port(x1,x2,x3, x4: IN std_logic;
sel : IN std_logic_vector(1downto0);
s : OUT std_logic);
endentity;
architecture mux of multiplexador_if is
begin
mux:PROCESS(sel,x1,x2,x3, x4)
begin
IF (sel = "00") THEN
s <= x1;
ELSIF(sel = "01") THEN
s <= x2;
ELSIF(sel = "10") THEN
s <= x3;
ELSIF(sel = "11") THEN
s <= x4;
ELSE -- (s0 or s1 are not0 or 1)
s <= 'X';
END IF;
endPROCESSmux;
endmux;
d) Lógico
Códigofonte:
libraryIEEE;
use IEEE.std_logic_1164.all;
entitymultiplexador_logicois
port(x1,x2,x3, x4: IN std_logic;
sel : IN std_logic_vector(1downto0);
s : OUT std_logic);
endentity;
architecture mux of multiplexador_logicois
begin
s <= x1 WHEN sel = "00" ELSE
x2 WHEN sel = "01" ELSE
x3 WHEN sel = "10" ELSE
x4 WHEN sel = "11" ELSE
'X';
endmux;
5. 2.2 Decodificador
Um Decodificador é um circuito lógico combinatório onde se recebe um conjunto de
entrada,que representa um número binário, e ativa em alto apenas a saída que corresponde
ao númerorecebido.Podemosdizer que decodificador é o circuito inverso ao multiplexador.
Foram utilizadas formas de implementação, uma para as abordagens com SELECT e
CASE, na qual utilizamos 2 vetores (entrada com 3 posições e saída com 8 posições) e outra
para IF-ELSE e Portas Lógicas, onde foram utilizadas 3 entradas (a, b, c) e 8 saídas (d0, d1, d2,
d3, d4, d5, d6, d7). Diferente do multiplexador, onde tínhamos uma variável para “setar” um
sinal na saída,no decodificador,asaídaé determinadapelacombinaçãodas próprias entradas
(vetor entrada ou a, b, c), em todas as implementações feitas.
2.2.1 Metodologia aplicada:
Seguimos os seguintes passos:
Criação de um projeto em uma pasta específica para cada abordagem utilizada;
Implementação do código VHDL (um código para cada abordagem);
Compilação;
Verificação do RTL (diagrama do circuito);
Teste no simulador;
Verificação dos resultados funcional e temporal.
2.2.2 Abordagens:
Foram utilizadas 4 abordagens na implementação do multiplexador. Para cada uma
delas, obviamente, foi gerado um código VHDL.
Sendo elas:
a) With Select
Código fonte:
library IEEE;
library ieee;
use ieee.std_logic_1164.all;
entity decodificador is
port(entrada:in std_logic_vector (0 to 2);
saida:out std_logic_vector (0 to 7));
end decodificador;
architecture decode of decodificador is
begin
with entrada select
saida <= "00000001" when "000",
6. "00000010" when "001",
"00000100" when "010",
"00001000" when "011",
"00010000" when "100",
"00100000" when "101",
"01000000" when "110",
"10000000" when "111",
"ZZZZZZZZ" when others;
end decode;
b) IF Else
Código fonte:
library IEEE;
library ieee;
use ieee.std_logic_1164.all;
entity decodificador is
port(a, b, c:in std_logic;
s:out std_logic_vector (7 downto 0));
end decodificador;
architecture decode of decodificador is
begin
process(a, b, c)
begin
if ((a = '0') and ( b = '0') and (c = '0')) then s <= "00000001";
elsif (a = '1' and (b = '0') and (c = '0')) then s <= "00000010";
elsif ((a = '0') and (b = '1') and (c = '0')) then s <= "00000100";
elsif ((a = '1') and (b = '1') and (c = '0')) then s <= "00001000";
elsif ((a = '0') and (b = '0') and (c = '1')) then s <= "00010000";
elsif ((a = '1') and (b = '0') and (c = '1')) then s <= "00100000";
elsif ((a = '0') and (b = '1') and (c = '1')) then s <= "01000000";
else s <= "10000000";
end if;
end process;
end decode;
c) Case
Código fonte:
library IEEE;
library ieee;
7. use ieee.std_logic_1164.all;
entity decodificador is
port(entrada:in std_logic_vector (0 to 2);
saida:out std_logic_vector (0 to 7));
end decodificador;
architecture decode of decodificador is
begin
process(entrada)
begin
case entrada is
when "000" => saida <= "00000001";
when "001" => saida <= "00000010";
when "010" => saida <= "00000100";
when "011" => saida <= "00001000";
when "100" => saida <= "00010000";
when "101" => saida <= "00100000";
when "110" => saida <= "01000000";
when "111" => saida <= "10000000";
when others => saida <= "ZZZZZZZZ";
end case;
end process;
end decode;
d) Portas Lógicas
Código fonte:
library IEEE;
library ieee;
use ieee.std_logic_1164.all;
entity decodificador is
port(a,b,c:in std_logic;
d0,d1,d2,d3,d4,d5,d6,d7:out std_logic);
end decodificador;
architecture decode of decodificador is
begin
d0<= (not a) and (not b) and (not c);
d1<= a and (not b) and (not c);
d2<= (not a) and b and (not c);
d3<= a and b and (not c);
d4<= (not a) and (not b) and c;
8. d5<= a and (not b) and c;
d6<= (not a) and b and c;
d7<= a and b and c;
end decode;
3. RESULTADOS DE SIMULAÇÃO
Foram utilizadosossoftwaresQuartus11, onde foi realizadaacodificaçãoe coletade
resultadosde compilação, assimcomoo delay e estruturadocircuitoe o AlteraPSimulator
onde foramrealizadasassimulaçõesemsi - simulações temporal e funcional.
O modelode FBGA utilizadofoi oCyclone II.
3.1 Resultadospara o multiplexador:
Foram feitas simulações para todas as abordagens utilizadas na implementação.
Abaixo, segue as figuras com os resultados para todas as simulações realizadas e ao
final uma breve comparação.
a) WITH SELECT
Figura 1: Resultado da compilação
9. Figura 2: Representação gráfica do circuito
Figura 3: Delay (atraso)
Figura 4: Resultado da simulação temporal
10. Figura 5: Resultado da simulação funcional
OBS: Na simulação temporal são produzidos pelo simulador uns pulsos de sinal. Eles se dão
devido a mudança de estado de 2 ou mais entradas ao mesmo tempo. Isso pode ser tratado
fazendo que mudanças de estado e sinais não ocorram ao mesmo tempo.
b) CASE
Figura 6: Resumo da compilação
11. Figura 7: Representação gráfica do circuito
Figura 8: Delay (atraso)
Figura 9: Resultado da simulação funcional
12. Figura 10: Resultado da simulação temporal
c) IF – ELSE
Figura 11: Resultado da compilação
Figura 12: Delay (atraso)
14. Figura 15: Resultado da simulação funcional
d) Lógico
Figura 16: Resultado da compilação
15. Figura 17: Representação gráfica do circuito
Figura 18: Delay (atraso)
Figura 19: Resultado da simulação funcional
16. Figura 20: Resultado da simulação temporal
3.1.1 Comparação dos resultadospara todas as abordagens.
Comopodemosverificarnasfiguras acima, os resultados das simulações no Altera AP
Simulatorforam iguais para todas as abordagens implementadas. Isso mostra que os códigos
fontes estão corretos, pois produziram os mesmos resultados.
Apesar das diferentes formas usadas para se implementar o circuito multiplexador,
não houve diferenças nos dados coletados na compilação e nem no delay. Podemos notar
apenasdiferençasnarepresentaçãodocircuito.UtilizandoasimplementaçõescomIF e lógico,
vemosque o circuitoficamaiscomplexoe consequentemente ocupamaisespaçofisicamente.
3.2 Decodificador
Foram feitassimulaçõesparatodasas abordagensutilizadasnaimplementação.
Abaixo,segue asfigurascomosresultadosparatodas as simulaçõesrealizadase ao
final umabreve comparação.
a) WithSelect
17. Figura 21: Resumo de compilação no Quartus II
Figura 22: Delay (atraso)
27. Figura 39: Simulação funcional
Figura 40: Simulação temporal
3.2.1 Comparação dos resultadospara todas as abordagens.
Da mesma forma que no multiplexador, os resultados das simulações no Altera AP
Simulatorsãoiguais para todas as abordagens e formas de implementação. Já nos resultados
obtidosnoQuartus,podemosnotar diferençasnoDelaye narepresentaçãográficadocircuito.
Isso se deu pela diferença na forma de implementação para as abordagens com SECECT, IF-
ELSE e CASE, PORTAS LÓGICAS.
Na implementação com Portas Lógicas e IF – ELSE, o circuito ficou mais complexo e
consequentemente, mais difícil de se implementar numa placa por exemplo.
28. 4. CONCLUSÃO:
Dentre dificuldades e facilidades encontradas durante a realização do trabalho
podemos citar:
Durante as simulações no software AP Simulator, foi possível notar que não havia
necessidadede se efetuarosdoistiposde simulações(funcionale temporal), jáque os
resultados eram iguais para todas as abordagens e havia apenas necessidade de
conferência da solução (se estava correta ou não). Essa conferência também poderia
ser feita pelo RTL Viewer no Quartus, tendo como base alguma das implementações
que já se havia conferido.
Por simplicidade da representação do circuito, recomendamos o uso das abordagens
com SELECT ou CASE.
Quanto à implementação dos códigos VHDL, há uma equivalência quanto ao grau de
dificuldade. A implementação usando CASE exige o uso do recurso “PROCESS” da
linguagem, para que seja compilado com sucesso.
Dificuldades iniciais para seguir os passos desde a codificação até a simulação.
Apesar das dificuldades, após pega a prática, o trabalho transcorreu bem e pode ser
terminado sem muita dificuldade e dentro do prazo. Os resultados foram produzidos como
esperado. A prática no geral foi útil e importante para fixar o conteúdo e ter uma noção do
funcionamento prático dos circuitos estudados.