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?