Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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.
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
1. Se elabora un comparador para cada par de bits con base en la siguiente tabla de la verdad.
(𝐴 = 𝐵) = 𝐶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.
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
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
Importante