Вы находитесь на странице: 1из 3
Departamento de Tecnología Electrónica

Departamento de Tecnología Electrónica

10. Comparadores

Ya hemos aprendido a realizar varios diseños: puertas lógicas, decodificadores, codificadores y un convertidor de hexadecimal a siete segmentos. Ahora vamos a hacer un comparador, primero lo haremos de un sólo bit y luego, con comparadores de un bit construiremos uno de dos bits.

10.1. Comparador de un bit

Lo primero que haremos es comparar dos números de un bit. Realizar esta comparación es fácil, simplemente tenemos que construir la tabla de verdad y obtener las ecuaciones lógicas. En la figura 10.1 se muestra esta tabla de verdad y la obtención de sus ecuaciones lógicas. Se ha llamado AM a la señal que indica que A es mayor (A>B) y BM a la señal que indica que B es mayor (A<B).

"# "# $# %# $# %# A A B B IGUAL IGUAL AM AM BM
"#
"#
$# %#
$# %#
A
A
B
B
IGUAL
IGUAL
AM
AM
BM
BM
0
0
0
0
1
1
0
0
0
0
0
0
1
1
0
0
0
0
1
1
BM = m = A·B
BM = m 1 = A·B
1
1
1
0
0
0
0
1
1
0
0
1
1
1
1
1
1
0
0
0
0
AM = m 2 = A·B
AM = m = A·B
AM = m = A·B
2 2
IGUAL=(A·B)+(A·B)=A⊕B
IGUAL=(A·B)+(A·B)=A⊕B
COMPA1 COMPA1 COMPA1 IGUAL IGUAL IGUAL A A A AM AM AM B B B
COMPA1
COMPA1
COMPA1
IGUAL
IGUAL
IGUAL
A A A
AM
AM
AM
B B B
BM
BM
BM

El diseño de este circuito es bien fácil, sólo son tres puertas, dos puertos de entrada y tres de salida (figura

10.1). Cierra el proyecto anterior, abre uno nuevo llamado compa y crea un nuevo fichero llamado compa1.

Una vez que tengas el plano del circuito, añade las puertas lógicas, recuerda que tienes puertas AND con

una entrada negada para implementar la función

B (estas se llaman and2b1 y tienen una bolita de

negación en una de sus entradas). También tienes funciones XNOR para implementar la salida IGUAL.

Pon los puertos con los mismos nombres de la figura 10.1. Cuando tengas el circuito listo guárdalo ( ()*+,)

&& 'B y A·

A

&&

y

comprueba el esquemático () - . , - /.

Si

el diseño está bien pasaremos a implementarlo en la FPGA.

Ahora asignamos los pines, ya sabes como se hace, o bien con el fichero UCF o con la herramienta PACE. Los vas a asignar como muestra la tabla 10.1:

Recuerda que en los pines tienes que poner el que indica en la placa, por ejemplo para SW0 pondrás P89.

Y por fin implementa el comparador y comprueba que funciona bien.

A SW0 B SW1 AM LD0 IGUAL LD1 BM LD2
A
SW0
B
SW1
AM
LD0
IGUAL
LD1
BM
LD2

10.2. Comparador de dos bits

Un comparador de un solo bit es bastante fácil ya que sólo tenemos 4 posibles combinaciones. Para uno de

dos bits hay que pensárselo un poco más. El bloque que queremos implementar se muestra en la figura 10.2.

A partir de dos señales de 2 bits, queremos saber si son iguales, o si una es mayor que la otra. Como son

señales de dos bits tenemos que saber cuál es el bit más significativo. Recuerda que no es lo mismo 10 2 que 01 2 . A pesar de que tienen el mismo número de unos y ceros, el orden en que están situados determina la diferencia.

Por lo tanto tenemos que diferenciar cuál es el bit más significativo. Para eso podemos representar el circuito como el bloque de la izquierda de la figura 10.2. En donde se muestran uno por uno todos los bits (o cables) de cada señal.

Sin embargo, para evitar tener que poner un cable para cada bit, se puede representar como un bus. Esta representación se muestra a la derecha de la figura 10.2. Para este ejemplo no se nota mucho la diferencia, pero imagínate que quieras hacer un comparador de 32 bits.

Departamento de Tecnología Electrónica

Departamento de Tecnología Electrónica

0 0

1

1

0 0

1

1

A0

A0

A1

A1

B0

B0

B1

B1

COMPA2 COMPA2
COMPA2
COMPA2

IGUAL

IGUAL

AM

AM

BM

BM

A(1:0)

A(1:0)

B(1:0)

B(1:0)

COMPA2

COMPA2

2 2 IGUAL IGUAL AM AM BM BM 2 2 - 0 - 0
2
2
IGUAL
IGUAL
AM
AM
BM
BM
2
2
- 0
- 0

! "

El comparador de 2 bits lo podríamos hacer igual que el cuarto ejercicio de los propuestos del tema 3. Como tenemos cuatro variables es un número adecuado para hacerlo por Karnaugh. Sin embargo, ya que tenemos el comparador de 1 bit, lo utilizaremos para hacerlo modularmente.

La tabla de verdad del circuito se muestra en la tabla 10.2.

A1 A0

A1 A0

B1 B0

B1 B0

IGUAL

IGUAL

AM

AM

BM

BM

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

1

1

1

1

0

0

1

1

0

0

1

1

1

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

1

1

1

1

1

1

0

0

0

0

0

0

0

0

1

1

1

1

1

1

1

1

0

0

0

0

1

1

1

1

0

0

1

1

0

0

1

1

0

0

1

1

0

0

0

0

1

1

0

0

0

0

0

0

0

0

0

0

1

1

1

1

1

1

1

1

1

1

1

1

0

0

0

0

0

0

0

0

0

0

0

0

1

1

1

1

0

0

1

1

0

0

1

1

0

0

0

0

1

1

0

0

1

1

1

1

0

0

0

0

0

0

0

0

0

0

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

0

0

0

0

1

1

1

1

0

0

1

1

0

0

1

1

0

0

0

0

0

0

1

1

1

1

1

1

1

1

0

0

0

0

0

0

0

0

0

0

Para comprender mejor el funcionamiento del comparador, reordenaremos la tabla de verdad por los bits más significativos. Ya que el bit más significativo "manda" sobre el menos significativo, esto se aprecia mejor en la tabla de la figura 10.3.

MSB

MSB

LSB

LSB

A1 B1

A1 B1

A0 B0

A0 B0

IGUAL

IGUAL

AM

AM

BM

BM

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

1

1

1

1

0

0

1

1

0

0

1

1

1

1

0

0

0

0

1

1

0

0

0

0

1

1

0

0

0

0

1

1

0

0

0

0

0

0

0

0

0

0

0

0

1

1

1

1

1

1

1

1

0

0

0

0

1

1

1

1

0

0

1

1

0

0

1

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

0

0

0

0

0

0

0

0

0

0

0

0

1

1

1

1

0

0

1

1

0

0

1

1

0

0

0

0

0

0

0

0

1

1

1

1

1

1

1

1

0

0

0

0

0

0

0

0

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

0

0

0

0

1

1

1

1

0

0

1

1

0

0

1

1

1

1

0

0

0

0

1

1

0

0

0

0

1

1

0

0

0

0

1

1

0

0

0

0

0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 "#

0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 "#

0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 "#

0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 "#

"#

"#

%#

%#

$#

$#

"#

"#

1 0 0 0 0 "# "# %# %# $# $# "# "# 0 0 *,#

1 0 0 0 0 "# "# %# %# $# $# "# "# 0 0 *,#

1 0 0 0 0 "# "# %# %# $# $# "# "# 0 0 *,#

1 0 0 0 0 "# "# %# %# $# $# "# "# 0 0 *,#

0

0

*,#

*,#

3

3

"

"

2"

2"

#2"

#2"

3

3

"

"

2"

2"

#2"

#2"

0

0

*,#

*,#

# $ %

Fíjate en la tabla de verdad de la figura 10.3:

Cuando A1<B1 entonces A es menor que B: IGUAL=0 ; AM=0 ; BM = 1

Cuando A1>B1 entonces A es mayor que B: IGUAL=0 ; AM=1 ; BM = 0

Departamento de Tecnología Electrónica

Departamento de Tecnología Electrónica

Cuando A1=B1 entonces comprobamos el bit cero:

Si A0<B0 entonces A es menor que B: IGUAL=0 ; AM=0 ; BM = 1

Si A0>B0 entonces A es mayor que B: IGUAL=0 ; AM=1 ; BM = 0

Si A0=B0 entonces A es igual que B: IGUAL=1 ; AM=0 ; BM = 0

De estos puntos podemos extraer que:

A es igual a B (IGUAL=1) cuando:

A1=B1 y A0=B0

A es mayor que B (AM=1) cuando

A1>B1

O cuando (A1=B1) y A0>B0

es menor que cuando

A1<B1

O cuando (A1=B1) y A0<B0

Date cuenta que en estos puntos sólo estamos haciendo comparaciones bit a bit. Esto es, podemos hacer comparaciones individuales. Y podemos traducir estas sentencias a algebra de Boole y puertas lógicas. La figura 10.4 muestra la construcción del comparador de dos bits para las señales IGUAL y AM. Para no complicar el esquema, no se ha dibujado el diagrama de puertas para la señal BM, pero es similar al de la señal AM.

A0

A0

B0

B0

A1

A1

B1

B1

3 3
3
3

, ,

(A1=B1) y (A0=B0)

(A1=B1) y (A0=B0)

B0 A1 A1 B1 B1 3 3 , , (A1=B1) y (A0=B0) (A1=B1) y (A0=B0) 3

3 3

4 *5 " 3 4 *5 "

4 *5 " 3 4 *5 "

4 *5 " 4 *5 " 3 4 *5 " COMPA1 COMPA1 3 3 4 *"3
COMPA1 COMPA1 3 3 4 *"3 4 *5 '3 4 *5 4 *"3 4 *5
COMPA1
COMPA1
3 3
4 *"3 4 *5 '3 4 *5
4 *"3 4 *5 '3 4 *5
IGUAL_0
IGUAL_0
AM_0
AM_0
IGUAL
IGUAL
BM_0
BM_0
COMPA1
COMPA1
IGUAL_1
IGUAL_1
AM
AM
AM_1
AM_1
BM_1
BM_1
, (A1>B1) ó [(A1=B1) Y (A0>B0)]
, (A1>B1) ó [(A1=B1) Y (A0>B0)]
$#
$#
25 "
25 " 3 4 *5 " 25 "
3 4 *5 "
25 "

2 " 25 + 63 4 *5 ' 25 /

2 " 25 + 63 4 *5 ' 25 /

& ' " " (% )*+

10.2.1. Diseño del comparador

Ahora tienes que diseñar el comparador. Puedes crearlo en el mismo proyecto. Ya sabes los pasos, esquemáticamente son:

Crear un símbolo para el comparador de un bit

Crear un nuevo esquemático de nombre compa2 (no lo llames comp2 porque ya existe ese componente en la biblioteca de Xilinx y puede llevar a error) que contenga un diseño similar al de la figura 10.4, incluyendo el circuito de la señal de salida BM

Al terminar el diseño, guardarlo y comprobar el circuito

Opcionalmente puedes simularlo

Y para implementarlo, asignarle los pines de entrada y salida, que serán los mostrados en la tabla 10.3.

Sintetizar, Implementar y programar la FPGA

A0

SW0

A1

SW1

B0

SW2

B1

SW3

AM

LD0

IGUAL

LD1

BM

LD2

#

Una vez que lo hayas implementado en la FPGA, comprueba en la placa que el circuito funciona bien. Presta atención al comportamiento de las salidas en función de los cambios en las entradas. Fíjate cómo el bit más significativo "manda" sobre el menos significativo.