Tecnológico Nacional de México
Instituto Tecnológico de Oaxaca.

Departamento de Ingeniería Eléctrica y Electrónica


ING. MIGUEL ANGEL PÉREZ SOLANO CUB. No. 3
INGENIERO EN COMUNICACIONES Y ELECTRÓNICA/MAESTRIA EN EDUCACIÓN
ESCUELA SUPERIOR DE INGENIERIA MECÁNICA Y ELÉCTRICA (ESIME)- IPN
miguel.solano@itoaxaca.edu.mx
LIBROS DE APOYO
               



Introducción:

En este curso se estudiará como a través del flujo de diseño utilizando el software VIVADO de la empresa XILINX y el  Quartus de INTEL, se pueden crear circuItos lógicos; Secuenciales y Combinacionales con el Lenguaje Descriptivo de Hardware: VERILOG. Un flujo de diseño típico consiste en: Modelar el circuito ( crear el source file), sintetizar el código para obtener el RTL, Simular el circuito (crear el testbench), crear archivos de restricciones de usuario (crea el constraints file) para su implementacion en la tarjeta,  generar el archivo flujo de bits (bitstream) y, finalmente, verificar la funcionalidad en el hardware descargando el bitstream. Se utilizará la Tarjeta de Desarrollo con que se cuenta en el Laboratorio de Sistemas Embebidos de la carrera de Electrónica; la Nexys4 DDR basada en la familia de FPGA´s Artix-7, y en especifico, el FPGA XC7A100T-CSG324. 
  

El 
Lenguaje Verilog HDL, es el mayormente utilizado como herramienta EDA (Automatización del diseño electrónico) en el diseño, modelado, simulación e implementación de sistemas digitales con FPGAs (Field Programmable Gate Array: Arreglo de Compuertas Programables en el Campo). Se abordarán conceptos teóricos y prácticos fundamentales para desarrollar módulos de electronica digital, utilizando las 3 técnicas de modelado que permite este Lenguaje descriptivo de hardware (HDL); A nivel de compuerta (gate_level), Por flujo de datos (dataflow) y comportamental o algoritmico (behavioral).

Justificación:

Verilog HDL es un Lenguaje Descriptivo de Hardware que es utilizado en el diseño de Circuitos Integrados. Los profesores involucrados en el diseño electrónico, deben manejarlo en sus 3 técnicas de modelado para asi poder explicar a los estudiantes las fases de diseño en la Electrónica Digital.


Objetivos:

Tras completar este curso, se podrá:

  • Aprender el funcionamiento de las herramientas EDA playground ( en la nube) y Vivado HLS (Standalone).
  • Crear  proyectos con modelado en Verilog HDL : gate_level, dataflow y behavioral.
  • Aprender a utilizar la tarjeta de desarrollo; Nexys4 DDR de Xilinx y Cyclone IV de Intel.
  • Simular el diseño con el simulador Xsim de XiIinx.
  • Sintetizar e implementar el diseño.
  • Usar el archivo de restricciones de usuario (.xdc) proporcionado para restringir la ubicación de los pines.
  • Generar el archigo de programacion de flujo de bits  (bitstream)
  • Descargar el diseño y verificar su funcionalidad en la tarjeta de desarrollo.


Temas/Subtemas Tiempo Programado Actividades de Aprendizaje
DIA 1.- Presentacion de las herramientas del curso: EDA Playground,  Vivado HLS de Xilinx y Tarjeta de desarrollo NEXYS 4DDR. Practica sobre las 7 compuertas en los 3 tipos de modelado y con código generico.
6 hs. Explicar la estructura de las herramientas CAD: EDA Playground y el IDE Vivado HLS de XILINX.

Explicar el funcionamiento de la tarjeta de desarrollo Nexys 4DDR de AMD_Xilinx y Cyclone IIV de Intel.

Explicar el la forma de modelar, simular e implementar circuitos a Nivel-Compuerta, por flujo de datos y comportmental

Actividad dia_1 : Código de las 7_compuertas Lógicas y verificados en EDA playgraound.



Código 1a. Modelado estructural (gate_level).

Código 1b. Modelado por flujo de datos (dataflow).
Código 1c. Modelado comportamental (behavioral).
Código 1d. Código generico de las 7 compuertas.
Actividad_1e: Instalacion del IDE Vivado HLS v2020.1:
DIA 2.- Modelado, Simulacion e Implementacion de Circuitos Combinacionales SSI Y MSI mediante modelado por Flujo de Datos (Dataflow). 6 hs. Modelar e implementar Circuitos Aritmeticos: Sumador de 1- bit, Sumador-Restador, Multiplicador. Lo anterior com Modelado por  flujo de datos y comportamental.

Generar bitstreams desde diseños en Verilog para FPGAs.

Actividad dia 2:
.Códigos de circuitos sumadores; Medio sumador, sumador Completo y Sumador de 4 bits generico con modelado estructural. Implementar el circuito en la tarjeta Nexys 4DDR.

Codigo 2a. Medio Sumador (en EDA playgrond)
Código 2b. Sumador completo (en EDA playground)
Código 2c. Sumador de 4-bits (en Vivado).
Código 2d- Sumador restador de 4-bits (Vivado)
DIA 3.- Modelado, Simulacion e Implementacion de  Circuitos Secuenciales SSI mediante modelado Comportamental. 6 hs Modelar e implementar Circuitos Secuenciales: Clocks, Contadores con modelado comportamental.

Actividad dia 3: Codigo de un Clock de 1 Hz y Contadores de modulo generico.

3a.- Contador de Mod-16 up/down (EDA playground)
3b.- Contador de Modulo generico; up/down (E3dDA playground).
3d.- Contador de N-bits Instanciado con el clock (VIVADO).
3e: Contador Mod_100 (Codigos fuente).
DIA 4.- Instanciacion de Circuitos Secuenciales y Combinaciones en un trabajo final. 6 Hrs Instanciar los bloques de un reloj digital con reset asincrono. Modelado Comportamental.

4a: Código en el documento de inicio.

DIA 5.- Arquitectura y Estado del arte de los FPGAS. 6 hs. FIN DEL CURSO

Material del curso:

Software
Plantillas:
Manuales  y documentos de apoyo

Laboratorios
Videos de apoyo:

A step-by-step guide to ASIC design flow in VLSI.

VIDEOS - Digital Circuit Design Using Verilog : Repositorio

1 - Course Introduction 2 - Digital Hardware 3 - CAD Tools 4 - Installing Vivado and Digilent Board Files  5.- End-to-End FPGA Project on the Nexys A7 6 - Verilog Primer Modeling Styles
7 - Verilog Primer - Structural Representation 8 -Verilog Primer_Behavioral Representation 9 - Hierarchical Design 10 - Introduction to Arithmetic Circuits and Testbenches in Verilog 11 - Adders 12 - Generic Verilog Code Parameterization
13 - Subtractors 14 - Signed Numbers and Arithmetic Overflow 15 - Verilog Arithmetic Operators 16 - Representing Numbers in Verilog 17 - Developing Simple Verilog Testbenches 18- Introduction to Combinational-Circuit Building Blocks in Verilog
19 - Describing Multiplexers in Verilog 20 - Verilog Coding Guidelines for Conditional Control Constructs 21 - Describing Decoders in Verilog 22 - Describing Encoders in Verilog 23 - Describing Code Converters in Verilog 24 - Introduction to Registers in Verilog
25 - Simple Storage Elements Latches & Flip Flops 26 - Describing D Latches and D Flip-Flops in Verilog 27 - Blocking and Nonblocking Assignment 28 - Verilog Behavioral Modeling Coding Guidelines 29 - Synchronous, Asynchronous, Set, Reset 30 - Describing Registers in Verilog
31 - Introduction to Counters in Verilog 32 - Asynchronous VS Synchronous Counters 33 - Up Down Load Counters 34 - Modulus Counters 35 - BCD & Multi-Decade Counters 36 - Counters as Timers
37 - Counters Applications in Verilog 38 - PWM Introduction 39 - PWM Duty Cycle 40 - PWM Design in Verilog 41 - PWM Application 42 - Linear Feedback Shift Register LFSR in Verilog
43 - Introduction to Finite State Machines in Verilog 44 - Analysis of FSMs Example 1 45 - Analysis of FSMs Example 2 46 - Analysis of FSMs Example 3 47 - Mealy VS Moore FSMs 48 - Design of FSMs
49 - Verilog Description of FSMs 50 - More Complex FSMs Example 1 51 - More Complex FSMs Example 2 52 - Counters as FSMs 53 - ASM Charts 54 - FSMs Applications in Verilog
55 - Dealing with Buttons in Verilog Debouncing & Edge Detection 56 - Swap Two Memory Locations Using an FSM 57 - Traffic Light Controller in Verilog 58 - Intro to Sequential Circuit Timing 59 - Flip Flop Timing Parameters 60 - Metastability and Synchronizers
61 - Buttons in Verilog Revisited 62 - Sequential Circuits Timing Analysis 63 - Vivado's Timing Reports 64 - Clock Skew 65 - Generating Different Clocks Using Vivado's Clocking Wizard 66 - Introduction to Memory Arrays and FIFO Buffers
67 - Memory Arrays 68- Memory Types - RAM 69 - Memory Types - ROM 70 - Artix - 7 FPGA Resources 71 - HDL for Memory Arrays 72 - Incorporating Memory Macro Cells
73 - BRAM HDL Templates 74 - ROM HDL 75 - Introduction to FIFO Buffers 76 - IP Based FIFO 77 - UART - Introduction 78 - Overview of UART Protocol


Documentacion de Xilinx.



FUNDAMENTOS DE  FPGA´s
           
Una matriz de puertas programables en el campo (FPGA), es un circuito integrado diseñado para modelar circuitos digitales simples o complejos por un estudiante de electrónica o un ingeniero de diseño electrónico. Con el FPGA se pueden modelar circuitos bastante complejos  complejos que son parte de un sistema digital o tambien llamado computadora..

Los FPGAs pueden configurarse miles de veces con una cantidad prácticamente ilimitada de circuitos, lo que los convierte en una herramienta ideal para aprender sobre circuitos y sistemas digitales. De hecho, los FPGAs han ganado una amplia aceptación en la industria electrónica, por la razón de que son configurarr muy rápidamente modelando varios bloques o etapas de una computadora. Lo anterior permite a los ingenieros verificar ampliamente un productoelectrónico antes de su comercialización.

Acualmente los FPGAs son un pilar fundamental, aunque a menudo desconocido, de la industria electrónica. Son un tipo de circuito integrado digital cuya característica principal es su posibilidad de reconfiguracion. Esto significa que pueden configurarse para realizar, dentro del chip, un circuito digital completamente nuevo o actualizarse el ya existente.

Introducción a las FPGA


Circuito  Integrados desarrollados a mediados de la década de 1980, los FPGAs se concibieron originalmente para brindar a los diseñadores la capacidad de crear lógica digital customizable  (personalizada). A principios de la década de 1990, se utilizaban principalmente en telecomunicaciones y redes. A finales de esa década, ya se utilizaban en aplicaciones de consumo, automotrices e industriales, abriendo la puerta a diversas carreras de Ingeniería de Diseño Electrónico.

Funcionamiento de un  FPGA.

Un FPGA consta de bloques de hardware internos llamados: CLBs (Bloques Logicos Configurables) e  IOBs (Bloques de Entrada y Salida), conectados con un conjunto de  interconexiones programables customizando las necesidades circuitales para una aplicación específica. Estas interconexiones son programables, lo que permite que la FPGAs se adapten a cambios de diseño (actualizaciones de funcionamiento) o se reconfigure con una nueva aplicación durante la vida útil del chip. Los FPGAs pueden ser programados durante el proceso de fabricación, pero pueden reprogramarse posteriormente para reflejar un nuevo circuito que se necesite.. Los CLB constituyen la celda básica de la FPGA y se integran con 2 tipos de slices; X (con logica combinacional) y Y con logica secuencial.

A diferencia de los microprocesadores, los FPGAs pueden realizar operaciones concurrentes (en paralelo), por lo que las diferentes operaciones de procesamiento no compiten por los mismos recursos. Cada tarea independiente se asigna a una sección dedicada del chip y puede funcionar de forma autónoma sin la influencia de otros bloques lógicos. En consecuencia, el rendimiento de una parte de la aplicación no se ve afectado al añadir más operaciones.

La configuración interna de los FPGAs se establece mediante software o, como se suele denominar, "firmware". Las FPGAs pueden reprogramarse in situ a medida que cambian los requisitos de la aplicación o la funcionalidad. Están diseñados para programarse mediante lenguajes de descripción de hardware como Verilog HDL o VHDL. Gracias a su reprogramabilidad, las FPGAs se diferencian de los circuitos integrados ASIC (Circuitos Integrados de Aplicacion Especifica), que están diseñados para realizar tareas especificas.

La decisión sobre si se debe utilizar un FPGA en un diseño electrónico, debe tomarse en las primeras etapas del proceso de diseño. Se debe considerar si será necesario reprogramar el chip más adelante para optimizar la tarea del circuito. En ocasiones, los fabricantes optan por un diseño basado en FPGA al principio del ciclo de desarrollo, cuando aún pueden detectarse errores, y luego cambian a un ASIC cuando el diseño es estable.

Figura : Elementos de un FPGA y tarjeta de desarrollo Nexys 4DDR

                       

               
DISEÑO Y BANCO DE PRUEBAS (TESTBENCH) UTILIZANDO EDA Playground
n
EDA Playground es un simulador en línea basado en la nube que permite a ingenieros y estudiantes escribir, simular y depurar diseños Verilog sin necesidad de instalar ningún software. Ofrece una interfaz intuitiva y es compatible con diversos simuladores Verilog, como Icarus Verilog (IVL), ModelSim y Verilator entre otros. Esta guía explica el proceso de diseño y verificación de código Verilog mediante EDA Playground con Icarus Verilog 12.0 y la visualización de formas de onda en EPWave


Pasos para iniciar con EDA Playground.
  • Iniciar sesión y crear un proyecto
    1. Abrir el navegador web e ir a la pagina de EDA Playground.
    2. Haz clic en "Login" en la esquina superior derecha (usar Google, GitHub o crear una cuenta con la opcion "Register to full account").
    3. Una vez iniciada la sesión, haz clic en "New" para crear un nuevo proyecto de Verilog.
  • Configuración del simulador.
  1. En el menu "Language & Libraries" > "Test + Design"  (panel izquierdo) seleccionar el lenguje "SystemVerilog/Verilog".
  2. En el menu "Tools & Simulators", seleccionar "Icarus Verilog 12.0".
  3. Marque la casilla "Open EPWave after run" para habilitar la visualización de las formas de onda.

Escritura de código Verilog y Testbench.
  • Escritura de código de diseño en Verilog.
  1. En la ventana del lado derecho "design.sv" ingresar el siguiente código en Verilog. 
                                                  
//Es un código que modela las 7 compuertas lógicas a "nivel de compuerta" (gate_level).

///////////////////////////////////////////////////////////////////////////////////////////
//              TECNOLOGICO NACIONAL DE MEXICO
//              Instituto Tecnologico de Oaxaca
//              CURSO INTERSEMESTRAL ENERO 2026
// Create date; enero de 2026
// Module name: 7 compuertas de 4 entradas
// NAME: Miguel Angel Perez solano
/////////////////////////////////////////////////////////////////////////////////////////////
module gates (X,out);   
 
  input [3:0] X;
  output [6:0] out;

  and AndGate (out[6],X[3], X[2], X[1], X[0]);
  or  OrGate  (out[5],X[3], X[2], X[1], X[0]);
  nand NandGate (out[4],X[3], X[2], X[1], X[0]);
  nor NorGate (out[3],X[3], X[2], X[1], X[0]);
  xor XorGate (out[2],X[3], X[2], X[1], X[0]);
  xnor XnorGate (out[1],X[3], X[2], X[1], X[0]);
  not NotGate (out[0],X[3]);

endmodule

  • Escritura del código Testbench.
  1. En la ventana del lado izquierdo "testbench.sv", escribir el siguiente código Tesbench para comprobar la funcion del código que modela las siguientes compuertas.
  2. Para guardar ambos códigos, se hace seleccionando; Private (solo uno puede verlos), Published (aparecerá como resultado de una busqueda) y  Public (cualquiera que tenga el link). Posteriormente  hacerlo con la opcion "Save".
`timescale 10ns / 1ns
module tb_gates;
    reg [3:0] X;
    wire [6:0] out;
       
    gates dut ( X,out );
 
  integer i;     
    initial
      begin
      
    //Dump waves    
$dumpfile("dump.vcd");
$dumpvars(1,tb_gates);
       
      for(i=0; i<16; i = i+1)begin
          X = i[3:0];
          #1;
        end
     $finish;
    end 
  endmodule

Compilando y corriendo la simulación.










      
      
      
      
      
      
      
      
      
  • Configuración de opciones de compilación.
En el campo "Compile options" seleccionar:

-Wall -g2012
  • -Wall: habilita todos los mensajes "warning" para mejor debugeo.
  • -g2012: Habilita los "features" de SystemVerilog 2012.
  • Corriendo la Simulacion
  1. Clickear "Run" para Sintetizar y simular el diseño.
  2. Si no hay errores, se ejecutará el testbench y la terminal desplegará el estatus de la salida y otra terminal las formas de onda para analizarlas. .

Analizando las formas de onda en EPWave.
  • Abrir el visor de las formas de onda.
  • Despues de correr la simulación, el visor de EPWave abrirá automaticamente si se ha seleccionado la opcion "Open EPWave after run" en "Run Options"..
  • Se debe hacer un análisis de las señales resultantes, expandiendo la jerarquia y arrastrando señales dentro del visor de formas onda.
  • Hacer Zoom in/out y ajustar la escala de tiempo para inspeccionar las transiciones de las señales.
  • En la siguiente figura se muestra el visor de las formas de onda de el circuito modelado anteriormente.

CODIGOS GUARDADOS EN EDA Playground

1.- 7 COMPUERTAS BASICAS.  Diseño de las 7 compuertas con 4 entradas utilizado modelado a nivel de compuerta (gate_level) 


2.- SUMADOR COMPLETO DE 1-BIT. Diseño de un Sumador Completo mediate modelado por flujo de datos (Dataflow)


3.- SUMADOR DE 2-BITS CON DOS SUMADORES DE 1 BIT.  Modelado de manera Estructural.

4.- SUMADOR DE 4 BITS


5.- SUMADOR DE 4 BITS_2


6.- MULTIPLICADOR DE SUMA Y CORRIMIENTO DE BIT


7.- ALU DE 32 BIT CON     STATEMENT IF.


8.- ALU 32-BIT CON CASE

9.- FLIP FLOP TIPO D 


10.- FLIP FLOP SR 


11.-CONTADOR MODULO-N

12.- SUMADOR 4-BITS CON PREDICCION DE ACARREO.

13.- SUMADOR 4-BIT GATE_LEVEL.


 
    
Free Web Hosting