#LyX 2.3 created this file. For more info see http://www.lyx.org/
\lyxformat 544
\begin_document
\begin_header
\save_transient_properties true
\origin unavailable
\textclass book
\use_default_options true
\maintain_unincluded_children false
\language spanish
\language_package default
\inputencoding auto
\fontencoding global
\font_roman "default" "default"
\font_sans "default" "default"
\font_typewriter "default" "default"
\font_math "auto" "auto"
\font_default_family default
\use_non_tex_fonts false
\font_sc false
\font_osf false
\font_sf_scale 100 100
\font_tt_scale 100 100
\use_microtype false
\use_dash_ligatures true
\graphics default
\default_output_format default
\output_sync 0
\bibtex_command default
\index_command default
\paperfontsize default
\spacing single
\use_hyperref false
\papersize default
\use_geometry false
\use_package amsmath 1
\use_package amssymb 1
\use_package cancel 1
\use_package esint 1
\use_package mathdots 1
\use_package mathtools 1
\use_package mhchem 1
\use_package stackrel 1
\use_package stmaryrd 1
\use_package undertilde 1
\cite_engine basic
\cite_engine_type default
\biblio_style plain
\use_bibtopic false
\use_indices false
\paperorientation portrait
\suppress_date false
\justification true
\use_refstyle 1
\use_minted 0
\index Index
\shortcut idx
\color #008000
\end_index
\leftmargin 0.2cm
\topmargin 0.7cm
\rightmargin 0.2cm
\bottommargin 0.7cm
\secnumdepth 3
\tocdepth 3
\paragraph_separation indent
\paragraph_indentation default
\is_math_indent 0
\math_numbering_side default
\quotes_style swiss
\dynamic_quotes 0
\papercolumns 1
\papersides 1
\paperpagestyle default
\tracking_changes false
\output_changes false
\html_math_output 0
\html_css_as_file 0
\html_be_strict false
\end_header
\begin_body
\begin_layout Standard
El
\series bold
repertorio de instrucciones
\series default
o
\series bold
ISA
\series default
de un procesador define el conjunto de instrucciones que implementa, y
otros aspectos como el número y tipo de registros, los modos de direccionamient
o y el manejo de excepciones.
MIPS implementa un ISA RISC (
\emph on
\lang english
Reduced Instruction Set Computer
\emph default
\lang spanish
), que se caracteriza por tener un número de instrucciones relativamente
pequeño, normalmente sencillas, que operan con datos en los registros,
utilizan pocos modos de direccionamiento y se codifican todas con el mismo
número de bits (en el caso de MIPS, 32 bits).
En este capítulo implementamos una versión simplificada del ISA MIPS de
32 bits con unas pocas instrucciones de cada tipo.
\end_layout
\begin_layout Section
Codificación de las instrucciones
\end_layout
\begin_layout Standard
MIPS dispone de 32 registros de propósito general con 32 bits cada uno,
además de algunos específicos como el contador de programa (PC), y ve la
memoria como un conjunto de celdas de 1 byte cada una con una dirección
de 32 bits, permitiendo indexar hasta
\begin_inset Formula $\unit[4]{GiB}$
\end_inset
de memoria.
Usa cinco modos de direccionamiento:
\end_layout
\begin_layout Itemize
\series bold
Registro:
\series default
El operando se encuentra en un registro, cuyo número está codificado en
la instrucción en un campo de 5 bits (
\begin_inset Formula $2^{5}=\unit[32]{registros}$
\end_inset
).
\end_layout
\begin_layout Itemize
\series bold
Base más desplazamiento:
\series default
Indica una dirección de memoria a leer o escribir mediante un registro
base (codificado con 5 bits) al que se le suma una constante de 16 bits,
codificada en el código de instrucción como un entero con signo en complemento
a dos.
\end_layout
\begin_layout Itemize
\series bold
Inmediato:
\series default
Constante en un campo de 16 bits.
\end_layout
\begin_layout Itemize
\series bold
Relativo al PC:
\series default
Indica una dirección de destino de un salto mediante un campo de 16 bits
en complemento a dos que indica el número de
\series bold
palabras
\series default
(32 bits o 4 bytes) desde el valor actual del registro PC, que será la
dirección de la instrucción inmediatamente posterior a la que se está ejecutand
o.
\end_layout
\begin_layout Itemize
\series bold
Pseudodirecto:
\series default
Indica una dirección de destino mediante un campo de 26 bits.
Como las direcciones de memoria son de 32, a este se le añaden al final
2 bits a 0 (porque las instrucciones están alineadas a la palabra) y al
principio los 4 bits más significativos del PC.
\end_layout
\begin_layout Subsection
Formato de instrucción R
\end_layout
\begin_layout Standard
\align center
\begin_inset Tabular
|
\begin_inset Text
\begin_layout Plain Layout
\size scriptsize
31
\begin_inset ERT
status open
\begin_layout Plain Layout
\backslash
hfill
\end_layout
\end_inset
26
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
\size scriptsize
25
\begin_inset ERT
status open
\begin_layout Plain Layout
\backslash
hfill
\end_layout
\end_inset
21
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
\size scriptsize
20
\begin_inset ERT
status open
\begin_layout Plain Layout
\backslash
hfill
\end_layout
\end_inset
16
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
\size scriptsize
15
\begin_inset ERT
status open
\begin_layout Plain Layout
\backslash
hfill
\end_layout
\end_inset
11
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
\size scriptsize
10
\begin_inset ERT
status open
\begin_layout Plain Layout
\backslash
hfill
\end_layout
\end_inset
6
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
\size scriptsize
5
\begin_inset ERT
status open
\begin_layout Plain Layout
\backslash
hfill
\end_layout
\end_inset
0
\end_layout
\end_inset
|
|
\begin_inset Text
\begin_layout Plain Layout
op
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
rs
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
rt
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
rd
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
shamt
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
func
\end_layout
\end_inset
|
|
\begin_inset Text
\begin_layout Plain Layout
6
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
5
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
5
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
5
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
5
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
6
\end_layout
\end_inset
|
\end_inset
\end_layout
\begin_layout Standard
Donde
\series bold
op
\series default
es el código de operación, que aparece en todos los formatos de instrucción,
\series bold
rs
\series default
y
\series bold
rt
\series default
son los registros fuente,
\series bold
rd
\series default
el registro de destino y
\series bold
func
\series default
indica a la ALU qué función debe realizar.
\series bold
shamt
\series default
es el tamaño de desplazamiento en las instrucciones de desplazamiento y
rotación, y vale 0 en el resto.
\end_layout
\begin_layout Standard
Este formato se usa para operaciones aritmético-lógicas con modo de direccionami
ento registro (
\begin_inset Formula $\boldsymbol{op}=0$
\end_inset
), cuyo formato es
\family typewriter
func $rd, $rs, $rt
\family default
, y de las cuales implementaremos
\family typewriter
and
\family default
(
\begin_inset Formula $\boldsymbol{func}=44|_{8}$
\end_inset
),
\family typewriter
or
\family default
(
\begin_inset Formula $\boldsymbol{func}=45|_{8}$
\end_inset
),
\family typewriter
add
\family default
(
\begin_inset Formula $\boldsymbol{func}=40|_{8}$
\end_inset
),
\family typewriter
sub
\family default
(
\begin_inset Formula $\boldsymbol{func}=42|_{8}$
\end_inset
) y
\family typewriter
slt
\family default
(
\begin_inset Formula $\boldsymbol{func}=52|_{8}$
\end_inset
), que ya implementamos en la ALU del capítulo anterior.
\end_layout
\begin_layout Subsection
Formato de instrucción I
\end_layout
\begin_layout Standard
\align center
\begin_inset Tabular
|
\begin_inset Text
\begin_layout Plain Layout
\size scriptsize
31
\begin_inset ERT
status open
\begin_layout Plain Layout
\backslash
hfill
\end_layout
\end_inset
26
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
\size scriptsize
25
\begin_inset ERT
status open
\begin_layout Plain Layout
\backslash
hfill
\end_layout
\end_inset
21
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
\size scriptsize
20
\begin_inset ERT
status open
\begin_layout Plain Layout
\backslash
hfill
\end_layout
\end_inset
16
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
\size scriptsize
15
\begin_inset ERT
status open
\begin_layout Plain Layout
\backslash
hfill
\end_layout
\end_inset
0
\end_layout
\end_inset
|
|
\begin_inset Text
\begin_layout Plain Layout
op
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
rs
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
rt
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
imm
\end_layout
\end_inset
|
|
\begin_inset Text
\begin_layout Plain Layout
6
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
5
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
5
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
16
\end_layout
\end_inset
|
\end_inset
\end_layout
\begin_layout Standard
Usado para:
\end_layout
\begin_layout Itemize
Instrucciones aritmético-lógicas con un operando constante, por direccionamiento
in
\begin_inset ERT
status open
\begin_layout Plain Layout
\backslash
-
\end_layout
\end_inset
me
\begin_inset ERT
status open
\begin_layout Plain Layout
\backslash
-
\end_layout
\end_inset
dia
\begin_inset ERT
status open
\begin_layout Plain Layout
\backslash
-
\end_layout
\end_inset
to.
\end_layout
\begin_layout Itemize
Instrucciones de acceso a memoria, por direccionamiento base más desplazamiento.
El formato es
\family typewriter
instr $rt, imm($rs)
\family default
, y veremos
\family typewriter
lw
\family default
(
\begin_inset Formula $\boldsymbol{op}=35$
\end_inset
) y
\family typewriter
sw
\family default
(
\begin_inset Formula $\boldsymbol{op}=43$
\end_inset
), que cargan una palabra de una dirección de memoria a un registro y viceversa,
respectivamente.
\end_layout
\begin_layout Itemize
Instrucciones de salto condicional, por direccionamiento relativo a PC.
El formato es
\family typewriter
instr $rs, $rt, label
\family default
, con
\begin_inset Formula $\mathtt{label}=PC+4\boldsymbol{imm}$
\end_inset
, y veremos
\family typewriter
beq
\family default
(
\begin_inset Formula $\boldsymbol{op}=4$
\end_inset
), que salta a una dirección si los dos registros contienen lo mismo.
\end_layout
\begin_layout Subsection
Formato de instrucción J
\end_layout
\begin_layout Standard
\align center
\begin_inset Tabular
|
\begin_inset Text
\begin_layout Plain Layout
\size scriptsize
31
\begin_inset ERT
status open
\begin_layout Plain Layout
\backslash
hfill
\end_layout
\end_inset
26
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
\size scriptsize
25
\begin_inset ERT
status open
\begin_layout Plain Layout
\backslash
hfill
\end_layout
\end_inset
0
\end_layout
\end_inset
|
|
\begin_inset Text
\begin_layout Plain Layout
op
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
j
\end_layout
\end_inset
|
|
\begin_inset Text
\begin_layout Plain Layout
6
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
26
\end_layout
\end_inset
|
\end_inset
\end_layout
\begin_layout Standard
Donde
\series bold
j
\series default
almacena la dirección de destino por direccionamiento pseudodirecto.
Lo usa la instrucción de salto incondicional
\family typewriter
j
\family default
(
\begin_inset Formula $\boldsymbol{op}=2$
\end_inset
), cuyo formato es
\family typewriter
j label
\family default
.
\end_layout
\begin_layout Section
Modelo del tiempo de ejecución
\end_layout
\begin_layout Standard
\begin_inset Formula
\[
T_{CPU}=N_{inst}\cdot CPI\cdot T_{ciclo}
\]
\end_inset
Donde
\begin_inset Formula $T_{CPU}$
\end_inset
es el tiempo que tarda la CPU en ejecutar un programa,
\begin_inset Formula $N_{inst}$
\end_inset
es el número de
\series bold
instrucciones dinámicas
\series default
que se ejecutan (cada
\series bold
instrucción estática
\series default
del código se cuenta tantas veces como se ejecuta),
\begin_inset Formula $CPI$
\end_inset
es el promedio del número de ciclos que tarda en ejecutarse cada instrucción
y
\begin_inset Formula $T_{ciclo}$
\end_inset
es la duración del ciclo de reloj (tiempo entre dos flancos activos), que
debe ser lo suficientemente largo para permitir que se estabilicen todas
las señales de entrada a los elementos secuenciales.
\end_layout
\begin_layout Standard
En una implementación
\series bold
monociclo
\series default
, todas las instrucciones tardan exactamente un ciclo en ejecutarse.
El tiempo de ciclo tiene que ser suficiente para ejecutar la instrucción
más larga, por lo que sobrará tiempo para las cortas, reduciendo el rendimiento.
Construiremos un procesador
\series bold
multiciclo
\series default
, en el que las instrucciones se dividen en pasos y cada uno ocupa un ciclo,
y el tiempo de ciclo es el necesario para ejecutar el paso más largo.
También se pueden realizar implementaciones con
\begin_inset Formula $CPI<1$
\end_inset
mediante técnicas para ejecutar varias instrucciones a la vez, que no veremos
aquí.
\end_layout
\begin_layout Section
El camino de datos
\end_layout
\begin_layout Standard
Un procesador está formado por un
\series bold
camino de datos
\series default
, donde se encuentran los elementos que realizan el trabajo indicado, y
una
\series bold
unidad de control
\series default
, que gestiona el camino de datos.
\end_layout
\begin_layout Standard
Para el camino de datos, tomamos como componentes principales la memoria,
el banco de registros y la ALU, y suponemos que solo estos conllevan un
retardo significativo.
Entonces toda operación con uno de estos componentes consume un ciclo,
y la salida de estos debe almacenarse en registros auxiliares para ser
usada en el ciclo siguiente.
Con esto, nuestro camino de datos tendrá los siguientes componentes:
\end_layout
\begin_layout Itemize
\series bold
Memoria:
\series default
Acepta direcciones de 32 bits y permite leer o escribir una palabra de
4 bytes en cada ciclo.
Tiene dos señales de control para habilitación de lectura y escritura,
así como puertos de entrada para la dirección y el dato a escribir y de
salida para el dato leído.
\end_layout
\begin_layout Itemize
\series bold
Banco de registros (Reg):
\series default
Banco de 32 registros capaz de leer dos registros y escribir otro en el
mismo ciclo.
El registro 0 es virtual y contiene siempre el valor 0, por lo que toda
escritura en este es ignorada.
\end_layout
\begin_layout Itemize
\series bold
ALU:
\series default
La que vimos en el capítulo anterior.
\end_layout
\begin_layout Itemize
\series bold
Contador de programa (PC):
\series default
De 32 bits, con señal de habilitación de escritura.
\end_layout
\begin_layout Itemize
\series bold
Registro de instrucción (IR):
\series default
De 32 bits con habilitación de escritura, almacena la instrucción que se
está ejecutando actualmente, y tiene varios puertos de salida para los
distintos campos.
\end_layout
\begin_layout Itemize
\series bold
Registro de datos de memoria (MDR):
\series default
De 32 bits sin habilitación de escritura, almacena un valor leído de memoria.
\end_layout
\begin_layout Itemize
\series bold
Registros A y B:
\series default
De 32 bits sin habilitación de escritura, almacenan los valores leídos
del banco de registros.
\end_layout
\begin_layout Itemize
\series bold
Registro ALUOut:
\series default
De 32 bits sin habilitación de escritura, almacena la salida de la ALU.
\end_layout
\begin_layout Itemize
Algunos desplazadores y extensores de signo, así como multiplexores para
permitir distintas conexiones entre unidades funcionales.
\end_layout
\begin_layout Standard
Veamos ahora la descomposición de instrucciones en pasos.
Para esta parte usaremos
\series bold
lenguaje de transferencia entre registros
\series default
o
\series bold
RTL
\series default
(
\emph on
\lang english
Register Transfer Language
\emph default
\lang spanish
).
La transferencia de un registro o resultado de una operación a un registro
se escribe como
\family typewriter
A <- B
\family default
, donde
\family typewriter
B
\family default
indica una operación y
\family typewriter
A
\family default
es el registro al que se transfiere el resultado.
Si una sentencia se debe ejecutar sólo bajo cierta condición
\family typewriter
C
\family default
, que puede incluir operadores booleanos, se indica con
\family typewriter
C: A <- B
\family default
.
Finalmente, para indicar que varias sentencias se ejecutan en paralelo,
se separan por comas.
\end_layout
\begin_layout Standard
Los dos primeros pasos son comunes a todas las instrucciones:
\end_layout
\begin_layout Enumerate
Lectura de instrucción desde la memoria (memoria) y cálculo de la dirección
de la ins
\begin_inset ERT
status open
\begin_layout Plain Layout
\backslash
-
\end_layout
\end_inset
truc
\begin_inset ERT
status open
\begin_layout Plain Layout
\backslash
-
\end_layout
\end_inset
ción siguiente (ALU).
\begin_inset Newline newline
\end_inset
\family typewriter
IR <- Memoria[PC], PC <- PC + 4
\end_layout
\begin_layout Enumerate
Decodificación de la instrucción, lectura de operandos (banco de registros)
y cálculo de la dirección de destino de salto condicional (ALU).
\begin_inset Newline newline
\end_inset
\family typewriter
A <- Reg[IR[25-21]], B <- Reg[IR[20-16]],
\begin_inset Newline newline
\end_inset
ALUOut <- PC + sign_extend(IR[15-0]) << 2
\family default
\begin_inset Newline newline
\end_inset
Como hasta que no acaba el segundo paso no se ha decodificado la instrucción,
el resto de acciones se hacen de manera
\series bold
especulativa
\series default
, por si resultaran útiles luego, pues las unidades funcionales necesarias
están desocupadas.
\end_layout
\begin_layout Standard
A continuación, para una instrucción aritmético-lógica:
\end_layout
\begin_layout Enumerate
\begin_inset Argument item:1
status open
\begin_layout Plain Layout
3a.
\end_layout
\end_inset
Realización de la operación (ALU).
\begin_inset Newline newline
\end_inset
\family typewriter
ALUOut <- A func B
\end_layout
\begin_layout Enumerate
\begin_inset Argument item:1
status open
\begin_layout Plain Layout
4a.
\end_layout
\end_inset
Escritura del resultado (banco de registros).
\begin_inset Newline newline
\end_inset
\family typewriter
Reg[IR[15-11]] <- ALUOut
\end_layout
\begin_layout Standard
Para
\family typewriter
lw
\family default
:
\end_layout
\begin_layout Enumerate
\begin_inset Argument item:1
status open
\begin_layout Plain Layout
3b.
\end_layout
\end_inset
Cálculo de la dirección de memoria (ALU).
\begin_inset Newline newline
\end_inset
\family typewriter
ALUOut <- A + sign_extend(IR[15-0])
\end_layout
\begin_layout Enumerate
\begin_inset Argument item:1
status open
\begin_layout Plain Layout
4b.
\end_layout
\end_inset
Lectura del dato de memoria (memoria).
\begin_inset Newline newline
\end_inset
\family typewriter
MDR <- Mem[ALUOut]
\end_layout
\begin_layout Enumerate
\begin_inset Argument item:1
status open
\begin_layout Plain Layout
5.
\end_layout
\end_inset
Escritura del dato leído (banco de registros).
\begin_inset Newline newline
\end_inset
\family typewriter
Reg[IR[20-16]] <- MDR
\end_layout
\begin_layout Standard
Para
\family typewriter
sw
\family default
:
\end_layout
\begin_layout Enumerate
\begin_inset Argument item:1
status open
\begin_layout Plain Layout
3b.
\end_layout
\end_inset
Cálculo de la dirección de memoria (ALU).
\end_layout
\begin_layout Enumerate
\begin_inset Argument item:1
status open
\begin_layout Plain Layout
4c.
\end_layout
\end_inset
Escritura del dato en memoria (memoria).
\begin_inset Newline newline
\end_inset
\family typewriter
Mem[ALUOut] <- B
\end_layout
\begin_layout Standard
Para
\family typewriter
beq
\family default
:
\end_layout
\begin_layout Enumerate
\begin_inset Argument item:1
status open
\begin_layout Plain Layout
3c.
\end_layout
\end_inset
Comprobación de la condición del salto (ALU) y actualización del contador
de programa si procede.
\begin_inset Newline newline
\end_inset
\family typewriter
A=B: PC <- ALUOut
\end_layout
\begin_layout Standard
Para
\family typewriter
j
\family default
:
\end_layout
\begin_layout Enumerate
\begin_inset Argument item:1
status open
\begin_layout Plain Layout
3d.
\end_layout
\end_inset
Actualización del contador de programa.
\begin_inset Newline newline
\end_inset
\family typewriter
PC <- (PC[31-28] << 28) | (IR[25-0] << 2)
\end_layout
\begin_layout Standard
Nos queda por tanto lo siguiente:
\end_layout
\begin_layout Standard
\begin_inset ERT
status open
\begin_layout Plain Layout
\backslash
begin{verbatim}
\end_layout
\begin_layout Plain Layout
T1: IR <- Mem[PC], PC <- PC + 4
\end_layout
\begin_layout Plain Layout
T2: A <- Reg[IR[25-21]], B <- Reg[IR[20-16]],
\end_layout
\begin_layout Plain Layout
ALUOut <- PC + sign_extend(IR[15-0]) << 2
\end_layout
\begin_layout Plain Layout
T3 && op=0: ALUOut <- A func B
\end_layout
\begin_layout Plain Layout
T3 && (op=35 || op=43): ALUOut <- A + sign_extend(IR[15-0])
\end_layout
\begin_layout Plain Layout
T3 && (op=4) && (A=B): PC <- ALUOut
\end_layout
\begin_layout Plain Layout
T3 && (op=2): PC <- (PC[31-28] << 28) | (IR[25-0] << 2)
\end_layout
\begin_layout Plain Layout
T4 && (op=0): Reg[IR[15-11]] <- ALUOut
\end_layout
\begin_layout Plain Layout
T4 && (op=35): MDR <- Mem[ALUOut]
\end_layout
\begin_layout Plain Layout
T4 && (op=43): Mem[ALUOut] <- B
\end_layout
\begin_layout Plain Layout
T5 && (op=35): Reg[IR[20-16]] <- MDR
\end_layout
\begin_layout Plain Layout
\backslash
end{verbatim}
\end_layout
\end_inset
\end_layout
\begin_layout Standard
Las conexiones que necesitamos dependen del ciclo actual y la instrucción
que se esté ejecutando, por lo que tenemos que añadir algunos multiplexores
en algunos puertos de entrada para seleccionar:
\end_layout
\begin_layout Standard
\align center
\begin_inset Tabular
|
\begin_inset Text
\begin_layout Plain Layout
Nombre
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
Puerto
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
Unidad
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
V.
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
Entrada
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
Pasos
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
V.
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
Entrada
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
Pasos
\end_layout
\end_inset
|
|
\begin_inset Text
\begin_layout Plain Layout
IoD
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
Dirección
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
Memoria
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
0
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
PC
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
1
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
1
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
ALUOut
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
4b,4c
\end_layout
\end_inset
|
|
\begin_inset Text
\begin_layout Plain Layout
DestReg
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
Reg.
a escr.
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
B.
de regs.
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
0
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
\series bold
rt
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
5
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
1
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
\series bold
rd
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
4a
\end_layout
\end_inset
|
|
\begin_inset Text
\begin_layout Plain Layout
MemAReg
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
Dato a escr.
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
B.
de regs.
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
0
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
ALUOut
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
4a
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
1
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
MDR
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
5
\end_layout
\end_inset
|
|
\begin_inset Text
\begin_layout Plain Layout
SelALUA
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
\begin_inset Formula $1^{\text{er}}$
\end_inset
op.
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
ALU
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
0
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
PC
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
1,2
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
1
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
A
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
3a,3b,3c
\end_layout
\end_inset
|
|
\begin_inset Text
\begin_layout Plain Layout
SelALUB
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
\begin_inset Formula $2^{\text{o}}$
\end_inset
op.
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
ALU
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
00
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
B
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
3a
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
01
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
Const.
4
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
1
\end_layout
\end_inset
|
|
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
10
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
\series bold
imm
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
3b
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
11
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
\series bold
imm
\series default
*4
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
2
\end_layout
\end_inset
|
|
\begin_inset Text
\begin_layout Plain Layout
PCSrc
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
Entrada
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
PC
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
00
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
ALU
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
1
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
01
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
ALUOut
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
3c
\end_layout
\end_inset
|
|
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
10
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
...
\series bold
j
\series default
...
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
3d
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
\end_layout
\end_inset
|
\end_inset
\end_layout
\begin_layout Section
La unidad de control
\end_layout
\begin_layout Standard
Debemos asegurar que el valor de las señales de control de los multiplexores
y de todas las unidades funcionales sea el adecuado.
Primero haremos un circuito de control de la ALU, que debe realizar una
suma en los pasos 1, 2 y 3b, una resta en el paso 3c y una función en 3a
que depende de los bits del campo
\series bold
func
\series default
.
Para ello diseñamos un circuito combinacional con dos bits de entrada (
\family typewriter
ALUOp
\family default
) además de los seis del campo
\series bold
func
\series default
y tres bits de salida correspondientes a
\family typewriter
ALUCtl
\family default
, como se muestra en la figura.
No necesitamos los dos bytes más significativos de
\family typewriter
func
\family default
, pues son iguales en las cinco operaciones.
\end_layout
\begin_layout Standard
\align center
\begin_inset Graphics
filename pegado32.png
\end_inset
\end_layout
\begin_layout Standard
Hecho esto, las señales que debe controlar la unidad de control principal
son: las señales de control de los multiplexores indicados, incluyendo
\family typewriter
ALUOp
\family default
; las señales
\family typewriter
MemR
\family default
y
\family typewriter
MemW
\family default
de habilitación de lectura y escritura de memoria, y la señales de habilitación
de escritura
\family typewriter
WrtIR
\family default
,
\family typewriter
WrtPC
\family default
,
\family typewriter
WrtPCCond
\family default
(similar pero solo escribe si la señal
\begin_inset Quotes cld
\end_inset
Cero
\begin_inset Quotes crd
\end_inset
de la ALU está activa, para implementar la condición
\family typewriter
A=B
\family default
) y
\family typewriter
WrtReg
\family default
.
\end_layout
\begin_layout Standard
El valor de las señales de control depende sólo del paso actual, mientras
que la transición de un paso a otro depende de la instrucción en ejecución,
por lo que podemos implementar la unidad de control como un autómata de
Moore cuya entrada es el campo
\series bold
op
\series default
de la instrucción en IR y cuya salida son los valores de las señales de
control.
\end_layout
\begin_layout Standard
\align center
\begin_inset Graphics
filename pegado33.png
width 100text%
\end_inset
\end_layout
\begin_layout Standard
\align center
\begin_inset Graphics
filename pegado34.png
width 100text%
\end_inset
\end_layout
\begin_layout Section
Metodología para añadir instrucciones
\end_layout
\begin_layout Enumerate
\series bold
Análisis
\end_layout
\begin_deeper
\begin_layout Enumerate
\series bold
Especificación semántica precisa:
\series default
Traducir la descripción verbal de la instrucción a notación RTL.
\end_layout
\begin_layout Enumerate
\series bold
Identificación del trabajo:
\series default
Identificar qué acciones realiza cada unidad funcional.
\end_layout
\begin_layout Enumerate
\series bold
Establecimiento del orden de precedencia:
\series default
Ver qué relaciones de dependencia existen entre las acciones.
\end_layout
\end_deeper
\begin_layout Enumerate
\series bold
Diseño
\end_layout
\begin_deeper
\begin_layout Enumerate
\series bold
Definición de la codificación:
\series default
Asignar una codificación ajustándose a uno de los tres formatos de instrucción
existentes (salvo que sea imposible), de forma que se pueda diferenciar
la instrucción de las ya existentes.
Para decidir la colocación de los operandos, conviene tener en cuenta el
uso que se va a hacer de ellos y las conexiones ya disponibles, minimizando
el número de cambios a realizar.
\end_layout
\begin_layout Enumerate
\series bold
División del trabajo en ciclos:
\series default
Respetando las dependencias, sin usar la misma unidad dos veces en el mismo
ciclo, e intentando aprovechar las instrucciones que ya se realizan en
los dos primeros ciclos.
\end_layout
\begin_layout Enumerate
\series bold
Extensión del camino de datos:
\series default
Detallar las modificaciones a realizar en este para permitir la realización
de las acciones indicadas.
\end_layout
\begin_layout Enumerate
\series bold
Extensión del control:
\series default
Indicar los nuevos estados, el paso de uno a otro y el valor de las señales
de control en cada uno.
\end_layout
\end_deeper
\end_body
\end_document