¿Cómo podemos estar seguros de que las computadoras nunca cambiarán accidentalmente un 0 por un 1?

63

He leído un poco sobre la construcción de una computadora digital en Shocken / Nisan: The Elements of Computing Systems . Pero este libro no dice nada sobre ciertos aspectos eléctricos en las computadoras, por ejemplo: a menudo se dice que 0 y 1 están representados por voltaje, si el voltaje está en el intervalo [0, 0.9), entonces es un 0. Si el voltaje es en el intervalo [0.9, 1.5), entonces es un 1 (los voltajes pueden variar, solo estoy dando un ejemplo).

Pero nunca leí lo que mantiene el buen comportamiento de los voltajes eléctricos de una manera que un 0 nunca podría convertirse accidentalmente en un 1 debido a la volatilidad eléctrica [1] dentro de la computadora. Quizás es posible que el voltaje esté muy cerca de 0.9, entonces, ¿qué se hace para evitar que pase el umbral?

[1]: suponiendo que exista.

Billy Rubina
fuente
77
La corriente nunca está muy cerca de 0.9, porque nada hace que la corriente esté muy cerca de 0.9.
user253751
77
Porque las cosas están diseñadas para no emitir corrientes muy cercanas a 0.9. También podría preguntar: "Tengo pruebas empíricas sólidas de que mi computadora portátil no está cargada a 50 gigavoltios; ¿por qué no?" Simplemente porque no hay razón para que lo sea.
user253751
13
Nitpick: la mayoría de la lógica digital usa voltajes, no corrientes, para representar estados lógicos.
duskwuff
11
Evidencia anecdótica: en 2011 cambié un poco en un archivo en un disco duro que funcionó bien durante 5 años.
PlasmaHH
77
Estos interruptores accidentales son explotables. La explicación de Google es un caso interesante para esto. Definitivamente, hace que la seguridad sea mucho más difícil cuando la API real para "Establecer el bit X a 1" es "Establecer el bit X a 1 y, a veces, establecer accidentalmente el bit Y a 1". Esto también se vuelve muy común en el caso de máquinas overclockeadas. Recuerdo que una compañía en realidad agregó un montón de cálculos (cada cuadro) con resultados conocidos para ver si el hardware era lo suficientemente confiable como para ejecutar el juego.
Brian

Respuestas:

100

A menudo se dice que 0 y 1 están representados por voltaje, si el voltaje está en el intervalo [0, 0.9), entonces es un 0. Si el voltaje está en el intervalo [0.9, 1.5), entonces es un 1 ( los voltajes pueden variar, solo estoy dando un ejemplo).

Hasta cierto punto, en su mayoría ha creado este problema utilizando un ejemplo poco realista. Hay una brecha mucho más grande entre lógico bajo y alto en circuitos reales.

Por ejemplo, la lógica CMOS de 5V emitirá 0-0.2V para lógica baja y 4.7-5V para lógica alta, y aceptará consistentemente cualquier cosa por debajo de 1.3V como baja o cualquier cosa por encima de 3.7V como alta. Es decir, hay márgenes mucho más estrechos en las salidas que en las entradas, y queda una gran brecha entre los voltajes que podrían usarse para señales lógicas bajas (<1.3V) y las que podrían usarse para altas lógicas (> 3.7V) . Todo esto está específicamente diseñado para tener en cuenta el ruido y para evitar el tipo de cambio accidental que está describiendo.

Aquí hay una representación visual de los umbrales para una variedad de estándares lógicos, que tomé prestados de interfacebus.com :

Umbrales de nivel lógico] [1]

Cada columna representa un estándar lógico, y el eje vertical es el voltaje. Esto es lo que representa cada color:

  • Naranja: los voltajes en este rango se emiten para alto lógico, y se aceptarán como alto lógico.
  • Verde claro: los voltajes en este rango se aceptarán como lógicamente alto.
  • Rosa / azul: los voltajes en este rango no se interpretarán consistentemente, pero los que están en el área rosa generalmente se interpretarán como altos, y los que están en el área azul generalmente serán bajos.
  • Verde azulado: los voltajes en este rango se aceptarán como lógicamente bajos.
  • Amarillo: los voltajes en este rango se emiten para bajo lógico y se interpretarán como bajo lógico.
al anochecer
fuente
44
Buena respuesta, aunque creo que podría ser más completa: solo cubre la inmunidad (o más bien, la protección contra) el ruido. Existen muchos otros mecanismos responsables de los errores digitales, y la misma cantidad de medios de protección. Lo bueno es que no cubrí la inmunidad al ruido en mi respuesta :)
Mister Mystère
1
@ MisterMystère ¡Eso es verdad! Sin embargo, la corrección de errores es un tema muy importante, y no podría abarcarlo todo en una sola respuesta.
duskwuff
1
@ MisterMystère: Bueno, "ruido" es un término que cubre todo tipo de fuentes de error estocástico. Sus ejemplos de interferencia EM y radiación cósmica caen en la categoría de "ruido" muy bien. La única otra causa de error digital es determinista, que llamamos "error". Pero esta pregunta es solo acerca de los errores accidentales.
Ben Voigt
En su tercera viñeta, creo que tiene los colores o la lógica cambiada. el rosa debe ser bajo y el azul debe ser alto.
Guill
@Guill ¿Eh? La región rosada está por encima de V_T, por lo que no se tratará confiablemente como lógica alta.
duskwuff
65

No podemos Simplemente estamos disminuyendo la probabilidad de errores al agregar cheques a los datos. Dependiendo de qué tipo de datos se verificará, se puede hacer a través de hardware o software, y puede tomar cualquier forma, desde simples bits de suma de verificación en flujos en serie hasta máquinas de estado cíclicas, permitiendo que solo se realicen transiciones específicas en un momento dado.

Pero es un círculo vicioso, ¿no? ¿Cómo podemos asegurar que el circuito a cargo de verificar los datos no se vea afectado por las mismas perturbaciones que los datos y dar un falso positivo? ¿Agregar otro? Puedes ver cómo esto puede ser bastante costoso para muy poca ganancia al final.

La pregunta es: ¿qué tan confiable desea que sea su sistema? Los satélites, que incorporan algunos de los sistemas informáticos más confiables disponibles, por ejemplo, a veces recurren a la redundancia cruzada de sistemas no idénticos, así como a los votos: tres computadoras diferentes ejecutan el mismo algoritmo codificado por tres personas diferentes de tres maneras diferentes, y si una de las computadoras da un resultado diferente de las otras dos, se reinicia (y si vuelve a ocurrir, se aísla). Pero nuevamente, si dos computadoras están defectuosas al mismo tiempo, entonces la computadora incorrecta se reiniciará / aislará. Por lo general, la "redundancia en frío" es suficiente: se implementan un circuito primario y uno secundario, el primario se ejecuta hasta que un tipo de circuito de monitoreo (no protegido) detecta un error y se intercambia el circuito secundario. Si es solo un error en RAM El código se puede volver a ejecutar para actualizar los datos. Solo tiene que decidir sabiamente dónde dibujar la línea, es imposible hacer un circuito de detección de errores 100% confiable.

Los satélites (especialmente a gran altitud o en el cinturón de Van Allen) y las computadoras en las plantas nucleares u otros entornos radiactivos están particularmente sujetos a (palabras clave :) Eventos de solapamiento o enganches debido a partículas de alta energía que chocan o son absorbidas por las redes cristalinas de semiconductores . Los libros que cubren estos campos sin duda serán su mejor apuesta. La pintura se degrada por el daño por desplazamiento de la radiación, por lo que es totalmente comprensible que los semiconductores también puedan dañarse o alterarse por la radiación entrante.

Señor Mystère
fuente
2
No estoy seguro de si querías escribir 'círculo vicioso', pero 'círculo viscoso' suena igualmente divertido.
svavil
1
En realidad era un círculo visivo, pero el círculo viscoso me hizo reír :)
Mister Mystère
1
Solo se necesitan log n bits para poder localizar y corregir un error de un solo bit en n bits.
Thorbjørn Ravn Andersen
1
Esto me recuerda una pregunta reciente sobre cómo escribir programas para tener en cuenta los errores de hardware en computadoras expuestas a compuestos radiactivos: stackoverflow.com/questions/36827659/…
Pharap
No sabía sobre la cuestión de los satélites que tres 'grupos' diferentes (o más) están codificando la misma cosa de una manera diferente. Suena genial :)
kalmanIsAGameChanger
33

Las perturbaciones de un solo evento ya no son una cuestión de espacio ni de avión; Los hemos estado viendo en la superficie por más de una década, tal vez dos por ahora.

Sin embargo, como se mencionó, al menos en las aplicaciones espaciales tratamos las molestias mediante la votación triple (cada bit es realmente tres y gana un voto de dos tercios, por lo que si hay uno que cambia, los otros dos lo cubrirán). Y luego, ECC o EDAC , con depuradores que pasan por la RAM a una velocidad superior a la tasa de actualización de evento único prevista para limpiar las perturbaciones de eventos individuales (las que realmente empujan a los dos tercios a votar mal).

Luego está la dosis total; Con el tiempo, el material se vuelve demasiado radiactivo para funcionar, por lo que utiliza suficiente material para exceder la vida útil del vehículo. No es algo de lo que nos preocupemos en la superficie normalmente. (Y latchup) Usar tres / múltiples conjuntos de lógica en paralelo es / era una forma de tratar de no tener que usar la tecnología tradicional de rad-hard, y bueno, puedes encontrar qué tan bien está funcionando.

Las personas que solían saber cómo hacer cosas para el espacio en su mayoría se retiraron o se mudaron, por lo que ahora tenemos una serie de programas que hacen basura espacial. O tratando el espacio como productos terrestres, en lugar de tratar de hacer que todos trabajen y tener un reingreso y quemado controlados, ahora esperamos una cierta cantidad de basura espacial de cada constelación.

Vemos molestias en la superficie. Cualquier tarjeta de memoria ( DRAM ) que compre tiene un FIT, Failures In Time, y cualquier chip con RAM (todos los procesadores, muchos otros), también tendrá una especificación FIT (para los bloques RAM (SRAM)). La RAM es más densa y utiliza transistores más pequeños, por lo que es más susceptible a molestias, creadas internamente o externas. La mayoría de las veces no nos damos cuenta o no nos importa, ya que la memoria que usamos para datos, mirar un video, etc., se escribe, se lee y no se vuelve a usar antes de que permanezca el tiempo suficiente como para molestarla. Alguna memoria, como la que tiene un programa o el núcleo, es más arriesgada. Pero hace tiempo que estamos acostumbrados a la idea de reiniciar nuestra computadora o reiniciar / reiniciar nuestro teléfono (algunos teléfonos / marcas tendrían que quitar la batería periódicamente). ¿Fueron estas molestias o mal software o una combinación?

Los números FIT para su producto individual pueden exceder la vida útil de ese producto, pero en una gran granja de servidores, tiene en cuenta toda la RAM o los chips o lo que sea, y el MTBF pasa de años u órdenes más allá de eso, a días u horas, en algún lugar la granja. Y tiene ECC para cubrir lo que pueda de ellos. Y luego distribuye la carga de procesamiento con failovers para cubrir las máquinas o el software que no puede completar una tarea.

El deseo de almacenamiento en estado sólido y el movimiento de los medios giratorios ha creado un problema relacionado con esto. El almacenamiento utilizado para SSD (y otro almacenamiento no volátil) para ser más rápido y más barato, es mucho más volátil de lo que nos gustaría y depende de EDAC, porque estaríamos perdiendo datos sin él. Tiran muchos bits adicionales y eccúan todo, haciendo los cálculos para equilibrar la velocidad, el costo y la longevidad del almacenamiento. No nos veo volviendo atrás; la gente quiere más almacenamiento no volátil en todas partes que quepa en un paquete pequeño y no domine el precio del producto.

En lo que respecta a los circuitos normales, desde los primeros días de usar transistores para circuitos digitales hasta el presente, pasamos a través de la porción lineal del transistor y lo usamos como un interruptor, lo golpeamos entre los rieles con un poco de exceso para asegurar que se pegue. . Al igual que el interruptor de la luz en su pared, lo gira más de la mitad de un resorte para ayudar al resto y mantenerlo allí. Es por eso que usamos digital y no tratamos de vivir en la región lineal; Lo intentaron desde el principio, pero fracasaron. No pudieron permanecer calibrados.

Entonces, simplemente golpeamos el transistor en sus rieles y ambos lados de una señal se asentarán en el siguiente ciclo de reloj. Se toman grandes esfuerzos, y las herramientas actuales son significativamente mejores de lo que solían ser, al hacer el análisis del diseño del chip, para ver que por diseño hay margen en el tiempo. Luego pruebe cada troquel en cada oblea (eso y / o después del empaque), para ver que cada chip es bueno.

La tecnología de chips depende en gran medida de estadísticas basadas en experimentos. Cuando overclockea su CPU, está presionando ese margen, se mantiene dentro de la frecuencia de reloj, temperatura, etc. anunciadas y sus posibilidades son significativamente menores de tener problemas. Un procesador xyz de 3 GHz es simplemente un chip de 4 GHz que falló a 4 GHz pero pasó a 3 GHz. Las partes se clasifican por velocidad básicamente desde una línea de producción.

Luego están las conexiones entre chips o placas, y también están sujetas a problemas, y se necesita mucho tiempo y esfuerzo para hacer estándares y diseños de placa, etc., para mitigar el error en esas interfaces. USB , teclado, mouse, HDMI , SATA , etc. Así como todos los rastros en el tablero. Dentro y fuera del tablero tiene problemas de diafonía; una vez más, hay muchas herramientas disponibles si las usa, así como experiencia para evitar los problemas en primer lugar, pero otra forma en la que es posible que no veamos los unos y los ceros completamente comprometidos.

Ninguna de las tecnologías, ni siquiera el espacio, es perfecta. Solo tiene que ser lo suficientemente bueno, un porcentaje suficiente del producto debe cubrir la vida útil esperada del producto. Algún porcentaje de los teléfonos inteligentes tiene que durar al menos dos años, y eso es todo. Las fundiciones o tecnologías más antiguas tienen datos más experimentales y pueden producir un producto más confiable, pero es más lento y es posible que no sean diseños nuevos, así que ahí lo tienes. La vanguardia es solo eso, una apuesta para todos.

Para su pregunta específica, los transistores en cada extremo de una señal se empujan rápidamente a través de su región lineal y se inclinan hacia uno de los rieles. El análisis se realiza en cada ruta combinacional para determinar que se asentará antes de que el reloj al final de la ruta lo bloquee, de modo que realmente se convierta en cero o uno. El análisis se basa en experimentos. Los primeros chips de una línea de productos se empujan más allá de los límites del diseño, los gráficos schmoo se hacen para determinar si hay margen en el diseño. Se realizan variaciones en el proceso y / o se encuentran candidatos individuales que representan los chips lentos y rápidos. Es un proceso complicado y algunos tienen más material, otros tienen menos, corren más rápido pero usan más energía o corren más lento, etc.

Los empujas a los márgenes también. Y básicamente tiene una cálida sensación de que el diseño está bien para entrar en producción. La exploración JTAG / límite se utiliza para ejecutar patrones aleatorios a través de los chips entre cada estado bloqueado para ver que las rutas combinacionales son sólidas para un diseño. Y donde hay preocupaciones, algunas pruebas funcionales dirigidas también pueden ocurrir. Pruebas adicionales del primer silicio y quizás pruebas aleatorias para asegurarse de que el producto sea bueno. Si / cuando ocurren fallas, eso puede empujarlo de regreso a más pruebas funcionales en la línea de producción. Depende en gran medida de las estadísticas / porcentajes. 1/1000000 de los malos que salen pueden estar bien o 1/1000 o lo que sea; depende de cuántos creas que producirás de ese chip.

Las vulnerabilidades son como se mencionan aquí y con otros. Primero el chip en sí, qué tan bueno fue el diseño y el proceso, qué tan cerca del margen es la ruta más débil de un chip específico en el producto que compraste. Si está demasiado cerca del borde, el cambio de temperatura u otro puede causar problemas de temporización y los bits atraparán los datos que no se hayan asentado en uno o cero. Luego están los eventos individuales molestos. Y luego hay ruido. de nuevo cosas ya mencionadas ...

viejo contador de tiempo
fuente
44
Su primer párrafo hace que parezca que no hay más problemas con los entornos aeroespaciales, mientras que creo que usted quiso decir que SEU ya no solo tiene experiencia en esos entornos.
W5VO
Tenga en cuenta que los SEU pueden ser causados ​​por la soldadura SnPb en BGA debido a que parte del plomo forma parte de la cadena de descomposición del uranio, aparte de la actividad de neutrones libres.
Peter Smith
@ W5VO, sí, quise decir que las molestias debidas a la radiación ya no son solo un problema espacial, son un problema hasta la superficie. No tan malo como en el espacio, pero presente.
old_timer
1
Me parece recordar que algunos autobuses de minicomputadora DEC tenían problemas con la metaestabilidad en la práctica. Ese es un mecanismo distinto para los errores de bits de los que ha nombrado, ¿verdad? ¿O no?
davidbak
2
@davidbak: La metaestabilidad es un problema desagradable cuyo efecto más común es que en los casos en que los valores de varios bits dependen de si alguna entrada fue baja o alta en algún momento en el pasado reciente, es posible que no todos cambien juntos de una manera consistente con la entrada ser bajo, ni de manera consistente con ser alto, sino que puede producir una mezcla arbitraria de los dos comportamientos. Por ejemplo, si se supone que el código se bifurca cuando se presiona un botón, los bits del contador del programa pueden terminar manteniendo una mezcla arbitraria de los valores que tendrían si se presionara el botón, o si no lo fuera.
supercat
12

Si buscas una respuesta simple:

Cada componente digital de una computadora está más restringido en las salidas que produce que en las entradas que acepta. Por ejemplo, cualquier valor de "entrada" de 0V a 2V será aceptado como 0, pero una "salida" de 0 siempre estará en el rango de 0 a 0.5V. (Ver la respuesta de duskwuff para algunos valores reales).

Esto significa que cada componente ayuda a "corregir" algunas de las desviaciones o ruidos que se han producido a lo largo de la línea. Por supuesto, si el ruido es lo suficientemente grande, el sistema no puede compensarlo. Las computadoras en entornos de alta radiación pueden verse frecuentemente afectadas por 1s que cambian a 0s y viceversa.

Básicamente, las computadoras están diseñadas para tolerar ciertos niveles de ruido / interferencia , lo cual es lo suficientemente bueno para la mayoría de los propósitos prácticos.

Artelius
fuente
8

Teóricamente es posible que las señales cambien entre un 0 y un 1 debido al ruido térmico (y otros), sin embargo, es extremadamente improbable.

Los circuitos digitales están diseñados con un atributo llamado 'margen de ruido'. Esta es la cantidad en que su entrada tiene que cambiar antes de que la salida cambie de estado. Generalmente en los circuitos CMOS esto es aproximadamente el 50% de la tensión de alimentación. El ruido térmico inevitable (proviene de electrones que se mueven a cualquier temperatura por encima de 0 kelvin) en estos circuitos genera << 1 mV de ruido, y la probabilidad de que estos picos puedan exceder (digamos) 500 mV, es extremadamente pequeña.

Las puertas digitales (por ejemplo, CMOS) tienen características de ganancia y saturación. Lo que esto significa es que cuando la señal de entrada está cerca del medio del rango, la salida cambia rápidamente (ganancia alta), pero cuando está cerca de los extremos del rango, cambia lentamente. El resultado de esto es que cuando una señal de entrada está 'cerca' de los rieles, la salida está aún más cerca, esto significa que el ruido no se amplifica.

Otras características mencionadas anteriormente (corrección de errores, etc.) significan que los errores, incluso si ocurren, no se propagan.

jp314
fuente
4

En los sistemas que son propensos a errores, como los canales de comunicación y el almacenamiento magnético (y a veces incluso la RAM), se almacena una suma de verificación, CRC o ECC para rechazar datos incorrectos o corregir pequeños errores.

En general, los sistemas binarios están diseñados para que esto no sea posible, pero una vez cada pocos millones o miles de millones * de veces un rayo cósmico o un destello de ruido empujarán las cosas sobre la línea, la detección / corrección de errores es necesaria para mantener la corrupción. de afectar la computadora de una manera seria.

* ¡Los canales de comunicación pueden tener una tasa de error mucho, mucho más alta!

Daniel
fuente
4

El hardware de la computadora se ha vuelto más robusto y confiable. Pero el hardware es demasiado amplio para una respuesta simple. Sin embargo, puede ser interesante saber que existe una diferencia de confiabilidad entre una computadora de escritorio común y una computadora de servidor empresarial. Encontré este hilo de preguntas / respuestas sobre el hardware del servidor. Un servidor costará muchas veces más que un escritorio comparable. El costo es el resultado de un mejor hardware que posiblemente sea varias veces menos probable que inesperadamente "cambie un 1 y 0".

Pero el hardware es solo la mitad de la historia. Las computadoras también pueden proteger los datos de errores inesperados mediante el uso de software. El código de Hamming es un ejemplo en el que, al agregar una pequeña cantidad de datos adicionales, una pequeña cantidad de errores no solo se pueden detectar sino también corregir.

st2000
fuente
con la excepción del flash MLC, donde la confiabilidad se cambia por densidad,
Jasen
3

Hay dos formas que se usan comúnmente para minimizar la probabilidad de que un bit lógico se cambie accidentalmente (0 a 1 o 1 a 0).
La primera es proporcionando como grande un hueco , entre los niveles de tensión definidos para un 0 y un 1, como sea posible . Como usted menciona, un 0 se define como un nivel de voltaje <.9v, mientras que el 1 se define como un nivel de voltaje> 2.9v (no como usted dice .9 a 1.5). Esto deja una brecha de voltaje de 2v. Esto significa que el voltaje de la señal tendría que variar en un 200% , antes de cambiar "accidentalmente" el estado del bit (muy poco probable).
El segundo es "cronometrando"Las señales lógicas. Dado que el voltaje / ruido "accidental" es aleatorio y de corta duración, al permitir cambios de estado solo a intervalos particulares (y cortos), se minimiza la probabilidad de que la "variación" golpee en el momento del reloj.

Por supuesto, existen otros medios y métodos utilizados, dependiendo del grado de confiabilidad requerido (ECD, ECC, etc.).

Guill
fuente
2

Buena ingeniería

Se requiere mucho esfuerzo en un diseño para evitar la corrupción de datos o para corregirlo cuando no se puede evitar lo suficiente (por ejemplo, la memoria ECC ).

Las cosas que pueden causar corrupción de datos incluyen:

  • ambientes eléctricamente ruidosos
  • problemas relacionados con el poder
  • problemas de tiempo (por ejemplo, entre reloj y líneas de datos, o entre dos líneas diferenciales)
  • charla cruzada eléctrica

En resumen, se ha invertido mucha ingeniería en diseños digitales para que los ingenieros de software puedan suponer que '0' significa '0' y '1' significa '1'.

campana
fuente
Y, por supuesto, la memoria ECC también puede hacer cosas divertidas como desencadenar una interrupción no enmascarable (NMI) si se corrompen más bits de los que es posible reparar. Creo que para la RAM ECC moderna se trata de un error de más de un bit en 64 bits (las codificaciones pueden corregir errores de un solo bit y detectar pero no corregir errores de dos bits), pero podría estar equivocado al respecto. En situaciones en las que le interesan sus datos, puede ser preferible detener el sistema de inmediato si algo no funciona sin remedio que cojear sin saber si los datos son confiables (o peor, sabiendo que no se puede confiar).
un CVn
2

Los dos aspectos fundamentales de las computadoras electrónicas prácticas son:

  1. Una fuente de alimentación muy estable

  2. Tiempo (generalmente definido como frecuencia de reloj o retraso)

Las fuentes de alimentación para sistemas informáticos están muy estrictamente especificadas y reguladas. De hecho, para cualquier sistema informático, la fuente de alimentación generalmente se regula varias veces: en la fuente de alimentación (o cargador de batería), en la entrada principal de la placa base, en la entrada de las tarjetas secundarias y finalmente en el chip.

Esto elimina mucho ruido (volatilidad eléctrica). Lo que ve la CPU es una fuente de voltaje muy estable y no volátil que puede usar para procesar la lógica.

La siguiente fuente principal de valores intermedios (voltajes entre lo que se considera 0 o 1) viene cuando los valores hacen la transición. 1 cambiando a 0 (tiempo de caída) o 0 cambiando a 1 (tiempo de subida). Realmente no puede hacer mucho al respecto, excepto esperar a que termine la transición antes de aceptar la salida del circuito. Antes de que se complete la transición, la salida del circuito se considera basura.

En ingeniería, la solución a este problema es simplemente escribir cuánto tiempo debe esperar para que los resultados sean correctos en papel. Este es el origen de la frecuencia del reloj de la CPU. La cantidad de GHz a la que puede ejecutar la CPU depende del tiempo que tarden en estabilizarse los cambios de estado en la CPU.

En realidad, hay una tercera fuente de volatilidad: las entradas al circuito. La solución a ese problema es similar al problema general anterior: asegúrese de que la señal (voltaje o corriente) que ingresa al sistema sea estable y asegúrese de que la señal tenga suficiente tiempo para estabilizarse.

La segunda parte del problema es por qué muestreamos entradas en latches o registros antes de procesar. La señal puede ser basura. Pero serán 0 o 1 basura en el interior de los registros cuando se procesen. La primera parte del problema es para qué son las garantías.

slebetman
fuente
2

Pero nunca leí lo que mantiene el buen comportamiento de los voltajes eléctricos de una manera que un 0 nunca podría convertirse accidentalmente en un 1 debido a la volatilidad eléctrica 1 dentro de la computadora. Quizás es posible que el voltaje esté muy cerca de 0.9, entonces, ¿qué se hace para evitar que pase el umbral?

La retroalimentación es lo que evita que se acerque al umbral de voltaje y lo obliga a comportarse bien.

Esto generalmente tiene la forma de un circuito de retención de algún tipo, a menudo un circuito de retención sincronizado.

Como un ejemplo simple, considere el flip-flop . Está diseñado para que la salida sea realimentada en el circuito lógico como una entrada adicional. La lógica dentro del elemento, por lo tanto, sabe lo que está produciendo y seguirá emitiendo el mismo valor hasta que las otras entradas lo fuercen al estado opuesto.

Dado que el circuito está diseñado para que los transistores estén completamente encendidos o completamente apagados, siempre saldrá cerca de la fuente de alimentación y los límites de tierra; no se acercará al nivel de 0.9v, y cuando haga la transición, se moverá rápida y completamente al otro estado Los circuitos están diseñados específicamente para evitar operar en la región analógica entre los dos estados.

Adam Davis
fuente
0

En condiciones de funcionamiento normales, los 0 y 1 rara vez fallan, pero en malas condiciones de funcionamiento (es decir, batería baja o ese breve tiempo después de que se desconecta la alimentación de CA y el voltaje en el condensador está cayendo), suceden cosas extrañas y se confunden 0s y 1s todo el tiempo.

Por esta razón, si está escribiendo un código defensivo (software o HDL) que no desea bloquear, siempre debe considerar el caso en el que un número podría fallar. Por ejemplo,

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

es mejor cambiar ==a >= solo en caso de que el valor de isaltos de 9 a 11 o cualquier número mayor que 10, lo que haría que nunca salga del ciclo hasta que se iajuste a 0 (digamos después de 4 mil millones de iteraciones).

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

Sucede, confía en mí ...

Mark Lakata
fuente
¿Qué ipasa si salta a algún número negativo grande?
Jasen