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

Paso 20: VM 4.3: If/Else en Verilog

Este módulo Tutorial se completa mejor después de una sólida comprensión del módulo 4.2 sobre declaraciones bloquea y sin bloqueo.

IF/Else declaraciones en Verilog son extremadamente útiles cuando se utiliza correctamente.  Primero echar un vistazo a unas cuantas reglas que debe seguir para If/Else declaraciones en Verilog:

1. todos If/Else declaraciones deben situarse dentro de un bloque de siempre
2. todos los valores establecidos mediante un If/Else declaración debe ser de tipo reg
3. Si asignar más de un reg, utilice "empezar" y "final" para definir el alcance de la If/Else. ¿Sólo una declaración? Entonces no preocuparse por ello. Pero de cualquier manera cada línea interior de un If/Else con un punto y coma (un punto y coma nunca seguirá una instrucción de "comenzar" o "extremo").
4. utilizar operadores de comparación con 2 símbolos en condiciones (es decir, "& &" y "==" y "! =")

Básicamente eso es todo allí está a él. Si el código siempre está dando problemas, devolver a estas cuatro reglas y pregúntese, "¿mi código de seguimiento a estas reglas?".

En Verilog llegamos a utilizar tres básicas condicionales: if, else y else if. Antes de llegar al uso de éstos sin embargo, tenemos que ir sobre cómo asignar valores a un reg.

Sabemos que un registro es como un alambre que puede tener su propia fuente, es decir, un cable que puede generar su propio valor. También sabemos que podemos tener autobús mas y mas sola.

Puede utilizar un reg como si fuera una variable en C y C++; almacenará su valor hasta que se cambie explícitamente:

REG myReg;
myReg = 1' b1; bloqueo
myReg < = 1' b0; no bloqueo

Esto establece el reg en alta tensión lógica entonces a baja tensión lógica. Sin embargo, valores asignados a regs sólo deben ocurrir dentro de un bloque siempre a menos que usted nunca cambiará su valor. Si se necesita, por ejemplo, un cable de alta constante lógica, puede darle un reg a un valor fuera de un bloque de siempre.

Asignación (no equivale esto a la palabra clave asignar) un valor a un reg requiere el formato siguiente para el lado izquierdo de la instrucción:

< nombre de reg >< operador igual (= o < =) >

Y para la derecha (el valor):

anchura del autobús del < > ' < tipo de valor >< valor >

Esto es importante porque el ancho de la reg debe coincidir exactamente con el ancho del valor. Hay muchos tipos de valores que podemos asignar a la reg, como binario, hexadecimal y decimal (denominado en Verilog b, h y d respectivamente) pero recomiendo que aquellos que apenas están aprendiendo Verilog utilizan valores sólo binario. Son fáciles de trabajar con y también fácil de solucionar.

Al utilizar valores binarios debe escribir cada valor (1 o 0) de cada bit del reg a menos que están haciendo el reg todo alto o bajo todo.

Ejemplos:

my_reg < = 4' b0; legal
my_reg2 < = 3' b010; legal
my_reg3 < = 4' b01; ilegal (desajuste de anchura; esperando 4 bits)

Estas declaraciones se lee en inglés como, por ejemplo, "cero binario de cuatro bits" o "tres bits binarios dos".

Ahora que sabemos cómo asignar un valor a un reg, echemos un vistazo a cómo utilizar If/Else declaraciones en Verilog, comenzando con un ejemplo:

() módulo testMod
entrada a,
entrada b,
salida c
);

REG Q;

siempre @ (a, b) //if el estado de una o b cambios, vuelva a ejecutar este código
comenzar
Si (a == 1' b1 || b == 1' b0)
Q < = 1' b0;
otra cosa
Q < = 1' b1;
final

asignar a c = Q;

endmodule

¿Se puede rastrear a través de este código y deducir cómo un If/Else instrucción trabaja en Verilog?

¿Qué pasa si queremos manipular más de un valor si se dispara el "if" (Nota: Si tu si declaración modifica valores de los dos, su declaración más también debe modificar los dos valores para evitar valores flotantes)?

() módulo testMod
entrada a,
entrada b,
salida de c [1:0]
);

REG Q;
REG T;

siempre @ (a, b) //if el estado de una o b cambios, vuelva a ejecutar este código
comenzar
Si (a == 1' b0)
comenzar
Q < = 1' b0;
T < = 1' b0;
final
else if (a == 1' b1 & & b == 1' b1)
comenzar
Q < = 1' b1;
T < = 1' b0;
final
otra cosa
comenzar
Q < = 1' b1;
T < = 1' b1;
final
final

asignar a c [0] = Q;
asignar a c [1] = T;

endmodule

Creo que este ejemplo lazos muchas de las ideas cubrieron en esta serie de tutoriales Junta. También lancé en una instrucción Else If. Sin sorpresas, que funciona como una C y C++. Sólo asegúrese de que acciones de cada estado maneja las mismas salidas (en este caso, T y Q se abordan en cada caso). Tenga en cuenta las palabras clave begin y end en lugares que intuitivamente que debe ser llaves.

Eso es todo no hay declaraciones de If/Else If/Else en Verilog. Recordar para referirse a las reglas de diseño en la parte superior de este módulo Tutorial para propósitos de depuración.

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