Diseno de Un Procesador
Diseno de Un Procesador
Diseno de Un Procesador
net/publication/39436660
Diseño de un procesador
CITATIONS READS
0 857
1 author:
Angel Grediaga
University of Alicante
30 PUBLICATIONS 78 CITATIONS
SEE PROFILE
Some of the authors of this publication are also working on these related projects:
All content following this page was uploaded by Angel Grediaga on 28 August 2014.
11 de diciembre de 2007
Tı́tulo The Proyecto febrero 2008
Autores: Ángel Grediaga Olivo, [email protected]
Este documento ha sido fruto del esfuerzo
de todos sus autores.
Si tiene cualquier notificación que
realizarles póngase en contacto con
ellos en sus respectivas direcciones
electrónicas.
Texto compuesto con TEX (http://www.tug.org) y
LATEX 2ε (http://www.latex-project.org).
2
Proyecto febrero 2008
Diseño de un procesador
1.1. Contexto
El proyecto corresponde a la asignatura de Estructuras de Computadores que pertenece
a la titulación de Ingenierı́a Técnica en Informática de Sistemas. El objetivo general de la
asignatura es que los alumnos adquieran competencia básica en la descripción hardware
de los bloques funcionales de un procesador.
Este trabajo permite a los alumnos aumentar la nota en un punto lineal, para lo cual
deben realizar el proyecto que se propone con todos sus apartados y en el tiempo estable-
cido.
Se recomienda la lectura del capı́tulo 11 del libro (( Diseño de procesadores con VHDL))
y del capı́tulo 1 del libro ((Estructuras de Computadores. Un computador ejemplo:MaNoTaS))
3
1.3. Especificaciones
El proyecto consiste en diseñar un procesador capaz de realizar las siguientes instruc-
ciones
4
1. Load dir . Carga en el registro R1 el dato contenido en la dirección dir.
R1 ← M (dir)
Esta instrucción se almacena en la memoria ocupando tres bytes de acuerdo a la
siguiente ocupación, primero estará el CO (código de operación), segundo el byte
bajo de la dir y tercero el byte alto de la dir, por ejemplo, si en la posición 1000H
es dónde está la instrucción Load 5000H , en la memoria se colocará de la siguiente
manera:
1000H 70
1001H 00
1002H 50
M (dir) ← R1
Esta instrucción se almacena en la memoria ocupando tres bytes de acuerdo a la
siguiente ocupación, primero estará el CO (código de operación), segundo el byte
bajo de la dir y tercero el byte alto de la dir, por ejemplo, si en la posición 1000H es
dónde está la instrucción Store 9000H , en la memoria se colocará de la siguiente
manera:
1000H 71
1001H 00
1002H 90
R1 ← R0 + R1
R0 ← R1
5
Si hay que ejecutar un programa, se debe guardar en la memoria empezando en la posición
0000H, por ejemplo, si el programa es:
Load 3500H
Mov R0
Load 3501H
Add R1
Store 3502H
Este programa escrito en ensamblador, en la memoria del procesador, se guardará como
indica la figura 1.2. La posición 3502H tendrá el resultado que corresponda después de
la ejecución del programa.
0000H 70H
0001H 00H
0002H 35H
0003H 46H
0004H 70H
0005H 01H
0006H 35H
0007H 45H
0008H 71H
0009H 02H
000AH 35H
3500H 33H
3501H 44H
3502H
6
clear clk
Lpc
Ipc
SelDir
inicia
cs
oe
we
Ruta
LH
de
LL
datos
Lri
SelRegW
wr
RA
SelRegRA
RB
SelRegRB BusDatos
ope FZ
SalAlu CO
dir
entradaPC
clk
Lpc PC Ipc
Clear
salida
16
0 dir
16
1
16
LH LL
H L
clk
clear Seldir
8 BusDatos
8
8 8
clk
entDat Lri
wr
clk RI
clear
RA
8
SelRegW BR 3 SelRegRA
3 8x8 CO
RB
3 SelRegRB
SalB SalA
ope ALU
FZ
SalAlu
7
Tabla 1.2: Operaciones que realiza la ALU
ope Operación
000 Transparente a A
001 Transparente a B
010 A and B
011 NOT A
100 A-1
101 A+B
110 A-B
111 A+1
1.5. Memoria
Se desea implementar una memoria de 64Kx8 cuyas señales de funcionamiento son las
que se indican en la tabla 1.3
inicia
CS
OE
16 Memoria
dir
64Kx8
WE
datos
Para que resulte más sencillo realizar el proyecto, a continuación se describe el bloque
de la memoria, en la cual se incluye el programa ejemplo, que hay que comprobar y que
se carga en la memoria cuando se activa la señal inicia.
8
Memoria RAM (del proyecto)
l i b r a r y IEEE ;
use IEEE . STD LOGIC 1164 . ALL ;
use IEEE . STD LOGIC ARITH . ALL ;
use IEEE . STD LOGIC UNSIGNED . ALL ;
e n t i t y Memoria RAM i s
g e n e r i c (N : i n t e g e r : = 8 ; n d i r : i n t e g e r : = 1 6 ) ;
Port ( e n t r a d a : i n s t d l o g i c v e c t o r (N−1 downto 0 ) ;
we : in s t d l o g i c ;
cs : in s t d l o g i c ;
oe : in s t d l o g i c ;
inicia : in s t d l o g i c ;
dir : i n s t d l o g i c v e c t o r ( n d i r −1 downto 0 ) ;
salida : INout s t d l o g i c v e c t o r (N−1 downto 0 ) ) ;
end Memoria RAM ;
begin
e s c r i t u r a : p r o c e s s ( i n i c i a , cs , we , d i r , e n t r a d a )
begin
i f i n i c i a = ’ 1 ’ then
c o n t e n i d o ( 0 ) <= x ” 70 ” ;
c o n t e n i d o ( 1 ) <= x ” 00 ” ;
c o n t e n i d o ( 2 ) <= x ” 35 ” ;
c o n t e n i d o ( 3 ) <= x ” 46 ” ;
c o n t e n i d o ( 4 ) <= x ” 70 ” ;
c o n t e n i d o ( 5 ) <= x ” 01 ” ;
c o n t e n i d o ( 6 ) <= x ” 35 ” ;
c o n t e n i d o ( 7 ) <= x ” 45 ” ;
c o n t e n i d o ( 8 ) <= x ” 71 ” ;
c o n t e n i d o ( 9 ) <= x ” 02 ” ;
c o n t e n i d o ( 1 0 ) <= x ” 35 ” ;
c o n t e n i d o ( 1 1 ) <= x ”FF” ;
c o n t e n i d o ( 3 5 0 0 ) <= x ” 33 ” ;
c o n t e n i d o ( 3 5 0 1 ) <= x ” 44 ” ;
c o n t e n i d o ( 3 5 0 2 ) <= x ” 99 ” ;
e l s i f ( c s= ’ 0 ’ and we = ’ 1 ’ ) then
c o n t e n i d o ( c o n v i n t e g e r ( d i r ) ) <= s a l i d a ;
end i f ;
end p r o c e s s ;
9
Memoria RAM (del proyecto)...
l e c t u r a : p r o c e s s ( oe , cs , d i r )
begin
i f ( oe = ’ 0 ’ and c s = ’0 ’) then
s a l i d a <= c o n t e n i d o ( c o n v i n t e g e r ( d i r ) ) ;
else
s a l i d a <=(o t h e r s =>’Z ’ ) ;
end i f ;
end p r o c e s s ;
end Comportamiento ;
Para diseñar la Unidad de Control se debe tener en cuenta la figura 1.1 y que debemos
diseñar una máquina de estado que responda a la figura 1.6 La unidad de control debe
realizar los siguientes pasos:
2. En dicho momento se debe activar la señal clear e inicia, de manera que se inicializa
la memoria con el programa que se quiere ejecutar.
10
Tabla 1.4: Descripción de las señales de control
Señal Función
clk Reloj del sistema
clear Ası́ncrona, coloca todos los registros a 0
Lpc Sı́ncrona, carga el PC con entrada
Ipc Sı́ncrona, incrementa una unidad el contenido del PC
SelDir Selecciona la dir que ataca a la memoria
inicia Ası́ncrona, activa por 1, inicializa la memoria
cs Ası́ncrona, activa por cero, habilita la memoria
oe Ası́ncrona, activa por cero, permite la lectura de memoria
we Ası́ncrona, activa por uno, permite la escritura de memoria
LH Sı́ncrona, carga en la parte alta del regHL lo que haya en el bus de datos
LL Sı́ncrona, carga en la parte baja del regHL lo que haya en el bus de datos
Lri Sı́ncrona, carga el registro RI lo que haya en el bus de datos
SelRegW Indica el registro en el cual se quiere escribir
wr Sı́ncrona con el flanco subida de clk, permite la escritura de acuerdo a SelReg
RA Ası́ncrona, activa por 1, permite la sacar por SalA el registro indicado por SelReRA
SelRegRA Indica el registro que se quiere leer y sacar por la salida SalA
RB Ası́ncrona, activa por 1, permite la sacar por SalB el registro indicado por SelReRB
SelRegRB Indica el registro que se quiere leer y sacar por la salida SalB
ope Indica la operación a realizar por la ALU según la tabla 1.2
SalAlu Ası́ncroniza, coloca en el bus de datos el resultado de la operación
FZ Ası́ncrona, se pone a 1 cuando el resultado de la operación ha sido cero
CO Salida de la ruta de datos hacia la UC, es el código de la instrucción a ejecutar
1.7. Descripción
Para describir completamente el proyecto se recomienda hacerlo de forma estructural
y realizando los siguientes bloques:
Memoria, figura 1.5
Ruta de Datos, figura 1.3 y 1.4
Unidad de Control, figura 1.6
Hay que realizar la descripción estructural de la figura 1.7
1.8. Entregables
La fecha de entrega es: las 0h del dı́a del examen de teorı́a, y se debe entregar
lo siguiente:
11
rst clk
salida