Você está na página 1de 18

A VHSIC Hardware Description Language (VHDL) é uma linguagem de descrição de

hardware (HDL) que pode modelar o comportamento e a estrutura de sistemas digitais em


vários níveis de abstração, desde o nível do sistema até o de portas lógicas, para entrada de
projeto, documentação, e fins de verificação. Desde 1987, o VHDL foi padronizado pelo
Instituto de Engenheiros Elétricos e Eletrônicos (IEEE) como IEEE Std 1076; cuja versão
mais recente é IEEE Std 1076-2019. Para modelar sistemas de sinais analógicos e mistos, foi
desenvolvido um HDL padronizado IEEE baseado em VHDL chamado VHDL-AMS
(oficialmente IEEE 1076.

VHDL é nomeado após o programa do Departamento de Defesa dos Estados Unidos que o
criou, o Programa de Circuitos Integrados de Alta Velocidade (VHSIC). No início da década
de 1980, o Programa VHSIC buscou um novo HDL para uso no projeto dos circuitos
integrados que pretendia desenvolver. O produto desse esforço foi o VHDL Versão 7.2,
lançado em 1985. O esforço para padronizá-lo como padrão IEEE começou no ano seguinte.

História

Em 1983, o VHDL foi originalmente desenvolvido a pedido do Departamento de Defesa dos


EUA para documentar o comportamento dos ASICs que as empresas fornecedoras incluíam
nos equipamentos. O padrão MIL-STD-454N[2] no Requisito 64 na seção 4.5.1
"Documentação ASIC em VHDL" requer explicitamente a documentação de "Dispositivos
Microeletrônicos" em VHDL.

A ideia de poder simular os ASICs a partir das informações desta documentação era tão
obviamente atraente que foram desenvolvidos simuladores lógicos que podiam ler os
arquivos VHDL. O próximo passo foi o desenvolvimento de ferramentas de síntese lógica
que lêem o VHDL e produzem uma definição da implementação física do circuito.

Devido ao Departamento de Defesa exigir o máximo possível da sintaxe para ser baseada em
Ada, a fim de evitar a reinvenção de conceitos que já haviam sido exaustivamente testados no
desenvolvimento de Ada, o VHDL empresta muito do Ada linguagem de programação em
conceito e sintaxe.
A versão inicial do VHDL, projetada para o padrão IEEE IEEE 1076-1987,[3] incluía uma
ampla gama de tipos de dados, incluindo numérico (inteiro e real), lógico (bit e booleano),
caractere e tempo, além de arrays de bits chamados bit_vector e de caractere chamado string.

Um problema não resolvido por esta edição, no entanto, foi a "lógica multivalorada", onde a
força de acionamento de um sinal (nenhuma, fraca ou forte) e valores desconhecidos também
são considerados. Isso exigia o padrão IEEE 1164, que definia os tipos lógicos de 9 valores:
escalar std_logic e sua versão vetorial std_logic_vector. Sendo um subtipo resolvido de seu
tipo pai std_Ulogic, os sinais tipados por std_logic permitem várias acionamentos para
modelar estruturas de barramento, por meio do qual a função de resolução conectada trata
adequadamente as atribuições conflitantes.

O IEEE 1076 atualizado, em 1993, tornou a sintaxe mais consistente, permitiu mais
flexibilidade na nomeação, estendeu o tipo de caractere para permitir caracteres imprimíveis
ISO-8859-1, adicionou o operador xnor, etc.[especificar]

Pequenas mudanças no padrão (2000 e 2002) adicionaram a ideia de tipos protegidos


(semelhante ao conceito de classe em C++) e removeram algumas restrições das regras de
mapeamento de portas.

Além do padrão IEEE 1164, vários padrões filhos foram introduzidos para estender a
funcionalidade da linguagem. O padrão IEEE 1076.2 adicionou melhor manuseio de tipos de
dados reais e complexos. O padrão IEEE 1076.3 introduziu tipos assinados e não assinados
para facilitar operações aritméticas em vetores. O padrão IEEE 1076.1 (conhecido como
VHDL-AMS) forneceu extensões de projeto de circuito analógico e de sinal misto.

Alguns outros padrões suportam o uso mais amplo de VHDL, notadamente VITAL
(Iniciativa VHDL para Bibliotecas ASIC) e extensões de projeto de circuito de micro-ondas.

Em junho de 2006, o Comitê Técnico VHDL da Accellera (delegado pelo IEEE para
trabalhar na próxima atualização do padrão) aprovou o chamado Draft 3.0 do VHDL-2006.
Ao mesmo tempo em que mantém total compatibilidade com versões mais antigas, esse
padrão proposto fornece várias extensões que facilitam a escrita e o gerenciamento de código
VHDL. As principais mudanças incluem a incorporação de padrões filho (1164, 1076.2,
1076.3) no padrão 1076 principal, um conjunto estendido de operadores, sintaxe mais flexível
de case e declarações de geração, incorporação de VHPI (VHDL Procedural Interface)
(interface para linguagens C/C++ ) e um subconjunto de PSL (Property Specification
Language). Essas alterações devem melhorar a qualidade do código VHDL sintetizável,
tornar os testbenches mais flexíveis e permitir um uso mais amplo de VHDL para descrições
em nível de sistema.

Estandardização

O padrão IEEE 1076 define a linguagem de descrição de hardware VHSIC, ou VHDL. Foi
originalmente desenvolvido sob o contrato F33615-83-C-1003 da Força Aérea dos Estados
Unidos concedido em 1983 a uma equipe da Intermetrics, Inc. como especialistas em idiomas
e contratante principal, Texas Instruments como especialistas em design de chips e IBM
como design de sistemas de computador especialistas. A linguagem passou por inúmeras
revisões e tem uma variedade de subpadrões associados a ela que a aumentam ou estendem
de maneiras importantes.

1076 foi e continua sendo um marco no projeto de sistemas eletrônicos.

Revisões
IEEE 1076-1987 Primeira revisão padronizada da versão 7.2 da linguagem da Força Aérea
dos Estados Unidos.
IEEE 1076-1993 (também publicado com ISBN 1-55937-376-8). Melhorias significativas
resultantes de vários anos de feedback. Provavelmente a versão mais usada com o maior
suporte de ferramentas do fornecedor.
IEEE 1076-2000. Revisão menor. Introduz o uso de tipos protegidos.
IEEE 1076-2002. Revisão menor de 1076-2000. As regras em relação às portas de buffer são
relaxadas.
IEC 61691-1-1:2004. Adoção IEC do IEEE 1076-2002.
IEEE 1076c-2007. Introduziu o VHPI, a interface de procedimento VHDL, que fornece ao
software os meios para acessar o modelo VHDL. A linguagem VHDL exigiu pequenas
modificações para acomodar o VHPI.
IEEE 1076-2008 (anteriormente referido como 1076-200x). Grande revisão lançada em
26/01/2009. Entre outras mudanças, este padrão incorpora um subconjunto básico de PSL,
permite genéricos em pacotes e subprogramas e introduz o uso de nomes externos.
IEC 61691-1-1:2011. Adoção IEC do IEEE 1076-2008.
IEEE 1076-2019. Revisão principal.
Padrões relacionados

IEEE 1076.1 VHDL Analógico e Sinal Misto (VHDL-AMS)


Pacotes padrão IEEE 1076.1.1 VHDL-AMS (stdpkgs)
Pacote Matemático IEEE 1076.2 VHDL
Pacote de síntese VHDL IEEE 1076.3 (vhdlsynth) (padrão numérico)
Pacote de síntese VHDL IEEE 1076.3 - Ponto flutuante (fphdl)
IEEE 1076.4 Timing (Iniciativa VHDL para Bibliotecas ASIC: vital)
Interoperabilidade de síntese VHDL IEEE 1076.6 (retirada em 2010)[11]
Pacotes de lógica multivalor IEEE 1164 VHDL (std_logic_1164)

Projeto

VHDL é geralmente usado para escrever modelos de texto que descrevem um circuito lógico.
Tal modelo é processado por um programa de síntese, somente se fizer parte do projeto
lógico. Um programa de simulação é usado para testar o projeto lógico usando modelos de
simulação para representar os circuitos lógicos que fazem interface com o projeto. Essa
coleção de modelos de simulação é comumente chamada de testbench.

Um simulador VHDL é tipicamente um simulador orientado a eventos.[12] Isso significa que


cada transação é adicionada a uma fila de eventos para um horário agendado específico. Por
exemplo. se uma atribuição de sinal ocorrer após 1 nanossegundo, o evento será adicionado à
fila pelo tempo +1ns. O atraso zero também é permitido, mas ainda precisa ser programado:
para esses casos, é usado o atraso delta, que representa um passo de tempo infinitamente
pequeno. A simulação alterna entre dois modos: execução de instruções, onde as instruções
acionadas são avaliadas, e processamento de eventos, onde os eventos na fila são
processados.

O VHDL tem construções para lidar com o paralelismo inerente aos projetos de hardware,
mas essas construções (processos) diferem em sintaxe das construções paralelas em Ada
(tarefas). Como Ada, o VHDL é fortemente tipado e não diferencia maiúsculas de
minúsculas. Para representar diretamente as operações que são comuns em hardware, existem
muitos recursos do VHDL que não são encontrados no Ada, como um conjunto estendido de
operadores booleanos, incluindo nand e nor.

O VHDL possui recursos de entrada e saída de arquivos e pode ser usado como uma
linguagem de uso geral para processamento de texto, mas os arquivos são mais comumente
usados por um banco de teste de simulação para dados de estímulo ou verificação. Existem
alguns compiladores VHDL que constroem binários executáveis. Nesse caso, pode ser
possível usar VHDL para escrever um testbench para verificar a funcionalidade do projeto
usando arquivos no computador host para definir estímulos, interagir com o usuário e
comparar resultados com os esperados. No entanto, a maioria dos designers deixa esse
trabalho para o simulador.

É relativamente fácil para um desenvolvedor inexperiente produzir código que simule com
sucesso, mas que não possa ser sintetizado em um dispositivo real ou seja grande demais para
ser prático. Uma armadilha em particular é a produção acidental de travas transparentes em
vez de flip-flops do tipo D como elementos de armazenamento.

Pode-se projetar hardware em um VHDL IDE (para implementação de FPGA, como Xilinx
ISE, Altera Quartus, Synopsys Synplify ou Mentor Graphics HDL Designer) para produzir o
esquema RTL do circuito desejado. Depois disso, o esquema gerado pode ser verificado
usando um software de simulação que mostra as formas de onda das entradas e saídas do
circuito após a geração do banco de testes apropriado. Para gerar um testbench apropriado
para um determinado circuito ou código VHDL, as entradas devem ser definidas
corretamente. Por exemplo, para entrada de clock, é necessário um processo de loop ou uma
instrução iterativa.

Um ponto final é que quando um modelo VHDL é traduzido em "portas e fios" que são
mapeados em um dispositivo lógico programável como um CPLD ou FPGA, então é o
hardware real que está sendo configurado, em vez do código VHDL sendo "executado "
como se estivesse em algum tipo de chip de processador.

Vantagens

A principal vantagem do VHDL, quando usado para projeto de sistemas, é que ele permite
que o comportamento do sistema necessário seja descrito (modelado) e verificado (simulado)
antes que as ferramentas de síntese traduzam o projeto em hardware real (portas e fios).
Outro benefício é que o VHDL permite a descrição de um sistema concorrente. VHDL é uma
linguagem de fluxo de dados na qual cada instrução é considerada para execução simultânea,
ao contrário das linguagens de computação procedural, como BASIC, C e código assembly,
onde uma sequência de instruções é executada sequencialmente uma instrução por vez.

Um projeto VHDL é multiuso. Sendo criado uma vez, um bloco de cálculo pode ser usado
em muitos outros projetos. No entanto, muitos parâmetros formais e funcionais do bloco
podem ser ajustados (parâmetros de capacidade, tamanho da memória, base do elemento,
composição do bloco e estrutura de interconexão).

Um projeto VHDL é portátil. Sendo criado para uma base de elementos, um projeto de
dispositivo de computação pode ser portado em outra base de elementos, por exemplo, VLSI
com várias tecnologias.

Uma grande vantagem do VHDL em relação ao Verilog original é que o VHDL possui um
sistema de tipo completo. Os designers podem usar o sistema de tipos para escrever um
código muito mais estruturado (especialmente declarando tipos de registro).

Exemplo de design
Em VHDL, um projeto consiste no mínimo de uma entidade que descreve a interface e uma
arquitetura que contém a implementação real. Além disso, a maioria dos designs importa
módulos de biblioteca. Alguns designs também contêm várias arquiteturas e configurações.

Uma porta AND simples em VHDL seria algo como:


- (este é um comentário VHDL)
/*
este é um comentário em bloco (VHDL-2008)
*/
-- importa std_logic da biblioteca IEEE
biblioteca IEEE;
use IEEE.std_logic_1164.all;
-- esta é a entidade
entidade ANDGATE é
porta (
I1 : em std_logic;
I2 : em std_logic;
O : out std_logic);
entidade final ANDGATE;
-- esta é a arquitetura
arquitetura RTL de ANDGATE é
começar
O <= I1 e I2;
arquitetura final RTL;
(Observe que RTL significa design de nível de transferência de registro.) Embora o exemplo
acima possa parecer verboso para iniciantes em HDL, muitas partes são opcionais ou
precisam ser escritas apenas uma vez. Geralmente funções simples como esta fazem parte de
um módulo comportamental maior, em vez de ter um módulo separado para algo tão simples.
Além disso, o uso de elementos como o tipo std_logic pode parecer à primeira vista um
exagero. Pode-se facilmente usar o tipo de bit integrado e evitar a importação da biblioteca no
início. No entanto, usando uma forma de lógica de muitos valores, especificamente lógica de
9 valores (U,X,0,1,Z,W,H,L,-), em vez de bits simples (0,1) oferece uma simulação muito
poderosa e ferramenta de depuração para o designer que atualmente não existe em nenhum
outro HDL.

Nos exemplos a seguir, você verá que o código VHDL pode ser escrito de uma forma muito
compacta. No entanto, designers mais experientes geralmente evitam essas formas compactas
e usam um estilo de codificação mais detalhado para facilitar a leitura e a manutenção.

Construções sintetizadas e modelos VHDL

O VHDL é frequentemente usado para dois objetivos diferentes: simulação de projetos


eletrônicos e síntese de tais projetos. Síntese é um processo onde um VHDL é compilado e
mapeado em uma tecnologia de implementação como um FPGA ou um ASIC.

Nem todas as construções em VHDL são adequadas para síntese. Por exemplo, a maioria das
construções que lidam explicitamente com temporização, como esperar 10 ns; não são
sintetizáveis apesar de serem válidos para simulação. Embora diferentes ferramentas de
síntese tenham recursos diferentes, existe um subconjunto sintetizado comum de VHDL que
define quais construções de linguagem e expressões idiomáticas são mapeadas em hardware
comum para muitas ferramentas de síntese. O IEEE 1076.6 define um subconjunto da
linguagem que é considerado o subconjunto de síntese oficial. Geralmente, é considerado
uma "melhor prática" escrever código muito idiomático para síntese, pois os resultados
podem ser incorretos ou abaixo do ideal para construções não padrão.
Modelo MUX

O multiplexador, ou 'MUX' como geralmente é chamado, é uma construção simples muito


comum no projeto de hardware. O exemplo abaixo demonstra um MUX simples de dois para
um, com entradas A e B, seletor S e saída X. Observe que existem muitas outras maneiras de
expressar o mesmo MUX em VHDL.

Modelo de trava

Uma trava transparente é basicamente um bit de memória que é atualizado quando um sinal
de habilitação é gerado. Novamente, existem muitas outras maneiras de expressar isso em
VHDL.

-- modelo de trava 1:
Q <= D quando habilitado = '1' senão Q;

-- modelo de trava 2:
Processo (todos)
começar
Q <= D quando (Ativar);
fim do processo;

flip-flops tipo D
O flip-flop tipo D amostra um sinal de entrada na borda ascendente (ou descendente) de um
clock. Este exemplo tem um reset assíncrono ativo-alto e amostras na borda ascendente do
clock.

DFF : processo (todos) é


começar
se RST então
Q <= '0';
elsif crescente_edge(CLK) então
Q <= D;
fim se;
finalizar processo DFF;

Outra maneira comum de escrever o comportamento acionado por borda em VHDL é com o
atributo de sinal 'evento'. Um único apóstrofo deve ser escrito entre o nome do sinal e o nome
do atributo.
DFF : processo (RST, CLK) é
começar
se RST então
Q <= '0';
elsif CLK'event e CLK = '1' então
Q <= D;
fim se;
finalizar processo DFF;
VHDL também se presta a "one-liners", como
DFF : Q <= '0' quando RST = '1' else D quando Ring_edge(clk);
ou
DFF : processo (todos) é
começar
se crescente_edge(CLK) então
Q <= D;
Q2 <= Q1;
fim se;
se RST então
Q <= '0';
fim se;
finalizar processo DFF;

O que pode ser útil se nem todos os sinais (registros) acionados por esse processo devem ser
redefinidos.

Exemplo: um contador

O exemplo a seguir é um contador ascendente com reset assíncrono, carga paralela e largura
configurável. Ele demonstra o uso do tipo 'unsigned', conversões de tipo entre 'unsigned' e
'std_logic_vector' e genéricos VHDL. Os genéricos estão muito próximos de argumentos ou
templates em outras linguagens de programação tradicionais como C++.

biblioteca IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all; -- para o tipo não assinado

entidade COUNTER é
genérico (
LARGURA : em natural := 32);
porta (
RST : em std_logic;
CLK : em std_logic;
LOAD : em std_logic;
DATA : em std_logic_vector(WIDTH-1 até 0);
Q : out std_logic_vector(WIDTH-1 até 0));
entidade final CONTADOR;

arquitetura RTL de COUNTER é

começar
processo (todos) é
começar
se RST então
Q <= (outros => '0');
elsif crescente_edge(CLK) então
se LOAD então
Q <= DADOS;
senão
Q <= std_logic_vector(unsigned(Q) + 1); --Adição não assinada, convertida de volta
para std_logic_vector
fim se;
fim se;
fim do processo;

Arquitetura final RTL;

Contadores mais complexos podem adicionar instruções if/then/else dentro do elsif de


subida_edge(CLK) para adicionar outras funções, como habilitar contagem, parar ou rolar em
algum valor de contagem, gerar sinais de saída como sinais de contagem de terminal, etc.
Cuidado deve ser tomadas com a ordenação e aninhamento de tais controles se usados em
conjunto, a fim de produzir as prioridades desejadas e minimizar o número de níveis lógicos
necessários.

Construções somente de simulação

Um grande subconjunto de VHDL não pode ser convertido em hardware. Este subconjunto é
conhecido como o subconjunto não-sintetizável ou apenas de simulação do VHDL e só pode
ser usado para prototipagem, simulação e depuração. Por exemplo, o código a seguir irá gerar
um clock com uma frequência de 50 MHz. Ele pode, por exemplo, ser usado para acionar
uma entrada de clock em um projeto durante a simulação. É, no entanto, uma construção
apenas de simulação e não pode ser implementada em hardware. No hardware real, o relógio
é gerado externamente; ele pode ser reduzido internamente pela lógica do usuário ou
hardware dedicado.

processo
começar
CLK <= '1'; aguarde 10 NS;
CLK <= '0'; aguarde 10 NS;
fim do processo;

As construções apenas de simulação podem ser usadas para construir formas de onda
complexas em um tempo muito curto. Tal forma de onda pode ser usada, por exemplo, como
vetores de teste para um projeto complexo ou como protótipo de alguma lógica de
sintetizador que será implementada futuramente.

processo
começar
espere até START = '1'; -- espere até que START esteja alto

para i em um loop de 1 a 10 - aguarde alguns períodos de clock ...


espere até borda_subida(CLK);
laço final;

para i em loop de 1 a 10 -- escreva os números de 1 a 10 em DATA, 1 a cada ciclo


DATA <= to_unsigned(i, 8);
espere até borda_subida(CLK);
laço final;

-- espera até que a saída mude


aguarde RESULTADO;

-- agora aumenta o ACK para o período do relógio


ACK <= '1';
espere até borda_subida(CLK);
ACK <= '0';

-- e assim por diante...


fim do processo;

Bibliotecas padrão
Também referido como pacotes padrão.
Pacote Padrão IEEE
O Pacote Padrão IEEE inclui o seguinte:
numeric_std
std_logic_1164
std_logic_arith
std_logic_unsigned
std_logic_signed
std_logic_misc
Simuladores VHDL

Comercial:
Aldec Active-HDL

Cadência Incisiva

Mentor Graphics ModelSim

Mentor Graphics Quest Simulador Avançado

Sinopse VCS-MX

Xilinx Vivado Design Suite (apresenta o Vivado Simulator)

Outro:

EDA Playground - IDE VHDL baseado em navegador gratuito (usa Synopsys VCS, Cadence
Incisive, Aldec Riviera-PRO e GHDL para simulação VHDL)

GHDL é um compilador VHDL de código aberto que pode executar programas VHDL.
GHDL no GitHub

boot by freerangefactory.org é um compilador e simulador de VHDL baseado em GHDL e


GTKWave

VHDL Simili da Symphony EDA é um simulador VHDL comercial gratuito.

nvc de Nick Gasson é um compilador VHDL de código aberto.


freehdl de Edwin Naroska era um simulador VHDL de código aberto, abandonado desde
2001.

Circuitos Sequências

Um circuito sequencial é aquele em que as saídas dependem das entradas actuais, mas
também da sequência de valores por que passaram as entradas. Exemplo: comando para
escolher o canal da TV com um botão para ir para o canal próximo/anterior (botão “+/-”).

Não é possível descrever o comportamento dum circuito sequencial simplesmente com uma
tabela que relacione as entradas com as saídas.

Para saber para onde vai evoluir um circuito sequencial, é preciso conhecer em que situação
ele se encontra actualmente.

Ou seja, o estado desse circuito deve ser memorizado.

Estado de um Circuito Sequencial

O estado dum circuito sequencial é o conjunto de variáveis de estado, que guarda a


informação relativa ao passado/presente desse circuito, necessária para determinar o seu
comportamento futuro.

No exemplo do comando para escolher o canal da TV, o número do canal actual é o estado
actual.

Conhecido o estado actual, pode sempre prever-se o próximo estado em função das entradas
actuais.

Num circuito digital, as variáveis de estado são valores binários e correspondem a sinais
internos desse circuito.

Um circuito com nvariáveis de estado binárias pode ter até 2n estados.


Um circuito sequencial também pode ser designado de máquina de estados finita (ou seja,
máquina com um número de estados finito).

As mudanças de estado acontecem em instantes impostos por um sinal de relógio.

Um sinal de relógio é activo no nível alto se as mudanças de estado acontecerem no bordo


ascendente do relógio ou quando o relógio está no nível ALTO. Caso contrário, é activo no
nível baixo.

O período do relógio (T) coincide com o intervalo entre transições sucessivas (do relógio) na
mesma direcção.

A frequência do relógio (f) é o inverso do período do relógio (f = 1 / T).

Neste módulo abordam-se dois tipos de circuitos sequenciais:

Circuitos sequenciais simples: usam portas lógicas elementares (ANDs, ORs,…) e ciclos (ou
caminhos) com feedback para criar elementos de memória (latches e flip-flops).

-Elementos bi-estáveis

O circuito sequencial mais simples de todos é um circuito sem


entradas e construído com um par de inversors interligados de
modo a estabelecer um ciclo com feedback.

A este circuito dá-se o nome de bi-estável porque possui dois


estados ( situações) estáveis :

Quando Qestá no nível ALTO, o inversor inferior tem a saída no nível BAIXO, forçando
deste modo o inversor superior a colocar a sua saída no nível ALTO (como se assumiu
inicialmente).

Quando Qestá no nível BAIXO, o inversor inferior tem a saída no nível ALTO, forçando
deste modo o inversor superior a colocar a sua saída no nível BAIXO (como se assumiu
inicialmente).

Pode usar-se uma única variável de estado (sinal Q) para definir o estado do circuito. Logo,
há 2 estados possíveis: Q=0 e Q=1.

O elemento bi-estável é tão simples que não possui entradas, o que impede que o seu estado
seja controlado.
Quando o circuito é alimentado, ele assume um estado aleatório e permanece nele
indefinidamente.
funçãode
Efectuando uma análise do bi-estável
transferência
do
segundo uma perspectiva analógica
inversorsuperior
percebe-se melhor o seu funcionamento.

O bi-estável está em equilíbrio se as


tensões de entrada e de saída em ambos os
inversores assumirem um valor constante e
consistente com (i) as ligações do ciclo de
feedbacke (ii) a função de transferência
dos inversores.

O bi-estável está em equilibrio nas posições assinaladas com “stable”.


Há um 3º ponto de equilíbrio, assinalado com
“metastable”, que ocorre quando Vout1 e Vout2 não são nem 0nem 1lógico.
Se não houvesse ruído e o circuito atingisse o ponto meta-estável, poderia permanecer nele
indefinidamente.
O ponto é meta-estável porque o ruído tenderá a levar o circuito para uma das posições
estáveis.
Analogia do ponto de meta-estabilidade com uma bola lançada sobre o pico duma montanha.
Latches e Flip-flops
As latchese os flips-flops são os blocos elementares com os quais se constrói a maior parte
dos circuitos sequenciais.

Um flip-flop é um dispositivo sequencial que amostra as suas entradas e que altera as suas
saídas apenas em instantes determinados por um sinal de relógio.

Uma latché um dispositivo sequencial que observa todas as suas entradas continuamente e
altera as suas saídas em qualquer momento, independentemente de qualquer sinal de relógio.

Pode construir-se uma latchS-R, com


E
entradas de set e reset activas no nível baixo, m
com portas NAND.

O funcionamento desta latchS-Ré

idêntico ao da anterior, com 2 diferenças:

S_L e R_L são activas no nível baixo, logo a  NAND


latchmantém o seu estado quando
S_L=R_L=1.

Quando S_L e R_L estiverem ambas

activas, ambas as saídas ficam a 1 (e não a


0).

Uma latch S-R (ou /S-/R) reage ao valor das entradas em qualquer momento.

Contudo, pode ser alterada para reagir ao valor das entradas apenas quando uma entrada de
enable (C) estiver activa.

O circuito alterado comporta-se tal como a latch S-R quando C=1.


 Emantém o estado quando C=0
.

latch /S-/R

latch S-R com enable

Quando a finalidade da utilização duma latché guardar um bit de informação, a latch D é a


mais recomendada. Pode construir-se uma latch D a partir duma latchS-R.

Esta latchelimina a situação problemática da latchS-R, que ocorre quando S e R são activadas
(a 1) em simultâneo.

Quando C=1, a latch está aberta / transparente e a saída Q acompanha a entrada D. Quando
C=0, a latch está fechada e a saída Q mantém o último valor.

Você também pode gostar