Menu

Comentarios en Verilog: una línea, múltiples líneas y estilo de documentación

Cómo escribir comentarios de una línea y de múltiples líneas en Verilog, además de los patrones de documentación que los diseñadores digitales usan para mantener legibles los módulos a medida que crecen.

Esta página incluye editores ejecutables: edita, ejecuta y ve el resultado al instante.

Las dos formas

Verilog soporta exactamente dos sintaxis de comentario, ambas copiadas de C:

Esa es toda la sintaxis. No hay # como en Python, ni -- como en VHDL, ni estilo Lisp. Solo // y /* ... */.

Cuándo usar cada uno

// es lo que vas a usar casi siempre. Es más corto, no puede quedar accidentalmente sin terminar y va de forma natural con la manera de escribir Verilog (una declaración por línea, con el comentario en la misma línea o adyacente):

output reg [7:0] data,  // byte que sacamos por tx_serial
output reg       valid, // alto mientras se transmite el data
input  wire      ready  // el consumidor downstream está listo para aceptar

/* ... */ es sobre todo para dos cosas: grandes bloques de encabezado en la parte superior de un archivo, y deshabilitar temporalmente un trozo de código durante depuración. El caso de deshabilitar es peligroso - sigue leyendo.

La trampa de "no se anida"

Los comentarios de bloque no se anidan. Si intentas comentar una región que ya contiene un comentario de bloque, el primer */ cierra el bloque externo, no el interno:

/* externo
   /* interno */    // <-- este */ cierra el comentario externo
   sigue activo en el código fuente para el parser
*/

Resultado: un error de sintaxis en algún punto inesperado, en una línea que parece correcta.

Cuando necesites deshabilitar una región, prefiere una de:

  1. Prefijar cada línea con //. La mayoría de los editores hacen esto con una tecla.

  2. Usar una protección de preprocesador:

    `ifdef DISABLED
        // código que no debería compilar
    `endif
    

El segundo patrón es también cómo mantienes varias configuraciones de build en un solo archivo.

Pragmas de síntesis: comentarios que no son comentarios

Las herramientas de los proveedores usan comentarios con formato especial como instrucciones fuera de banda. El simulador los sigue ignorando, pero la herramienta de síntesis los lee:

// synthesis translate_off
initial begin
    $display("simulator-only setup");
end
// synthesis translate_on

Los dos pragmas le dicen a la herramienta de síntesis "salta todo entre estos marcadores". Las formas exactas varían según el proveedor (synthesis, synopsys, pragma, xilinx, etc.) - consulta los docs de tu herramienta. Lo que hay que saber: los comentarios en Verilog a veces son funcionales.

Convenciones de bloque de encabezado

Los archivos Verilog de larga vida casi siempre empiezan con un bloque de encabezado. El formato exacto es política del equipo, pero un ejemplo típico:

// -----------------------------------------------------------------------------
// Module      : uart_tx
// Description : Transmisor UART 8-N-1. Acepta un byte en `data` cuando `valid`
//               está activado y lo desplaza por `serial_out`. `baud_tick`
//               debe pulsar una vez por periodo de baudio.
// Ports       : clk        - reloj del sistema
//               reset_n    - reset síncrono activo en bajo
//               baud_tick  - pulso de 1 ciclo en cada intervalo de baudio
//               data       - byte a transmitir
//               valid      - se activa para iniciar una transmisión
//               serial_out - el wire que sale de la FPGA
//               busy       - alto mientras un frame está en vuelo
// Author      : example@team
// Revision    : 2026-05-26 - initial version
// -----------------------------------------------------------------------------

module uart_tx (
    input  wire       clk,
    input  wire       reset_n,
    input  wire       baud_tick,
    input  wire [7:0] data,
    input  wire       valid,
    output reg        serial_out,
    output reg        busy
);
    // ... body ...
endmodule

El punto no es la decoración. El punto es que alguien que abra este archivo dentro de un año - probablemente tú - pueda leer cuatro líneas y saber qué hace, qué espera y qué produce. Ese beneficio escala con el tamaño del proyecto.

Comentarios en línea que se ganan su sitio

Un error común es comentar qué hace una línea cuando el código ya lo muestra:

// mal - el comentario repite el código
count <= count + 1;   // incrementa count

// mejor - el comentario explica por qué esta línea está aquí
count <= count + 1;   // contador de ciclos libre para timestamping

En lo que los comentarios son especialmente buenos es en explicar el por qué que el código no puede mostrar por sí solo: qué sección de la especificación sigue una codificación rara, por qué un registro es un bit más ancho de lo que parece, por qué un caso default está puesto a 'x en vez de a '0. Apóyate en ellos para eso. Deja lo obvio al código.

Pruébalo

El bloque de abajo contiene cada forma de comentario. Ejecútalo - la salida no te va a sorprender, pero la estructura del archivo sí debería:

Ya has visto cada forma de comentario que Verilog soporta. El resto de los docs los usan como cabe esperar: bloques de encabezado en la parte superior de módulos largos, // de una línea junto a los puertos, y comentarios de bloque solo cuando hay un párrafo entero de razonamiento que capturar.

Preguntas frecuentes

¿Cómo se escribe un comentario en Verilog?

Verilog soporta dos estilos de comentario, ambos heredados de C. // inicia un comentario que llega hasta el final de la línea. /* ... */ envuelve un bloque de varias líneas. El compilador ignora todo entre los marcadores; ambos estilos son igualmente válidos en cualquier archivo sintetizable o solo de simulación.

¿Los comentarios de Verilog son sintetizables?

Los comentarios no existen después del parseo - la herramienta de síntesis los descarta igual que el simulador. La única excepción son los pragmas de síntesis: comentarios con un formato especial como // synthesis translate_off que las herramientas del proveedor reconocen como directivas. La sintaxis de los pragmas es específica de cada herramienta y no forma parte del Verilog estándar.

¿Se pueden anidar los comentarios en Verilog?

No - y esto pilla a principiantes que intentan comentar un bloque que ya contiene /* ... */. El primer */ dentro cierra el comentario externo, dejando el resto del bloque como código vivo. Usa // en cada línea, o envuelve toda la región en \ifdef SOMETHING_FALSE/`endif` si realmente necesitas deshabilitar un trozo.

¿Qué debe incluir un comentario de encabezado en Verilog?

La mayoría de los equipos pone un pequeño encabezado en la parte superior de cada archivo: nombre del módulo, propósito en una frase, resumen de puertos, autor/fecha y un historial de revisiones. El formato exacto varía; lo que importa es que cualquiera que abra el archivo pueda decir qué hace sin leer el cuerpo. Los diseños grandes añaden comentarios por señal junto a cada declaración de puerto.

Coddy programming languages illustration

Aprende a programar con Coddy

COMENZAR