Está en la página 1de 5

Tutorial 1 - Diseño estructural de un comparador

Electrónica digital I (2016498)


Universidad Nacional de Colombia
Bogotá, 2022
Introducción

VHDL es un lenguaje de descripción de hardware utilizado para diseñar circuitos de lógica


programable en un dispositivo FPGA. Como un lenguaje de programación tiene su respectiva sintaxis
para implementar funciones y realizar operaciones como asignaciones, condicionales o ciclos, pero
a diferencia de estos presenta muchas más limitaciones ya que toda descripción que se realice debe
tener un sentido físico.

En este primer tutorial vamos a realizar el diseño de un elemento comparador mediante descripción
estructural, es decir, definiendo claramente las conexiones entre las señales de entrada y salida del
sistema mediante compuertas lógicas y otros dispositivos de lógica fija que podemos encontrar de
forma comercial. La principal ventaja de este tipo de descripción es que tenemos pleno
conocimiento de cómo construir un circuito sin depender de un dispositivo de lógica programable,
lo que en otras palabras resulta en el desarrollo de un proyecto con costos reducidos.

Como se acaba de mencionar, realizaremos el diseño de un comparador. Este dispositivo permite


comparar dos cantidades binarias para determinar su relación1; nos dice si son iguales o cuál de ellos
es mayor. A continuación en la figura 1 se puede observar el esquema de un comparador de 4 bits.

Figura 1. Esquema de un comparador de 4 bits. [1]

En el esquema de la figura 1 se tiene como entradas dos números binarios de 4 bits (A y B), y tres
salidas que indican si A es mayor que B, si son iguales o si A es menor que B. Internamente lo que
hace este dispositivo es comparar bit por bit, comenzando por los más significativos (A3,B3), y revisa
su relación. Si alguno de ellos es mayor ese número será el mayor y se asignará un 1 lógico en la
correspondiente salida, pero si son iguales pasará al siguiente par de bits y hará una nueva revisión.
Si al final todos los bits son iguales significa que ambos números son iguales, y se establecerá un 1
lógico en la salida 𝐴 = 𝐵 . Si desea entrar en mayor detalle se sugiere revisar la sección 6.4
(Comparadores) del libro Fundamentos de sistemas digitales, Floyd 9a edición.
Objetivos

✓ Diseñar un circuito comparador para determinar la relación entre dos números.


✓ Conocer los elementos básicos del lenguaje de descripción de hardware VHDL.
✓ Comprender los fundamentos del diseño de circuitos mediante descripción estructural.
Diseño del circuito

El diseño del circuito del comparador se realiza de la siguiente manera:

1. Se elabora un comparador para cada par de bits con base en la siguiente tabla de la verdad.

Tabla 1. Tabla de la verdad de un comparador de bits.

2. Se definen entonces las siguientes expresiones booleanas.

𝐶𝑖 (=) = (𝐴𝑖 = 𝐵𝑖 ) = ̅̅̅̅̅̅̅̅̅̅


𝐴𝑖 ⊕ 𝐵𝑖
𝐷𝑖 (>) = (𝐴𝑖 > 𝐵𝑖 ) = 𝐴𝑖 𝐵̅𝑖
𝐸𝑖 (<) = (𝐴𝑖 < 𝐵𝑖 ) = 𝐴̅𝑖 𝐵𝑖
Obteniendo el siguiente circuito

Figura 2. Circuito comparador de dos bits.

3. Para establecer la prioridad de comparación se considera lo siguiente:


• Los dos números son iguales si todos los bits son iguales. En forma de circuito lógico
equivale a conectar todas las salidas 𝐶𝑖 a una compuerta AND. En lógica booleana
equivale a una multiplicación entre todas las salidas 𝐶𝑖 .

(𝐴 = 𝐵) = 𝐶3 𝐶2 𝐶1 𝐶0
• Al ser un circuito combinacional todos los bits se comparan al mismo tiempo, por
lo tanto hay que establecer un filtro para dar prioridad a los bits más significativos.
• Si 𝐴3 > 𝐵3 entonces 𝐴 > 𝐵 y se asigna 1 a dicha salida (lo mismo para 𝐴3 < 𝐵3 ). Si
no, significa que 𝐴3 = 𝐵3 y se pone atención a la comparación de 𝐴2 con 𝐵2 . De
forma lógica se puede interpretar como

(𝐴 > 𝐵) = 𝐷3 + 𝐶3 𝐷2

• Esto se puede extender hacia los demás bits, teniendo presente que todas las
comparaciones anteriores deben resultar en igualdad para poder considerar las
desigualdades siguientes, lo que se interpreta como

(𝐴 > 𝐵) = 𝐷3 + 𝐶3 𝐷2 + 𝐶3 𝐶2 𝐷1 + 𝐶3 𝐶2 𝐶1 𝐷0

Para dar un poco más de claridad, el último término de la expresión anterior nos
dice que 𝐴 > 𝐵 si los bits 3,2 y 1 son iguales y si 𝐴0 > 𝐵0 . Para entender mejor esta
expresión se sugiere revisar el capítulo 4 Álgebra de Boole del Floyd, 9a edición.

• Se analiza de forma similar para 𝐴 < 𝐵.

Construcción del circuito en VHDL

La sección anterior se desarrolló para dar entendimiento de lo que se programará y para mostrar
como ejemplo de un diseño estructural. Para desarrollar esta práctica por favor descargue el
proyecto tutorial comparador ubicado en la carpeta material guías. (modificar)

Conceptos básicos:

- Señal: Una señal se puede entender como un cable. Un cable solo puede poseer un valor (0
o 1) en un determinado instante de tiempo. Para asignar a una señal se utiliza el símbolo <=.
- Entidad: Dentro de esta se definen las señales de entrada, de salida y parámetros opcionales.
Las señales de entrada no pueden ser asignadas (es decir no pueden estar a lado izquierdo
del <=). Las señales de salida no pueden operarse ni asignarse a señales intermedias (no
pueden estar al lado derecho del <=).
- Arquitectura: En esta se declaran señales intermedias, componentes y se realiza la
descripción del circuito lógico. Las declaraciones se realizan antes de la palabra begin y
después de ella se realiza la descripción.
Operadores lógicos básicos: Para dar prioridad a operaciones usar ( ).
o C <= A and B: C es 1 solo si A y B son 1.
o C <= A or B: C es 0 solo si A y B son 0.
o C <= not A: C es 1 si A es 0, y viceversa.
o C <= A xor B: C es 1 si A y B son diferentes, si son iguales es 0.
- Tipos de datos:
o bit: La señal puede tomar un valor de 0 o 1.
o std_logic: La señal puede tomar un estado de 0,1, de alta impedancia u otros.
o std_logic_vector: Se trata de una señal en forma de vector. Para indicar su tamaño
se usa (b downto a) si b > a o (b to a) si b < a. En el primero caso el bit más
significativo se encontrará a la izquierda y en el segundo caso estará a la derecha.
- Componentes: Se utilizan para elaborar el circuito de forma modular. Estos permiten tener
un diseño organizado y evitan la repetición de código. Para ello primero se debe declarar el
componente y luego (después de begin) se crean varias instancias del mismo.

Para comprender mejor estos conceptos por favor complete el código ubicado en la carpeta de
drive Digital I – Material clase/tutoriales/comparador.

Simulación en ModelSim

A continuación se presenta un ejemplo de simulación. En la carpeta work (o rtl_work) nos deben


aparecer los archivos del proyecto. Si damos doble clic sobre una entidad se colocarán las señales
que tenga en recuadro azul oscuro.

Para agregar una señal de entrada a la simulación damos clic derecho sobre ella, vamos a
modify/apply wave… (1) y le damos a la señal la forma que deseemos. Para agregar una señal interna
(intermedia) o de salida solo seleccionamos add wave (2).
Para iniciar la simulación damos clic en alguna de las opciones de Run (1). Para reiniciarla se tiene la
opción Restart (2). Podemos modificar la forma de representación de los datos dando clic derecho
sobre el que deseemos en la consola gris, vamos a Radix y elegimos un tipo de representación (3).

En la consola de color negro podrá observar el resultado de su simulación (1). Si desea aumentar o
reducir el zoom de clic derecho sobre ella y seleccione zoom in o zoom out (2).

Entregable

- Realizar un video de máximo 5 minutos en el que explique el funcionamiento del programa


y presente de manera clara su simulación en ModelSim.

Importante

▪ La práctica se debe desarrollar de forma individual.


▪ Fecha máxima para la entrega: 7 de abril de 2022.

También podría gustarte