Vous êtes sur la page 1sur 14

Universidad Mayor de San Andrs Facultad de Ingeniera Carrera Ingeniera Electrnica

ETN 801 Microprocesadores

UNIDAD ARITMETICA LOGICA, EXPANDIDA


Descripcin en VHDL

Por: Amrico lvarez Surci Docente: Marcelo Ramrez M.

La Paz Bolivia 2011

ETN-801 Microprocesadores Unidad Aritmtica Lgica Expandida

UNIDAD ARITMETICA LOGICA, EXPANDIDA Descripcin en VHDL


Amrico lvarez Surci americo.etn@gmail.com

RESUMEN
En el presente trabajo propone una alternativa del trabajo de los primeros laboratorios de la materia ETN-801 Microprocesadores de la Carrera de Ingeniera Electrnica de la U.M.S.A. Para esto se supone la utilizacin de las tarjetas de estudio DE2 de Altera y/o la Spartan3-AN de Xilinx, que utilizan el mismo lenguaje de descripcin VHDL. Se tomara como referencia el texto de la materia junto con las guas prcticas, 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 mdulos que por razones econmicas no se lo plasma en laboratorio prctico para realizar la Alu-Expandida.

1. INTRODUCCIN
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 pequeo Computador Digital. En primera instancia se ensambla una Unidad Bsica de Clculo (UBC), que realiza operaciones bsicas de aritmtica binaria (suma, resta, incremento, decremento, complemento a 1 y 2). Luego diseamos una Simple ALU, que realiza 3 operaciones lgicas adems de las operaciones de la UBC, aadiendo banderas para observar algn 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 mdulos (multiplicacin, suma BCD, desplazamiento de registros), o simplemente con el hecho de querer trabajar con mas bits de palabra para las seales de entrada. Lamentablemente por razones de tiempo y econmicas, se priva al estudiante poder apreciar una ALU ms completa y con mas funcionalidad, ya que el armar este tipo de circuitos es moroso y costoso. Una solucin prctica que presentamos en este trabajo, es la utilizacin de las tarjetas de estudio fpga, adquiridas por nuestra carrera, ya que estas utilizan para su programacin VHDL, que es un lenguaje de descripcin y modelado de circuitos.

ETN-801 Microprocesadores Unidad Aritmtica Lgica Expandida

2. UNIDAD BSICA DE CALCULO (UBC)


La estructura de nuestra unidad de clculo es:

Como se observa el sistema es para entradas X y Y de n-bits cada una, lamentablemente por cuestiones econmicas en laboratorio solo se disea un circuito para 4 bits, dicha limitacin no se observa cuando se lo disea 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 Funcin 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 Funcin compleja Complemento a 1 de Y Leer X Incrementar X Decrementar X Leer X Complemento a 1 de X Complemento a 2 de X Funcin compleja Complemento a 1 de X Sumar Funcin compleja Funcin compleja Restar Y de X Funcin compleja Restar X de Y Funcin compleja Funcin compleja

ETN-801 Microprocesadores Unidad Aritmtica Lgica Expandida 2.2 DESCRIPCIN EN VHDL: Como se observa posteriormente la metodologa que se emplea es la misma que el texto gua de la materia, para poder definir nuestra UBC de n-bits primero debemos de describir nuestra full-adder tambin 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 suma<= ('0' & A) + B + Ci; S <= suma (n-1 downto 0); Co <=suma(n); end rtl;

Utilizando el componente sumador describimos la unidad UBC de n-bits.


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 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity UBC is generic (n: integer:=4); --Define numero de n bits port( X,Y:in std_logic_vector(n-1 downto 0); s:in std_logic_vector(4 downto 0); C: out std_logic; R:out std_logic_vector(n-1 downto 0) ); end UBC; architecture rtl of UBC is signal Sx,Sy,A,B:std_logic_vector(n-1 downto 0); signal op2_x,op2_y,op2_sx,op2_sy:std_logic_vector(n-1 downto 0); component sumador_n is -- componente sumador 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 component; Begin op2_x<= (others=>s(4)); op2_y<= (others=>s(3)); op2_sx<=(others=>s(2));

ETN-801 Microprocesadores Unidad Aritmtica Lgica Expandida


28 29 30 31 32 33 34 35 36 op2_sy<=(others=>s(1)); Sx <= X and op2_x; Sy <= Y and op2_y; A <= Sx xor op2_sx; B <= Sy xor op2_sy; Full_Adder: sumador_n port map(A,B,s(0),R,C); end rtl;

3. UNIDAD ARITMTICA LGICA (ALU)


De igual manera que en la UBC se proceder a describir nuestros mdulos diseados para laboratorio sin limitacin en nmero de bits a la entrada. Como es un proceso similar al anterior, solo se presentara el cdigo vhdl de cada elemento. 3.1 UNIDAD ARITMTICA Y LGICA SIMPLE La estructura de nuestra ALU simple, contiene las funciones lgicas AND, OR, XOR adems de nuestra UBC ya diseada anteriormente, seleccionadas atreves de multicanalisadores. Como se puede apreciar se aumentaron 2 seales de control para seleccionar entradas de los multiplexores utilizados. En la descripcin VHDL utilizaremos el modulo UBC ya creado adems de sus componentes propios del mismo (sumador n bits), ya que es necesario importar todos estos archivos para la compilacin del mismo. 3.1.1 TABLA FUNCIONAL: Realizar la tabla de verdad completa con todas las variables de control sera absurdo, ya que tenemos una palabra de control de 7 bits, tendramos muchas funciones, por tal motivo se buscaron las funciones necesarias:
S6 1 1 1 1 1 0 0 1 1 1 1 1 S5 1 1 1 1 1 0 1 0 1 1 1 1 S4 0 1 0 1 1 0 0 0 1 1 1 1 S3 0 0 1 0 0 0 0 0 1 1 0 0 S2 0 0 0 1 1 0 0 0 0 0 0 0 S1 0 0 0 0 0 0 0 0 0 1 0 1 S0 0 0 0 1 0 0 0 0 0 1 1 0 C 0 0 0 1 0 1 1 1 0 0 R 0 X Y -X -X-1 X and Y X or Y X xor Y X+Y X-Y X+1 X-1 Funcin Borrar salida Leer X Leer y Invertir Negar X and Y X or Y X xor Y Sumar Restar Y de X Incrementar X Decrementar X

ETN-801 Microprocesadores Unidad Aritmtica Lgica Expandida 3.1.2 DESCRIPCIN VHDL:


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity ALU_ini is generic (n: integer:=4); --Define numero de n bits port( X,Y:in std_logic_vector(n-1 downto 0); s:in std_logic_vector(6 downto 0); C:out std_logic; R:out std_logic_vector(n-1 downto 0) ); end ALU_ini; architecture rtl of ALU_ini is signal a,b,cc,d:std_logic_vector(n-1 downto 0); Begin a <= X and Y; b <= X or Y; cc <= X xor Y; mod_UBC:entity work.UBC --modulo UBC ya descrito anteriormente port map(X=>X,Y=>Y,s=>s(4 downto 0),C=>C,R=>d); mux_4_a_1:entity work.mux4to1 port map(I0=>a,I1=>b,I2=>cc,I3=>d,s=>s(6 downto 5),R=>R); end rtl;

3.2 ALU Codificada con Banderas


Las banderas nos informan de algn 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 aadieron modulos detectores para observar alguna bandera en especfico, adems de un decodificador (ROM).

ETN-801 Microprocesadores Unidad Aritmtica Lgica Expandida 3.2.1 TABLA FUNCIONAL:


Cdigo de Operacin 0 1 2 3 4 5 6 7 8 9 A B Operacin (Abreviatura mnemnica) CLR LEER A LEER B NEG NOT AND OR XOR ADD SUB INC DEC Palabra de Estado N 0 * Z 1 * V 0 * P 0 * C * * * * * 0 0 0 Descripcin de la Funcin Cero al resultado Leer dato A a la Salida Leer dato B a la Salida Negativo de A Not A And entre A y B Or entre A y B Xor entre A y B Adicionar datos A y B Substraer B de A Incrementar A Decrementar A


* * * *


* *

3.2.2 DESCRIPCIN 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<=Res; N<=res(n_b-1); H<='1'; end rtl;

ETN-801 Microprocesadores Unidad Aritmtica Lgica Expandida En la figura se aprecia los archivos utilizados para la compilacin por software, de nuestro circuito ALU SIMPLE CON BANDERAS (alu_f) descrito hasta esta instancia. Podemos apreciar que utilizamos mdulos como: ROM, detector de paridad, detector de exceso, detector de cero, Multiplexor 4 a 1 (no presentados por su sencillez), y la UBC que contiene el modulo full adder; todos estos descritos externamente pero utilizados para las pruebas de nuestra alu_f. Esta manera de describir es para el depurado parte a parte de cada uno de los mdulos. Con esto cubrimos el avance de los laboratorios 1 y 2 de la materia etn-801, mas no as el avance terico, ya que, se estudia una ALU con muchas ms prestaciones, que como dijimos antes no abordamos en laboratorio, por razones economas y de tiempo. A continuacin se da paso a describir en VHDL nuestra alu-expandida, a manera de prueba terica en un laboratorio de simulacin en tarjeta de desarrollo fpga.

4. ALU EXPANDIDA
Ya con bases firmes en descripcin de una ALU simple con banderas procederemos a cumplir el objetivo de este trabajo, describir una ALU-EXPANDIDA con banderas, que como repetimos una vez masa no se realiza en laboratorio por el coste y tiempo de preparacin.

De ah que podemos apreciar que a nuestra ALU-Simple le faltan los mdulos de multiplicacin, suma BCD, barrel shifter 1 y 2 para poder expandirla. Ademas se observa a la izquierda que se aadieron 2 banderas mas a nuestro modulo final, H y D que son Semi-acarreo y acarreo de suma BCD respectivamente.

ETN-801 Microprocesadores Unidad Aritmtica Lgica Expandida 4.1 TABLA FUNCIONAL: Nuestra Alu-expandida obedece la siguiente tabla funcional.
C Op. 0 1 2 3 4 5 6 7 8 9 A B C D E S7 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 S6 1 1 1 1 1 0 0 1 1 1 1 1 0 0 1 S5 1 1 1 1 1 0 1 0 1 1 1 1 0 1 0 S4 0 1 0 1 1 0 0 0 1 1 1 1 0 1 1 S3 0 0 1 0 0 0 0 0 1 1 0 0 0 1 1 S2 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 S1 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 S0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0 C 0 0 0 1 0 1 1 1 0 0 R 0 X Y -X -X-1 X and Y X or Y X xor Y X+Y X-Y X+1 X-1 X*Y BCD(A+B) Desplazamiento1 Funcin Borrar salida Leer X Leer y Invertir Negar X and Y X or Y X xor Y Sumar Restar Y de X Incrementar X Decrementar X Multiplicar X con Y Suma BCD Desplaza y rota una posicin a la vez la entrada X Desplaza una o mas posiciones la entrada X

Desplazamiento2

Y en conclusin nuestra alu-expandida con banderas obedece la tabla de verdad:


Cdigo de Operacin 0 1 2 3 4 5 6 7 8 9 A B C D E F Operacin (Abreviatura mnemnica) CLR LEER A LEER B NEG NOT AND OR XOR ADD SUB INC DEC PROD SBCD TD1 TD2 Descripcin de la Funcin Cero al resultado Leer dato A a la Salida Leer dato B a la Salida Negativo de A Not A And entre A y B Or entre A y B Xor entre A y B Adicionar datos A y B Substraer B de A Incrementar A Decrementar A Multiplicar A y B Suma BCD Tambor de desplazamiento 1 Tambor de desplazamiento 2

A continuacin explicaremos las funciones que se incrementaron: o o PROD.- multiplica los 4 bits menos significativos de las entradas A y B. SBCD.- suma bcd de 2 numeros BCD de 2 digitos cada uno, con la respectiva correccion. Este modulo ocasiona un Desborde que se lo presenta en la bandera D.

ETN-801 Microprocesadores Unidad Aritmtica Lgica Expandida o TD1.- tambor de desplazamiento 1, que rota los datos a la derecha posion a posicin. Este tambor es controlado por 3 bits (s10, s9 y s8). Segn la siguiente secuencia:
S10 S9 S8

C C A7 A6 A5 A4 A3 A2 A1

A7

A6

A5

A4

A3

A2

A1

A0

0 0 0 0 1 1 1 1 o

0 0 1 1 0 0 1 1

0 1 0 1 0 1 0 1

A7 A6 A5 A4 A3 A2 A1 A0

A6 A5 A4 A3 A2 A1 A0 C

A5 A4 A3 A2 A1 A0 C A7

A4 A3 A2 A1 A0 C A7 A6

A3 A2 A1 A0 C A7 A6 A5

A2 A1 A0 C A7 A6 A5 A4

A1 A0 C A7 A6 A5 A4 A3

A0 C A7 A6 A5 A4 A3 A2

TD2.- tambor de desplazamiento 2, que desplaza los datos a la derecha posion a posicin. Este tambor es controlado por 3 bits (s13, s12 y 11). Segn la siguiente secuencia:
S13 S12 S11

C C A7 A6 A5 A4 A3 A2 A1

A7

A6

A5

A4

A3

A2

A1

A0

0 0 0 0 1 1 1 1

0 0 1 1 0 0 1 1

0 1 0 1 0 1 0 1

A7 A6 A5 A4 A3 A2 A1 A0

A6 A5 A4 A3 A2 A1 A0 0

A5 A4 A3 A2 A1 A0 0 0

A4 A3 A2 A1 A0 0 0 0

A3 A2 A1 A0 0 0 0 0

A2 A1 A0 0 0 0 0 0

A1 A0 0 0 0 0 0 0

A0 0 0 0 0 0 0 0

4.2 DESCRIPCIN EN VHDL: Describiremos a continuacin nuestra alu-expandida con banderas, en un nico modulo vhdl esto quiere decir que no utilizaremos modo estructural (componentes externos), para asi poder apreciar la metodologa de diseo.
1 2 3 4 5 6 7 ---------------------------------------------ALU (Unidad Aritmetica Logica) -Alu_exp: alu expandida -tiene los modulos: AND,OR,XOR,UBC,MULTIPLICACION, -SUMA BCD,TAMBOR DE DESPLAZAMIENTO 1 Y 2. -EN UN UNICO ARCHIVO VHD SIN DESCRIPCION ESTRUCTURAL -Autor: Americo Alvarez S.

ETN-801 Microprocesadores Unidad Aritmtica Lgica Expandida


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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 --------------------------------------------library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.numeric_std.all; entity alu_exp is port( A,B:in std_logic_vector(7 downto 0); Ctl:in std_logic_vector(3 downto 0); Ctl2:in std_logic; V,N,Z,P,C,H,D:out std_logic; R:out std_logic_vector(7 downto 0) ); end alu_exp;

10

--Entradas --Variable de seleccion de operacion --Pulsador para los TD1 y td2. --Banderas --Salida

architecture rtl of alu_exp is type vector_array is array (0 to 15) of std_logic_vector (7 downto 0); constant memoria:vector_array:=( "01100000", -- 0 "01110000", -- 1 "01101000", -- 2 "01110101", -- 3 "01110100", -- 4 "00000000", -- 5 "00100000", -- 6 "01000000", -- 7 "01111000", -- 8 "01111011", -- 9 "01110001", -- A "01110010", -- B "10000000", -- C "10111000", -- D "11011000", -- E "11111000"); -- F signal Sx,Sy,SA,SB,UBC_R,MUX_R,BCD_R,out_rom:std_logic_vector(7 downto 0); signal op2_x,op2_y,op2_sx,op2_sy,producto:std_logic_vector(7 downto 0); signal td1_r,td2_r,suma:std_logic_vector(8 downto 0); signal bcd1,bcd2,semisuma1,semisuma2:std_logic_vector(4 downto 0); signal v1,v2,v3,v4,SR,K1,K2,s_C,reset1,reset2:std_logic; signal contador1,contador2,contador:integer; Begin out_rom <= memoria(to_integer(unsigned(ctl))); ------------------------- UBC -----------------------------op2_x<= (others=>out_rom(4)); op2_y<= (others=>out_rom(3)); op2_sx<=(others=>out_rom(2)); op2_sy<=(others=>out_rom(1)); Sx Sy SA SB <= <= <= <= A and op2_x; B and op2_y; Sx xor op2_sx; Sy xor op2_sy;

ETN-801 Microprocesadores Unidad Aritmtica Lgica Expandida


61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 suma <= ('0' & SA)+SB+out_rom(0); UBC_R <= suma(7 downto 0); --Salida UBC s_C <=suma(8); -------------------------------------------------------------producto<= A(3 downto 0)*B(3 downto 0); ----------------------SUMA BCD-------------------------------semisuma1<=('0' & A(3 downto 0))+B(3 downto 0); H<= semisuma1(4); --Flag H K1<=(semisuma1(3) and semisuma1(2)) or (semisuma1(3) and semisuma1(1)); bcd1<= semisuma1+(K1 & K1 & '0'); semisuma2<=('0' & A(7 downto 4))+B(7 downto 4)+bcd1(4); K2<= (semisuma2(3) and semisuma2(2)) or (semisuma2(3) and semisuma2(1)); bcd2<= semisuma2+(K2 & K2 & '0'); BCD_R <= bcd2(3 downto 0) & bcd1(3 downto 0); D <= bcd2(4); --Flag D ----------------------------------------------------------------------------------- C S10 S9 S8---------------------------reset1<=(Ctl(3)and Ctl(2)and Ctl(1)and not Ctl(0)); reset2<=(Ctl(3)and Ctl(2)and Ctl(1)and Ctl(0)); PROCESS(ctl2, reset1) VARIABLE cuenta1: INTEGER RANGE 0 TO 7; BEGIN IF (reset1='0') THEN cuenta1:=0; ELSIF(ctl2'EVENT AND ctl2='1') THEN cuenta1:=cuenta1+1; END IF; contador1<= cuenta1; END PROCESS; PROCESS(ctl2, reset2) VARIABLE cuenta2: INTEGER RANGE 0 TO 7; BEGIN IF (reset2='0') THEN cuenta2:=0; ELSIF(ctl2'EVENT AND ctl2='1') THEN cuenta2:=cuenta2+1; END IF; contador2<= cuenta2; END PROCESS; contador <= contador1 + contador2; -------------------------------------------------------------------------------------- T D 1 -----------------------------with contador select td1_r <= s_C & A when 0, A(7 downto 0) & s_C when 1, A(6 downto 0) & s_C & A(7) when 2, A(5 downto 0) & s_C & A(7 downto 6) when 3, A(4 downto 0) & s_C & A(7 downto 5) when 4, A(3 downto 0) & s_C & A(7 downto 4) when 5, A(2 downto 0) & s_C & A(7 downto 3) when 6, A(1 downto 0) & s_C & A(7 downto 2) when 7,

11

ETN-801 Microprocesadores Unidad Aritmtica Lgica Expandida


114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 "000000000" when others; -------------------------------------------------------------------------------------- T D 2 -----------------------------with contador select td2_r <= s_C & A when 0, A(7 downto 0) & "0" when 1, A(6 downto 0) & "00" when 2, A(5 downto 0) & "000" when 3, A(4 downto 0) & "0000" when 4, A(3 downto 0) & "00000" when 5, A(2 downto 0) & "000000" when 6, A(1 downto 0) & "0000000" when 7, "000000000" when others; -------------------------------------------------------------C <= td1_r(8) or td2_r(8); --Flag C -------------------- MUX 8 a 1 ------------------------------with out_rom(7 downto 5) select MUX_R <= A and B when "000", A or B when "001", A xor B when "010", UBC_R when "011", producto when "100", BCD_R when "101", td1_r(7 downto 0) when "110", td2_r(7 downto 0) when "111"; R <= MUX_R; ---------------------------------------------------------------------------------detector de zero--------------------Z <= not (MUX_R(7)or MUX_R(6)or MUX_R(5)or MUX_R(4)or MUX_R(3)or MUX_R(2)or MUX_R(1)or MUX_R(0));-- FLAG Z -------------------------------------------------------------------------------detector de Paridad------------------------P <= not (MUX_R(7)xor MUX_R(6)xor MUX_R(5)xor MUX_R(4)xor MUX_R(3)xor MUX_R(2)xor MUX_R(1)xor MUX_R(0));-- FLAG P --------------------------------------------------------------------------detector de exeso o desborde overflow-----------SR <= out_rom(4) and out_rom(3) and out_rom(0); -- s0 o s1 indistinto v1 <= (not A(7)) and (not B(7)) and (MUX_R(7)) and (not SR); v2 <= (A(7)) and (B(7)) and (not MUX_R(7)) and (not SR); v3 <= (not A(7)) and (B(7)) and MUX_R(7) and (SR); v4 <= (A(7)) and (not B(7)) and (not MUX_R(7)) and (SR); V <= v1 or v2 or v3 or v4; -- FLAG V -------------------------------------------------------------N <= MUX_R(7); -- FLAG N end rtl;

12

ETN-801 Microprocesadores Unidad Aritmtica Lgica Expandida

13

5. RESULTADOS
Analizando resultados de simulacin, se pudo comprobar que nuestro mximo retardo se lo obtiene del modulo de multiplicacin que est entre el rango de: 14ns a 16ns.

As que el tiempo de respuesta mximo de nuestra ALU EXPANDIDA es de 20 ns. Si consideramos el error y la implementacin en la CICLONE II:EP2C35F672C6, pudimos apreciar todas las operaciones y comprobarlas. Como comentario el tiempo mximo de respuesta de la UBC es de 13ns.

6. CONCLUSIONES y MEJORAS
o 16 operaciones aritmticas-lgicas, implementadas y verificadas. Adems de 7 banderas que nos dan referencia de resultado y entrada. Las variables de control S13 a la s8, que controlan el TD1 y el TD2, se las utilizo mediante un pulso de control Ctl2 que realiza el conteo para poder apreciar la rotacin o desplazamiento bit a bit con tan solo presionar esta variable de control aadida. Algunas banderas nos dan informacin importante pero que debemos de seleccionar cual nos sirve y cual no, para este aspecto se deber de realizar un control de paso y de temporizacin, similar al que se realiza en el laboratorio No.3 en alu con temporizacin. Se pudo verificar, la existencia de errores en el texto gua. Datos que se transmitieron al docente de materia. Se propone cambiar el modulo Tambor de desplazamiento 1 TD1, por alguna otra operacin como se logaritmo, exponencial o divisin.

REFERENCIAS
Texto gua ETN-801 microprocesadores - Ing. Marcelo Ramirez

Guias de laboratorio 1 y 2 ETN-801 Ejemplos Practicos VHDL Digital Logic And Microprocessor Design With VHDL

- Ing. Marcelo Ramirez - Americo Alvarez S. - Hwang

Vous aimerez peut-être aussi