Getting started¶
1. Introducción¶
1.1. ¿Qué es Verilog?¶
Verilog es un lenguaje de descripción de hardware o HDL (Hardware Description Language) que es utilizado para describir sistemas digitales como una memoria, un sumador, una ALU, un controlador o un microprocesador. Permite a los diseñadores diseñar a varios niveles de abstracción. Es el HDL más utilizado y cuenta con una comunidad de usuarios de más de 50.000 diseñadores activos.
1.2. Plataformas¶
Existen diversas plataformas para trabajar con Verilog, entre las más populares se encuentran:
sin embargo, a pesar de que todas estas opciones cuentan con sus versiones gratuitas, no todas están disponibles en todos los sistemas operativos, en la siguiente tabla se muestran las diferentes compatibilidades:
Software | Linux | Windows | Mac |
---|---|---|---|
Aldec-HDL Student Edition | ✓ | ||
Vivado ML Edition | ✓ | ✓ | |
Intel Quartus Prime Lite Edition | ✓ | ✓ | |
Icarus Verilog | ✓ | ✓ | ✓ |
por lo anterior, es buena idea comenzar a trabajar con Verilog utilizando Icarus Verilog, el cual es un compilador libre (open source) para el lenguaje de descripción de hardware IEEE-1364-2005 Verilog.
A diferencia de las otras opciones los cuales cuentan con GUI (Graphical User Interface) y programas adicionales, Icarus Verilog funciona desde terminal y solo cuenta con herramientas necesarias para analizar, compilar y simular el código Verilog.
Las principales ventajas que cuenta esta herramienta sobre las otras son:
- Es muy ligera y fácil de instalar.
- Es compatible con Linux, Windows y Mac.
- Su compilador es rápido, muy robusto y estricto.
El instalador del programa pesa aproximadamente 20MB y el programa instalado en disco utiliza 80MB. A diferencia de Aldec-HDL Student Edition el cual es muy permisivo con los errores en el código, Icarus Verilog es muy estricto, lo que se traduce en un código que tienes mayores posibilidades de ser sintetizado sin inconvenientes.
La ventaja de instalar Vivado ML Edition o Intel Quartus Prime Lite Edition es que cuentan con todas las herramientas necesarias para llevar a cabo de manera completa el flujo de diseño en FPGA. En el siguiente diagrama se muestra el flujo de diseño en FPGA1:
%%{
init : {
"theme" : "default",
"flowchart" : {
"curve" :
}
}
}%%
graph LR
A[Especificaciones] --> B[HDL];
B --> C[Síntesis];
C --> D[Place and Route];
D --> E[Verificación del circuito];
B -.-> F[Simulación];
D -.-> G[Análisis de tiempo estático];
Una de las estrategias más comunes al trabajar con Verilog es primero compilar y simular el código en Icarus Verilog y una vez probado pasar a Vivado ML Edition o Intel Quartus Prime Lite Edition para realizar la síntesis, el place and route y generar el archivo de programación para la FPGA. La ventaja de hacerlo de esta manera es que la compilación y la simulación es más rápida en Icarus Verilog, lo que se traduce en un ahorro en el tiempo de diseño.
Para poder visualizar las formas de onda generadas por Icarus Verilog se utiliza el programa GTKWave el cual es un completo visor de ondas basado en GTK+ para Unix, Win32 y Mac OSX que lee archivos LXT, LXT2, VZT, FST y GHW, así como archivos estándar Verilog VCD/EVCD y permite su visualización.
2. Instalación de Icarus¶
2.1. Windows¶
La manera recomendada para realizar la instalación en Windows es utilizando Scoop, un instalador de línea de comandos diseñado específicamente para Windows. A continuación se muestran los pasos para instalar Scoop e Icarus Verilog.
Nota 1.
Se sugiere visitar la página oficial de Scoop para verificar si ha habido cambios en los comandos de instalación. La información fue revisada por última vez el 29/07/2023.
Nota 2.
Si se instala Icarus Verilog de manera manual es necesario agregar la carpeta de instalación al PATH
.
- Abrir una terminal de PowerShell o Windows PowerShell y ejecutar las siguientes dos lineas de comando para instalar Scoop :
- Una vez instalado, ejecutar el comando siguiente comando para verificar que la instalación fue exitosa:
- Ejecutar el siguiente comando para instalar Icarus Verilog:
- Verificar que la instalación fue exitosa ejecutando los siguientes comandos:
- En Windows, al instalar Icarus Verilog se incluye preinstalado el visor de formas de ondas GTKWave, para verificar que funciona correctamente, ejecuta el siguiente comando:
2.2. Linux¶
Para sistemas operativos Linux basados en Debian/Ubuntu la instalación más sencilla. Seguir los siguientes pasos:
-
Abrir una terminal y ejecutar el siguiente comando para instalar Icarus Verilog y GTKWave:
-
Verificar que la instalación fue exitosa ejecutando los siguientes comandos:
2.3. Mac¶
La manera recomendada para realizar la instalación en macOS es utilizando el gestor de paquetes Homebrew. A continuación se muestran los pasos para instalar Homebrew e Icarus Verilog2 .
Nota 3.
Se sugiere visitar la página oficial de Homebrew para verificar si ha habido cambios en los comandos de instalación. La información fue revisada por última vez el 29/07/2023.
- Abrir una terminal y ejecutar el siguiente comando para instalar Homebrew:
- Ejecutar el siguiente comando para instalar Icarus Verilog:
- Descargar desde la página oficial GTKWave para obtener la última versión, es un archivo
.zip
, descomprimirlo y darle el acceso requerido. Alternativamente ejecutar el siguiente comando, la versión pude ser más vieja: - Verificar que la instalación fue exitosa ejecutando los siguientes comandos:
3. ¿Cómo utilizar Icarus?¶
Para aprender a utilizar Icarus Verilog y GTKWave consideremos el siguiente circuito combinacional, que esta definido por la siguiente ecuación booleana:
y cuya tabla de verdad es la siguiente:
Decimal | \(A\) | \(B\) | \(C\) | \(f(A,B,C)\) |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
1 | 0 | 0 | 1 | 1 |
2 | 0 | 1 | 0 | 0 |
3 | 0 | 1 | 1 | 1 |
4 | 1 | 0 | 0 | 0 |
5 | 1 | 0 | 1 | 0 |
6 | 1 | 1 | 0 | 0 |
7 | 1 | 1 | 1 | 1 |
3.1. Descripción en Verilog¶
El código en Verilog que describe el circuito combinacional de arriba es el siguiente:
lut.v | |
---|---|
3.2. Simulación¶
En el siguiente código se muestra una plantilla sencilla para hacer un testbench combinacional, este cuenta con comentarios que explican cada una de las líneas:
Para realizar la simulación es necesario seguir los siguientes pasos:
- Crear una nueva carpera para el proyecto, para este ejemplo nombrar a la carpeta
test
. - Copiar dentro de ella los archivos:
lut.v
lut_tb.v
- Abrir una terminal y ejecutar el siguiente comando para compilar:
- Ejecutar el siguiente comando para ejecutar el archivo compilado:
- Abrir el programa GTKWave para analizar la simulación con el siguiente comando:
- Dentro de GTKWave desplegar
lut_tb
, después dar clic endut
y en la secciónSignals
seleccionar las señalesA
,B
,C
yF
, manteniendo presionada la tecla Ctrl y seleccionando con el Left Button del mouse.
Nota 4.
Para aprender a automatizar este proceso utilizando un script escrito en lenguaje bash ver la sección Scrits.
3.3. Resultados¶
Dentro de la carpeta se generará un archivo con el nombre lut_tb_output.txt
que contiene lo siguiente:
y la forma de onda debe ser igual a la mostrada en la siguiente imagen:
4. Referencias¶
-
“FPGA vs. ASIC Design Flow”, Xilinx. https://www.xilinx.com/video/fpga/fpga-vs-asic-design-flow.html (consultado el 29 de julio de 2023). ↩
-
S. Ankit, “How to simulate Verilog models on macOS”, Medium, el 18 de septiembre de 2020. https://saiankit.medium.com/how-to-simulate-verilog-models-on-macos-5a6f821b2c4f (consultado el 31 de julio de 2023). ↩