Rtl

2.966 visualizaciones

Publicado el

Diseño de procesador, utilizando transferencia entre registros y VHDL

Publicado en: Tecnología, Diseño
0 comentarios
1 recomendación
Estadísticas
Notas
  • Sé el primero en comentar

Sin descargas
Visualizaciones
Visualizaciones totales
2.966
En SlideShare
0
De insertados
0
Número de insertados
3
Acciones
Compartido
0
Descargas
69
Comentarios
0
Recomendaciones
1
Insertados 0
No insertados

No hay notas en la diapositiva.

Rtl

  1. 1. DISEÑO RTL DE PROCESADORESARITMÉTICOS<br />MICROELECTRÓNICA<br />IE. MSc. José Armando Becerra Vargas<br />
  2. 2. REQUISITOS DEL CURSO<br />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:<br />Análisis y síntesis de sistemas combinacionales; lógica cableada, Lógica modular y descripción en VHDL de sistemas combinacionales.<br />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.<br />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.<br />Manejo adecuado de las herramientas EDA. Para el caso específico, conocimiento, destreza y manejo del software ISE FOUNDATION de XILINX.<br />
  3. 3. CONSIDERACIONES GENERALES DE UN SISTEMA DE TRANSFERENCIA DE REGISTROS<br />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:<br />El conjunto de registros en el sistema y sus funciones.<br />La información en código binario almacenada en los registros.<br />Las operaciones realizadas a partir de la información almacenada en los registros.<br />Las funciones de control que inician la secuencia de operaciones.<br />Estos cuatro componentes forman la base del método de lógica de transferencia entre registros para describir sistemas digitales.<br />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.<br />
  4. 4. CONSIDERACIONES GENERALES DE UN SISTEMA DE TRANSFERENCIA DE REGISTROS<br />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.<br />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.<br />Ejemplos de microoperaciones son: Desplazar, contar, sumar, borrar y cargar.<br />
  5. 5. CONSIDERACIONES GENERALES DE UN SISTEMA DE TRANSFERENCIA DE REGISTROS<br />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: <br />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.<br />Las microoperaciones aritméticas realizan aritmética con los números almacenados en los registros.<br />Microoperaciones lógicas realizan operaciones tales como la AND y OR con el par de bits individuales almacenados en los registros.<br />Las microoperaciones de desplazamiento especifican operaciones para los registros de desplazamiento.<br />
  6. 6. ESTRUCTURA GENERAL DE UN SISTEMA DE TRANSFERENCIA DE REGISTROS<br />Diagrama de GLUSHKOV<br />
  7. 7. NIVEL DE TRANSFERENCIA ENTRE REGISTROS<br />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.<br /> Cada una de estas operaciones elementales se lleva a cabo mediante transferencias entre registros cuya forma mas general puede ser:<br /> R[m]  f ( R[i], R[j], R[k], …)<br />
  8. 8. LENGUAJE DE TRANSFERENCIA DE REGISTROS<br /><ul><li>Sean A y B dos registros, la operación mas habitual es transferir el contenido de un registro a otro, se expresa así: B  A
  9. 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. 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. 11. La señal de habilitación puede ser mas compleja, por ejemplo:</li></ul>Si x = 0 y t = 1  B A<br />En otro caso  B  C<br />
  12. 12. LENGUAJE DE TRANSFERENCIA DE REGISTROS<br />Los registros pueden ser objeto de las operaciones aritméticas y lógicas habituales, así tendremos:<br /> D  A B<br /> LSR (A)<br /> ASR (A)<br /> A  A + 1<br />Otro operador disponible es & (concatenación) p.ej LSR (A&B)<br />
  13. 13. LENGUAJE DE TRANSFERENCIA DE REGISTROS<br />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:<br /> R: MBR  M((MAR))<br /> W: M((MAR))  MBR<br /> MAR: MemoryAddressRegister<br /> MBR: Memory Buffer Register<br /> MDR: Memory Data Register<br />Por último las transferencias entre buses y registros se escriben de forma similar:<br />A Inbus [8]<br />Outbus [8]  A<br />
  14. 14. OPERACIÓN DESCRIPCIÓN<br />: El contenido de R1 se transfiere a R2<br />OPERACIONES DE TRANSFERENCIA<br />Identificación de Registros en operaciones de transferencia:<br />
  15. 15. OPERACIONES DE TRANSFERENCIA<br />Operación condicional:<br />Notación de transferencia entre registros:<br />
  16. 16. OPERACIONES DE TRANSFERENCIA<br />Símbolos usados en el lenguaje de transferencia de Registros: <br />
  17. 17. OPERACIONES DE TRANSFERENCIA<br />Ejemplo de Micro-operaciones Aritméticas: <br />
  18. 18. OPERACIONES DE TRANSFERENCIA<br />Implementación de las operaciones de transferencia: <br />
  19. 19. OPERACIONES DE TRANSFERENCIA<br />Micro-operaciones Lógicas: <br />Ejemplo de operaciones de desplazamiento: <br />
  20. 20. TRANSFERENCIA UTILIZANDO MULTIPLEXORES<br />Ejemplo: Implementación de la operación condicional múltiple.<br />
  21. 21. TRANSFERENCIA UTILIZANDO MULTIPLEXORES<br />Circuito detallado de la implementación de:<br />
  22. 22. TRANSFERENCIA UTILIZANDO MULTIPLEXORES<br />Multiplexores dedicados<br />Un solo Bus<br />
  23. 23. TRANSFERENCIA UTILIZANDO MULTIPLEXORES<br />Ejemplo de Transferencia de Registros utilizando una configuración de un solo BUS.<br />
  24. 24. TIPOS DE BUSES<br />BUS Multiplexado<br />BUS Tri estado con Registros bidireccionales<br />
  25. 25. TIPOS DE BUSES<br />Funcionamiento de un Registro Bidireccional:<br />
  26. 26. TIPOS DE BUSES – ESTRUCTURA CON MEMORIA<br />Conexión de una Memoria al Bus de Datos y al Bus de Direcciones:<br />
  27. 27. UNIDAD DE DATOS<br />Conjunto e Registros<br />(RTL)<br />Unidad Funcional<br />(Operaciones)<br />
  28. 28. UNIDAD FUNCIONAL (ALU)<br />Unidad Aritmético-Lógica (ALU)<br />
  29. 29. ESTRUCTURA COMPLETA DE UNA ALU<br />UNIDAD LÓGICA<br />UNIDAD ARITMÉTICA<br />
  30. 30. CICLO DE MICRO-OPERACIONES DE UNA ALU<br />Tabla de Funciones<br />Mapa de Karnaugh<br />Tabla de Verdad<br />
  31. 31. UNIDAD ARITMÉTICA DE CUATRO BITs<br />Se basa en un diseño totalmente combinacional, los bloques FA, se refieren a sumadores completos de un bit<br />
  32. 32. UNIDAD LÓGICA<br />TABLA FUNCIONAL<br />CIRCUITO LÓGICO<br />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.<br />
  33. 33. UNA ETAPA DE LA ALU<br />
  34. 34. TABLA FUNCIONAL DE LA ALU<br />
  35. 35. DESPLAZADORES (SHIFTERS)<br />
  36. 36. DESPLAZADOR ROTATORIO<br />Tabla Funcional<br />Circuito Lógico<br />
  37. 37. DIAGRAMA GENERAL DE UNA UNIDAD DE DATOS<br />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.<br />MB: MUX BUS<br />MD: MUX DATA<br />FS: FUNCTION SELECT<br />V: OVERFLOW<br />C: CARRY<br />N: NEGATIVE<br />Z: ZERO<br />
  38. 38. TABLA PARA LA UNIDAD FUNCIONAL<br />
  39. 39. DETALLE DE LA UNIDAD FUNCIONAL<br />
  40. 40. VARIABLES DE CONTROL PARA LA UNIDAD DE DATOS<br />
  41. 41. CODIFICACIÓN DEL VECTOR DE CONTROL PARA LA UNIDAD DE DATOS<br />
  42. 42. EJEMPLOS DE MICROOPERACIONES<br /> Notación Simbólica<br /> Codificación Binaria<br />
  43. 43. SIMULACIÓN DE LA SECUENCIA DE MICROOPERACIONES<br /> R2  R2 – R3<br /> R4  sl R6<br /> R7  R7 + 1<br /> R1  R0 + 2<br /> Data out R3<br /> R4  Data in<br /> R5  0<br />
  44. 44. INTRODUCCIÓN A LA ARQUITECTURA DE PROCESADORES <br />TAREAS DE LA CPU<br /><ul><li>Captar Instrucción: Leer instrucción de la memoria.
  45. 45. Interpretar la instrucción: Decodificar la instrucción y determinar acciones a realizar.
  46. 46. Captar datos: Leer datos de memoria y/o E/S.
  47. 47. Procesar datos: realizar operación aritmética y/o lógica.
  48. 48. Escribir datos: llevar datos a memoria o E/S.</li></ul>Para realizar estas operaciones, la CPU requiere memoria interna<br />
  49. 49. INTRODUCCIÓN A LA ARQUITECTURA DE PROCESADORES <br />COMPONENTES DEL PROCESADOR<br />
  50. 50. INTRODUCCIÓN A LA ARQUITECTURA DE PROCESADORES <br />ESTRUCTURA INTERNA DE UNA CPU<br />
  51. 51. INTRODUCCIÓN A LA ARQUITECTURA DE PROCESADORES<br />ORGANIZACIÓN DE LOS REGISTROS<br />La memoria para almacenamiento interno posee REGISTROS (nivel más alto en jerarquía de memoria), existen dos tipos de registros:<br />Registros Visibles para el usuario: El usuario puede usarlos para minimizar los accesos a memoria.<br />Registros de control y de estado:Son usados por la unidad de control y por programas privilegiados para controlar la ejecución de un programa.<br />REGISTROS DE USO GENERAL<br /><ul><li>Como su nombre lo dice, pueden ser utilizados para almacenar cualquier información
  52. 52. Puede haber excepciones: Ej. Registros para almacenar punto flotante, punteros de pila, etc.
  53. 53. Algunas veces pueden almacenar direcciones, en otros, existen registros para datos y otros para direcciones </li></li></ul><li>INTRODUCCIÓN A LA ARQUITECTURA DE PROCESADORES<br />EJEMPLO DE REGISTROS DE DIRECCIONES<br /><ul><li>Punteros de segmento: Usados en memorias segmentadas, almacenan la dirección base del segmento
  54. 54. Registros índices: Usado en direccionamiento indexado, pueden ser autoindexados.
  55. 55. Puntero de pila: Mantiene la dirección de la cabeza de la pila.</li></ul>CÓDIGOS DE CONDICIÓN<br /><ul><li>También llamados Flags
  56. 56. Son bits fijados por la CPU como resultado de una operación
  57. 57. Los códigos de condición se reúnen en uno o más registros, generalmente forman parte de un registro de control
  58. 58. Generalmente los bits pueden ser leídos por referencia implícita, pero no pueden ser modificados</li></li></ul><li>INTRODUCCIÓN A LA ARQUITECTURA DE PROCESADORES<br />REGISTROS DE CONTROL Y DE ESTADO<br />Son esenciales cuatro registros para la ejecución de una instrucción:<br /><ul><li>Contador del Programa (PC):Dirección de la próxima instrucción a ejecutar.
  59. 59. Registro de Instrucción: Instrucción captada mas reciente.
  60. 60. Registro de Dirección de Memoria: Dirección de una posición de memoria.
  61. 61. Registro intermedio de memoria:Contiene la palabra leída o a escribir en memoria.</li></ul>NOMBRE DE LOS REGISTROS DE CONTROL Y DE ESTADO<br /><ul><li>PC =ProgramCounter: Contiene la dirección de la instrucción a captar.
  62. 62. IR = InstructionRegister: Contiene la última instrucción captada.
  63. 63. MAR = MemoryAddressRegister: Contiene la dirección de una posición de memoria.
  64. 64. MBR = Memory Buffer Register: Contiene la palabra de datos a escribir en memoria, o la palabra leída más reciente.</li></li></ul><li>INTRODUCCIÓN A LA ARQUITECTURA DE PROCESADORES<br />PALABRA DE ESTADO DEL PROGRAMA (PSW)<br />Contiene la siguiente información de estado:<br /><ul><li>Signo:Signo del último resultado aritmético
  65. 65. Cero: Indica si el último resultado fue cero
  66. 66. Acarreo: Usado en operaciones multipalabra
  67. 67. Igual: Resultado de una operación lógica es igual
  68. 68. Desbordamiento: Overflow aritmético
  69. 69. Interrupciones:Habilitadas/ deshabilitadas
  70. 70. Supervisor: Estado de la CPU en modo supervisor o usuario</li></li></ul><li>EJEMPLOS DE ORGANIZACIONES DE MICROPROCESADORES <br />
  71. 71. CICLOS FETCH, DECODE Y EXECUTE DEL PROCESADOR<br />CICLO DE INSTRUCCIÓN<br />
  72. 72. CICLOS FETCH, DECODE Y EXECUTE DEL PROCESADOR<br />CICLO FETCH (Captación)<br />Función: Lleva la siguiente instrucción de la memoria a la CPU.<br />ElPCtiene la dirección de la siguiente instrucción.<br />El procesador capta la instrucción de la memoria direccionada por el PC.<br />Se incrementa PCen 1.<br />El código de la instrucción se carga en IR.<br />CICLO DECODE (Decodificación)<br />Función: Decodifica los bits presentes en IR<br />Interpreta el código de operación.<br />
  73. 73. CICLOS FETCH, DECODE Y EXECUTE DEL PROCESADOR<br />CICLO EXECUTION(Ejecución)<br />Función: Ejecuta la instrucción<br />Procesador - memoria: Transferencia CPU  Memoria<br />Procesador - I/O: Transferencia CPU  Módulos I/O.<br />Procesamiento de datos: Operaciones aritméticas o lógicas.<br />Control: Cambio de secuencias.<br />
  74. 74. CICLOS FETCH, DECODE Y EXECUTE DEL PROCESADOR<br />Ejemplo:<br /> El PC contiene el valor 300. Se carga esta instrucción en IR (esto implica el uso de MAR y MBR)<br />
  75. 75. CICLOS FETCH, DECODE Y EXECUTE DEL PROCESADOR<br />Ejemplo:<br /> 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”)<br />
  76. 76. CICLOS FETCH, DECODE Y EXECUTE DEL PROCESADOR<br />Ejemplo:<br /> El registro PC se incrementa y se capta la siguiente instrucción<br />
  77. 77. CICLOS FETCH, DECODE Y EXECUTE DEL PROCESADOR<br />Ejemplo:<br /> 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.<br />
  78. 78. CICLOS FETCH, DECODE Y EXECUTE DEL PROCESADOR<br />Ejemplo:<br /> El registro PC se incrementa en 1 y se capta la siguiente instrucción.<br />
  79. 79. CICLOS FETCH, DECODE Y EXECUTE DEL PROCESADOR<br />Ejemplo:<br /> 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.<br />Se requieren tres ciclos de instrucción para ejecutar esta tarea.<br />
  80. 80. CONJUNTO DE INSTRUCCÍONES DEL PROCESADOR<br />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:<br />Instrucciones de transferencia de datos.<br />Instrucciones aritméticas.<br />Instrucciones lógicas.<br />Control de flujo.<br />Entrada / Salida.<br />
  81. 81. ESTRUCTURA DE UN PROCESADOR CON ARQUITECTURA TIPO HARDVARD<br />
  82. 82. DIAGRAMA DE BLOQUES DE UN PROCESADOR CON ARQUITECTURA TIPO HARDVARD<br />
  83. 83. DIAGRAMA DE BLOQUES DE UN PROCESADOR CON ARQUITECTURA TIPO VON NEUMAN<br />
  84. 84. ARQUITECTURA HARVARD vs VON NEUMAN <br />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. <br />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.<br />
  85. 85. EJEMPLO DE APLICACIÓN<br />Para aclarar lo visto, vamos a desarrollar el siguiente ejercicio:<br />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.<br /> <br />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.<br /> <br />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).<br /> <br />Nota: los códigos I1I0 = 1X están reservados para otras operaciones no definidas en el enunciado.<br />
  86. 86. EJEMPLO DE APLICACIÓN<br />
  87. 87. SOLUCIÓN AL EJEMPLO DE APLICACIÓN<br />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.<br />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.<br />
  88. 88. CARTA ASM DEL EJEMPLO<br />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á.<br />
  89. 89. OTROS EJEMPLOS<br /> Bit Counter<br /> Shift-and-Add Multiplier<br />
  90. 90. BIT COUNTER<br />Sistema que permite contar el número de ‘1s’ presentes en el Registro A, guardando el resultado en el Registro B<br />Pseudo-código para el Bit Counter<br />B = 0;<br />while A≠0 do<br />if a0 = 1 then<br /> B = B + 1;<br />end if;<br />Right-shift A;<br />end while ;<br />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<br />
  91. 91. CARTA ASM PARA EL BIT COUNTER<br />Carta ASM para el diseño del DATAPATH del contador de bits ‘1’, describe las micro-operaciones presentes en el diseño.<br />
  92. 92. DIAGRAMA DE TIEMPOS DEL BIT COUNTER<br />
  93. 93. DISEÑO DEL DATAPATH PARA EL BIT COUNTER<br />
  94. 94. CARTA ASM PARA EL CONTROL DEL BIT COUNTER<br />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.<br />Z = ‘1’ when A[n] = ‘0’<br />a0 Bit menos significativo de A<br />s  Señal de inicio START<br />Done Indica que el proceso terminó<br />LB  Load B, Borra el contador B<br />LA Load A, Carga el registro A<br />EB  Incrementa el contador B<br />EA  Desplaza A hacia la derecha<br />
  95. 95. CÓDIGO VHDL PARA DESCRIBIR EL BIT COUNTER (1)<br />-- Descripción en Código VHDL del contador de ‘1s’<br />-- Declaración de Librerías, cláusula USE<br />LIBRARY ieee ;<br />USEieee.std_logic_1164.all ;<br />LIBRARY work ;<br />USE work.components.shiftrne ;<br />-- Declaración de la entidad<br />ENTITY bitcount IS<br />PORT(Clock, Resetn : INSTD_LOGIC ;<br /> LA, s : INSTD_LOGIC ;<br /> Data : IN STD_LOGIC_VECTOR(7 DOWNTO 0) ;<br /> B : BUFFERINTEGER RANGE 0 to 8 ;<br /> Done : OUTSTD_LOGIC ) ;<br />END bitcount ;<br />
  96. 96. CÓDIGO VHDL PARA DESCRIBIR EL BIT COUNTER (2)<br />ARCHITECTURE Behavior OF bitcount IS<br />TYPE State_type IS ( S1, S2, S3 ) ;<br />SIGNAL y : State_type ;<br />SIGNAL A : STD_LOGIC_VECTOR(7 DOWNTO 0) ;<br />SIGNAL z, EA, LB, EB, low : STD_LOGIC ;<br />BEGIN<br /> FSM_transitions: PROCESS ( Resetn, Clock )<br />BEGIN<br />IF Resetn = '0' THEN<br /> y <= S1 ;<br />ELSIF (Clock'EVENT AND Clock = '1') THEN<br />CASE y IS<br />WHEN S1 =><br />IF s = '0' THEN y <= S1 ; ELSE y <= S2 ; END IF ;<br />WHEN S2 =><br />IF z = '0' THEN y <= S2 ; ELSE y <= S3 ; END IF ;<br />WHEN S3 =><br />IF s = '1' THEN y <= S3 ; ELSE y <= S1 ; END IF ;<br />END CASE ;<br />END IF ;<br />END PROCESS ;<br />
  97. 97. CÓDIGO VHDL PARA DESCRIBIR EL BIT COUNTER (3)<br />FSM_outputs: PROCESS ( y, A(0) )<br />BEGIN<br /> EA <= '0' ; LB <= '0' ; EB <= '0' ; Done <= '0' ;<br />CASE y IS<br />WHEN S1 =><br /> LB <= '1'<br />WHEN S2 =><br /> EA <= '1' ;<br />IF A(0) = '1' THEN <br /> EB <= '1' ; <br />ELSE<br /> EB <= '0' ; <br />END IF ;<br />WHEN S3 =><br /> Done <= '1' ;<br />END CASE ;<br />END PROCESS ;<br />
  98. 98. CÓDIGO VHDL PARA DESCRIBIR EL BIT COUNTER (4)<br />-- El DATAPATH es descrito a continuación<br />upcount: PROCESS ( Resetn, Clock )<br />BEGIN<br />IF Resetn = '0' THEN<br /> B <= 0 ;<br />ELSIF (Clock'EVENT AND Clock = '1') THEN<br />IF LB = '1' THEN<br /> B <= 0 ;<br />ELSEIF EB = '1' THEN<br /> B <= B + 1 ;<br />END IF ;<br />END IF;<br />END PROCESS;<br /> low <= '0' ;<br /> ShiftA: shiftrne GENERIC MAP ( N => 8 )<br />PORT MAP ( Data, LA, EA, low, Clock, A ) ;<br /> z <= '1' WHEN A = "00000000" ELSE '0' ; <br />END Behavior ;<br />
  99. 99. P = 0;<br />For i = 0 to n – 1 do<br /> if bi = 1 then<br /> P = P + A;<br />end if;<br /> Left-Shift A;<br />End for; <br />Decimal Binaria<br /> 13 1 1 0 1 Multiplicando<br /> x 11 1 0 1 1 Multiplicador<br /> 13 1 1 0 1<br /> 13 1 1 0 1 <br /> 143 0 0 0 0<br /> 1 1 0 1<br /> 1 0 0 0 1 1 1 1 Producto <br />b. Pseudo - Code<br />a. Método manual<br />MULTIPLICADOR BINARIO DE n BITS<br />ALGORITMO PARA LA MULTIPLICACIÓN<br />
  100. 100. CARTA ASM PARA EL MULTIPLICADOR BINARIO<br />Carta ASM para el diseño del DATAPATH del multiplicador binario, describe las micro-operaciones presentes en el diseño.<br />
  101. 101. DIAGRAMA DE TIEMPOS PARA EL MULTIPLICADOR <br />
  102. 102. DISEÑO DEL DATAPATH PARA EL MULTIPLICADOR<br />RA  Shift-Left Register<br />RB  Shift-Right Register<br />ADDER  Sumador de 2n bits<br />MUX  Multiplexor 2:1 de 2n bits<br />P  Registro genérico de 2n bits<br />NOR  Compuerta NOR de n entradas<br />Data P  Resultado de la multiplicación<br />B0  LSB del registro B<br />
  103. 103. CARTA ASM PARA EL CONTROL DEL MULTIPLICADOR<br />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.<br />Z = ‘1’ when B[n] = ‘0’<br />b0 Bit menos significativo de B<br />s  Señal de inicio START<br />Done Indica que el proceso terminó<br />RB  Shift-Right B<br />RA Shift-Left A<br />Psel  Control del MUX<br />EP  Suma a P el contenido de A<br />
  104. 104. CÓDIGO VHDL PARA DESCRIBIR EL MULTIPLICADOR (1)<br />LIBRARY ieee ;<br />USEieee.std_logic_1164.all ;<br />USEieee.std_logic_unsigned.all ;<br />USE work.components.all ;<br />ENTITY multiply IS<br />GENERIC ( N : INTEGER := 8; NN : INTEGER := 16 ) ;<br />PORT ( Clock : INSTD_LOGIC ;<br /> Resetn : INSTD_LOGIC ;<br /> LA, LB, s : INSTD_LOGIC ;<br /> DataA : INSTD_LOGIC_VECTOR(N–1 DOWNTO 0) ;<br /> DataB : INSTD_LOGIC_VECTOR(N–1 DOWNTO 0) ;<br /> P : BUFFERSTD_LOGIC_VECTOR(N–1 DOWNTO 0) ;<br /> Done : OUTSTD_LOGIC ) ;<br />END multiply ;<br />
  105. 105. CÓDIGO VHDL PARA DESCRIBIR EL MULTIPLICADOR (2)<br />ARCHITECTURE Behavior OF multiply IS<br />TYPE State_type IS ( S1, S2, S3 ) ;<br />SIGNAL y : State_type ;<br />SIGNAL Psel, z, EA, EB, EP, Zero : STD_LOGIC ;<br />SIGNAL B, N_Zeros : STD_LOGIC_VECTOR(N–1 DOWNTO 0) ;<br />SIGNAL A, Ain, DataP, Sum : STD_LOGIC_VECTOR(NN–1 DOWNTO 0) ;<br />BEGIN<br /> FSM_transitions: PROCESS ( Resetn, Clock )<br />BEGIN<br />IF Resetn = '0’ THEN<br /> y <= S1 ;<br />ELSIF (Clock'EVENT AND Clock = '1') THEN<br />CASE y IS<br />WHEN S1 =><br />IF s = '0' THEN y <= S1 ; ELSE y <= S2 ; END IF;<br />WHEN S2 =><br />IF z = '0' THEN y <= S2 ; ELSE y <= S3 ; END IF;<br />WHEN S3 =><br />IF s = '1' THEN y <= S3 ; ELSE y <= S1 ; END IF;<br />END CASE ;<br />END IF ;<br />END PROCESS;<br />
  106. 106. CÓDIGO VHDL PARA DESCRIBIR EL MULTIPLICADOR (2)<br />FSM_outputs: PROCESS ( y, s, B(0) )<br />BEGIN<br /> EP <= '0' ; EA <= '0' ; EB <= '0' ; Done <= '0' ; Psel <= '0';<br />CASE y IS<br />WHEN S1 =><br /> EP <= '1‘ ;<br />WHEN S2 =><br /> EA <= '1' ; EB <= '1' ; Psel <= '1‘ ;<br />IF B(0) = '1' THEN<br /> EP <= '1' ; <br />ELSE <br /> EP <= '0' ; <br />END IF ;<br />WHEN S3 =><br /> Done <= '1‘ ;<br />END CASE ;<br />END PROCESS ;<br />
  107. 107. CÓDIGO VHDL PARA DESCRIBIR EL MULTIPLICADOR (3)<br />- - Define the datapath circuit<br /> Zero <= '0' ;<br /> N_Zeros <= (OTHERS => '0' ) ;<br /> Ain <= N_Zeros & DataA ;<br /> ShiftA: shiftlne GENERICMAP ( N => NN )<br />PORT MAP ( Ain, LA, EA, Zero, Clock, A ) ;<br /> ShiftB: shiftrne GENERIC MAP ( N => N )<br />PORT MAP ( DataB, LB, EB, Zero, Clock, B ) ;<br /> z <= '1' WHEN B = N_Zeros ELSE '0' ;<br /> Sum <= A + P ;<br />- - Define the 2n 2-to-1 multiplexers for DataP<br /> GenMUX: FOR i IN 0 TO NN–1 GENERATE<br /> Muxi: mux2to1 PORT MAP ( Zero, Sum(i), Psel, DataP(i) ) ;<br />END GENERATE;<br /> RegP: regne GENERIC MAP ( N => NN )<br />PORT MAP ( DataP, Resetn, EP, Clock, P ) ;<br />END Behavior ;<br />
  108. 108. FIN<br />FIN<br />FIN<br />

×