¿Cómo diseñar una unidad lógica aritmética en VHDL?

0
112

En circuitos digitales y computación se conoce el concepto de unidad lógica-aritmética. Este es un tipo de circuito digital que nos permite realizar operaciones aritméticas y lógicas. Se conoce con el acrónimo ALU u es el componente fundamental de la CPU (Central Processing Unit). El corazón de la ALU se basa en un sumador completo, permitiendo hacer operaciones básicas como las de adición, sustracción, o hasta rodar un número específico.

El artículo no se centra en definir más a fondo qué es la ALU. Se ha tomado en cuenta que el lector ya sabe cómo funciona. En este apartado trataremos de diseñar una unidad lógica aritmética que haga las siguientes funciones en VHDL.

Para esto vamos a diseñar una tabla de funciones en donde se mostrará qué operación debe hacer y cuáles serán sus salidas.

Tabla de Funciones:

sel(2:0)

Función

Salida

000

Transfiere a

a

001

Suma

a+b

010

Resta

a-b

011

Resta

b-a

100

Invierte

not a

101

And

a and b

110

Or

a or b

111

Xor

a xor b

 

Debido a que necesitamos hacer 8 funciones, tendremos un vector de selección para que la alu sepa qué función hacer dependiendo de esa combinación. En este caso utilizaremos una ALU de cuatro bits. Adicional a esto, agregaré dos salidas que nos ayudarán en un futuro a poder implementar esta ALU a un microcontrolador dedicado. Estas salidas se denominan banderas y son las siguientes:

cf: Se encargará de presentar un uno a la salida en binario cuando se de préstamo o acarreo, esto es muy importante cuando se hace la sustracción y suma. Los acarreos y los préstamos no tienen ningún sentido en las operaciones aritméticas.

zf: Se encargará de indicarnos cuándo en la salida se produce un cero, es decir: “0000” en binario, cuando esto acontece la salida zf se activa.

A continuación presento mi código VHDL:

Imagen: Wikipedia

Compartir
Artículo anteriorExpansión de Memorias
Artículo siguienteMassimo Banzi habla sobre Arduino en TED

Es una chica geek, ingeniera en el área de electrónica y telecomunicaciones.

Sus áreas de interés son los sistemas embebidos, microcontrolandores, procesamiendo digital de señales, y programación.