Como podemos ter certeza de que os computadores nunca trocam acidentalmente um 0 por 1?


63

Eu li um pouco sobre a construção de um computador digital em Shocken / Nisan: The Elements of Computing Systems . Mas este livro não diz nada sobre certos aspectos elétricos em computadores, por exemplo: Costuma-se dizer que 0 e 1 são representados por tensão, se a tensão estiver no intervalo [0, 0,9), então será 0. Se a tensão for no intervalo [0,9, 1,5), então é 1 (as tensões podem variar, estou apenas dando um exemplo).

Mas nunca li o que mantém as tensões elétricas "bem-comportadas" de uma maneira que um 0 nunca poderia se tornar um 1 acidentalmente devido à volatilidade elétrica [1] dentro do computador. Talvez seja possível que a tensão esteja muito próxima de 0,9, o que é feito para evitar que ela ultrapasse o limite?

[1]: Supondo que exista.


7
A corrente nunca está muito próxima de 0,9, porque nada nunca a aproxima muito de 0,9.
usar o seguinte comando

7
Porque as coisas são projetadas para não gerar correntes muito próximas a 0,9. Você também pode perguntar: "Tenho evidências empíricas sólidas de que meu laptop não está carregado com 50 gigavolts; por que não?" Simplesmente porque não há razão para isso.
user253751

13
Nitpick: a maioria das lógicas digitais usa voltagens, não correntes, para representar estados lógicos.
duskwuff

11
evidência anedótica: Em 2011, troquei um pouco um arquivo em um disco rígido que funcionou bem por 5 anos.
precisa saber é o seguinte

7
Esses comutadores acidentais são exploráveis. A explicação do Google é um caso interessante para isso. Definitivamente, torna a segurança muito mais difícil quando a API real para "Definir o bit X como 1" é "Definir o bit X como 1 e, às vezes, define acidentalmente o bit Y como 1". Isso também se torna muito comum no caso de máquinas com overclock. Lembro que uma empresa realmente adicionou vários cálculos (todos os quadros) com resultados conhecidos para verificar se o hardware era confiável o suficiente para executar o jogo.
27716 Brian

Respostas:


100

Costuma-se dizer que 0 e 1 são representados pela tensão, se a tensão estiver no intervalo [0, 0,9), então será 0. Se a tensão estiver no intervalo [0,9, 1,5), será 1 ( tensões podem variar, estou apenas dando um exemplo).

Até certo ponto, você criou esse problema principalmente usando um exemplo irreal. Existe uma diferença muito maior entre baixo e alto lógico em circuitos reais.

Por exemplo, a lógica CMOS de 5V produzirá 0-0,2V para lógica baixa e 4,7-5V para lógica alta e aceitará consistentemente qualquer coisa abaixo de 1,3V como baixa ou qualquer coisa acima de 3,7V como alta. Ou seja, existem margens muito mais apertadas nas saídas do que nas entradas e existe um enorme espaço entre as tensões que podem ser usadas para sinais lógicos baixos (<1.3V) e os que podem ser usados ​​para altas lógicas (> 3.7V) . Tudo isso é especificamente planejado para permitir ruídos e impedir o tipo de troca acidental que você está descrevendo.

Aqui está uma representação visual dos limites para uma variedade de padrões lógicos, que eu emprestei do interfacebus.com :

Limiares de nível lógico] [1]

Cada coluna representa um padrão lógico e o eixo vertical é a tensão. Aqui está o que cada cor representa:

  • Laranja: Tensões nesta faixa são emitidas para alta lógica e serão aceitas como alta lógica.
  • Verde claro: as tensões nesta faixa serão aceitas como altas lógicas.
  • Rosa / azul: as tensões nessa faixa não serão interpretadas de maneira consistente, mas as da área rosa geralmente acabam sendo interpretadas como altas e as da área azul geralmente são baixas.
  • Verde azulado: Tensões nesta faixa serão aceitas como baixas lógicas.
  • Amarelo: Tensões nesta faixa são emitidas para baixo lógico e serão interpretadas como baixo lógico.

4
Boa resposta, embora eu ache que poderia ser mais completa: você cobre apenas a imunidade (ou melhor, a proteção contra) o ruído. Existem muitos outros mecanismos responsáveis ​​por erros digitais e tantos meios de proteção. A coisa boa é, eu não cobrir a imunidade ao ruído na minha resposta :)
Senhor Mystère

11
@ MisterMystère Isso é verdade! A correção de erros é um tópico enorme, e eu não poderia cobrir tudo em uma única resposta.
duskwuff

11
@ MisterMystère: Bem, "ruído" é um termo que abrange todos os tipos de fontes de erro estocásticas. Seus exemplos de interferência EM e radiação cósmica se enquadram na categoria de "ruído". A única outra causa de erro digital é determinística, que chamamos de "bug". Mas esta questão é apenas sobre os erros acidentais.
Ben Voigt

Na sua terceira bala, acredito que você alterou as cores ou a lógica. o rosa deve estar baixo e o azul, alto.
Guill

@Guill Huh? A região rosa está acima de V_T, portanto, será tratada com confiabilidade como alta lógica.
precisa saber é o seguinte

65

Nós não podemos. Estamos apenas diminuindo a probabilidade de erros adicionando verificações aos dados. Dependendo do tipo de dados a ser verificado, ele pode ser feito via hardware ou software e pode assumir qualquer formato, desde bits de soma de verificação simples em fluxos seriais até máquinas de estado cíclico, permitindo que apenas transições específicas sejam feitas a qualquer momento.

Mas é um círculo vicioso, não é? Como podemos garantir que o circuito encarregado de verificar os dados não seja afetado pelas mesmas perturbações que os dados e dê um falso positivo? Adicionando outro? Você pode ver como isso pode ficar bastante caro por muito pouco ganho no final.

A questão é: quão confiável você quer que seu sistema seja? Os satélites, que incorporam alguns dos sistemas de computador mais confiáveis ​​disponíveis, por exemplo, às vezes recorrem à redundância cruzada de sistemas não idênticos e a votos: três computadores diferentes executam o mesmo algoritmo codificado por três pessoas diferentes de três maneiras diferentes e, se um dos computadores fornece um resultado diferente dos outros dois, ele é reiniciado (e se acontecer novamente, isolado). Mais uma vez, se dois computadores estiverem com defeito ao mesmo tempo, o computador errado será reiniciado / isolado. Geralmente, a "redundância fria" é suficiente: um circuito primário e um secundário são implementados, o primário é executado até que um erro seja detectado por algum tipo de circuito de monitoramento (não protegido) e o circuito secundário seja trocado. Se for apenas um erro na RAM, o código pode ser executado novamente para atualizar os dados. Você só precisa decidir sabiamente onde traçar a linha; é impossível criar um circuito de detecção de erro 100% confiável.

Satélites (especialmente em grandes altitudes ou no cinturão de Van Allen) e computadores em usinas nucleares ou outros ambientes radioativos estão particularmente sujeitos a (palavra-chave): perturbações ou travamentos de evento único devido a partículas de alta energia que colidem ou são absorvidas por redes cristalinas de semicondutores . Livros cobrindo esses campos certamente serão sua melhor aposta. A tinta é degradada pelos danos causados ​​pelo deslocamento da radiação, por isso é totalmente compreensível que os semicondutores também possam ser danificados ou perturbados pela radiação recebida.


2
Não tenho certeza se você pretendia escrever 'círculo vicioso', mas 'círculo viscoso' parece igualmente engraçado.
svavil

11
Na verdade, foi círculo vicioso, mas círculo viscoso me fez rir :)
Senhor Mystère

11
Leva apenas log n bits para poder localizar e corrigir um erro de bit único em n bits.
Thorbjørn Ravn Andersen

11
Isso me faz lembrar de uma pergunta recente sobre a escrita de programas para dar conta de erros de hardware em computadores expostos a compostos radioativos: stackoverflow.com/questions/36827659/...
Pharap

Eu não sabia sobre os satélites que três 'grupos' diferentes (ou mais) estão codificando a mesma coisa de uma maneira diferente. Parece legal :)
kalmanIsAGameChanger 2/16

33

As perturbações de um único evento não são mais uma coisa do espaço nem da aeronave; nós os vemos acontecer na superfície há mais de uma década, talvez duas até agora.

Como mencionado, porém, pelo menos em aplicativos espaciais, lidamos com problemas usando votação tripla (cada bit é realmente três e um voto de dois terços vence, portanto, se houver um que mude, os outros dois o cobrirão). E, em seguida, ECC ou EDAC , com lavadores que passam pela RAM a uma taxa maior que a taxa de atualização de evento único prevista para limpar as perturbações de evento único (aquelas que realmente pressionam os dois terços dos votos).

Então há dose total; com o tempo, o material fica radioativo demais para funcionar, então você usa material suficiente para exceder a vida útil do veículo. Não é algo com que nos preocupamos normalmente na superfície. (E latchup) O uso de três / vários conjuntos de lógica em paralelo é / foi uma maneira de tentar não precisar usar a tecnologia rad-hard tradicional e, bem, você pode descobrir como isso está funcionando.

As pessoas que costumavam saber como criar coisas para o espaço se aposentaram ou seguiram em grande parte, por isso temos vários programas que fazem lixo espacial agora. Ou tratando o espaço como produtos terrestres, em vez de tentar fazer todo mundo funcionar e ter uma reentrada e queima controlada, agora esperamos uma certa quantidade de lixo espacial em cada constelação.

Nós vemos transtornos na superfície. Qualquer cartão de memória ( DRAM ) que você compra possui um FIT, Failures In Time e qualquer chip com RAM (todos os processadores, muitos outros) também terão uma especificação do FIT (para os blocos de RAM (SRAM)). A RAM é mais densa e usa transistores menores, por isso é mais suscetível a perturbações, criadas internamente ou externas. Na maioria das vezes, não percebemos nem nos importamos, pois a memória que usamos para dados, assistindo a um vídeo etc. é gravada, lida novamente e não usada novamente antes de ficar tempo suficiente para causar transtornos. Alguma memória, como uma que possui um programa ou o kernel, é mais arriscada. Mas há muito que nos acostumamos com a ideia de apenas reiniciar nosso computador ou reiniciar / reiniciar nosso telefone (alguns telefones / marcas você precisaria remover regularmente a bateria periodicamente). Essas perturbações ou software ruim ou uma combinação?

Os números FIT para o seu produto individual podem exceder a vida útil desse produto, mas é necessário um grande farm de servidores, você considera toda a RAM ou chips ou o que for, e o MTBF vai de anos ou pedidos anteriores a dias ou horas, em algum lugar a Fazenda. E você tem ECC para cobrir o que você pode daqueles. E você distribui a carga de processamento com failovers para cobrir as máquinas ou o software que não conseguem concluir uma tarefa.

O desejo de armazenamento em estado sólido e a mudança da mídia giratória criaram um problema relacionado a isso. O armazenamento usado para SSDs (e outro armazenamento não volátil) para ficar mais rápido e mais barato é muito mais volátil do que gostaríamos e depende do EDAC, porque estaríamos perdendo dados sem ele. Eles jogam muitos bits extras e ecoam a coisa toda, fazendo as contas para equilibrar velocidade, custo e longevidade do armazenamento. Não nos vejo voltando; as pessoas querem mais armazenamento não volátil em todos os lugares, que caiba em um pacote minúsculo e não domine o preço do produto.

No que diz respeito aos circuitos normais, desde os dias iniciais do uso de transistores para circuitos digitais até o presente, passamos pela parte linear do transistor e o usamos como um comutador, batendo-o entre os trilhos com algum excesso para garantir que ele adere . Como o interruptor de luz na parede, você o move mais da metade da mola ajuda o resto e o mantém lá. É por isso que usamos o digital e não tentamos viver na região linear; eles tentaram cedo, mas falharam. Eles não podiam ficar calibrados.

Então, apenas colocamos o transistor em seus trilhos e os dois lados de um sinal se estabilizam no próximo ciclo do relógio. São feitos grandes esforços, e as ferramentas atuais são significativamente melhores do que costumavam ser, ao fazer a análise do design do chip, para ver que, por design, há margem no tempo. Em seguida, teste cada dado em cada bolacha (que e / ou após a embalagem), para verificar se cada chip é bom.

A tecnologia de chips depende muito de estatísticas baseadas em experimentos. Quando você faz um overclock de sua CPU, você está pressionando essa margem, mantendo-se dentro da taxa de clock anunciada, da temperatura etc. e suas chances são significativamente menores de ter problemas. Um processador xyz de 3 GHz é simplesmente um chip de 4 GHz que falhou em 4 GHz, mas passou a 3 GHz. As peças são classificadas em velocidade basicamente a partir de uma linha de produção.

Depois, há as conexões entre chips ou placas, e essas também estão sujeitas a problemas, e muito tempo e esforço são necessários para criar padrões e designs de placas, etc., para reduzir erros nessas interfaces. USB , teclado, mouse, HDMI , SATA e assim por diante. Bem como todos os traços no quadro. Dentro e fora do quadro, você tem problemas de diafonia; novamente, muitas ferramentas estão disponíveis se você as usar, além de experiência em evitar os problemas em primeiro lugar, mas de outra maneira em que podemos não ver os e os zeros totalmente engajados.

Nenhuma das tecnologias, nem o espaço, é perfeita. Ele só precisa ser bom o suficiente, uma porcentagem suficiente do produto precisa cobrir o tempo de vida útil esperado do produto. Alguma porcentagem dos smartphones precisa durar pelo menos dois anos, e é isso. As fundições ou tecnologias mais antigas têm mais dados experimentais e podem produzir um produto mais confiável, mas são mais lentas e podem não ser novos designs, então pronto. A vanguarda é exatamente isso, uma aposta para todos.

Para sua pergunta específica, os transistores em cada extremidade de um sinal são empurrados rapidamente através de sua região linear e inclinam-se para um dos trilhos. A análise é feita em todos os caminhos combinacionais para determinar que ele se estabelecerá antes que o relógio no final do caminho o trave, para que seja realmente zero ou um. A análise é baseada em experimentos. Os primeiros chips de uma linha de produtos são empurrados para além dos limites do design, são feitos gráficos schmoo para determinar se há margem no design. São feitas variações no processo e / ou candidatos individuais que representam os chips lentos e rápidos. É um processo complicado e alguns têm mais material, outros têm menos, funcionando mais rápido, mas usando mais energia ou mais devagar, etc.

Você as empurra para as margens também. E, basicamente, tenha uma sensação confusa de que o design é adequado para entrar em produção. A varredura JTAG / limite é usada para executar padrões aleatórios através dos chips entre cada estado travado para ver se os caminhos combinacionais são sólidos para um design. E onde há preocupações, alguns testes funcionais direcionados também podem acontecer. Testes adicionais do primeiro silício e talvez testes aleatórios para garantir que o produto seja bom. Se / quando ocorrerem falhas, isso poderá levar você a mais testes funcionais na linha de produção. É fortemente dependente de estatísticas / porcentagens. 1/1000000 de maus saindo podem ser bons ou 1/1000 ou o que for; depende de quantos você acha que produzirá desse chip.

As vulnerabilidades são as mencionadas aqui e com outras pessoas. Primeiro, o chip em si, quão bom foi o design e o processo, quão perto da margem está o caminho mais fraco de um chip específico no produto que você comprou. Se estiver muito próximo da borda, a mudança de temperatura ou outra pode causar problemas de temporização e os bits travarão os dados que não foram ajustados em um ou zero. Depois, há transtornos de evento único. E então há barulho. novamente coisas já mencionadas ...


4
Seu primeiro parágrafo faz parecer que não há mais problemas nos ambientes aeroespaciais, enquanto eu acho que você quis dizer que o SEU não é mais apenas experiente nesses ambientes.
W5VO

Observe que OSs podem ser causados ​​pela solda SnPb nos BGAs, porque parte do chumbo faz parte da cadeia de decaimento de urânio, além da atividade livre de nêutrons.
Peter Smith

@ W5VO, sim, eu quis dizer que as perturbações devido à radiação não são mais apenas um problema de espaço, são um problema até a superfície. Não é tão ruim quanto no espaço, mas presente.
precisa saber é o seguinte

11
Lembro-me de que alguns barramentos DEC de minicomputadores tiveram problemas com metaestabilidade na prática. Esse é um mecanismo distinto para erros de bits daqueles que você nomeou, certo? Ou não?
Davidbak

2
@davidbak: A metaestabilidade é um problema desagradável, cujo efeito mais comum é que, nos casos em que os valores de vários bits dependem de se alguma entrada foi baixa ou alta em algum momento no passado recente, nem todos podem alternar de maneira consistente com a entrada ser baixo, nem de uma maneira consistente com ser alto, mas, em vez disso, produzir uma mistura arbitrária dos dois comportamentos. Por exemplo, se o código deve ramificar quando um botão é pressionado, os bits do contador de programa podem acabar mantendo uma mistura arbitrária dos valores que teriam se o botão fosse pressionado ou não.
Supercat

12

Se você está procurando uma resposta simples:

Cada componente digital de um computador é mais restrito nas saídas que produz do que nas entradas que aceita. Por exemplo, qualquer valor de "entrada" de 0V a 2V será aceito como 0, mas uma "saída" de 0 estará sempre na faixa de 0 a 0,5V. (Veja a resposta de duskwuff para alguns valores reais.)

Isso significa que cada componente ajuda a "corrigir" alguns dos desvios ou ruídos que ocorreram ao longo da linha. Obviamente, se o ruído for grande o suficiente, o sistema não poderá compensar. Computadores em ambientes de alta radiação podem ser freqüentemente afetados por 1s mudando para 0s e vice-versa.

Basicamente, os computadores são projetados para tolerar certos níveis de ruído / interferência , o que é bom o suficiente para os propósitos mais práticos.


8

É teoricamente possível que os sinais mudem entre 0 e 1 por causa do ruído térmico (e outros), no entanto, é extremamente improvável.

Os circuitos digitais são projetados com um atributo chamado 'margem de ruído'. Essa é a quantidade pela qual sua entrada precisa ser alterada antes que a saída vire o estado. Geralmente em circuitos CMOS, isso representa cerca de 50% da tensão de alimentação. Ruído térmico inevitável (proveniente de elétrons se movendo a qualquer temperatura acima de 0 kelvin) nesses circuitos gera << 1 mV de ruído, e a probabilidade de que esses picos possam exceder (digamos) 500 mV, é extremamente pequena.

As portas digitais (por exemplo, CMOS) possuem características de ganho e saturação. O que isto significa é que, quando o sinal de entrada está próximo ao meio da faixa, a saída muda rapidamente (alto ganho), mas quando está próximo aos extremos da faixa, muda lentamente. O resultado disso é que, quando um sinal de entrada está "próximo" dos trilhos, a saída fica ainda mais próxima - isso significa que o ruído não é amplificado.

Outros recursos mencionados acima (correção de erros etc.) significam que os erros, mesmo que ocorram, não se propagam.


4

Em sistemas propensos a erros, como canais de comunicação e armazenamento magnético (e às vezes até RAM), uma soma de verificação, CRC ou ECC é armazenada para rejeitar dados incorretos ou corrigir pequenos erros.

Geralmente, os sistemas binários são projetados para que isso não seja possível, mas uma vez em alguns milhões ou bilhões de vezes * um raio cósmico ou um bocado de ruído cutuca as coisas ao longo da linha, a detecção / correção de erros é necessária para manter a corrupção de afetar o computador de maneira séria.

* Os canais de comunicação podem ter uma taxa de erro muito, muito maior!


4

O hardware do computador se tornou mais robusto e confiável. Mas o hardware é muito amplo para uma resposta simples. No entanto, pode ser interessante saber que há uma diferença de confiabilidade entre um computador desktop comum e um servidor corporativo. Encontrei este tópico de pergunta / resposta sobre o hardware do servidor. Um servidor custará muitas vezes o de um desktop comparável. O custo é o resultado de um hardware melhor e, possivelmente, várias vezes menos propenso a "alternar inesperadamente 1 e 0".

Mas o hardware é apenas metade da história. Os computadores também podem proteger os dados contra erros inesperados usando o software. O código Hamming é um exemplo em que, adicionando uma pequena quantidade de dados adicionais, um pequeno número de erros pode não apenas ser detectado, mas também corrigido.


com a excepção de flash de MLC, onde a fiabilidade é trocada por densidade,
Jasen

3

Existem duas maneiras comumente usadas para minimizar a probabilidade de um bit lógico ser acidentalmente alternado (0 para 1 ou 1 para 0).
O primeiro é fornecer um intervalo tão grande , entre os níveis de tensão definidos para 0 e 1, tanto quanto possível . Como você mencionou, um 0 é definido como um nível de tensão <.9v, enquanto o 1 é definido como um nível de tensão> 2.9v (não como você diz .9 a 1.5). Isso deixa um intervalo de tensão de 2v. Isso significa que a tensão do sinal precisaria variar 200% antes de "acidentalmente" mudar o estado do bit (muito improvável).
O segundo é "cronometrando"os sinais lógicos. Como a tensão / ruído "acidental" é aleatória e de curta duração, ao permitir alterações de estado apenas em intervalos específicos (e curtos), a probabilidade de a "variação" atingir na hora do relógio é minimizada.

Existem, obviamente, outros meios e métodos utilizados, dependendo do grau de confiabilidade exigido (ECD, ECC, etc.).


2

Boa engenharia.

Muito esforço é desenvolvido para impedir a corrupção de dados ou corrigi-lo quando não puder ser suficientemente evitado (por exemplo, memória ECC ).

Coisas que podem causar corrupção de dados incluem:

  • ambientes eletricamente ruidosos
  • questões relacionadas ao poder
  • problemas de tempo (por exemplo, entre linhas de relógio e dados ou entre duas linhas diferenciais)
  • conversa cruzada elétrica

Em resumo, muita engenharia é aplicada a projetos digitais, de modo que os engenheiros de software podem assumir o simples pressuposto de que '0' significa '0' e '1' significa '1'.


E, é claro, a memória ECC também pode fazer coisas engraçadas, como acionar uma interrupção não mascarável (NMI) se mais bits forem corrompidos do que é possível reparar. Eu acho que para a RAM ECC moderna, esse erro é mais do que um bit em 64 bits (as codificações podem corrigir erros de um bit e detectar, mas não corrigir erros de dois bits), mas posso estar errado sobre isso. Nas situações em que você se preocupa com os dados, interromper o sistema imediatamente, se algo estiver errado além do reparo, pode ser muito melhor do que ficar sem saber se os dados podem ser confiáveis ​​(ou pior, sabendo que não podem ser confiáveis).
um CVn

2

Os dois aspectos fundamentais dos computadores eletrônicos práticos são:

  1. Uma fonte de alimentação muito estável

  2. Hora (geralmente definida como frequência ou atraso do relógio)

As fontes de alimentação para sistemas de computação são muito rigorosamente especificadas e regulamentadas. De fato, para qualquer sistema de computação, a fonte de alimentação é normalmente regulada várias vezes: na fonte de alimentação (ou no carregador de bateria), na entrada principal da placa-mãe, na entrada das placas de expansão e, finalmente, no próprio chip.

Isso elimina muito ruído (volatilidade elétrica). O que a CPU vê é uma fonte de tensão não-volátil muito estável que pode ser usada para processar a lógica.

A próxima fonte principal de valores intermediários (voltagens entre o que é considerado 0 ou 1) ocorre quando os valores passam. 1 mudando para 0 (tempo de queda) ou 0 mudando para 1 (tempo de subida). Você realmente não pode fazer muito a respeito, exceto esperar a transição terminar antes de aceitar a saída do circuito. Antes da conclusão da transição, a saída do circuito é considerada lixo.

Na engenharia, a solução para esse problema é simplesmente escrever quanto tempo você precisa esperar pelos resultados corretos no papel. Essa é a origem da frequência do clock da CPU. Em quantos GHz você pode executar a CPU depende de quanto tempo leva para que as alterações de estado na CPU se estabilizem.

Na verdade, existe uma terceira fonte de volatilidade: entradas no circuito. A solução para esse problema é semelhante ao problema geral acima: verifique se o sinal (tensão ou corrente) que entra no sistema é estável e verifique se o sinal tem tempo suficiente para estabilizar.

A segunda parte do problema é a razão pela qual coletamos amostras em travas ou registradores antes do processamento. O sinal pode ser lixo. Mas eles terão 0 ou 1 lixo no interior dos registros quando forem processados. A primeira parte do problema é para que servem as garantias.


2

Mas nunca li o que mantém as tensões elétricas "bem-comportadas" de uma maneira que um 0 nunca poderia se tornar um 1 acidentalmente devido à volatilidade elétrica 1 dentro do computador. Talvez seja possível que a tensão esteja muito próxima de 0,9, o que é feito para evitar que ela ultrapasse o limite?

O feedback é o que impede que se aproxime da tensão limite e força-a a se comportar bem.

Isso geralmente ocorre na forma de um circuito de trava de algum tipo, geralmente um circuito de trava com relógio.

Como um exemplo simples, considere o flip-flop . Ele foi projetado para que a saída seja realimentada no circuito lógico como uma entrada adicional. A lógica dentro do elemento, portanto, sabe o que está produzindo e continuará produzindo o mesmo valor até que as outras entradas o forcem no estado oposto.

Como o circuito foi projetado para que os transistores estejam totalmente ligados ou desligados, ele sempre emitirá perto da fonte de alimentação e dos limites de terra - ele não chegará perto do nível de 0,9v e, quando fizer a transição, se moverá rápida e completamente para o outro estado. Os circuitos são projetados especificamente para evitar a operação na região analógica entre os dois estados.


0

Sob condições normais de operação, os zeros e zeros raramente surgem, mas sob más condições de operação (por exemplo, bateria fraca ou pouco tempo depois que a energia CA é desconectada e a tensão no capacitor está caindo), coisas estranhas acontecem e os zeros e zeros ficam desarrumados o tempo todo.

Por esse motivo, se você estiver escrevendo um código defensivo (software ou HDL) que não deseja bloquear, sempre considere o caso em que um número pode ocorrer. Por exemplo,

while(1)
{
  i++;
  do something here
  if (i == 10) break;
}

é melhor alterar ==para para >= apenas no caso de o valor de isaltos de 9 para 11 ou qualquer número maior que 10, o que faria com que você nunca saia do loop até chegar ia 0 (digamos, após 4 bilhões de iterações).

while(1)
{
  i++;
  do something here
  if (i >= 10) break;
}

Acontece, confie em mim ...


e se ipular para algum número negativo grande?
Jasen
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.