1. DISEÑO RTL DE PROCESADORESARITMÉTICOS MICROELECTRÓNICA IE. MSc. José Armando Becerra Vargas
2. REQUISITOS DEL CURSO Para abordar temas de diseño jerárquico, descripción a nivel RTL y diseño de procesadores aritméticos en general, el estudiante debe tener conocimientos de los siguientes temas: Análisis y síntesis de sistemas combinacionales; lógica cableada, Lógica modular y descripción en VHDL de sistemas combinacionales. Análisis y síntesis de sistemas secuenciales; Máquinas de estado de Mealy y Moore, Diseño de alto nivel y descripción en VHDL de sistemas secuenciales. Conocimiento básico de arquitectura de computadores; Funcionamiento de una ALU, sistemas que realizan operaciones, Registros, Contadores, Memorias RAM y ROM, descripción en VHDL de sistemas complejos. Manejo adecuado de las herramientas EDA. Para el caso específico, conocimiento, destreza y manejo del software ISE FOUNDATION de XILINX.
3. CONSIDERACIONES GENERALES DE UN SISTEMA DE TRANSFERENCIA DE REGISTROS Los componentes básicos de este método son aquellos que describen un sistema digital a partir del nivel operacional. La operación de un sistema digital se describe de mejor manera especificando: El conjunto de registros en el sistema y sus funciones. La información en código binario almacenada en los registros. Las operaciones realizadas a partir de la información almacenada en los registros. Las funciones de control que inician la secuencia de operaciones. Estos cuatro componentes forman la base del método de lógica de transferencia entre registros para describir sistemas digitales. Un registro como se define en la notación de lógica de transferencia entre registros, no solamente implica un registro en general, sino que abarca todos los otros tipos de registros, tales como registros de desplazamiento, contadores y unidades de memoria. Un contador se considera como un registro cuya función es incrementar en 1 la información almacenada en él. Una unidad de memoria se considera como una colección de registros de almacenamiento donde se va a almacenar la información. Un Flip-Flop por si solo se toma como un registro de 1 bit, los Flip-Flop y las compuertas asociadas de cualquier circuito secuencia se llaman registro.
4. CONSIDERACIONES GENERALES DE UN SISTEMA DE TRANSFERENCIA DE REGISTROS La información binaria almacenada en los registros podría ser números binarios, números decimales codificados en binario, caracteres alfanuméricos, control de información ó cualquier información binaria codificada. Las operaciones que se realizan mediante los datos almacenados en los registros, depende del tipo de datos que se encuentren. Los números se manipulan con operaciones aritméticas, mientras que el control de información se manipula por lo general con operaciones lógicas tales como activar o borrar bits del registro. Las operaciones realizadas con los datos almacenados en los registros, se llaman microoperaciones. Una microoperación es una operación elemental que puede ser realizada en paralelo durante un periodo de pulso de reloj. El resultado de la operación puede reemplazar la información binaria previa de un registro o puede ser transferida a otro registro. Ejemplos de microoperaciones son: Desplazar, contar, sumar, borrar y cargar.
5. CONSIDERACIONES GENERALES DE UN SISTEMA DE TRANSFERENCIA DE REGISTROS Las microoperaciones especifican las operaciones elementales que se realizan con la información almacenada en los registros. Los tipos de microoperaciones encontradas más a menudo en los sistemas digitales pueden clasificarse en cuatro categorías: Microoperaciones de transferencia entre registros que no cambian el contenido de la información cuando la información binaria se mueve de un registro a otro. Las microoperaciones aritméticas realizan aritmética con los números almacenados en los registros. Microoperaciones lógicas realizan operaciones tales como la AND y OR con el par de bits individuales almacenados en los registros. Las microoperaciones de desplazamiento especifican operaciones para los registros de desplazamiento.
7. NIVEL DE TRANSFERENCIA ENTRE REGISTROS El comportamiento de un sistema digital a nivel de transferencia de registros se puede definir mediante un conjunto de operaciones O1 ,O2 , O3 , … On realizadas sobre diferentes datos externos o internos. Cada una de estas operaciones elementales se lleva a cabo mediante transferencias entre registros cuya forma mas general puede ser: R[m] f ( R[i], R[j], R[k], …)
8.
9. En caso de necesitar saber el número o posición de los bits transferidos se indica de la siguiente manera: B[7-0] A[15-8]
10. Normalmente la transferencia está controlada mediante una señal de habilitación E (enable), se suele expresar de la siguiente forma: E : B A
11. La señal de habilitación puede ser mas compleja, por ejemplo:Si x = 0 y t = 1 B A En otro caso B C
12. LENGUAJE DE TRANSFERENCIA DE REGISTROS Los registros pueden ser objeto de las operaciones aritméticas y lógicas habituales, así tendremos: D A B LSR (A) ASR (A) A A + 1 Otro operador disponible es & (concatenación) p.ej LSR (A&B)
13. LENGUAJE DE TRANSFERENCIA DE REGISTROS Las transferencias de datos entre registros y memoria se pueden tratar como casos particulares del caso anterior donde tendremos dos operaciones gobernadas por las señales de control R (lectura) y W (escritura) y usando los registros MAR y MBR con la notación habitual tendremos: R: MBR M((MAR)) W: M((MAR)) MBR MAR: MemoryAddressRegister MBR: Memory Buffer Register MDR: Memory Data Register Por último las transferencias entre buses y registros se escriben de forma similar: A Inbus [8] Outbus [8] A
14. OPERACIÓN DESCRIPCIÓN : El contenido de R1 se transfiere a R2 OPERACIONES DE TRANSFERENCIA Identificación de Registros en operaciones de transferencia:
31. UNIDAD ARITMÉTICA DE CUATRO BITs Se basa en un diseño totalmente combinacional, los bloques FA, se refieren a sumadores completos de un bit
32. UNIDAD LÓGICA TABLA FUNCIONAL CIRCUITO LÓGICO El Multiplexor selecciona la función lógica deseada. Pueden existir más de cuatro funciones lógicas, lo que requiere un MUX de mayor capacidad.
37. DIAGRAMA GENERAL DE UNA UNIDAD DE DATOS La unidad de datos presentada en la figura, tiene una arquitectura tipo Hardvard (Bus de datos e instrucciones separados). El arreglo de registros permite cargar, almacenar y operar fácilmente los datos que se desean procesar. MB: MUX BUS MD: MUX DATA FS: FUNCTION SELECT V: OVERFLOW C: CARRY N: NEGATIVE Z: ZERO
71. CICLOS FETCH, DECODE Y EXECUTE DEL PROCESADOR CICLO DE INSTRUCCIÓN
72. CICLOS FETCH, DECODE Y EXECUTE DEL PROCESADOR CICLO FETCH (Captación) Función: Lleva la siguiente instrucción de la memoria a la CPU. ElPCtiene la dirección de la siguiente instrucción. El procesador capta la instrucción de la memoria direccionada por el PC. Se incrementa PCen 1. El código de la instrucción se carga en IR. CICLO DECODE (Decodificación) Función: Decodifica los bits presentes en IR Interpreta el código de operación.
73. CICLOS FETCH, DECODE Y EXECUTE DEL PROCESADOR CICLO EXECUTION(Ejecución) Función: Ejecuta la instrucción Procesador - memoria: Transferencia CPU Memoria Procesador - I/O: Transferencia CPU Módulos I/O. Procesamiento de datos: Operaciones aritméticas o lógicas. Control: Cambio de secuencias.
74. CICLOS FETCH, DECODE Y EXECUTE DEL PROCESADOR Ejemplo: El PC contiene el valor 300. Se carga esta instrucción en IR (esto implica el uso de MAR y MBR)
75. CICLOS FETCH, DECODE Y EXECUTE DEL PROCESADOR Ejemplo: Los primeros cuatro bits de IR (“1”) indican que el acumulador AC se va a cargar con un dato de la memoria. Los restantes 12 bits especifican la dirección. (es decir “940”)
76. CICLOS FETCH, DECODE Y EXECUTE DEL PROCESADOR Ejemplo: El registro PC se incrementa y se capta la siguiente instrucción
77. CICLOS FETCH, DECODE Y EXECUTE DEL PROCESADOR Ejemplo: Los primeros cuatro bits (“5”) indican que la instrucción es de suma entre el acumulador y una memoria. Los siguientes 12 bits indican la dirección de la memoria (“941”). El contenido de AC y el de la posición 941 se suman y el resultado se almacena en AC.
78. CICLOS FETCH, DECODE Y EXECUTE DEL PROCESADOR Ejemplo: El registro PC se incrementa en 1 y se capta la siguiente instrucción.
79. CICLOS FETCH, DECODE Y EXECUTE DEL PROCESADOR Ejemplo: Los primeros cuatro bits indican (“2”) que el acumulador se debe almacenar en una memoria. Los siguientes 12 bits indican la dirección de la memoria (“941”). El contenido de AC se almacena en la posición 941. Se requieren tres ciclos de instrucción para ejecutar esta tarea.
80. CONJUNTO DE INSTRUCCÍONES DEL PROCESADOR Las instrucciones de una CPU a otra difieren bastante, sin embargo en todas las CPU se puede encontrar como mínimo el siguiente conjunto de instrucciones: Instrucciones de transferencia de datos. Instrucciones aritméticas. Instrucciones lógicas. Control de flujo. Entrada / Salida.
84. ARQUITECTURA HARVARD vs VON NEUMAN 1. MEMORY: Harvard dispone de dos tipos de memoria una para Instrucciones y otra para datos; la arquitectura Von Neuman, comparte la memoria entre instrucciones y datos. 2. BUS: Al igual que la memoria, Harvard dispone de dos buses dedicados, uno para datos y otro para instrucciones; Von Neuman comparte el Bus de instrucciones y Datos.
85. EJEMPLO DE APLICACIÓN Para aclarar lo visto, vamos a desarrollar el siguiente ejercicio: La figura muestra la memoria (MEM) de un sistema: el registro de direcciones (MAR) puede ser cargado con el contador del programa (PC) o con el puntero de pila (SP), el registro de datos (MDR) está conectado a un bus de datos internos (IDB), al que también se conecta el registro [A], y otro externo (EDB) conectado con la memoria. Se quiere incorporar las dos operaciones de pila: EMPUJAR (PUSH) y EXTRAER (POP) que consisten respectivamente, en llevar [A] a la pila y en llevar de la pila a [A] (recuerde que PUSH [A] implica MEM [A] y SP SP+1, mientras que POP [A] implica SP SP–1 y [A] MEM (SP)). Cuando no hay operación de la pila, el puntero SP apunta a la primera dirección libre. Desarrollar la Carta ASM y a partir de ella diseñar adecuadamente la unidad de control que permita ejecutar las operaciones de PUSH (I1I0 = 00) y POP (I1I0 = 01). Nota: los códigos I1I0 = 1X están reservados para otras operaciones no definidas en el enunciado.
87. SOLUCIÓN AL EJEMPLO DE APLICACIÓN Según el enunciado, la pila se va llenando desde las direcciones más bajas hasta las más altas. Las dos operaciones de pila implican direccionar la memoria MEM con la dirección que indica el puntero de pila, SP. De aquí que, tras apuntar SP a la dirección adecuada, habrá que transferir SP hacia MAR. En ambas operaciones la transferencia entre MEM y A debe pasar por MDR. Operación PUSH (I1I0 = 00): Como SP apunta a la dirección vacía, es ahí a donde hay que transferir A y, después, se incrementa SP para que continúe apuntando a la primera dirección vacía. Operación POP (I1I0 = 01): Hay que decrementar SP para que apunte a la última dirección llena. Sólo entonces se lleva SP a MAR para, después, leer de MEM hacia MDR y, de este registro, llevar el dato leído hacia A.
88. CARTA ASM DEL EJEMPLO En el desarrollo de la carta ASM puede verse claramente la rutina de cada una de las operaciones solicitadas, también se incluye la salida hacia otras operaciones que no son de interés en este ejemplo. El estado S6 devolverá el sistema hacia S0 con la señal de RESET, con las interrupciones del sistema o simplemente el siguiente pulso de reloj lo devolverá.
90. BIT COUNTER Sistema que permite contar el número de ‘1s’ presentes en el Registro A, guardando el resultado en el Registro B Pseudo-código para el Bit Counter B = 0; while A≠0 do if a0 = 1 then B = B + 1; end if; Right-shift A; end while ; Se utiliza un lenguaje estándar de programación para describir el algoritmo que se va a utilizar. Luego se describe como diseño ASM
91. CARTA ASM PARA EL BIT COUNTER Carta ASM para el diseño del DATAPATH del contador de bits ‘1’, describe las micro-operaciones presentes en el diseño.
94. CARTA ASM PARA EL CONTROL DEL BIT COUNTER Carta ASM para el diseño de la lógica de control del contador de bits ‘1’. Obsérvese que las señales utilizadas son las señales de STATUS. Z = ‘1’ when A[n] = ‘0’ a0 Bit menos significativo de A s Señal de inicio START Done Indica que el proceso terminó LB Load B, Borra el contador B LA Load A, Carga el registro A EB Incrementa el contador B EA Desplaza A hacia la derecha
95. CÓDIGO VHDL PARA DESCRIBIR EL BIT COUNTER (1) -- Descripción en Código VHDL del contador de ‘1s’ -- Declaración de Librerías, cláusula USE LIBRARY ieee ; USEieee.std_logic_1164.all ; LIBRARY work ; USE work.components.shiftrne ; -- Declaración de la entidad ENTITY bitcount IS PORT(Clock, Resetn : INSTD_LOGIC ; LA, s : INSTD_LOGIC ; Data : IN STD_LOGIC_VECTOR(7 DOWNTO 0) ; B : BUFFERINTEGER RANGE 0 to 8 ; Done : OUTSTD_LOGIC ) ; END bitcount ;
96. CÓDIGO VHDL PARA DESCRIBIR EL BIT COUNTER (2) ARCHITECTURE Behavior OF bitcount IS TYPE State_type IS ( S1, S2, S3 ) ; SIGNAL y : State_type ; SIGNAL A : STD_LOGIC_VECTOR(7 DOWNTO 0) ; SIGNAL z, EA, LB, EB, low : STD_LOGIC ; BEGIN FSM_transitions: PROCESS ( Resetn, Clock ) BEGIN IF Resetn = '0' THEN y <= S1 ; ELSIF (Clock'EVENT AND Clock = '1') THEN CASE y IS WHEN S1 => IF s = '0' THEN y <= S1 ; ELSE y <= S2 ; END IF ; WHEN S2 => IF z = '0' THEN y <= S2 ; ELSE y <= S3 ; END IF ; WHEN S3 => IF s = '1' THEN y <= S3 ; ELSE y <= S1 ; END IF ; END CASE ; END IF ; END PROCESS ;
97. CÓDIGO VHDL PARA DESCRIBIR EL BIT COUNTER (3) FSM_outputs: PROCESS ( y, A(0) ) BEGIN EA <= '0' ; LB <= '0' ; EB <= '0' ; Done <= '0' ; CASE y IS WHEN S1 => LB <= '1' WHEN S2 => EA <= '1' ; IF A(0) = '1' THEN EB <= '1' ; ELSE EB <= '0' ; END IF ; WHEN S3 => Done <= '1' ; END CASE ; END PROCESS ;
98. CÓDIGO VHDL PARA DESCRIBIR EL BIT COUNTER (4) -- El DATAPATH es descrito a continuación upcount: PROCESS ( Resetn, Clock ) BEGIN IF Resetn = '0' THEN B <= 0 ; ELSIF (Clock'EVENT AND Clock = '1') THEN IF LB = '1' THEN B <= 0 ; ELSEIF EB = '1' THEN B <= B + 1 ; END IF ; END IF; END PROCESS; low <= '0' ; ShiftA: shiftrne GENERIC MAP ( N => 8 ) PORT MAP ( Data, LA, EA, low, Clock, A ) ; z <= '1' WHEN A = "00000000" ELSE '0' ; END Behavior ;
99. P = 0; For i = 0 to n – 1 do if bi = 1 then P = P + A; end if; Left-Shift A; End for; Decimal Binaria 13 1 1 0 1 Multiplicando x 11 1 0 1 1 Multiplicador 13 1 1 0 1 13 1 1 0 1 143 0 0 0 0 1 1 0 1 1 0 0 0 1 1 1 1 Producto b. Pseudo - Code a. Método manual MULTIPLICADOR BINARIO DE n BITS ALGORITMO PARA LA MULTIPLICACIÓN
100. CARTA ASM PARA EL MULTIPLICADOR BINARIO Carta ASM para el diseño del DATAPATH del multiplicador binario, describe las micro-operaciones presentes en el diseño.
102. DISEÑO DEL DATAPATH PARA EL MULTIPLICADOR RA Shift-Left Register RB Shift-Right Register ADDER Sumador de 2n bits MUX Multiplexor 2:1 de 2n bits P Registro genérico de 2n bits NOR Compuerta NOR de n entradas Data P Resultado de la multiplicación B0 LSB del registro B
103. CARTA ASM PARA EL CONTROL DEL MULTIPLICADOR Carta ASM para el diseño de la lógica de control del Multiplicador Binario. Obsérvese que las señales utilizadas son las señales de STATUS. Z = ‘1’ when B[n] = ‘0’ b0 Bit menos significativo de B s Señal de inicio START Done Indica que el proceso terminó RB Shift-Right B RA Shift-Left A Psel Control del MUX EP Suma a P el contenido de A
104. CÓDIGO VHDL PARA DESCRIBIR EL MULTIPLICADOR (1) LIBRARY ieee ; USEieee.std_logic_1164.all ; USEieee.std_logic_unsigned.all ; USE work.components.all ; ENTITY multiply IS GENERIC ( N : INTEGER := 8; NN : INTEGER := 16 ) ; PORT ( Clock : INSTD_LOGIC ; Resetn : INSTD_LOGIC ; LA, LB, s : INSTD_LOGIC ; DataA : INSTD_LOGIC_VECTOR(N–1 DOWNTO 0) ; DataB : INSTD_LOGIC_VECTOR(N–1 DOWNTO 0) ; P : BUFFERSTD_LOGIC_VECTOR(N–1 DOWNTO 0) ; Done : OUTSTD_LOGIC ) ; END multiply ;
105. CÓDIGO VHDL PARA DESCRIBIR EL MULTIPLICADOR (2) ARCHITECTURE Behavior OF multiply IS TYPE State_type IS ( S1, S2, S3 ) ; SIGNAL y : State_type ; SIGNAL Psel, z, EA, EB, EP, Zero : STD_LOGIC ; SIGNAL B, N_Zeros : STD_LOGIC_VECTOR(N–1 DOWNTO 0) ; SIGNAL A, Ain, DataP, Sum : STD_LOGIC_VECTOR(NN–1 DOWNTO 0) ; BEGIN FSM_transitions: PROCESS ( Resetn, Clock ) BEGIN IF Resetn = '0’ THEN y <= S1 ; ELSIF (Clock'EVENT AND Clock = '1') THEN CASE y IS WHEN S1 => IF s = '0' THEN y <= S1 ; ELSE y <= S2 ; END IF; WHEN S2 => IF z = '0' THEN y <= S2 ; ELSE y <= S3 ; END IF; WHEN S3 => IF s = '1' THEN y <= S3 ; ELSE y <= S1 ; END IF; END CASE ; END IF ; END PROCESS;
106. CÓDIGO VHDL PARA DESCRIBIR EL MULTIPLICADOR (2) FSM_outputs: PROCESS ( y, s, B(0) ) BEGIN EP <= '0' ; EA <= '0' ; EB <= '0' ; Done <= '0' ; Psel <= '0'; CASE y IS WHEN S1 => EP <= '1‘ ; WHEN S2 => EA <= '1' ; EB <= '1' ; Psel <= '1‘ ; IF B(0) = '1' THEN EP <= '1' ; ELSE EP <= '0' ; END IF ; WHEN S3 => Done <= '1‘ ; END CASE ; END PROCESS ;
107. CÓDIGO VHDL PARA DESCRIBIR EL MULTIPLICADOR (3) - - Define the datapath circuit Zero <= '0' ; N_Zeros <= (OTHERS => '0' ) ; Ain <= N_Zeros & DataA ; ShiftA: shiftlne GENERICMAP ( N => NN ) PORT MAP ( Ain, LA, EA, Zero, Clock, A ) ; ShiftB: shiftrne GENERIC MAP ( N => N ) PORT MAP ( DataB, LB, EB, Zero, Clock, B ) ; z <= '1' WHEN B = N_Zeros ELSE '0' ; Sum <= A + P ; - - Define the 2n 2-to-1 multiplexers for DataP GenMUX: FOR i IN 0 TO NN–1 GENERATE Muxi: mux2to1 PORT MAP ( Zero, Sum(i), Psel, DataP(i) ) ; END GENERATE; RegP: regne GENERIC MAP ( N => NN ) PORT MAP ( DataP, Resetn, EP, Clock, P ) ; END Behavior ;