Aprender Verilog: Una breve serie de tutoriales sobre diseño de electrónica Digital con FPGAs y Verilog HDL (19 / 21 paso)

Paso 19: VM 4.2: bloqueo vs Non-Blocking declaraciones de Verilog

Puede parecer extraño que cambiamos de discutir siempre bloques de bloqueo/no bloqueo pero este es el momento perfecto para introducir un nuevo concepto.

Cuando escribimos código en C y C++, nuestro código se ejecuta línea por línea en orden secuencial hasta que el programa se le dice que se desvían de ese patrón (por ejemplo, saltar a una determinada línea). Se ejecuta una línea y sólo después de que acabados de ejecución están la siguiente línea ejecutada. Para fines más prácticos no notamos ninguna demora en aplicaciones de consola sencillas. Pero en diseño digital, este retraso de la ejecución de una línea a la siguiente podría tener consecuencias muy negativas y sensibles. Retrasos hasta de menos de un nanosegundo pueden causar problemas; problemillas para ser exactos.

Una falla se define formalmente como un cambio momentáneo y no deseado en la salida de un circuito debido a una entrada de entrar en un estado transitorio y la entrada tiene al menos dos caminos a través del circuito sin demoras puerta equivalente entre caminos.

Imagina que tienes dos conmutadores (sw0 y sw1) que eran tanto una lógica 0, y el resultado de un solo LED fue una lógica uno si ambos interruptores fueron una lógica 0 (LED = ~(sw0 & sw1)), entre otro deseado salidas. Pero decir que Flip sw1 a un estado alto de lógica. ¿Qué pasa si sólo para una pequeña fracción de segundo que el LED era todavía una lógica uno mientras que el voltaje de la fuente de sw1 "ripples" su camino "río abajo" a través de las puertas de la lógica en sus diferentes caminos hasta llegar a la última puerta en el circuito? En ella se encuentra una fracción de segundo donde el LED es una lógica uno cuando teóricamente debería ser una lógica cero; su circuito rompió las reglas de sus propias ecuaciones de lógica!

Mientras que el punto de este módulo no debe cubrir cómo solucionar fallos en sus declaraciones de la lógica, el punto es que incluso bien formado lógica ecuaciones para circuitos que son "libre de falla" potencialmente pueden crear un error si utiliza una instrucción de bloqueo donde debería haber utilizado un bloqueo de no declaración y viceversa.

¿Cómo sucede esto y por qué la Declaración incorrecta de Verilog haría esto?

Un bloqueo es una asignación (no tiene que necesariamente usar la palabra "asignar") instrucción que utiliza el operador "=". Bloqueo de declaraciones son ejecutadas como código en C y C++: secuencial y en orden.

Una declaración de bloqueo no es una instrucción de asignación que utiliza el "< =" operador. Declaraciones sin bloqueo cuando se ponen en el mismo ámbito del código con otras declaraciones de bloqueo no se ejecutarán concurrentemente.

Re Lee las definiciones anteriores ya que son muy importantes.

Uno pueden tener estudiantes de pensamiento común es "Verilog código es un lenguaje de descripción de hardware, por lo que no importa qué tipo de declaración que escribo porque se sintetizan en el mismo circuito físico y se comportan de la misma manera." Esto no es necesariamente cierto, como Verilog complejo compilador tendrá que crear transistores diferentes patrones para pasar señales diferentes a diferentes lugares, y se debe especificar si esto tiene que pasar en el momento mismo o en otros intervalos de tiempo. Puede ser más eficiente para construir un circuito con declaraciones que pueden dirigir las señales en un momento conveniente para el circuito de bloqueo, pero a menudo es importante que dos o más cambios de salida tomen lugar esencialmente al mismo tiempo.

¿Ves cómo una serie de declaraciones de bloqueo podría tener efectos adversos del comportamiento del circuito? Asignar nivel superior declaraciones bloquean porque las declaraciones son sólo "ejecutó" una vez, pero hay algo como un decodificador que puede "siempre" se reevalúan las condiciones cambiar salidas simultáneamente. Imagina los problemas que un ingeniero tendría si su decodificador salida GS y señales de salida EO cambiaron en diferentes épocas.

Echar un vistazo a algunos ejemplos sencillos ("si" declaraciones están cubiertas en el siguiente módulo!):

Ejemplo #1
siempre @ (sw0, sw1)
comenzar
Si (sw0 == 1' b1)
comenzar
todas estas salidas se le asignará su
valores al mismo tiempo
OUTPUT1 < = 1' b0;
output2 < = 1' b1;
output3 < = 1' b0;
final
final

Ejemplo #2
siempre @ (sw0, sw1)
comenzar
Si (sw0 == 1' b1)
comenzar
la primera salida se le asignará, luego las dos siguientes
se le asignará al mismo tiempo
OUTPUT1 = 1' b0;
output2 < = 1' b1;
output3 < = 1' b0;
final
final

Ejemplo #3
siempre @ (sw0, sw1)
comenzar
Si (sw0 == 1' b1)
comenzar
se asignará la primera salida, luego los dos siguientes serán
asignará uno tras otro
OUTPUT1 = 1' b0;
output2 = 1' b1;
output3 = 1' b0;
final
final

Nunca ponga una declaración bloqueo dentro de un bloque de lógica estructural. En otras palabras, nunca poner un "=" dentro de un bloque de siempre. Incluso si sólo va a cambiar una salida es mala práctica utilizar una instrucción de bloqueo.

Siempre utilice una instrucción de bloqueo cuando se utiliza la palabra "asignar". Estas afirmaciones siempre llevará a cabo fuera de un bloque de siempre. Ejemplo de uso sería declarar un registro cuyo valor cambia dentro de un bloque de siempre, entonces asignar un cable de salida "=" valor de reg.

Sugerencia: usted por lo general dará un reg un valor mediante el formulario: < nombre de reg >< = < valor >;

Pista extra (duplicados): sólo puede establecer los valores de un registro en un bloque siempre, asignar no valores de tipo alambre. Puede, sin embargo, posteriormente asignar el alambre para ser igual al valor de la reg.

Artículos Relacionados

Cómo reutilizar una lámpara fluorescente compacta muerto y obtener libre electrónica

Cómo reutilizar una lámpara fluorescente compacta muerto y obtener libre electrónica

cómo llegar a electrónica gratis este muerto "lámpara fluorescente compacta" hay tantos electrónica allíhay transistores, resistencias, transformador de audio, condensadores, diodos... etc.el objetivo de este proyecto fresco es reciclaje muerto
Cómo escribir una buena electrónica Instructable

Cómo escribir una buena electrónica Instructable

Este Instructable fue inspirado principalmente por mis aportes sobre en la clínica, que, si no han oído hablar de él, es un hilo del foro donde se puede ir a pedir ayuda a criticar sus proyectos. Por lo general ser voluntario ayudar con proyectos rel
Hacer una sudadera de protoboard (instantánea electrónica usable!) ¿

Hacer una sudadera de protoboard (instantánea electrónica usable!) ¿

Son vestibles electrónica el futuro? ¡Eso creo! Aquí es el proyecto de electrónica usable más rápido, más versátil, la sudadera de la protoboard.En su mayoría, wearables involucran hilo conductor para el cableado. Pero ese tipo de cosas atasca mi máq
12V-180kV: una batería generador Marx (e Introducción a la electrónica)

12V-180kV: una batería generador Marx (e Introducción a la electrónica)

Si estás leyendo este Instructable, una cosa es probablemente cierta: estás interesado en alto voltaje! Si es así, has venido al lugar correcto; Generadores de Marx puede satisfacer su sed de chispas, explosiones y emoción. Hice este generador Marx v
RC barco hecha de una taza de deli y reciclado de piezas del aeroplano de RC (con mod de bonus al final)

RC barco hecha de una taza de deli y reciclado de piezas del aeroplano de RC (con mod de bonus al final)

Este barco es un asequible, fácil de hacer remoto controlado barco hecha de una taza de deli de 36 o 24 onzas, una pequeña hélice, pegamento caliente, cinta adhesiva, un gran palo de paleta de helado/del arte, una pequeña caja de plástico y algunos e
Una breve historia del tiempo

Una breve historia del tiempo

"La gente no entiende a tiempo. Es no lo que crees que es. - La gente asume que el tiempo es una progresión estricta de causa a efecto... pero en realidad, desde una perspectiva no lineal, no subjetiva, es más como una bola grande de wibbly-wobbly...
Cómo dar una breve clase de presentación competente

Cómo dar una breve clase de presentación competente

este instructivo se compone de puntos con un montón de palabras fijadas a ellos. Sé que palabras pueden ser intimidantes, pero leyendo estas palabras particular le ayudará a evitar errores comunes al dar una presentación de clase. No importa qué tema
Una breve historia de viaje y algunas Ideas que puedan o puede no ayudar a que mantenga su cordura mientras tomar viajes con su descendencia

Una breve historia de viaje y algunas Ideas que puedan o puede no ayudar a que mantenga su cordura mientras tomar viajes con su descendencia

viaja, especialmente con los niños, puede sacar el demonio en casi todo el mundo. Encanta ver lugares nuevos y te encanta sus little tikes su rugrats, pinzas cortantes de su tobillo, su hijo prepubescent, púber adolescente con sus hormonas furiosas,
Una breve introducción a la síntesis

Una breve introducción a la síntesis

¿se ha preguntado como ven las ondas que salen de un sintetizador?  O ¿qué pasa con una forma de onda cuando se agrega la resonancia?Este video ofrece una breve descripción audiovisual de técnicas y terminología básica de la síntesis.  Todas las lect
Programa de una cadena de luces de Navidad a parpadear el código morse con Arduino y Snap circuitos

Programa de una cadena de luces de Navidad a parpadear el código morse con Arduino y Snap circuitos

esto es un proyecto de mi hijo Dylan (9) y pongo usando una placa de circuito de Arduino, un conjunto de broche de presión del circuito y una cadena de luces de Navidad.Lo que usted necesita:Un Arduino: Un Arduino es un equipo en una sola placa de ci
Diseño de joyería digital: Una moda Introducción a Inventor

Diseño de joyería digital: Una moda Introducción a Inventor

mayoría decente de las personas en este planeta, en un momento u otro, entraron en una joyería en busca de algún tipo de accesorio, ya sea para nosotros mismos, o eso especial alguien. Aunque los minoristas a menudo tienen una amplia selección de dis
Un alambre de laberinto con una electrónica giro

Un alambre de laberinto con una electrónica giro

aquí es un SIMPLE y realmente proyecto de diversión electrónica usted puede hacer en casa. No necesitas hacer un tablero de circuito impreso que lo hace todo mucho más fácil!Estoy seguro que has jugado "laberinto de alambre"... (también llamado
CÓMO HACER UNA BATERÍA ELECTRÓNICA. (no un dechado de MIDI) aka KIDU

CÓMO HACER UNA BATERÍA ELECTRÓNICA. (no un dechado de MIDI) aka KIDU

Este instructable va a sersobre la construcción de una batería electrónica (no un MIDI sampler.), utilizando un Arduino UNO R3.,similares a una V-DRUM. Es código denominado KIDU.(Kompact inteligente unidad tamborileo). Algunos de los artículos usados
Convertir una báscula de baño electrónica en una escala de envío para

Convertir una báscula de baño electrónica en una escala de envío para <>

,En mi pequeño negocio necesitaba peso medio para artículos grandes y cajas a escala de planta para el envío. En lugar de la manera de pagar demasiado por un modelo industrial, usé una báscula de baño digital. Me pareció estar lo suficientemente cerc