Tutorial - Escritura de código combinacional y secuencial
Uso de VHDL Process o Verilog Always Blocks
Este tutorial muestra cómo escribir bloques de VHDL o Verilog que están contenidos en un Proceso o un Bloquear siempre respectivamente. Los procesos (en VHDL) y los Bloques siempre (en Verilog) son fundamentales y deben entenderse bien. Se comportan exactamente de la misma manera, por lo que ambos se presentan aquí para usted, si está aprendiendo solo un idioma en este momento, preste atención a los ejemplos enfocados en ese idioma en particular. Los procesos o Bloques siempre se utilizan en dos escenarios principales:
- Para definir un bloque de combinaciones lógica
- Para definir un bloque de secuencial lógica
El primer escenario es lo que se ve comúnmente en los libros de texto al presentar Procesos o Siempre Bloques a un nuevo estudiante. Se presenta aquí para ti, para hacerte consciente de su existencia. Pero en realidad, un Proceso/Bloque Siempre que se usa para definir un bloque de lógica combinacional se ve con mucha menos frecuencia en el código del "mundo real" que un Proceso/Bloque Siempre que se usa para definir la lógica secuencial.
La primera pregunta que quizás te estés haciendo es ¿cuál es la diferencia entre lógica combinacional y secuencial? La lógica combinacional (o combinatoria) es la lógica que no requiere un reloj para funcionar. El ejemplo de la compuerta and anterior es un ejemplo combinacional. La lógica secuencial es la lógica que requiere un reloj para funcionar. El bloque de construcción más fundamental de la lógica secuencial es el D Flip-Flop (en la foto a continuación).
¡El flip-flop D!Si no sabe cómo funciona un D Flip-Flop, ¡deje de leer esto inmediatamente! Debe comprender cómo se usan los flip-flops dentro de los FPGA antes de continuar leyendo. ¿Todo listo? Bien.
Proceso combinacional en VHDL:
process (input_1, input_2) begin and_gate <= input_1 and input_2; end process;
Bloque siempre combinado en Verilog:
always @ (input_1 or input_2) begin and_gate = input_1 & input_2; end
En el código VHDL y Verilog anterior, input_1 y input_2 están en lo que se llama una lista de sensibilidad . La lista de sensibilidad es una lista de todas las señales que harán que se ejecute Procesar/Bloquear siempre. En el ejemplo anterior, un cambio en input_1 o input_2 hará que se ejecute Process/Always Block. Este bloque de proceso/siempre toma las dos entradas, realiza una operación "y" en ellas y almacena el resultado en la señal and_gate. Esta es exactamente la misma funcionalidad que este código:
-- VHDL: and_gate <= input_1 and input_2;
// Verilog: assign and_gate = input_1 & input_2;
Ambos ejemplos de código tienen el mismo propósito:asignar la señal and_gate. La diferencia es que uno está en un Proceso combinado/Bloquear siempre y el otro no. Por lo tanto, dado que se puede lograr el mismo resultado sin el uso de un Proceso combinado/Bloquear siempre, no recomiendo que el diseñador digital principiante use estas declaraciones de esta manera.
La segunda forma en que se puede usar un proceso o un bloque siempre (y el ejemplo mucho más interesante) es definir un bloque de lógica secuencial. Una vez más, la lógica secuencial es lógica sincronizada.
VHDL
- Tutorial - Escritura de código combinacional y secuencial
- Pros y contras de la infraestructura como código
- Introducción a las funciones lógicas combinacionales
- Qué es la codificación:funcionamiento, idiomas y sus desafíos
- Uso del analizador lógico integrado (ILA) y entrada/salida virtual (VIO)
- Java Stack and Heap:tutorial de asignación de memoria de Java
- Cómo leer un archivo CSV en Python | Lectura y escritura de archivos CSV
- Lógica combinacional con asignación
- Lógica de escalera 102:ventajas y desventajas
- Procedimientos de escritura:sencillos y eficientes gracias a la digitalización
- Las diferencias entre el código G y el código M