Estou tentando entender por que o gatilho de borda é preferível ao gatilho de nível. No meu livro, isso não é explicado claramente. Depois de pesquisar on-line, percebi que o disparo de borda é insensível a falhas, enquanto o disparo de nível é sensível. O que isso significa?
Também não consigo entender o seguinte: "Se o relógio é sensível ao nível, o novo pode percorrer a rede lógica e alterar a saída. Para evitar isso, precisamos de um pulso curto para capturar a saída e mantê-la constante. Mas não é fácil criar um pulso tão curto, portanto, vamos acionar a borda. O problema de feedback foi resolvido porque não há tempo suficiente para que a nova saída retorne à entrada na duração de uma única borda ascendente "
Não entendi por que a saída não se apressava em disparar o nível e por que precisamos de um pulso curto para reter a saída.
Em segundo lugar, o problema de feedback, uma vez que a duração do disparo de nível é longa em comparação com o disparo de borda, no caso do primeiro, a saída será retornada novamente à entrada e continuará fazendo isso enquanto o relógio estiver ativo . Qual é o problema de feedback?
Mas como será resolvido no gatilho de borda? Se o tempo para cair ou subir for muito curto, como a saída poderá se propagar por todos os portões? É assim que, uma vez aplicado o acionamento da borda, a saída será propagada por todos os portões e as próximas entradas serão consideradas apenas na próxima borda do relógio?
Respostas:
Embora uma aresta seja um momento bem definido no tempo, não é verdade dizer que o acionamento de nível também não tem um momento bem definido no tempo. Faz. Há um momento bem definido no tempo em que o nível do relógio cai, as entradas do circuito com clock são amostradas e outras alterações nas entradas não são mais admitidas.
O problema com o disparo de nível é que, enquanto o nível do relógio é alto, as entradas alteram as saídas. Em circuitos que possuem feedback (as saídas são conectadas de volta às entradas), o acionamento do nível causa caos, porque o nível é amplo o suficiente (meio ciclo de clock) para que a saída possa retornar as entradas no mesmo período.
Assim, no momento em que o momento bem definido ocorre quando o relógio cai e todos os dispositivos devem capturar e manter o estado até o próximo nível, o caos já ocorreu e os circuitos estão em estados imprevisíveis. Isso é inaceitável. Em circuitos sequenciais, queremos que as saídas produzidas no período de relógio sejam consideradas apenas para calcular os estados do período de relógio . Também queremos a propriedade legal de que podemos desacelerar o relógio e não ter um circuito seqüencial. No nível de disparo, desacelerar o relógio funciona contra nós. Quanto mais desaceleramos o relógio, mais tempo permitimos feedback irrestrito.t + 1t t + 1
A primeira solução óbvia que sugere diminuir o nível a ponto de ser impossível a ocorrência de feedback indesejado (e manter o nível "ligado" curto, mesmo se desacelerarmos arbitrariamente o período do relógio). Suponha que pulsemos o relógio de 0 a 1 e voltemos a 0 muito rapidamente, para que os dispositivos com clock aceitem suas entradas, mas as saídas não tenham tempo suficiente para percorrer o loop de feedback para alterar essas entradas. O problema disso é que pulsos estreitos não são confiáveis e requerem basicamente uma resposta que pode ser várias ordens de magnitude mais rápida que a freqüência do relógio. Podemos achar que precisamos de um pulso com nanossegundos de largura, mesmo que o sistema funcione a apenas 1 Mhz. Portanto, temos o problema de distribuir pulsos limpos, nítidos e suficientemente altos em nanossegundos em um barramento projetado para 1 Mhz.
O próximo passo lógico, então, é fazer com que os dispositivos gerem o pulso estreito para si mesmos como a derivada do tempo da borda do relógio. À medida que o relógio passa de um nível para outro, os próprios dispositivos podem gerar internamente um pulso curto, o que faz com que as entradas sejam amostradas. Não precisamos distribuir esse pulso pelo barramento do relógio.
E, portanto, você pode considerar basicamente que tudo é acionado por nível no final. O gatilho de borda é um truque para permitir que os dispositivos criem um gatilho de nível muito fino que seja mais rápido que todos os loops de feedback externo, permitindo que os dispositivos aceitem entradas rapidamente e fechem a entrada a tempo antes que suas saídas alteradas alterem os valores das entradas .
Também podemos fazer uma analogia entre o sinal de "habilitação" (relógio acionado por nível) e a porta de uma embarcação que mantém a pressão do ar. O disparo de nível é como abrir uma porta, permitindo que o ar escape. No entanto, podemos construir uma trava de ar que consiste em duas (ou mais) portas, que não são abertas simultaneamente. É o que acontece se dividirmos o relógio de nível em várias fases.
O exemplo mais simples disso é o flip-flop mestre-escravo . Isso consiste em dois chinelos D disparados em nível em cascata. Mas como o sinal do relógio é invertido, a entrada de um é ativada enquanto a outra é desativada e vice-versa. Isto é como uma porta com trava de ar. Como um todo, o flip-flop nunca está aberto para que o sinal possa passar livremente. Se tivermos feedback da saída do flip-flop de volta para a entrada, não há problema, porque ele passa para uma fase de relógio diferente. O resultado final é que o flip-flop mestre-escravo exibe um comportamento acionado pela borda! É útil estudar o flip-flop mestre-escravo, porque ele tem algo a dizer sobre a relação entre desencadeamento de nível e borda.
fonte
O disparo de borda é bom para os relógios, porque permite que o valor gerado por uma trava em resposta a uma borda do relógio (por exemplo, crescente) seja usado no cálculo do que deve ser feito na próxima borda do relógio crescente. Se alguém está construindo um circuito seqüencial, como um contador, usando várias travas acionadas por arestas, pode arbitrariamente misturar componentes lógicos rápidos e lentos, desde que, para todo caminho possível, o tempo de propagação menos a quantidade pela qual o relógio da trava receptora fica atrasado é garantido que o remetente é maior que o tempo de espera do destinatário e o tempo de ciclo mais a quantidade pela qual o relógio da trava de recebimento atrasa os remetentes, menos o tempo de propagação, é garantido que é maior que o tempo de configuração do receptor.
Por outro lado, a construção de um circuito para contar pulsos em uma única entrada sem o uso de travas acionadas por borda exigiria certas garantias sobre as velocidades relativas de algumas partes do circuito. Uma abordagem comum costumava ser a conversão de um sinal de clock de entrada (ClkIn) em sinais de clock de par não sobrepostos (Phi1 e Phi2). Phi1 é verdadeiro quando ClkIn é alto e alto por um tempo mínimo garantido . Phi2 é alto quando ClkIn é baixo e baixo por algum tempo mínimo garantido. Quando ClkIn muda de baixo para alto, Phi2 fica baixo antes que Phi1 fique alto; da mesma forma quando muda de alto para baixo. Pode-se construir um contador com dois conjuntos de travas (que chamarei de Count1 e Count2). Sempre que Phi1 estiver alto, o Count1 trava o Count2. Sempre que Phi2 estiver alto, o Count2 trava (Count1 + 1). Se Phi1 e Phi2 subissem alto ao mesmo tempo, ou com muito pouco tempo entre eles, o valor do contador se tornaria indeterminado, mas, desde que a separação adequada seja mantida, o contador funcionará muito bem. Os sistemas com clock de duas fases geralmente têm uma quantidade bastante generosa de separação projetada; desde que tudo seja rápido o suficiente, essa separação pode evitar problemas com a inclinação do relógio.
Internamente, muitas travas acionadas por borda podem ser consideradas como um par de travas mestre / escravo que são cabeadas, de modo que o mestre trava a entrada sempre que o relógio estiver no estado anterior à borda e o escravo trava o mestre quando o relógio é acionado. no estado depois. Os sinais que alimentam as duas travas precisam ter um relacionamento adequado, mas se forem produzidos na mesma vizinhança que as travas, não será necessário projetar em excesso a quantidade de separação quase a quantidade necessária para as duas fases do relógio. enviado sobre uma área maior.
Observe que, embora o disparo de borda seja bom para relógios, há outros propósitos para os quais é menos bom. Às vezes, é vantajoso para eventos periódicos em interrupções, desde que dois eventos não compartilhem o mesmo sinal disparado pela borda. O acionamento de borda é péssimo para interrupções compartilhadas e, em alguns casos, pode ser problemático mesmo com as não compartilhadas, a menos que haja uma maneira de pesquisar o estado do fio de interrupção. O disparo de nível também pode ser vantajoso nos casos em que um sinal estroboscópico estará ativo no mesmo ciclo de algumas informações que devem ser travadas, mas onde as informações têm um caminho de computação mais longo que o estroboscópio. Se as informações são como um endereço para um chip de memória assíncrono, torná-lo disponível em algum momento durante um ciclo de clock pode ser melhor do que esperar até o início do próximo ciclo de clock.
fonte
Para entender por que o disparo de borda é preferido, imagine um somador de 8 bits conectado a um registro, adicionando constantemente 1 ao valor do registro, com um botão pressionado no pino de habilitação do registro.
Se o pino de habilitação do registro for sensível ao nível, o conteúdo do registro será incrementado constantemente pela duração do pressionamento do botão. O próximo estado do registro não será determinístico para um determinado pressionamento do botão. Isso ocorre porque o adicionador pode incrementar o registro várias vezes antes de remover o dedo - em outras palavras, o feedback sai do registro e o retorna rapidamente ao adicionador.
Se o pino de habilitação fosse sensível à borda, o conteúdo do registro aumentaria exatamente uma vez cada vez que o botão fosse pressionado, não importa por quanto tempo o botão fosse pressionado (supondo que a entrada tenha sido devolvida corretamente). Seria impossível para a saída do registro retornar ao adicionador a tempo de qualquer comportamento não determinístico.
fonte
Como outros disseram, a vantagem é um momento muito específico no tempo. Todos sabemos que os circuitos digitais podem passar por falhas em que a saída de um portão está errada, pois apenas algumas de suas entradas o alcançaram, os outros sinais estão a caminho e demoram mais por causa do caminho mais longo (a eletricidade viaja muito rápido mas ainda 3x10 ^ 8 m / s leva um pouco de tempo para percorrer os fios). Se tivermos uma unidade trigerred de nível, sua saída será afetada por falhas. Com o desencadeamento das coisas, temos uma janela muito estreita no tempo em que "as coisas podem acontecer"; em outras palavras, o circuito muda apenas de estado (os valores em diferentes fios dentro do circuito, incluindo a saída) em certos instantes bem definidos. Tempo. Observe a frase "instantes no tempo"
Neste ponto, você não estará ciente de algo chamado como "análise de tempo", mas vou explicar um pouco. Quando fabricamos circuitos digitais, queremos simulá-los para ver como eles se comportarão e se esse comportamento se encaixa no que queremos que ele faça. Na análise de tempo, verificamos se os sinais são capazes de atingir um determinado ponto do circuito no tempo necessário. Se eles estiverem muito atrasados, o circuito não funcionará corretamente. Ao usar blocos de circuito acionados por borda em vez de acionados por nível, a análise de temporização se torna muito fácil, pois sabemos exatamente quando as coisas podem acontecer no circuito. Isso significa que o design do circuito também se torna mais fácil. Lembre-se de que no mundo real você encontrará travas acionadas por nível muito raramente.
fonte
Embora outras respostas tenham abordado quase tudo o que há para dizer sobre sua pergunta, para tornar mais claro, adicionei alguns diagramas e uma breve explicação.
Imagine que você deseja projetar um circuito que inclua algum tipo de feedback. Diga
A = A.B
(basicamente um portão AND com um feedback). Se você implementá-lo usando uma trava sensível ao nível simples que armazena o valor de A, seu circuito será semelhante a esteIsso pode criar um problema. Quando o relógio está alto, a trava se torna transparente e a porta AND calcula o novo valor de
A and B
. Mas o valor é retornado à trava e, como a trava ainda é transparente (o CLK ainda é alto), o novo valor deA AND B
é calculado. Isso é chamado de Condição de corrida , que cria falhas (altos e baixos inesperados na saída) que você mencionou.Uma solução para esse problema seria manter o pulso CLK muito curto, curto o suficiente para que, uma vez gerada a saída da porta AND, a trava seja desativada antes que o valor seja retropropagado para a entrada novamente. Deve ser intuitivo ver por que isso pode ser difícil de alcançar. Isso dependeria da velocidade de comutação da trava (finalmente, uma trava também é feita de portas combinacionais), do comprimento do fio e de centenas de outros parâmetros.
Uma segunda opção mais viável é usar um elemento sensível à borda (neste caso, um flip-flop), que é basicamente um par de travas conectadas de uma maneira muito inteligente.
Basicamente, quando o
CLK
sinal é alto, a trava U1 é transparente, o que traz o valor lógico na entrada A para a saída da trava U1, quando oCLK
sinal é BAIXO, a trava U2 se torna transparente e um novo valorA AND B
é calculado. Mas esse valor será propagado para a entrada da porta AND somente quando a trava U1 se tornar transparente (CLK é HIGH) e, consequentemente, a trava U1 se tornar transparente (CLK é LOW). O que equivale basicamente a dizer que o circuito agora é sensível à borda (o valor de saída muda apenas na borda negativa do relógio).Isso evita o problema da Condição de Corrida, explicado anteriormente, e é por isso que o nível de disparo é preferível ao de borda.
fonte