(1) Diagrama de tempos (DT) pode ser usado não apenas para analisar circuitos sequenciais, mas também para circuitos combinatórios. Assim, dada a função
a.(.6).desenhe os DT do circuito que implementa a função F (dica: não esqueça dos atrasos de cada porta)
b.(.4). explique se pode ocorrer disputa crítica neste caso.
C
B
A
A'
A'B
B+C
(
).('
)
F
a.(.6).desenhe os DT do circuito que implementa a função F (dica: não esqueça dos atrasos de cada porta)
b.(.4). explique se pode ocorrer disputa crítica neste caso.
| C | ||||||||||||||
| B | ||||||||||||||
| A | ||||||||||||||
| A' | ||||||||||||||
| A'B | ||||||||||||||
| B+C | ||||||||||||||
|
|
||||||||||||||
| (
|
||||||||||||||
| F | ||||||||||||||
Passo 1
O enunciado pede duas coisas claras:
- Desenhar os diagramas de tempos (DT) do circuito que implementa a função
(observar os atrasos de cada porta).
2. Explicar se pode ocorrer disputa crítica (hazard) neste caso.
2. Explicar se pode ocorrer disputa crítica (hazard) neste caso.
Informações relevantes fornecidas:
- A expressão booleana completa está dada acima.
- Há indicação explícita para não esquecer os atrasos de cada porta (logo precisamos modelar tempos de propagação das portas).
- Não foi dada uma implementação física nem valores de atraso explícitos — então vou escolher valores típicos e explicitar essa escolha para poder desenhar DT concretos (isso é comum em exercícios didáticos).
Não vou resolver nada ainda; só coloquei o que é pedido e quais dados usarei para construir os DT.
Passo 2
Primeiro aula rápida de álgebra booleana (para simplificar a expressão antes de pensar em portas).
Temos a função interna (antes do apóstrofo externo):
Observe que
e
são o mesmo produto (comutatividade), então
Logo
Agora aplicamos distributividade (explicando passo a passo): multiplicando
por cada termo do parêntese,
Mas
(pois
), e
(pois
e
já está presente), e
(um termo absorvido por
). Usando a propriedade de absorção
, temos
Finalmente a função completa é o complemento de
:
Aplicando De Morgan:
Resumo didático: a expressão complexa dada se simplifica para a forma muito simples
. Isso é importantíssimo: o circuito lógico mínimo tem apenas uma inversora em
e uma PORTA OR entre
e
. No entanto, se alguém implementar literalmente a expressão original com todas as portas, o circuito físico terá mais caminhos e possíveis discrepâncias de atraso.
Passo 3
Escolha de atrasos para construir os DT (explico por que escolho números): para poder desenhar tempos numéricos e ver possíveis glitches, uso atrasos simples e inteiros típicos em questão didática:
- Atraso de propagação de um inversor:
(unidade de tempo). - Atraso de propagação de uma porta AND (2 entradas):
- Atraso de propagação de uma porta OR (2 entradas):
Esses números são apenas escala; o que importa é a diferença relativa entre caminhos (inversor mais rápido, AND/OR mais lentas). Com esses valores posso prever quando cada nó muda.
Vou desenhar dois DTs:
- DT1: circuito implementando literalmente a expressão original com todas as portas (rede de várias portas). Esse é o que normalmente gera hazards.
- DT2: DT do circuito simplificado
(inversor em e OR). Esse é o circuito minimal e mostra que, se implementado assim, muitos hazards desaparecem.
Antes do DT, descrevo a topologia (nós/interconexões) da implementação literal para ficar claro quais sinais desenharei:
- Nó
(inversor em ). - Nó
(AND entre e ). - Nó
(outro AND, idem a ; implementação literal teria os dois). - Nó
(OR dos dois ANDs). - Nó
(OR). - Nó
(OR). - Nó
(AND). - Saída
(inversor final).
No circuito simplificado:
-
obtido por inversor com atraso . -
com um OR de duas entradas (atraso ).
Passo 4
Escolha de um cenário de transição de entradas para mostrar os DT (por que escolhi este cenário, explico):
- Cenário clássico para expor hazards: inputs mudam simultaneamente de um estado para outro em que a saída ideal permanece igual (situação que pode gerar glitch). Vou usar:
-
fixo em . - transição simultânea em
: muda de para em .
-
- Por que este caso? Calculando a função reduzida
: - antes da mudança:
. - depois da mudança:
. - Logo idealmente
deve permanecer em durante e após a transição — isso é perfeito para evidenciar um hazard estático-1 (se existir), pois saída deveria ser estável em 1 mas a implementação pode produzir um pico para 0.
- antes da mudança:
Agora eu simulo os tempos de transição em cada nó usando atrasos escolhidos.
Passo 5
Simulação temporal passo-a-passo do circuito literal (com todos os nós) usando os atrasos escolhidos. Vou marcar instantes discretos
e indicar estados. Primeiro os valores iniciais (em
):
-
-
(pois ). -
. -
. -
. -
-
-
-
Agora a mudança em
:
e
simultâneos. Propagamos eventos com atrasos:
-
muda de e esse efeito aparece em -
já vale imediatamente (evento na entrada), e qualquer porta que dependa de verá esse efeito após seu atraso. - Vamos calcular as mudanças nos ANDs, ORs e na saída seguindo as regras: cada mudança de entrada provoca uma alteração na saída da porta após o atraso da porta; a nova saída é calculada com os valores que as entradas tinham no instante da avaliação.
Resultados dos tempos (vou apresentar tabela com estados nos instantes discretos para clareza). As transições calculadas (resumo):
-
: muda para em . -
: muda para em . -
: muda para em (inversor). -
(cada AND que usa e ): devido às duas mudanças, pela análise de eventos: - O efeito da mudança de
(0→1) chega ao AND em e pode fazer o AND ir a (enquanto ainda é até ). - Em seguida, o efeito da mudança de
(1→0) chega ao AND em e faz o AND voltar para . - Logo cada AND gera um pulso alto entre
e .
- O efeito da mudança de
-
(OR dos dois ANDs): - As duas ANDs sobem em
(efeito na OR aparece após , ou seja OR sobe em ), - As ANDs caem em
(efeito na OR aparece em ), portanto fica em entre e .
- As duas ANDs sobem em
-
: foi para em , OR com muda para após , ou seja em . -
: -
muda em , esse efeito chega à OR em (pode fazer cair). -
sobe em , seu efeito na aparece em e restaura a . - Assim
tem um pulso baixo entre e .
-
-
(AND entre os dois ramos): -
fica entre e . -
é entre e e volta a em . - Quando ambos se tornam
em , o AND sofre atraso e a saída sobe para em . Em cai para e essa queda chega ao AND em , fazendo voltar a em . - Portanto
tem um pulso alto entre e .
-
- Finally
(inversor final): -
sobe a em , esse evento é invertido e aparece em em como . -
cai a em , a inversora produz novamente em .
-
Em resumo: a saída ideal deveria permanecer em
o tempo todo, mas a implementação literal gera um pulso momentâneo para
entre
e
(um glitch). Isto é um exemplo explícito de disputa crítica (hazard estático-1).
Agora apresento a tabela-síntese dos sinais nos instantes escolhidos (valores
ou
). Usei os instantes
conforme a simulação acima.
Interpretação prática desta tabela:
está em
antes e depois, mas há um pulso para
(a partir do evento final do inversor) entre
e
. Esse é justamente o glitch/hazard.
Passo 6
DT do circuito simplificado
(implementação mínima) no mesmo cenário:
- Topologia: inversor em
com , OR entre e com . - Entradas mudam
de para em . -
muda de em . - OR vê
imediatamente em (entrada direta) e, com atraso , a saída tenderá a 1 em . Antes disso estava 1 (inicial), e não haverá pulso para 0 porque é 1 durante toda a transição e garanta que OR mantenha 1 (mesmo que mude). Se calcularmos com eventos rigorosos, não surge glitch: OR com um input logicamente 1 garante saída 1 independentemente do outro input que esteja mudando, e o atraso das portas não cria intervalo onde ambos inputs avaliem a 0 ao mesmo tempo porque o input já é 1 desde e sua presença evita a saída 0. Portanto o circuito mínimo não apresenta a disputa crítica que vimos na implementação literal.
Passo 7
Explicação geral sobre disputa crítica (hazard) — aula prática curta:
- Hazard estático-1: ocorre quando a função deveria permanecer em
durante uma mudança de entradas, mas devido a diferentes atrasos em caminhos diferentes, a saída momentaneamente vai a . - Condição típica: implementação em forma de soma de produtos onde o termo consenso foi removido ou onde existem caminhos redundantes com atrasos diferentes.
- Como vimos, a expressão dada se reduz a
. Se implementarmos exatamente a forma simplificada (uma inversora e uma OR), o circuito é mais robusto e não apresenta o static-1 hazard no exemplo escolhido. Mas se implementarmos literalmente a expressão original com várias portas (dois ANDs redundantes, ORs, etc.), os caminhos múltiplos com diferentes atrasos criam condições para pulso indesejado — o que chamam de disputa crítica. - Medidas práticas para eliminar hazards: simplificar a expressão logicamente (inserir termos consenso), usar portas com tempos de propagação controlados, ou adicionar feedback/retentores (dependendo do contexto). No projeto digital típico procura-se implementar a expressão na forma canônica que elimina hazards estáticos importantes ou usar técnicas de sincronização.
Passo 8
Resumo prático do que desenhei e do que você precisa lembrar para a prova:
- Sempre tente simplificar a expressão (aqui
). Se implementar a forma simplificada, muitos problemas de timing somem. - Se for obrigado a implementar a forma original (por instrução do circuito), faça DT com os atrasos das portas e cheque possíveis glitches: entradas que mudam simultaneamente podem gerar pulso na saída.
- No exercício eu mostrei explicitamente um caso em que a implementação literal gera um glitch (tabela no Passo 5) e também mostrei que a implementação mínima não gera esse glitch (Passo 6). Vai te salvar na prova: simplifique primeiro, depois pense em atrasos.
Resposta
a) DT desenhados: DT do circuito literal (com todos os nós) e DT do circuito simplificado
estão mostrados e calculados nos Passos 5 e 6 (tabela com estados e tempos).
b) Sim — se implementar literalmente a expressão dada com portas redundantes pode ocorrer disputa crítica (hazard estático-1), como demonstrado; na implementação reduzida o hazard do exemplo não aparece.
b) Sim — se implementar literalmente a expressão dada com portas redundantes pode ocorrer disputa crítica (hazard estático-1), como demonstrado; na implementação reduzida