(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 \mathbf{F}=\left[\left(\mathbf{A}^{\prime} \mathbf{B}+\mathbf{B} \mathbf{A}^{\prime}\right) \cdot\left(\mathbf{A}^{\prime}+\mathbf{B}+\mathbf{C}\right)\right]^{\prime}
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
\mathbf{A}^{\prime} \boldsymbol{+} \boldsymbol{(} \mathbf{B} \boldsymbol{+} \mathbf{C} \boldsymbol{)}
( \mathrm{A}^{\prime} \mathrm{B} ).(' +\mathrm{B}+\mathrm{C} )
F

Passo 1

O enunciado pede duas coisas claras:
  1. Desenhar os diagramas de tempos (DT) do circuito que implementa a função
\mathbf{F}=\left[\left(\mathbf{A}^{\prime}\mathbf{B}+\mathbf{B}\mathbf{A}^{\prime}\right)\cdot\left(\mathbf{A}^{\prime}+\mathbf{B}+\mathbf{C}\right)\right]^{\prime}
(observar os atrasos de cada porta).
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):
G = \left(\mathbf{A}^{\prime}\mathbf{B}+\mathbf{B}\mathbf{A}^{\prime}\right)\cdot\left(\mathbf{A}^{\prime}+\mathbf{B}+\mathbf{C}\right).
Observe que \mathbf{A}^{\prime}\mathbf{B} e \mathbf{B}\mathbf{A}^{\prime} são o mesmo produto (comutatividade), então
\mathbf{A}^{\prime}\mathbf{B}+\mathbf{B}\mathbf{A}^{\prime}=\mathbf{A}^{\prime}\mathbf{B}.
Logo
G=\mathbf{A}^{\prime}\mathbf{B}\cdot(\mathbf{A}^{\prime}+\mathbf{B}+\mathbf{C}).
Agora aplicamos distributividade (explicando passo a passo): multiplicando \mathbf{A}^{\prime}\mathbf{B} por cada termo do parêntese,
\mathbf{A}^{\prime}\mathbf{B}\cdot\mathbf{A}^{\prime}+\mathbf{A}^{\prime}\mathbf{B}\cdot\mathbf{B}+\mathbf{A}^{\prime}\mathbf{B}\cdot\mathbf{C}.
Mas \mathbf{A}^{\prime}\mathbf{B}\cdot\mathbf{A}^{\prime}=\mathbf{A}^{\prime}\mathbf{B} (pois x\cdot x = x), e \mathbf{A}^{\prime}\mathbf{B}\cdot\mathbf{B}=\mathbf{A}^{\prime}\mathbf{B} (pois B\cdot B=B e B já está presente), e \mathbf{A}^{\prime}\mathbf{B}\cdot\mathbf{C}=\mathbf{A}^{\prime}\mathbf{B}\mathbf{C} (um termo absorvido por \mathbf{A}^{\prime}\mathbf{B}). Usando a propriedade de absorção X + X Y = X, temos
G=\mathbf{A}^{\prime}\mathbf{B}.
Finalmente a função completa é o complemento de G:
\mathbf{F} = (\mathbf{A}^{\prime}\mathbf{B})^{\prime}.
Aplicando De Morgan:
\mathbf{F} = \mathbf{A} + \mathbf{B}^{\prime}.
Resumo didático: a expressão complexa dada se simplifica para a forma muito simples \mathbf{F}=\mathbf{A}+\mathbf{B}^{\prime}. Isso é importantíssimo: o circuito lógico mínimo tem apenas uma inversora em \mathbf{B} e uma PORTA OR entre \mathbf{A} e \mathbf{B}^{\prime}. 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: t_{\text{inv}}=1 (unidade de tempo).
  • Atraso de propagação de uma porta AND (2 entradas): t_{\text{and}}=2.
  • Atraso de propagação de uma porta OR (2 entradas): t_{\text{or}}=2.
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 \mathbf{F}=\mathbf{A}+\mathbf{B}^{\prime} (inversor em \mathbf{B} 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_1=\mathbf{A}^{\prime} (inversor em \mathbf{A}).
  • N_2=\mathbf{A}^{\prime}\mathbf{B} (AND entre N_1 e \mathbf{B}).
  • N_3=\mathbf{B}\mathbf{A}^{\prime} (outro AND, idem a N_2; implementação literal teria os dois).
  • N_4=\mathbf{N_2}+\mathbf{N_3} (OR dos dois ANDs).
  • N_5=\mathbf{B}+\mathbf{C} (OR).
  • N_6=\mathbf{N_1}+\mathbf{N_5} (OR).
  • N_7=\mathbf{N_4}\cdot\mathbf{N_6} (AND).
  • Saída \mathbf{F}=\mathbf{N_7}^{\prime} (inversor final).
No circuito simplificado:
  • B' obtido por inversor com atraso t_{\text{inv}}=1.
  • \mathbf{F}=\mathbf{A}+\mathbf{B}^{\prime} com um OR de duas entradas (atraso t_{\text{or}}=2).

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:
    • C fixo em \mathbf{0}.
    • transição simultânea em t=0: (\mathbf{A},\mathbf{B}) muda de (0,0) para (1,1) em t=0.
  • Por que este caso? Calculando a função reduzida \mathbf{F}=\mathbf{A}+\mathbf{B}^{\prime}:
    • antes da mudança: \mathbf{A}=0,\mathbf{B}=0\Rightarrow\mathbf{B}^{\prime}=1\Rightarrow\mathbf{F}=1.
    • depois da mudança: \mathbf{A}=1,\mathbf{B}=1\Rightarrow\mathbf{B}^{\prime}=0\Rightarrow\mathbf{F}=1.
    • Logo idealmente \mathbf{F} deve permanecer em \mathbf{1} 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.
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 t=0,1,\dots,8 e indicar estados. Primeiro os valores iniciais (em t<0):
  • \mathbf{A}=0,\\ \mathbf{B}=0,\\ \mathbf{C}=0.
  • \mathbf{A}^{\prime}=1 (pois A=0).
  • \mathbf{A}^{\prime}\mathbf{B}=1\cdot0=0.
  • \mathbf{B}\mathbf{A}^{\prime}=0\cdot1=0.
  • \mathbf{N_4}=\mathbf{A}^{\prime}\mathbf{B}+\mathbf{B}\mathbf{A}^{\prime}=0.
  • \mathbf{B}+\mathbf{C}=0.
  • \mathbf{N_6}=\mathbf{A}^{\prime}+(\mathbf{B}+\mathbf{C})=1+0=1.
  • \mathbf{N_7}=\mathbf{N_4}\cdot\mathbf{N_6}=0\cdot1=0.
  • \mathbf{F}=\mathbf{N_7}^{\prime}=1.
Agora a mudança em t=0: \mathbf{A}:0\to1 e \mathbf{B}:0\to1 simultâneos. Propagamos eventos com atrasos:
  • \mathbf{A}^{\prime} muda de 1\to0 e esse efeito aparece em t=0+t_{\text{inv}}=1.
  • \mathbf{B} já vale 1 imediatamente (evento na entrada), e qualquer porta que dependa de \mathbf{B} 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):
  • \mathbf{A}: muda para 1 em t=0.
  • \mathbf{B}: muda para 1 em t=0.
  • \mathbf{A}^{\prime}: muda para 0 em t=1 (inversor).
  • \mathbf{A}^{\prime}\mathbf{B} (cada AND que usa A' e B): devido às duas mudanças, pela análise de eventos:
    • O efeito da mudança de \mathbf{B} (0→1) chega ao AND em t=0+t_{\text{and}}=2 e pode fazer o AND ir a 1 (enquanto A' ainda é 1 até t=1).
    • Em seguida, o efeito da mudança de \mathbf{A}' (1→0) chega ao AND em t=1+t_{\text{and}}=3 e faz o AND voltar para 0.
    • Logo cada AND gera um pulso alto entre t=2 e t=3.
  • \mathbf{N_4}=\mathbf{A}'\mathbf{B}+\mathbf{B}\mathbf{A}' (OR dos dois ANDs):
    • As duas ANDs sobem em t=2 (efeito na OR aparece após t_{\text{or}}=2, ou seja OR sobe em t=4),
    • As ANDs caem em t=3 (efeito na OR aparece em t=5), portanto \mathbf{N_4} fica em 1 entre t=4 e t=5.
  • \mathbf{B}+\mathbf{C}: \mathbf{B} foi para 1 em t=0, OR com \mathbf{C}=0 muda para 1 após t_{\text{or}}=2, ou seja em t=2.
  • \mathbf{N_6}=\mathbf{A}^{\prime}+(\mathbf{B}+\mathbf{C}):
    • \mathbf{A}' muda em t=1, esse efeito chega à OR em t=3 (pode fazer \mathbf{N_6} cair).
    • \mathbf{B}+\mathbf{C} sobe em t=2, seu efeito na \mathbf{N_6} aparece em t=4 e restaura \mathbf{N_6} a 1.
    • Assim \mathbf{N_6} tem um pulso baixo entre t=3 e t=4.
  • \mathbf{N_7}=\mathbf{N_4}\cdot\mathbf{N_6} (AND entre os dois ramos):
    • \mathbf{N_4} fica 1 entre t=4 e t=5.
    • \mathbf{N_6} é 0 entre t=3 e t=4 e volta a 1 em t=4.
    • Quando ambos se tornam 1 em t=4, o AND sofre atraso t_{\text{and}}=2 e a saída \mathbf{N_7} sobe para 1 em t=6. Em t=5 \mathbf{N_4} cai para 0 e essa queda chega ao AND em t=7, fazendo \mathbf{N_7} voltar a 0 em t=7.
    • Portanto \mathbf{N_7} tem um pulso alto entre t=6 e t=7.
  • Finally \mathbf{F}=\mathbf{N_7}^{\prime} (inversor final):
    • \mathbf{N_7} sobe a 1 em t=6, esse evento é invertido e aparece em \mathbf{F} em t=7 como 0.
    • \mathbf{N_7} cai a 0 em t=7, a inversora produz \mathbf{F}=1 novamente em t=8.
Em resumo: a saída ideal deveria permanecer em \mathbf{1} o tempo todo, mas a implementação literal gera um pulso momentâneo para \mathbf{0} entre t=7 e t=8 (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 \mathbf{0} ou \mathbf{1}). Usei os instantes t=0,1,\dots,8 conforme a simulação acima.
\begin{array}{c|ccccccccc} \text{Sinal} & t=0 & t=1 & t=2 & t=3 & t=4 & t=5 & t=6 & t=7 & t=8\\hline \mathbf{C} & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\\ \mathbf{B} & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 1\\\ \mathbf{A} & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 1\\\ \mathbf{A}^{\prime} & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\\ \mathbf{A}^{\prime}\mathbf{B} & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0\\\ \mathbf{B}\mathbf{A}^{\prime} & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0\\\ \mathbf{N_4}=(A'B+BA') & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0\\\ \mathbf{B+C} & 0 & 0 & 1 & 1 & 1 & 1 & 1 & 1 & 1\\\ \mathbf{N_6}=A'+(B+C) & 1 & 1 & 1 & 0 & 1 & 1 & 1 & 1 & 1\\\ \mathbf{N_7}=N_4\cdot N_6 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0\\\ \mathbf{F} & 1 & 1 & 1 & 1 & 1 & 1 & 0 & 1 & 1 \end{array}
Interpretação prática desta tabela: \mathbf{F} está em \mathbf{1} antes e depois, mas há um pulso para \mathbf{0} (a partir do evento final do inversor) entre t=7 e t=8. Esse é justamente o glitch/hazard.

Passo 6

DT do circuito simplificado \mathbf{F}=\mathbf{A}+\mathbf{B}^{\prime} (implementação mínima) no mesmo cenário:
  • Topologia: inversor em \mathbf{B} com t_{\text{inv}}=1, OR entre \mathbf{A} e \mathbf{B}' com t_{\text{or}}=2.
  • Entradas mudam (\mathbf{A},\mathbf{B}) de (0,0) para (1,1) em t=0.
  • \mathbf{B}^{\prime} muda de 1\to0 em t=1.
  • OR vê \mathbf{A}=1 imediatamente em t=0 (entrada direta) e, com atraso t_{\text{or}}=2, a saída \mathbf{F} tenderá a 1 em t=2. Antes disso \mathbf{F} estava 1 (inicial), e não haverá pulso para 0 porque \mathbf{A} é 1 durante toda a transição e garanta que OR mantenha 1 (mesmo que \mathbf{B}' 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 \mathbf{A} já é 1 desde t=0 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 1 durante uma mudança de entradas, mas devido a diferentes atrasos em caminhos diferentes, a saída momentaneamente vai a 0.
  • 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 \mathbf{A}+\mathbf{B}^{\prime}. 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 \mathbf{F}=\mathbf{A}+\mathbf{B}^{\prime}). 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 \mathbf{F}=\mathbf{A}+\mathbf{B}^{\prime} 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 \mathbf{F}=\mathbf{A}+\mathbf{B}^{\prime} o hazard do exemplo não aparece.

Exercícios relacionados