6.5. Práctica 3: Funciones lógicas, minimización e implementación

6.5.1. Duración

Esta práctica tendrá una duración de 2 horas en el laboratorio (1 sesión).

6.5.2. Objetivos

El objetivo general de esta práctica es «Minimizar e implementar una función lógica». Otros objetivos específicos son los siguientes:

  • Realizar un diseño básico siguiendo la metodología que se definió en la Práctica 1.

  • Hacer el diseño y verificación de los sistemas digitales usando VHDL.

  • Introducir el concepto de diseño modular y jerárquico.

  • Profundizar en el uso de la herramienta Quartus II.

6.5.3. Introducción

En esta práctica se realizará la implementación de una función que debe minimizarse previamente usando el método de mapas de Karnaugh. Una vez minimizada se debe realizar el esquema usando únicamente puertas NOT y NAND. La descripción en VHDL de este circuito se debe hacer como una descripción estructural, es decir, tomando como referencia la estructura y componentes del circuito a describir. En el Campus Virtual se proporciona la descripción de las puertas básicas en VHDL (también se encuentra en el apartado Listados VHDL). La implementación de este circuito en la tarjeta DE10-Lite se puede realizar siguiendo los pasos de la Práctica 2.

6.5.4. Trabajo previo

6.5.4.1. Minimización de la función

Escriba una ecuación normalizada y simplificada para la siguiente función F en forma de suma de productos. Emplear el procedimiento de mapas de Karnaugh para lograr la expresión que se busca.

../_images/image5.png

Una vez minimizada haga un esquema de puertas únicamente usando puertas NOT y NAND. Esta entrega debe hacerse en el Campus Virtual.

6.5.4.2. Descripción estructural en VHDL

Realice una descripción estructural con VHDL del circuito desarrollado en el punto anterior. Esta función requeríra de la descripción VHDL de las puertas básicas:

  1. Puerta NOT, cuya descripción está en el Listado 6.4.

  2. Puerta NAND de dos entradas (NAND_gate_2). La descripción de la entidad está en: Listado 6.5, y

  3. Puerta NAND de tres entradas (NAND_gate_3). La descripción de la entidad está en: Listado 6.6).

Nota

Descargar las descripciones de estas puertas en el Campus Virtual en la sección correspondiente a la Práctica 3.

Usando estas descripciones, realizar la descripción VHDL de tipo estructural de la expresión normalizada y simplificada obtenida en la tarea Minimización de la función en el laboratorio Virtual (VPL: Práctica 3: Funciones lógicas) que se encuentra en el Campus Virtual de la asignatura.

Nota

Tenga en cuenta que los tipos de datos deben ser STD_LOGIC y que las entradas siempre deben ser nombradas con el sufijo “_in”, es decir: w_in, x_in, y_in y z_in. Por su lado la salida debe ser f_out. Ver el esqueleto de descripción en Listado 6.7.

Opcionalmente puede simular el diseño con la herramienta EDA playground (https://www.edaplayground.com/) y realizar el banco de pruebas con el Testbench Generator (https://vhdl.lapinoo.net/testbench/) y chequear la sintaxis de la descripción realizada con la herramienta web VHDL-tool (https://www.vhdltool.com/tryit)..

6.5.5. Trabajo de laboratorio

6.5.5.1. Pasos a realizar en el QuartusII/Modelsim-Altera

  1. Crear el directorio #DNI#/Practica3. Copiar el fichero Practica3_VHDL.zip y descomprimirlo. Los tres ficheros VHDL del (Listado 6.4, Listado 6.5 y Listado 6.6) se encuentran en el directorio ips-basicos. El subdirectorio quartus será el subdirectorio de trabajo.

  2. Abrir QuartusII y, siguiendo los pasos del tutorial de Quartus II, crear un proyecto nuevo (Practica3.qpf) en el subdirectorio quartus.

  3. Añadir al proyecto las descripciones básicas de las puertas que se encuentran en el subdirectorio ip-basicos: not_gate.vhd, nand_gate_2.vhd y nand_gate_3.vhd.

  4. Crear un nuevo fichero VHDL para describir la función F1.

  5. Introducir en este fichero la descripción realizada en el Trabajo Previo (apartado Descripción estructural en VHDL) y guardarlo con el nombre funcion.vhd.

  6. Declarar a función.vhd como el top-level del circuito.

  7. Compilar el diseño.

  8. Crear un nuevo fichero de formas de onda con el University Wafeform Program (Waveform.vwf).

  9. Simular este circuito usando Modelsim-Altera.

    1. Introducir todos los pines del circuito en el diagrama de formas de onda.

    2. Ordenar las señales según su peso: w, x, y, z.

    3. Establecer el tiempo de simulación en 640 ns.

    4. Dar valores a todas las entradas siguiendo la tabla de verdad (en total 16 combinaciones). Cada combinación de entrada tendrá una duración de 40 ns.

    5. Agrupar las entradas en una sola señal, que se denominará input.

    6. Ejecutar la simulación en Modelsim-Altera.

    7. Comprobar que los resultados son exactamente iguales que los de la tabla de verdad.

6.5.5.2. Implementación en la tarjeta DE10_lite

  1. Crear un COMPONENTE VHDL para el esquema del circuito (funcion.vhd). La descripción del componente se guardará automáticamente en el fichero ./Practica3/funcion.cmp.

  2. Añadir al proyecto la descripción VHDL Practica3.vhd (Listado 6.8) y modificarlo para añadir la descripción del componente creado y realizar las asignaciones de entrada y salida.

  3. Declarar a Practica3.vhd como el top-level del circuito.

  4. Compilar el diseño.

  5. Asignar los pines correspondientes en la tarjeta DE10-Lite según la distribución de la Figura 6.3.

../_images/image6.jpg

Figura 6.3 Pin-out de la Práctica 3.

La asignación de pines se hará siguiendo la Figura anterior y las siguientes tablas.

Tabla 6.1 Asignación de pines de la Práctica 3.

Señal

w_in

x_in

y_in

z_in

f_out

PIN

PIN_C12

PIN_D12

PIN_C11

PIN_C10

PIN_A8

Corresponde a

Slide Switch[3]

Slide Switch[2]

Slide Switch[1]

Slide Switch[0]

LED[0]

Los pines de los displays de 7 segmentos se muestran en la siguiente tabla.

Tabla 6.2 Asignación de pines en los displays de 7 segmentos de la Práctica 3.

Nombre

Pin

Concepto

display_7segment0[0]

PIN_C14

Seven Segment Digit 0[0]

display_7segment0[1]

PIN_E15

Seven Segment Digit 0[1]

display_7segment0[2]

PIN_C15

Seven Segment Digit 0[2]

display_7segment0[3]

PIN_C16

Seven Segment Digit 0[3]

display_7segment0[4]

PIN_E16

Seven Segment Digit 0[4]

display_7segment0[5]

PIN_D17

Seven Segment Digit 0[5]

display_7segment0[6]

PIN_C17

Seven Segment Digit 0[6]

display_7segment0[7]

PIN_D15

Seven Segmenl Digit 0[7] , DP

display_7segment2[0]

PIN_B20

Seven Segment Digit 2[0]

display_7segment2[1]

PIN_A20

Seven Segment Digit 2[1]

display_7segment2[2]

PIN_B19

Seven Segment Digit 2[2]

display_7segment2[3]

PIN_A21

Seven Segment Digit 2[3]

display_7segment2[4]

PIN_B21

Seven Segment Digit 2[4]

display_7segment2[5]

PIN_C22

Seven Segment Digit 2[5]

display_7segment2[6]

PIN_B22

Seven Segment Digit 2[6]

display_7segment2[7]

PIN_A19

Seven Segmenl Digit 2[7] , DP

display_7segment3[0]

PIN_F21

Seven Segment Digit 3[0]

display_7segment3[1]

PIN_E22

Seven Segment Digit 3[1]

display_7segment3[2]

PIN_E21

Seven Segment Digit 3[2]

display_7segment3[3]

PIN_C19

Seven Segment Digit 3[3]

display_7segment3[4]

PIN_C20

Seven Segment Digit 3[4]

display_7segment3[5]

PIN_D19

Seven Segment Digit 3[5]

display_7segment3[6]

PIN_E17

Seven Segment Digit 3[6]

display_7segment3[7]

PIN_D22

Seven Segmenl Digit 3[7] , DP

display_7segment4[0]

PIN_F18

Seven Segment Digit 4[0]

display_7segment4[1]

PIN_E20

Seven Segment Digit 4[1]

display_7segment4[2]

PIN_E19

Seven Segment Digit 4[2]

display_7segment4[3]

PIN_J18

Seven Segment Digit 4[3]

display_7segment4[4]

PIN_H19

Seven Segment Digit 4[4]

display_7segment4[5]

PIN_F19

Seven Segment Digit 4[5]

display_7segment4[6]

PIN_F20

Seven Segment Digit 4[6]

display_7segment4[7]

PIN_F17

Seven Segmenl Digit 4[7] , DP

display_7segment5[0]

PIN_J20

Seven Segment Digit 5[0]

display_7segment5[1]

PIN_K20

Seven Segment Digit 5[1]

display_7segment5[2]

PIN_L18

Seven Segment Digit 5[2]

display_7segment5[3]

PIN_N18

Seven Segment Digit 5[3]

display_7segment5[4]

PIN_M20

Seven Segment Digit 5[4]

display_7segment5[5]

PIN_N19

Seven Segment Digit 5[5]

display_7segment5[6]

PIN_N20

Seven Segment Digit 5[6]

display_7segment5[7]

PIN_L19

Seven Segmenl Digit 5[7] , DP

Nota

Se puede hacer copy&paste de los pines en el PIN_Planner. Se proporciona el fichero Practica3.qsf que se puede importar en el proyecto.

Advertencia

Comprobar que todos los pines están alimentados con 3.3V LVTTL.

  1. Cerrar el Pin_planner y compilar el diseño.

  2. Programar la tarjeta usando el fichero Practica3.sof.

  3. Comprobar que los resultados son exactamente iguales que los de la tabla de verdad y los de la simulación realizada.

6.5.6. Entregables

6.5.6.1. Trabajo previo

Por hacer

E3.1. Realizar y subir al Campus Virtual el proceso de minimización de la función del apartado Minimización de la función usando mapas de Karnaugh, incluyendo la expresión algebraica y circuitos resultantes.

E3.2. Laboratorio Virtual (VPL) de la descripción estructural VHDL y simulación según los especificado en en el apartado Descripción estructural en VHDL.

6.5.6.2. Trabajo de laboratorio

Por hacer

E3.3. Mostrar al profesor de prácticas la realización de los pasos realizados según el apartado Pasos a realizar en el QuartusII/Modelsim-Altera.

E3.4. Mostrar al profesor el funcionamiento del circuito realizado en el apartado Implementación en la tarjeta DE10_lite.

6.5.7. Comentarios sobre la práctica

6.5.7.1. Recomendaciones

Para realizar esta práctica se recomienda repasar el tutorial de QuartusII-Modelsim.

Es importante no usar ningún nombre que contenga tildes o la letra “ñ” en los diseños.

6.5.7.2. Conceptos VHDL necesarios

  • Se refuerza el uso de COMPONENT.

  • Se refuerza el uso de SIGNALS.

6.5.8. Listados VHDL

Lista 6.4 Puerta NOT.
-- Electronica Digital, curso 2
-- EITE-ULPGC
-- Puerta NOT sin retardo

LIBRARY ieee;
USE ieee.std_logic_1164.all;

ENTITY not_gate IS
  PORT(x_in  : IN STD_LOGIC;
       z_out : OUT STD_LOGIC ); 
END not_gate ;

ARCHITECTURE funcional OF not_gate IS
BEGIN
  z_out <= NOT x_in;
END funcional;
Lista 6.5 Puerta NAND de dos entradas.
-- Electronica Digital, curso 2
-- EITE-ULPGC
-- Puerta NAND de dos entradas

LIBRARY ieee;
USE ieee.std_logic_1164.all;

ENTITY nand_gate_2 IS
  PORT( x_in : IN STD_LOGIC;
        y_in : IN STD_LOGIC;  
        z_out: OUT STD_LOGIC ); 
END nand_gate_2 ;

ARCHITECTURE funcional OF nand_gate_2 IS
BEGIN

-- REALIZAR LA DESCRIPCION DE (X·Y)'




END funcional;
Lista 6.6 Puerta NAND de tres entradas.
-- Electronica Digital, curso 2
-- EITE-ULPGC
-- Puerta NAND de tres entradas

LIBRARY ieee;
  USE ieee.std_logic_1164.all;

ENTITY nand_gate_3 IS
  PORT(w_in  : IN STD_LOGIC;
       x_in  : IN STD_LOGIC;
       y_in  : IN STD_LOGIC;
       z_out : OUT STD_LOGIC ); 
END nand_gate_3 ;

ARCHITECTURE funcional OF nand_gate_3 IS
 BEGIN
 

-- REALIZAR LA DESCRIPCION DE (W·X·Y)'





END funcional;
Lista 6.7 Esqueleto de descripción VHDl de funcion.
-- Electronica Digital, curso 2
-- EITE-ULPGC
-- Circuito de Practica 3

LIBRARY ieee;
USE ieee.std_logic_1164.all;

ENTITY funcion IS
  PORT (
         w_in  : IN STD_LOGIC;
         x_in  : IN STD_LOGIC;
         y_in  : IN STD_LOGIC;
         z_in  : IN STD_LOGIC;
         f_out : OUT STD_LOGIC ); 
END funcion ;

ARCHITECTURE estructural OF funcion IS
    COMPONENT not_gate IS
        PORT(
             x_in : IN STD_LOGIC;
             z_out : OUT STD_LOGIC ); 
    END COMPONENT;
    
-- DECLARAR OTROS COMPONENTES NECESARIOS




-- DECLARAR LAS SEÑALES NECESARIAS





BEGIN


-- REALIZAR LA DESCRIPCIÓN ESTRUCTURAL DE LA FUNCION





                
END estructural;
Lista 6.8 Esqueleto de la descripción Practica3.vhd.
-- Ver en el campus Virtual de la Asignatura