ALU Expandida Con Vhdl

August 12, 2017 | Author: Camilo Ernesto Mayorga López | Category: Vhdl, Electronic Circuits, Arithmetic, Physics & Mathematics, Mathematics
Share Embed Donate


Short Description

Download ALU Expandida Con Vhdl...

Description

Universidad Mayor de San Andrés Facultad de Ingeniería Carrera Ingeniería Electrónica

ETN 801 – Microprocesadores

“UNIDAD ARITMETICA LOGICA, EXPANDIDA” Descripción en VHDL

Por: Américo Álvarez Surci Docente: Marcelo Ramírez M.

La Paz – Bolivia 2011

ETN-801 Microprocesadores Unidad Aritmética Lógica Expandida

“UNIDAD ARITMETICA LOGICA, EXPANDIDA” Descripción en VHDL Américo Álvarez Surci [email protected]

RESUMEN En el presente trabajo propone una alternativa del trabajo de los primeros laboratorios de la materia ETN-801 Microprocesadores de la Carrera de Ingeniería Electrónica de la U.M.S.A. Para esto se supone la utilización de las tarjetas de estudio DE2 de Altera y/o la Spartan3-AN de Xilinx, que utilizan el mismo lenguaje de descripción VHDL. Se tomara como referencia el texto de la materia junto con las guías prácticas, para describir parte por parte cada elemento de la ALU de la misma manera en que se lo hace en los laboratorios 1 y 2, y se incluirá los módulos que por razones económicas no se lo plasma en laboratorio práctico para realizar la Alu-Expandida.

1. INTRODUCCIÓN El conocer íntimamente el computador nos brinda una mejor perspectiva y entendimiento de este. Por tal motivo se tiene que ensamblar en cada laboratorio de la materia Microprocesadores, cada elemento del computador; teniendo como resultado a finalizar el Quinto laboratorio un pequeño Computador Digital. En primera instancia se ensambla una Unidad Básica de Cálculo (UBC), que realiza operaciones básicas de aritmética binaria (suma, resta, incremento, decremento, complemento a 1 y 2). Luego diseñamos una Simple ALU, que realiza 3 operaciones lógicas además de las operaciones de la UBC, añadiendo banderas para observar algún caso particular. Hasta esta instancia pudimos plasmar los circuitos en laboratorio sin inconvenientes, el problema surge si queremos expandir nuestra ALU a una mas “interesante” con mas funcionalidad, mas módulos (multiplicación, suma BCD, desplazamiento de registros), o simplemente con el hecho de querer trabajar con mas bits de palabra para las señales de entrada. Lamentablemente por razones de tiempo y económicas, se priva al estudiante poder apreciar una ALU más completa y con mas funcionalidad, ya que el armar este tipo de circuitos es moroso y costoso. Una solución práctica que presentamos en este trabajo, es la utilización de las tarjetas de estudio fpga, adquiridas por nuestra carrera, ya que estas utilizan para su programación VHDL, que es un lenguaje de descripción y modelado de circuitos.

1

ETN-801 Microprocesadores Unidad Aritmética Lógica Expandida

2. UNIDAD BÁSICA DE CALCULO (UBC) La estructura de nuestra unidad de cálculo es:

Como se observa el sistema es para entradas X y Y de n-bits cada una, lamentablemente por cuestiones económicas en laboratorio solo se diseña un circuito para 4 bits, dicha limitación no se observa cuando se lo diseña en vhdl. 2.1 TABLA FUNCIONAL: S4 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

S3 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

S2 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1

S1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1

S0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1

C 0 0 0 1 0 1 1 1 0 ↕ 0 ↕ ↕ 1 ↕ 1 0 ↕ ↕ 1 0 ↕ ↕ 1 ↕ ↕ ↕ ↕ ↕ ↕ ↕ ↕

R 0 1 -1 0 -1 0 -2 -1 Y Y+1 -Y-1 -Y Y-1 Y -Y-2 -Y-1 X X+1 X-1 X -X-1 -X -X-2 -X-1 X+Y X+Y+1 X-Y-1 X-Y -X+Y-1 Y-X -X-Y-2 -X-Y-1

Función Borrar salida Uno positivo Uno negativo Borrar salida Uno negativo Borrar salida Dos negativo Uno negativo Leer Y Incrementar Y Complemento a 1 de Y Complemento a 2 de Y Decrementar y Leer Y Función compleja Complemento a 1 de Y Leer X Incrementar X Decrementar X Leer X Complemento a 1 de X Complemento a 2 de X Función compleja Complemento a 1 de X Sumar Función compleja Función compleja Restar Y de X Función compleja Restar X de Y Función compleja Función compleja

2

ETN-801 Microprocesadores Unidad Aritmética Lógica Expandida 2.2 DESCRIPCIÓN EN VHDL: Como se observa posteriormente la metodología que se emplea es la misma que el texto guía de la materia, para poder definir nuestra UBC de n-bits primero debemos de describir nuestra full-adder también de n-bits: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity sumador_n is generic (n: integer:=4);--Define numero de bits port( A,B:in std_logic_vector(n-1 downto 0); Ci:in STD_LOGIC; S:out std_logic_vector(n-1 downto 0); Co:out std_logic ); end sumador_n; architecture rtl of sumador_n is signal suma:std_logic_vector(n downto 0); begin sumas(6 downto 5),R=>R); end rtl;

3.2 ALU Codificada con Banderas Las banderas nos informan de algún suceso de nuestra ALU, podemos distinguir banderas de: detector de exceso, detector de cero, detector de paridad, numero negativo, carry, etc. Banderas necesarias al momento de descifrar nuestro resultado. El sistema armado en laboratorio contiene la ALU simple descrita en el anterior punto, se le añadieron modulos detectores para observar alguna bandera en específico, además de un decodificador (ROM).

5

ETN-801 Microprocesadores Unidad Aritmética Lógica Expandida 3.2.1 TABLA FUNCIONAL: Código de Operación

Operación (Abreviatura mnemónica)

0 1 2

CLR LEER A LEER B

3

NEG

4 5

NOT AND

6

OR

7

XOR

8

ADD

9

SUB

A

INC

B

DEC

Descripción de la Función

Palabra de Estado N 0 *

Z 1 *

V 0 *

P 0 *

↕ ↕

↕ ↕

↕ ↕

↕ ↕

*

*

↕ ↕ ↕ ↕ ↕ ↕ ↕

↕ ↕ ↕ ↕ ↕ ↕ ↕

* * * *

↕ ↕ ↕ ↕

*

↕ ↕ ↕ ↕ ↕ ↕ ↕

C * * *

Cero al resultado Leer dato A a la Salida Leer dato B a la Salida

*

Negativo de A

* 0

Not A And entre A y B

0

Or entre A y B

0

Xor entre A y B

↕ ↕

Adicionar datos A y B

*

Incrementar A

*

Decrementar A

Substraer B de A

3.2.2 DESCRIPCIÓN VHDL: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33

library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity alu_f is generic (n_b: integer:=4);--Define numero de n bits port( A,B:in std_logic_vector(n_b-1 downto 0); Ctl:in std_logic_vector(3 downto 0); V,N,Z,P,C,H:out std_logic; R:out std_logic_vector(n_b-1 downto 0) ); end alu_f; architecture rtl of alu_f is signal S:std_logic_vector(6 downto 0); signal Res:std_logic_vector(n_b-1 downto 0); Begin Alu_simple:entity work.ALU_ini port map(X=>A,Y=>B,s=>S,C=>C,R=>Res); mod_ROM:entity work.ROM port map(addr=>Ctl,data(7)=>open,data(6 downto 0)=>S); detector_exceso:entity work.overflow port map (a7=>A(n_b-1),b7=>B(n_b-1),r7=>Res(n_b-1),s4=>S(4),s3=>S(3),s0=>S(0),V=>V); detector_cero:entity work.d_cero port map(r=>Res,Z=>Z); detector_paridad:entity work.d_paridad port map(r=>Res,P=>P); R
View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF