diff options
| author | Juan Marín Noguera <juan.marinn@um.es> | 2020-02-20 16:07:37 +0100 |
|---|---|---|
| committer | Juan Marín Noguera <juan.marinn@um.es> | 2020-02-20 16:07:37 +0100 |
| commit | c6f69b3f45b81d19b8eeb87184bf16e6de0fad24 (patch) | |
| tree | 92d4e853e031c3ff144a72a2326312cf58e8dae3 /etc/n3.lyx | |
| parent | 1eea228b43c3e243c1e1e9baf21d5d0d3f970152 (diff) | |
2
Diffstat (limited to 'etc/n3.lyx')
| -rw-r--r-- | etc/n3.lyx | 2537 |
1 files changed, 2537 insertions, 0 deletions
diff --git a/etc/n3.lyx b/etc/n3.lyx new file mode 100644 index 0000000..14af896 --- /dev/null +++ b/etc/n3.lyx @@ -0,0 +1,2537 @@ +#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 +Reduced Instruction Set Computer +\emph default +), 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 +<lyxtabular version="3" rows="3" columns="6"> +<features tabularvalignment="middle"> +<column alignment="center" valignment="top" width="12text%"> +<column alignment="center" valignment="top" width="10text%"> +<column alignment="center" valignment="top" width="10text%"> +<column alignment="center" valignment="top" width="10text%"> +<column alignment="center" valignment="top" width="10text%"> +<column alignment="center" valignment="top" width="12text%"> +<row> +<cell alignment="center" valignment="top" usebox="none"> +\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 +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\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 +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\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 +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\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 +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\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 +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\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 +</cell> +</row> +<row> +<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +op +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +rs +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +rt +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +rd +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +shamt +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +func +\end_layout + +\end_inset +</cell> +</row> +<row> +<cell alignment="center" valignment="top" topline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +6 +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +5 +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +5 +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +5 +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +5 +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +6 +\end_layout + +\end_inset +</cell> +</row> +</lyxtabular> + +\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 +<lyxtabular version="3" rows="3" columns="4"> +<features tabularvalignment="middle"> +<column alignment="center" valignment="top" width="12text%"> +<column alignment="center" valignment="top" width="10text%"> +<column alignment="center" valignment="top" width="10text%"> +<column alignment="center" valignment="top" width="32text%"> +<row> +<cell alignment="center" valignment="top" usebox="none"> +\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 +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\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 +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\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 +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\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 +</cell> +</row> +<row> +<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +op +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +rs +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +rt +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +imm +\end_layout + +\end_inset +</cell> +</row> +<row> +<cell alignment="center" valignment="top" topline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +6 +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +5 +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +5 +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +16 +\end_layout + +\end_inset +</cell> +</row> +</lyxtabular> + +\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 +<lyxtabular version="3" rows="3" columns="2"> +<features tabularvalignment="middle"> +<column alignment="center" valignment="top" width="12text%"> +<column alignment="center" valignment="top" width="52text%"> +<row> +<cell alignment="center" valignment="top" usebox="none"> +\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 +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\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 +</cell> +</row> +<row> +<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +op +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +j +\end_layout + +\end_inset +</cell> +</row> +<row> +<cell alignment="center" valignment="top" topline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +6 +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +26 +\end_layout + +\end_inset +</cell> +</row> +</lyxtabular> + +\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 +Register Transfer Language +\emph default +). + 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 +<lyxtabular version="3" rows="9" columns="9"> +<features tabularvalignment="middle"> +<column alignment="center" valignment="top"> +<column alignment="center" valignment="top"> +<column alignment="center" valignment="top"> +<column alignment="center" valignment="top"> +<column alignment="center" valignment="top"> +<column alignment="center" valignment="top"> +<column alignment="center" valignment="top"> +<column alignment="center" valignment="top"> +<column alignment="center" valignment="top"> +<row> +<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +Nombre +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +Puerto +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +Unidad +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +V. +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +Entrada +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +Pasos +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +V. +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +Entrada +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +Pasos +\end_layout + +\end_inset +</cell> +</row> +<row> +<cell multirow="3" alignment="center" valignment="middle" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +IoD +\end_layout + +\end_inset +</cell> +<cell multirow="3" alignment="center" valignment="middle" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +Dirección +\end_layout + +\end_inset +</cell> +<cell multirow="3" alignment="center" valignment="middle" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +Memoria +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +0 +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +PC +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +1 +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +1 +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +ALUOut +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +4b,4c +\end_layout + +\end_inset +</cell> +</row> +<row> +<cell multirow="3" alignment="center" valignment="middle" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +DestReg +\end_layout + +\end_inset +</cell> +<cell multirow="3" alignment="center" valignment="middle" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +Reg. + a escr. +\end_layout + +\end_inset +</cell> +<cell multirow="3" alignment="center" valignment="middle" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +B. + de regs. +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +0 +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout + +\series bold +rt +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +5 +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +1 +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout + +\series bold +rd +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +4a +\end_layout + +\end_inset +</cell> +</row> +<row> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +MemAReg +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +Dato a escr. +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +B. + de regs. +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +0 +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +ALUOut +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +4a +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +1 +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +MDR +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +5 +\end_layout + +\end_inset +</cell> +</row> +<row> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +SelALUA +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +\begin_inset Formula $1^{\text{er}}$ +\end_inset + + op. +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +ALU +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +0 +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +PC +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +1,2 +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +1 +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +A +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +3a,3b,3c +\end_layout + +\end_inset +</cell> +</row> +<row> +<cell multirow="3" alignment="center" valignment="middle" topline="true" bottomline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +SelALUB +\end_layout + +\end_inset +</cell> +<cell multirow="3" alignment="center" valignment="middle" topline="true" bottomline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +\begin_inset Formula $2^{\text{o}}$ +\end_inset + + op. +\end_layout + +\end_inset +</cell> +<cell multirow="3" alignment="center" valignment="middle" topline="true" bottomline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +ALU +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +00 +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +B +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +3a +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +01 +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +Const. + 4 +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +1 +\end_layout + +\end_inset +</cell> +</row> +<row> +<cell multirow="4" alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout + +\end_layout + +\end_inset +</cell> +<cell multirow="4" alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout + +\end_layout + +\end_inset +</cell> +<cell multirow="4" alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout + +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +10 +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout + +\series bold +imm +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +3b +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +11 +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout + +\series bold +imm +\series default +*4 +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +2 +\end_layout + +\end_inset +</cell> +</row> +<row> +<cell multirow="3" alignment="center" valignment="middle" bottomline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +PCSrc +\end_layout + +\end_inset +</cell> +<cell multirow="3" alignment="center" valignment="middle" bottomline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +Entrada +\end_layout + +\end_inset +</cell> +<cell multirow="3" alignment="center" valignment="middle" bottomline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +PC +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +00 +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +ALU +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +1 +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +01 +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +ALUOut +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +3c +\end_layout + +\end_inset +</cell> +</row> +<row> +<cell multirow="4" alignment="center" valignment="top" bottomline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout + +\end_layout + +\end_inset +</cell> +<cell multirow="4" alignment="center" valignment="top" bottomline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout + +\end_layout + +\end_inset +</cell> +<cell multirow="4" alignment="center" valignment="top" bottomline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout + +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +10 +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +... +\series bold +j +\series default +... +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +3d +\end_layout + +\end_inset +</cell> +<cell multicolumn="1" alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout + +\end_layout + +\end_inset +</cell> +<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout + +\end_layout + +\end_inset +</cell> +<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout + +\end_layout + +\end_inset +</cell> +</row> +</lyxtabular> + +\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 |
