Introducción a Verilog
Fundamentos de Verilog HDL: módulos, cables, registros, lógica combinacional y secuencial.
Verilog es un lenguaje de descripción de hardware (HDL) utilizado para describir circuitos digitales en forma de texto. A diferencia de la programación de software, Verilog describe hardware que opera en paralelo — todos los módulos se ejecutan simultáneamente. Esta introducción cubre las construcciones esenciales de Verilog necesarias para describir lógica combinacional y secuencial para implementación en FPGA.
Objectives
- Escribir un módulo Verilog con entradas, salidas y señales internas
- Usar sentencias assign para lógica combinacional
- Usar bloques always tanto para lógica combinacional como secuencial
- Comprender la diferencia entre los tipos wire y reg
- Escribir un testbench simple para verificar un diseño Verilog
Key Takeaways
- Verilog describe hardware (paralelo), no software (secuencial)
- module = bloque constructivo básico con puertos
- assign = lógica combinacional continua; always @(*) = combinacional procedural
- always @(posedge clk) = lógica secuencial (flip-flops)
- Usar no bloqueante (<=) para secuencial, bloqueante (=) para combinacional
Applications
- Diseño FPGA: Lenguaje principal para desarrollo de FPGA de Xilinx, Intel y Lattice.
- Diseño de ASIC: El RTL en Verilog se sintetiza en diseños de chips de silicio.
- Verificación: SystemVerilog extiende Verilog con potentes características de testbench.
- Hardware de Código Abierto: Procesadores RISC-V y otros diseños abiertos usan Verilog.
Practice Problems
Problem 1: Escribe en Verilog una compuerta AND de 2 entradas.
Problem 2: Escribe un flip-flop D con reset síncrono.
Problem 3: ¿Qué está mal en: always @(posedge clk) y = a & b; ?
Problem 4: ¿Por qué Verilog puede describir hardware paralelo pero el código C se ejecuta secuencialmente?