Você está na página 1de 29

Descrição de Circuitos

Combinacionais em VHDL

Exemplos:
• Porta XOR;
• Mux;
• Codificador de prioridade;
• Decodificador para mostrador de 7
segmentos.
Porta XOR

• Uma porta XOR é descrita em três estilos (modelos)


diferentes: comportamental, lógico e estrutural.

• A descrição estrutural usa o fato de que A XOR B = A.B


+ A.B, como mostrado no esquemático da função lógica
XOR:
Porta XOR
• Entidade xorgate:
LIBRARY ieee;
USE ieee.STD_LOGIC_1164.ALL;
-- A declaração "library work;" já é implícita e não
-- precisa ser incluída

USE work.components.ALL; -- Somente p/ a versão estrutural


-- Torna visíveis as declarações de componentes em components.vhd
(versão estrutural)

ENTITY xorgate IS
PORT (a, b: IN STD_LOGIC;
c: OUT STD_LOGIC);
END xorgate;
Porta XOR Estrutural
• Primeiro precisam ser compilados os componentes da descrição
estrutural da porta XOR, as funções NOT, AND e OR. Suas
descrições em VHDL estão mostradas a seguir:

Inversor (arquivo inverter.vhd):

LIBRARY ieee;
USE ieee.STD_LOGIC_1164.ALL;

ENTITY inverter IS
PORT (a: IN STD_LOGIC;
an: OUT STD_LOGIC);
END inverter;

ARCHITECTURE logic_not OF inverter IS


BEGIN
an <= NOT a AFTER 5 ns;
-- Este atraso é ignorado na síntese
END logic_not;
Porta XOR Estrutural
Porta AND (arquivo and2.vhd): Porta OR (arquivo or2.vhd):

LIBRARY ieee;
LIBRARY ieee;
USE ieee.STD_LOGIC_1164.ALL; USE ieee.STD_LOGIC_1164.ALL;

ENTITY my_and2 IS ENTITY my_or2 IS


PORT (a,b: IN STD_LOGIC; PORT (a,b: IN STD_LOGIC;
s: OUT STD_LOGIC);
s: OUT STD_LOGIC);
END my_or2;
END my_and2;

ARCHITECTURE logic OF my_and2 IS ARCHITECTURE logic OF my_or2 IS


BEGIN BEGIN
s <= a OR b AFTER 8 ns;
s <= a AND b AFTER 10 ns;
-- AFTER é ignorado na síntese
-- Este atraso é ignorado na síntese END logic;
END logic;
Construindo a hierarquia

• Todos os blocos de nível hierárquico inferior utilizados


na descrição estrutural de um circuito têm que ser
previamente validados (simulados corretamente) e
sintetizados, o que foi feito para as entidades
inverter, my_and2 e my_or2.

• A seguir é mostrado um pacote com as declarações dos


componentes, permitindo que os mesmos possam ser
reaproveitados em diversas unidades de projeto.

• Depois declara-se a entidade de nível superior xorgate


e suas três arquiteturas.
Construindo a hierarquia
LIBRARY ieee;
USE ieee.STD_LOGIC_1164.ALL;
-- Este arquivo contém as declarações de componentes dentro
-- do package "components". Ao ser compilado,
-- este package vai para a biblioteca work, por default.

PACKAGE components IS
COMPONENT inverter
PORT (a: IN STD_LOGIC;
an: OUT STD_LOGIC);
END COMPONENT;

COMPONENT my_and2
PORT (a,b: IN STD_LOGIC;
s: OUT STD_LOGIC);
END COMPONENT;

COMPONENT my_or2
PORT (a,b: IN STD_LOGIC;
s: OUT STD_LOGIC);
END COMPONENT;
END components;
Arquiteturas para xorgate

• A primeira arquitetura descreve a função ou-exclusivo


utilizando uma atribuição condicional de sinal;

• A segunda arquitetura também é comportamental,


porém utiliza um processo para descrever o ou-
exclusivo;

• A terceira arquitetura utiliza o operador lógico XOR que


é parte integrante da linguagem VHDL;

• E a quarta constrói a porta lógica XOR a partir dos


componentes AND, OR e NOT criados anteriormente.
Arquiteturas para xorgate

-- Porta lógica OU-Exclusivo


-- modelada no estilo comportamental concorrente.
ARCHITECTURE behav OF xorgate IS
BEGIN
c <= '0' WHEN a = '0' AND b = '0' ELSE
'1' WHEN a = '0' AND b = '1' ELSE
'1' WHEN a = '1' AND b = '0' ELSE
'0' WHEN a = '1' AND b = '1' ELSE
'X' ;
END behav;
Arquiteturas para xorgate
-- Porta lógica OU-Exclusivo
-- modelada no estilo comportamental sequencial.
ARCHITECTURE behav2 OF xorgate IS
BEGIN
PROCESS(a,b)
BEGIN
IF a = b THEN
c <= '0';
ELSE
c <= '1';
END IF;
END PROCESS;
END behav2;
Arquiteturas para xorgate

-- Porta lógica OU-Exclusivo modelada no estilo lógico ou RTL.


ARCHITECTURE logic OF xorgate IS
BEGIN
c <= a XOR b;
END logic;
Arquiteturas para xorgate
-- Porta lógica OU-Exclusivo modelada no estilo estrutural
ARCHITECTURE structural OF xorgate IS
SIGNAL na, nb, nab, anb: STD_LOGIC;
-- Os componentes foram declarados no package (VHDL'93)
-- Uma configuração pode ser inserida na área declarativa de uma arquitetura
FOR u1,u2: inverter
USE ENTITY work.inverter(logic_not);
-- library_name.entity_name(architecture_name)
FOR u3,u4: my_and2
USE ENTITY work.my_and2(logic);
FOR u5: my_or2
USE ENTITY work.my_or2(logic);

BEGIN
u1: inverter PORT MAP (a, na);
u2: inverter PORT MAP (b, nb);
u3: my_and2 PORT MAP (na, b, nab);
u4: my_and2 PORT MAP (a, nb, anb);
u5: my_or2 PORT MAP (nab, anb, c);
END structural;
Arquiteturas para xorgate

• O procedimento adotado para a descrição


estrutural, de declarar os componentes em um
pacote e depois incluir o pacote no arquivo da
entidade final (xorgate), sem declarar os
componentes na arquitetura, somente é aceito
na versão VHDL '93.
Arquiteturas para xorgate

• Exemplo de configuração:

CONFIGURATION parts OF xorgate IS


FOR logic -- nome da arquitetura selecionada para
-- simulação/síntese
END FOR;
END parts;

• A configuração chamada parts é associada com a entidade de


nível superior (xorgate) na hierarquia do projeto, nomeando
também a arquitetura de nível superior (logic).
• A configuração parts seleciona qual das quatro arquiteturas
disponíveis para a entidade xorgate será utilizada na simulação e
na síntese. Os resultados serão obtidos para a arquitetura logic.
Resultados para xorgate

• A síntese de xorgate para um mesmo


FPGA da Altera (família MAX3000)
forneceu resultados idênticos para as
quatro arquiteturas, com o mesmo
consumo de recursos internos e mesmo
tempo de atraso.
Multiplexador 2 X 1

• Um multiplexador ou mux é um circuito combinacional de n


entradas de informação, uma saída y e m (= log2n) entradas de
seleção.

• Será descrito, simulado e sintetizado um MUX 2x1 (duas entradas


e uma saída), no qual as entradas e a saída são barramentos de 8
bits de largura, enquanto o sinal S possui 1 bit de comprimento.

MUX 2x1 com 8 bits de largura:


Multiplexador 2 x 1: modelo VHDL

LIBRARY ieee;
USE ieee.STD_LOGIC_1164.ALL;

ENTITY mux2to1 IS
PORT(s: IN STD_LOGIC;
zero, one: IN STD_LOGIC_VECTOR(7 DOWNTO 0);
y: OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END mux2to1;

ARCHITECTURE behavior OF mux2to1 IS


BEGIN
y <= one WHEN s='1' ELSE
zero;
END behavior;
Multiplexador 2 X 1

• A entidade mux2to1 define a interface externa para o


modelo.

• A especificação de faixa no tipo STD_LOGIC_VECTOR


define a largura do sinal:

– STD_LOGIC_VECTOR (n2 DOWNTO n1) – define uma palavra


binária cujo primeiro bit da esquerda para a direita é o mais
significativo (com índice n2 > n1).

– STD_LOGIC_VECTOR (n1 TO n2) – define uma palavra binária


cujo primeiro bit da esquerda para a direita é o menos
significativo (com índice n1 < n2).
Multiplexador 2 X 1
• A síntese mostra que o MUX de dois canais com 8 bits de largura é
implementado por 8 blocos MUX de dois canais de um bit de
largura, em paralelo.

• A figura mostra um exemplo de simulação, para um dispositivo da


família MAX7000B. O mux 2x1 ocupou 25% das LC's desse FPGA,
e o tpd máximo foi de 3,5 ns.
Codificador de Prioridade de 8 Níveis (Octal-Binário)

• Um codificador de prioridade é um circuito que


possui uma hierarquia nas suas entradas, a qual
determina o valor que será apresentado na
saída.

• A saída será o valor em binário correspondente


à entrada de endereço mais alto que estiver
ativa.

• Se nenhuma entrada estiver ativa, é codificado


o valor “000” no vetor de saída, definindo o nível
de prioridade mais baixo (implícito).
Codificador de Prioridade de 8 Níveis (Octal-Binário)

Codificador com oito níveis de prioridade


Codificador de Prioridade de 8 Níveis (Octal-Binário)
Código VHDL
LIBRARY ieee;
USE ieee.STD_LOGIC_1164.ALL;

ENTITY priority IS
PORT (y1,y2,y3,y4,y5,y6,y7: IN STD_LOGIC;
vec: OUT STD_LOGIC_VECTOR(2 DOWNTO 0) );
END priority;

ARCHITECTURE behavior OF priority IS


BEGIN
vec <= "111" WHEN y7='1' ELSE
"110" WHEN y6='1' ELSE
"101" WHEN y5='1' ELSE
"100" WHEN y4='1' ELSE
"011" WHEN y3='1' ELSE
"010" WHEN y2='1' ELSE
"001" WHEN y1='1' ELSE
"000";
END behavior;
Codificador de Prioridade de 8 Níveis (Octal-Binário)

• Uma atribuição condicional é muito adequada para descrever o


comportamento do codificador.

• Na figura estão ilustradas as formas de onda da simulação do codificador


de prioridade de 8 níveis descrito em VHDL.

• O dispositivo utilizado para a síntese foi um FPGA da família MAX3000. O


tpd máximo foi de 4,5 ns, e a ocupação de LC's do CI foi de 9%.
Decodificador para Mostrador de 7 Segmentos

• Um decodificador para mostrador de 7 segmentos é


descrito, com duas arquiteturas (comportamentos)
possíveis:
– Entrada em BCD;
– Entrada em binário de 4 bits.

LIBRARY ieee;
USE ieee.std_logic_1164.ALL;

-- decodificador para mostrador de 7 segmentos

ENTITY decod_7seg IS
PORT (entrada: IN INTEGER RANGE 0 TO 15;
abcdefg: OUT STD_LOGIC_VECTOR(6 DOWNTO 0));
END decod_7seg;
Decodificador para Mostrador de 7 Segmentos

ARCHITECTURE BCD OF decod_7seg IS


BEGIN
-- abcdefg
abcdefg <= "1111110" WHEN entrada = 0 ELSE
"0110000" WHEN entrada = 1 ELSE
"1101101" WHEN entrada = 2 ELSE
"1111001" WHEN entrada = 3 ELSE
"0110011" WHEN entrada = 4 ELSE
"1011011" WHEN entrada = 5 ELSE
"1011111" WHEN entrada = 6 ELSE
"1110000" WHEN entrada = 7 ELSE
"1111111" WHEN entrada = 8 ELSE
"1110011" WHEN entrada = 9 ELSE
"XXXXXXX";
END BCD;
Decodificador de BCD para Mostrador de 7 Segmentos
Decodificador para Mostrador de 7 Segmentos

ARCHITECTURE binario OF decod_7seg IS


BEGIN
WITH entrada SELECT
-- abcdefg
abcdefg <= "1111110" WHEN 0,
"0110000" WHEN 1,
"1101101" WHEN 2,
"1111001" WHEN 3,
"0110011" WHEN 4,
"1011011" WHEN 5,
"1011111" WHEN 6,
"1110000" WHEN 7,
"1111111" WHEN 8,
"1111011" WHEN 9,
"1110111" WHEN 10,
"0011111" WHEN 11,
"1001110" WHEN 12,
"0111101" WHEN 13,
"1001111" WHEN 14,
"1000111" WHEN 15;
END binario;
Decodificador para Mostrador de 7 Segmentos
Decodificador para Mostrador de 7 Segmentos

• Uma configuração seleciona a arquitetura


a sintetizar e simular.

CONFIGURATION options OF decod_7seg IS


FOR binario -- nome da arquitetura selecionada para
-- simulação/síntese
END FOR;
END options;

Você também pode gostar