DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

317
DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR 8051 USANDO VHDL “FLEX51” JORGE ANDRES CASTRO RESTREPO UNIVERSIDAD AUTÓNOMA DE OCCIDENTE FACULTAD DE INGENIERIAS DEPARTAMENTO DE ENERGÉTICA Y ELECTRÓNICA PROGRAMA DE INGENIERIA ELECTRONICA SANTIAGO DE CALI 2004

Transcript of DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

Page 1: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR 8051 USANDO VHDL

“FLEX51”

JORGE ANDRES CASTRO RESTREPO

UNIVERSIDAD AUTÓNOMA DE OCCIDENTE

FACULTAD DE INGENIERIAS

DEPARTAMENTO DE ENERGÉTICA Y ELECTRÓNICA

PROGRAMA DE INGENIERIA ELECTRONICA

SANTIAGO DE CALI

2004

Page 2: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR 8051 USANDO VHDL

“FLEX51”

JORGE ANDRÉS CASTRO RESTREPO

Proyecto de Grado para optar el titulo de

Ingeniero Electrónico

Director

JOHNNY POSADA CONTRERAS

Ingeniero Electrónico

UNIVERSIDAD AUTÓNOMA DE OCCIDENTE

FACULTAD DE INGENIERIAS

DEPARTAMENTO DE ENERGÉTICA Y ELECTRONICA

PROGRAMA DE INGENIERÍA ELECTRÓNICA

SANTIAGO DE CALI

2004

Page 3: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

Nota de aceptación:

Aprobado por el comité de trabajo de

grado en cumplimiento de los

requisitos exigidos por la Universidad

Autónoma de Occidente para optar al

titulo de Ingeniero Electrónico

Henry Cabra

Firma del jurado

Diego Martínez

Firma del jurado

Santiago de Cali, Julio 29 de 2.004

Page 4: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

Al Señor Jesús por ser la luz de mi vida, el hacedor de todo lo que vemos y fiel

amigo.

A mi familia por ser un apoyo constante, hoy ven el fruto de sus esfuerzos.

Page 5: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

AGRADECIMIENTOS

Universidad Autónoma de Occidente, por creer en mis capacidades y habilidades

dándome las herramientas materiales, intelectuales y emocionales para alcanzar la

cima de nuestro sueño.

Johnny Posada Contreras, Ingeniero Electrónico y director de tesis, por su

colaboración en el desarrollo de los objetivos.

Page 6: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

CONTENIDO

Pág.

INTRODUCCIÓN 30

1. OBJETIVO GENERAL 32

1.1 OBJETIVOS ESPECIFICOS 32

2. PLANTEAMIENTO DEL PROBLEMA 33

3. JUSTIFICACIÓN 35

4. DISTRIBUCIÓN DEL TRABAJO 38

5. MICROCONTROLADOR 40

6. FLEX10K DE ALTERA 42

6.1 DESCRIPCIÓN GENERAL 42

6.2 BLOQUE DE ARREGLOS EMBEBIDOS 42

6.3 BLOQUE DE ARREGLOS LOGICOS 43

6.4 ELEMENTO LOGICO 44

6.5 MODOS DE OPERACIÓN 45

6.5.1 MODO NORMAL 45

6.5.2 MODO ARIMETICO 46

6.5.3 MODO CONTADOR ASCENDENTE/DESCENDENTE 47

6.5.4 MODO CONTABLE CLAREABLE 48

7. CIRCUITOS COMBINATORIOS 49

Page 7: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

7.1 CIRCUITOS ARITMETICOS 49

7.1.1 SUMADORES 49

7.1.1.1 Semisumador 49

7.1.1.2 Sumador completo 50

7.1.1.3 Sumador paralelo binario 52

7.1.1.4 Sumador-restador binario 53

7.1.1.5 Lpm_add_sub 54

7.1.1.6 Diseño de sumadores utilizados en el Flex51 54

7.1.1.6.1 Ader_a 54

7.1.1.6.2 Sumagu 57

7.1.2 MULTIPLICADORES 58

7.1.2.1 Multiplicador serie 58

7.1.2.2 Multiplicador paralelo de n bits basado en arreglos de sumadores

con acarreo propagado 59

7.1.2.3 Multiplicador paralelo de n bits basado en arreglos de sumadores

con acarreo salvado 60

7.1.2.4 Multiplicador de Wallace 61

7.1.2.5 Multiplicador parametrizado: Mega Función Lpm_mult 62

7.1.2.6 Multiplicador paralelo basado en el algoritmo de Booth 62

7.1.2.7 Multiplicador de Baugh-Wooley 63

7.1.2.8 Resultados de optimización de multiplicadores paralelos 64

7.1.2.9 Diseño del multiplicador del FEX51. 67

7.1.3 DIVISORES 68

7.1.3.1 Divisor basado en restas y desplazamientos 68

Page 8: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

7.1.3.2 Divisor con restauración de 2N-N bits 68

7.1.3.3 Divisor sin restauración de 2N-N bits 70

7.1.3.4 Lpm_divide 71

7.1.3.5 Diseño del divisor del FLEX51 71

7.2 DECODIFICADORES 72

7.2.1 DEC2TO4 72

7.2.2 DEC2TO4H 73

7.2.3 DECOD127 74

7.2.4 DECINT 76

7.3 MULTIPLEXORES 77

7.3.1 MUX1OF2B 78

7.3.2 MU3 78

7.3.3 MBIT 79

7.3.4 MUXPREES 79

8. REGISTROS Y CONTADORES 81

8.1 FLIP-FLOPS 81

8.1.1 FDD 81

8.1.2 FDD1 82

8.2 REGISTROS 82

8.2.1 REG8B 82

8.2.2 STD_REG8B2 83

8.2.3 STD_REG8B22 84

8.2.4 STD_REG8B1 85

8.2.5 REG8BPSW 87

Page 9: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

8.2.6 REGTCON 87

8.2.7 REGSCON 88

8.2.8 REG8BTRANS 89

8.2.9 REG8BRECC 90

8.3 CONTADORES 90

8.3.1 CONT_REG8B 90

8.3.2 REG_SP 91

8.3.3 PC0 92

8.3.4 PC1 92

8.3.5 INC_DEC 94

8.2.6 CONTBAUDRATE 95

8.2.7 CONTBAUDRATE1 96

8.2.8 CONT_REG6B 97

9. MEMORIA 98

9.1 MEMORIA DE ACCESO ALEATORIO (RAM) 99

9.1.1 DISEÑO DE LA MEMORIA RAM DEL FLEX51 99

9.2 MEMORIA DE SOLO LECTURA (ROM) 99

9.2.1 DISEÑO DE LA MEMORIA ROM DEL FLEX51 100

10. DISEÑO DEL FLEX51 101

10.1 MICROCONTROLADOR 80C31/80C51/80C57 101

10.2 FLEX51 107

10.2.1 CARACTERISTICAS 108

Page 10: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

10.2.2 FLEX51 EN BLOQUES 109

10.2.3 FLEX51 EN PARTES 113

10.2.3.1 Decodificador de zona de registros de funciones especiales

DECOD127 115

10.2.3.2 Dispositivo de salidas de control de la máquina de estados DIROUT 116

10.2.3.3 Memoria de programa ROMPROG 119

10.2.3.4 Tri 120

10.2.3.5 Memoria de datos RAMD. 120

10.2.3.6 Registro IR 121

10.2.3.7 Zona de puertos de entrada y salida 121

10.2.3.8 Registro PSW 123

10.2.3.9 Cable 125

10.2.3.10 Arreagu1 126

10.2.3.10.1 And20 129

10.2.3.11 Agu 129

10.2.3.11.1 Pc 131

10.2.3.11.2 Dptr 133

10.2.3.11.3 Reg8bagu 135

10.2.3.11.4 Arreagu2 136

10.2.3.11.5 Arreagu3 136

10.2.3.11.6 Arregloagu 137

10.2.3.11.7 Cable2 138

10.2.3.11.8 Funcionamiento general de la AGU 139

10.2.3.12 Alu (Prueba4) 141

Page 11: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

10.2.3.12.1 Alu 143

U_corri 146

U_exch 146

Paridad 147

Dirbit 148

Cjne 150

Incdec 151

Ul 152

Arreglodirecto 153

10.2.3.12.2 Logalu 155

10.2.3.12.3 Arreov 158

10.2.3.13 Unidad_bits 160

10.2.3.13.1 Prubit 162

10.2.3.13.2 Arrecarry 162

10.2.3.13.3 Saltoarre 163

10.2.3.13.4 Compilación del dispositivo Unidad_bits 163

10.2.3.14 Arre_ramex 164

10.3 MÁQUINA DE ESTADOS 164

11. PERIFERICOS DEL FLEX51 177

11.1 UNIDAD SERIAL 178

11.1.1 UNIDAD DE TRANSMISION 178

11.1.1.1 Baudrate 180

11.1.1.2 Mqtx 181

11.1.2 UNIDAD DE RECEPCION 182

Page 12: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

11.1.2.1 Mqrx 184

11.1.3 PREESCALER 184

11.1.4 SCON 185

11.1.5 FUNCIONAMIENTO GENERAL DE LA UNIDAD SERIAL 187

11.1.6 FORMULA PARA GENERAR LA RATA DE BAUDIOS 188

11.2 UNI_INTERRUPCIONES 189

11.2.1 FUNCIONAMIENTO GENERAL DEL DISPOSITIVO UNI_INTERRUPCIONES 190

11.2.2 INTERRUP 192

11.3 UNIDAD DE TIMERS 193

11.3.1 TCON 197

12. PRUEBAS DE FUNCIONAMIENTO Y VALIDACIÓN 199

12.1 PRUEBA 1: TABLAS DE MULTIPLICAR DE 4 X(0-F). HEXADECIMAL 201

12.2 PRUEBA 2: CONTADOR DE EVENTOS 202

12.3 PRUEBA 3: TRANSMISIÓN SERIAL 205

13. CONCLUSIONES 209

14. RECOMENDACIONES 211

BIBLIOGRAFIA 212

ANEXOS 213

Page 13: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

LISTA DE TABLAS

Pág.

Tabla 1. Tabla de verdad del semisumador. 50

Tabla 2. Tabla de verdad del sumador completo. 51

Tabla 3. Control de funcionamiento del ADER_A 55

Tabla 4. Multiplicadores paralelos optimizados por velocidad usando

MAX+plus II. 65

Tabla 5. Multiplicadores paralelos optimizados por área usando MAX+plus

II. 65

Tabla 6. Multiplicadores paralelos optimizados por velocidad usando

QUARTUS II versión 3. 66

Tabla 7. Multiplicadores paralelos optimizados por área usando QUARTUS II

versión 3. 66

Tabla 8. Tabla de verdad del DEC2TO4 73

Tabla 9. Tabla de verdad del DEC2TO4H 74

Tabla 10. Tabla de verdad del DECOD127. 75

Tabla 11. Tabla de verdad del DECINT. 77

Tabla 12. Set de instrucciones y modos de direccionamiento. 104

Tabla 13. Salidas del dispositivo DIROUT y sus funciones. 116

Page 14: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

Tabla 14. Tabla de operaciones aritméticas con su número de estados 165

Tabla 15. Tabla de operaciones lógicas con su número de estados 167

Tabla 16. Tabla de operaciones de transferencia de datos con su número

de estados. 168

Tabla 17. Tabla de operaciones de manipulación de variables booleanas

con su número de estados. 169

Tabla 18. Tabla de operaciones de salto de programa con su número de

estados 170

Page 15: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

LISTA DE FIGURAS

Pág.

Figura 1. Diagrama Bloques general del FLEX51. 41

Figura 2. Bloque de arreglos embebidos. 43

Figura 3. Bloque de arreglos lógicos. 44

Figura 4. Elemento lógico. 45

Figura 5. Modo normal. 46

Figura 6. Modo aritmético. 47

Figura 7. Modo contador ascendente/descendente. 48

Figura 8. Modo contador clareable. 48

Figura 9. Diagrama de lógica del sumador. 50

Figura 10. Diagrama de lógica del sumador completo. 52

Figura 11. Sumador paralelo de 4 bits. 52

Figura 12. Circuito sumador-restador 53

Figura 13.Dispositivo ADER_A sumador-restador 55

Figura 14. Sumario de compilación del dispositivo ADER_A. 56

Figura 15. Dispositivo diseñado con la función MegaWizard Pulg-In

Manager Sumador_A. 56

Figura 16. Diagrama esquemático del ADER_A. 57

Page 16: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

Figura 17. Dispositivo diseñado con la función MegaWizard Pulg-In

Manager Sumagu. 58

Figura 18. Multiplicador serial sin signo. 59

Figura 19. Multiplicador de 4 bits basado en sumadores con acarreo

propagado. 60

Figura 20. Multiplicador de 4 bits basado en sumadores con acarreo

salvado. 61

Figura 21. Multiplicador de Wallace de 4 bits. 61

Figura 22. Celda básica de control. 63

Figura 23. Multiplicador de Booth. 63

Figura 24. Multiplicador de Baugh-Wooley de 4 bits. 64

Figura 25. Dispositivo diseñado con la función MegaWizard Plug-In

Manager Multiplicador. 67

Figura 26. Arreglo del divisor con restauración para N =4 bits. 69

Figura 27. Celda básica para el arreglo del divisor con restauración. 69

Figura 28. Arreglo divisor sin restauración con N =4 bits. 70

Figura 29. Celda básica para el arreglo del divisor sin restauración. 71

Figura 30. Dispositivo diseñado con la función MegaWizard Plug-In

Manager Divisor. 72

Figura 31. Dispositivo diseñado en lenguaje de descripción hardware VHDL

DEC2TO4. 73

Page 17: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

Figura 32. Dispositivo diseñado en lenguaje de descripción hardware VHDL

DEC2TO4H. 74

Figura 33. Dispositivo diseñado en lenguaje de descripción hardware VHDL

DECOD127. 75

Figura 34. Dispositivo diseñado en lenguaje de descripción hardware VHDL

DECINT. 76

Figura 35. Dispositivo diseñado en lenguaje de descripción hardware VHDL

MUX1OF2_8B. 78

Figura 36. Dispositivo diseñado con la función MegaWizard Plug-In

Manager Mu3. 79

Figura 37. Dispositivo diseñado con la función MegaWizard Plug-In

Manager Mu3. 79

Figura 38. Dispositivo diseñado con la función MegaWizard Plug-In

Manager MUXPREES. 80

Figura 39. Dispositivo diseñado en lenguaje de descripción hardware VHDL

FDD. 81

Figura 40. Dispositivo diseñado en lenguaje de descripción hardware VHDL

FDD1. 82

Figura 41. Dispositivo diseñado en lenguaje de descripción hardware VHDL

REG8B. 83

Figura 42. Dispositivo STD_REG8B2. 83

Figura 43. Diagrama esquemático del STD_REG8B2. 84

Page 18: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

Figura 44. Dispositivo STD_REG8B22. 85

Figura 45. Diagrama esquemático del STD_REG8B22. 85

Figura 46. Dispositivo STD_REG8B1. 86

Figura 47. Diagrama esquemático del STD_REG8B1. 86

Figura 48. Dispositivo diseñado en lenguaje de descripción hardware VHDL

REG8BPSW. 87

Figura 49 Dispositivo diseñado en lenguaje de descripción hardware VHDL

REGTCON. 88

Figura 50. Dispositivo diseñado en lenguaje de descripción hardware VHDL

REGSCON. 89

Figura 51. Dispositivo diseñado en lenguaje de descripción hardware VHDL

REG8BTRANS. 89

Figura 52. Dispositivo diseñado en lenguaje de descripción hardware VHDL

REG8BREPC. 90

Figura 53. Dispositivo diseñado en lenguaje de descripción hardware VHDL

CONT_REG8B. 91

Figura 54. Sumario de compilación del dispositivo CONT_REG8B. 91

Figura 55. Dispositivo diseñado en lenguaje de descripción hardware VHDL

REG_SP. 92

Figura 56. Sumario de compilación de dispositivo REG_SP. 92

Figura 57. Dispositivo diseñado con la función MegaWizard Plug-In

Manager PC0. 93

Page 19: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

Figura 58. Dispositivo diseñado con la función MegaWizard Plug-In

Manager PC1. 94

Figura 59. Dispositivo diseñado en lenguaje de descripción hardware VHDL

INC_DEC. 94

Figura 60. Sumario de compilación de dispositivo INC_DEC. 94

Figura 61. Dispositivo diseñado en lenguaje de descripción hardware VHDL

CONTBAUDRATE. 95

Figura 62. Sumario de compilación de dispositivo CONTBAUDRATE. 95

Figura 63. Dispositivo diseñado en lenguaje de descripción hardware VHDL

CONTBAUDRATE1. 96

Figura 64. Sumario de compilación de dispositivo CONTBAUDRATE1. 96

Figura 65. Dispositivo diseñado en lenguaje de descripción hardware VHDL

CONT_REG6B. 97

Figura 66. Sumario de compilación de dispositivo CONT_REG6B. 97

Figura 67. Dispositivo diseñado con la función MegaWizard Plug-In

Manager RDAM. 99

Figura 68. Dispositivo diseñado con la función MegaWizard Plug-In

Manager MEMPROG. 100

Figura 69. Símbolo lógico. 102

Figura 70. Diagrama de Bloques. 103

Figura 71. Set de instrucciones del 8051 parte 1. 105

Figura 72. Set de instrucciones del 8051 parte 2. 106

Page 20: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

Figura 73. Microcontrolador embebido FLEX51. 108

Figura 74. Diagrama de bloques de la unidad de control implementada en

el Flex51. 110

Figura 75. Diagrama de bloques de la unidad generadora de direcciones

AGU. 111

Figura 76. Diagrama de bloques de la unidad aritmética lógica ALU. 113

Figura 77. Diagrama de bloques del microcontrolador embebido Flex51.

114

Figura 78. Diagrama esquemático del Flex51. a)CPU, b)DIROUT, c)IR, d)ALU,

e)AGU, f)Banco de puertos, g)DECOD127, h)Memoria ROM, i)Memoria

RAM, j)Unidad de bits, k)PSW, l)Unidad de temporizadores, m)Unidad

de interrupciones, n)unidad de transmisión serial. 115

Figura 79. Dispositivo diseñado en lenguaje de descripción hardware VHDL

DIROUT. 116

Figura 80. Sumario de compilación del dispositivo DIROUT. 118

Figura 81. Dispositivo diseñado en el entorno grafico de ALTERA

ROMPROG. 119

Figura 82. Esquema de la memoria de programa ROMPROG. 119

Figura 83. Sumario de compilación del dispositivo ROMPROG. 120

Figura 84. Dispositivo diseñado con la función MegaWizard Plug-In

Manager TRI. 120

Figura 85. Dispositivo diseñado en el entorno grafico de ALTERA RAMD.121

Page 21: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

Figura 86. Esquema de la memoria de datos RAMD. 121

Figura 87. Dispositivo diseñado en el entorno grafico de ALTERA BANREG.

122

Figura 88. Esquema del dispositivo de puertos de entrada y salida. 123

Figura 89. Dispositivo diseñado en el entorno grafico de ALTERA PSW. 124

Figura 90. Esquema del dispositivo PSW. 125

Figura 91. Dispositivo diseñado en lenguaje de descripción hardware VHDL

CABLE. 125

Figura 92. Dispositivo diseñado en el entorno grafico de ALTERA

ARREAGU1. 127

Figura 93. Esquema del dispositivo Arreagu1. 128

Figura 94. Dispositivo diseñado en lenguaje de descripción hardware VHDL

AND20. 129

Figura 95. Dispositivo diseñado en el entorno grafico de ALTERA AGU. 131

Figura 96. Dispositivo diseñado en el entorno grafico de ALTERA PC. 132

Figura 97. Esquema del dispositivo PC. 133

Figura 98. Dispositivo diseñado en el entorno grafico de ALTERA DPTR. 134

Figura 99. Esquema del dispositivo DPTR. 134

Figura 100. Dispositivo diseñado en lenguaje de descripción hardware

VHDL REG8BAGU. 135

Figura 101. Dispositivo diseñado en el entorno grafico de ALTERA

ARREAGU2. 136

Page 22: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

Figura 102. Dispositivo diseñado en el entorno grafico de ALTERA

ARREAGU3. 137

Figura 103. Esquema del dispositivo ARREAGU3. 137

Figura 104. Dispositivo diseñado en el entorno grafico de ALTERA

ARREGLOAGU. 138

Figura 105. Esquema del dispositivo ARREGLOAGU. 138

Figura 106. Dispositivo diseñado en lenguaje de descripción hardware

VHDL CABLE2. 139

Figura 107. Esquema del dispositivo AGU. a)PC, b)DPTR, c)Registros

temporales, d)SP, e)sumador, f)REG8BAGU, g)MU3, h)CABLE,

i)ARREAGU2, j)ARREGLOAGU 140

Figura 108. Sumario de compilación del dispositivo AGU. 141

Figura 109. Dispositivo diseñado en el entorno grafico de ALTERA

PRUEBA4. 142

Figura 110. Esquema del dispositivo PRUEBA4. 143

Figura 111. Dispositivo diseñado en el entorno gráfico de Altera ALU. 145

Figura 112. Esquema del dispositivo ALU. a)registros, b) ADER_A, c)UL, d)

Multiplicador, e)divisor, f)U_exch, g)U_corri, h)dirbit, i)Paridad,

j)Multiplexores, k)Decodificadores, l)CJNE, m)Arreglodirecto, n)Incdec.

145

Figura 113. Dispositivo diseñado en lenguaje de descripción hardware

VHDL U_CORRI. 146

Page 23: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

Figura 114. Dispositivo diseñado en lenguaje de descripción hardware

VHDL U_EXCH. 147

Figura 115. Dispositivo diseñado en el entorno gráfico de Altera PARIDAD.

148

Figura 116. Esquema del dispositivo PARIDAD. 148

Figura 117. Dispositivo diseñado en el entorno gráfico de Altera DIRBIT.

149

Figura 118. Esquema del dispositivo DIRBIT. 149

Figura 119. Dispositivo diseñado en lenguaje de descripción hardware

VHDL DIRBITS. 150

Figura 120. Dispositivo diseñado en lenguaje de descripción hardware

VHDL CJNE. 151

Figura 121. Dispositivo diseñado en el entorno gráfico de Altera INCDEC.

151

Figura 122. Esquema del dispositivo INCDEC. 152

Figura 123. Dispositivo diseñado en lenguaje de descripción hardware

VHDL UL. 152

Figura 124. Dispositivo diseñado en el entorno gráfico de Altera

ARREGLODIRECTO. 153

Figura 125. Esquema del dispositivo ARREGLODIRECTO. 153

Figura 126. Bandera de Cero. 154

Figura 127. Bandera de desbordamiento de la división. 154

Page 24: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

Figura 128. Bandera de desbordamiento de la multiplicación. 155

Figura 129. Dispositivo diseñado en el entorno gráfico de Altera LOGALU.

157

Figura 130. Dispositivo diseñado en lenguaje de descripción hardware

VHDL CJNEMUX. 158

Figura 131. Dispositivo diseñado en lenguaje de descripción hardware

VHDL CJNEMUX1. 158

Figura 132. Dispositivo diseñado en lenguaje de descripción hardware

VHDL ARREOV. 159

Figura 133. Sumario de compilación del dispositivo PRUEBA4. 160

Figura 134. Dispositivo diseñado en ele entorno gráfico de Altera

UNIDAD_BITS. 161

Figura 135. Esquema del dispositivo UNIDAD_BITS. 161

Figura 136. Dispositivo diseñado en lenguaje de descripción hardware

VHDL PRUBIT. 162

Figura 137. Dispositivo diseñado en lenguaje de descripción hardware

VHDL ARRECARRY. 163

Figura 138. Dispositivo diseñado en lenguaje de descripción hardware

VHDL SALTOARRE. 163

Figura 139. Sumario de compilación del dispositivo UNIDAD_BITS 164

Figura 140. Dispositivo diseñado en lenguaje descripción hardware VHDL

ARRE_RAMEX. 164

Page 25: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

Figura 141. Dispositivo diseñado en lenguaje de descripción hardware

AHDL CPU. 165

Figura 142. Máquina de estados del FLEX51. 172

Figura 143. Sumario de compilación del microcontrolador FLEX51. 176

Figura 144. Dispositivo diseñado en el entorno grafico de ALTERA

UNIDAD_SERIAL. 178

Figura 145. Dispositivo diseñado en el entorno grafico de ALTERA

TRANSMISION. 179

Figura 146. Esquema del dispositivo TRANSMISION. 179

Figura 147. Dispositivo diseñado en lenguaje de descripción hardware

VHDL BAUDRATE. 181

Figura 148. Dispositivo diseñado en lenguaje de descripción hardware

AHDL MQTX. 181

Figura 149. Dispositivo diseñado en el entorno grafico de ALTERA

RECEPCION. 182

Figura 150. Esquema del dispositivo RECEPCION. 183

Figura 151. Dispositivo diseñado en lenguaje de descripción hardware

AHDL MQRX. 184

Figura 152. Dispositivo diseñado en el entorno grafico de ALTERA

PREESCALER. 184

Figura 153. Esquema del dispositivo PREESCALER. 185

Page 26: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

Figura 154. Dispositivo diseñado en el entorno grafico de ALTERA SCON.

186

Figura 155. Esquema del dispositivo SCON. 186

Figura 156. Esquema del dispositivo UNIDAD_SERIAL. a)Preescaler,

b)Transmisión, c)recepción, d)scon. 187

Figura 157. Sumario de compilación de la unidad serial. 188

Figura 158. Dispositivo diseñado en el entorno grafico de ALTERA

UNI_INTERRUPCIONES. 189

Figura 159. Esquema del dispositivo UNI_INTERRUPCIONES. a)arreglo de

flip-flops 1, b) registro IR, c)registro IP, d)decodificador de

interrupciones 1, e)interrup, f)decodificador de interrupciones 2,

g)arreglo de slip-flops 2. 191

Figura 160. Sumario de compilación del dispositivo UNI_INTERRUPCIONES.

191

Figura 161. Dispositivo diseñado en lenguaje de descripción hardware

AHDL INTERRUP. 192

Figura 162. Dispositivo diseñado en el entorno gráfico de Altera

UNI_TIMER-COUNTER. 193

Figura 163. Esquema del temporizador cero. 195

Figura 164 Esquema del temporizador uno. 195

Figura 165 Esquema de la salida de la unidad timer-counter. a)TCON,

b)TMOD, c)arreglo de salidas. 196

Page 27: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

Figura 166. Sumario de compilación del dispositivo TIMER-COUNTER. 197

Figura 167. Dispositivo diseñado en el entorno gráfico de altera TCON. 197

Figura 168. Esquema del dispositivo TCON. 198

Figura 169. Montaje de dispositivos en ALTERA para pruebas. 200

Figura 170. Tarjeta UP2 y protoboard. 200

Figura 171. Sumario de compilación del FLEX51 con el programa de la

prueba 1. 202

Figura 172. Simulación de la prueba 1 en donde se multiplica 4 h x 2h. 202

Figura 173. Diagrama de bloques de la prueba 2. 203

Figura 174. Sumario de compilación del FLEX51 con el programa de la

prueba 2 204

Figura 175. Simulación de la prueba 2. 204

Figura 176. Circuito eléctrico de los pulsadores. 205

Figura 177. Diagrama de bloques de la prueba 3. 207

Figura 178. Sumario de compilación del FLEX51 con el programa de la

prueba 2 207

Figura 179. Resultado de la prueba 3 en el Hyper Terminal. 207

Figura 180. Circuito RS-232. 208

Figura 181. Circuito eléctrico de los pulsadores. 208

Page 28: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

LISTA DE ANEXOS

Pág.

Anexo A 213

Anexo B 288

Page 29: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

RESUMEN

En este documento se hablará a grandes rasgos lo que es el microcontrolador de

la familia 8051, sus características, su set de instrucciones, los diferentes modos

de direccionamiento, etc.

También se hablar un poco de lo que es el FLEX10K, sus elementos básicos y sus

modos de funcionamiento.

Además se planteará todo el diseño implementado para la elaboración del

microcontrolador embebido FLEX51, cuales son sus características,

especificaciones, que copiará del 8051 y que no, como están diseñados y como

funcionan sus dispositivos internos y cuales dispositivos periféricos se le

implementan.

Finalmente se plantearon una serie de practicas de laboratorios y sus respectivos

resultados.

Page 30: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

30

INTRODUCCIÓN

En la actualidad el gran crecimiento de recursos disponibles en un solo circuito

integrado permite afrontar diseños de una complejidad muy alta, incluso la

instalación de sistemas enteros. Esta solución conocida como SOC (System On a

Chip), busca la minimización de los tiempos de diseño, disminución de costos,

aumento de la velocidad de operación, etc.

Años atrás y aun en la actualidad un proyecto que necesitara un componente

digital especifico, tenia como solución su implementación con lógica digital,

sistemas microprocesadores o arreglos lógico programables como las PAL, GAL,

sistemas a medida entre otros. Hoy en día, dada la popularización de la lógica

programable y más específicamente de los Complex Field-programmable Devices

(CPLDs) y Field-Programmable Gate Arrays (FPGAs), es posible sintetizar estos

diseños complejos, mejorando notablemente la implementación de ellos. Por eso,

en nuestros tiempos es muy común encontrar aplicaciones de la lógica

programable en muchas áreas tales como: microcomputadoras, audio, video,

comunicaciones, tratamiento digital de señales (DSP), equipos médicos, sistema

para medición y telecontrol etc. Los lenguajes de descripción de hardware (HDLs)

surgieron como una solución a la complejidad del diseño digital en grandes

sistemas, debido que los tradicionales esquemas eléctricos eran de difícil manejo.

Page 31: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

31

Este trabajo se enfoca exactamente en este campo, puesto que será embebido un

microcontrolador en una FPGA con muchas de las características del 8051 y

posibilidades de unirse a periféricos para diferentes aplicaciones; estos anexos se

realizan por medio de lógica programable que sintetizaran aun más los diseños

en un futuro.

Este proyecto será uno de los puntos de partida para nuevas investigaciones y

desarrollos por parte de La Universidad Autónoma de Occidente en el área de

electrónica digital, microcontroladores, etc. puesto que será de gran ayuda para

los estudiantes de los programas de Electrónica y Mecatrónica que podrán usarlo,

no preocupándose ahora por el microcontrolador sino por periféricos específicos

de cada aplicación teniendo estos en un mismo encapsulado y disminuyendo así

los tiempos de diseño.

Page 32: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

32

1. OBJETIVO GENERAL

Diseñar e implementar usando VHDL una arquitectura de microcontrolador

compatible con el set de instrucciones del 8051, en una FPGA (FLEX 10K) de

Altera.

1.1 OBJETIVOS ESPECIFICOS

Aprender el funcionamiento del microcontrolador 8051 (su arquitectura,

funcionamiento, periféricos, listado de instrucciones, etc).

Fijar el funcionamiento de los lenguajes de descripción hardware, en nuestro caso

VHDL utilizando la plataforma proporcionada por Altera (MAX+PLUS II 10.1

BASELINE).

Conocer el funcionamiento de la arquitectura de las FPGA’s FLEX 10K de altera y

comprender sus modos de funcionamiento interno, con el fin de tener pautas para

sintetizar en un menor espacio un circuito digital sin disminuir su desempeño en

cuanto a velocidad.

Page 33: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

33

2 . PLANTEAMIENTO DEL PROBLEMA

En la actualidad en el área de diseño de dispositivos se habla del término

codiseño y sistemas embebidos, donde se trabaja a la par, software y hardware,

obteniendo una gran compenetración de entre ambos. Además de estos,

encontramos lo que son diseños On-chip o diseños de sistemas en un solo chip,

en donde podemos observar un gran numero de aplicaciones desarrolladas y en

desarrollo. Aunque se han desarrollado en la universidad unos cuantos trabajos

de este tipo1, la universidad no cuenta con una solución propia con estas

características. Entendiendo como solución propia el diseño de un

microprocesador genérico que se pueda reutilizar para diversas aplicaciones.

Se puede pensar que la solución es adquirir módulos IP (Intellectual Property) de

microprocesadores, pero erramos en esta decisión, puesto que estas soluciones

son bastante costosas en el mercado (varían entre 12 millones y 95 millones de

pesos, dependiendo de la velocidad); por tal motivo se desea realizar un

microcontrolador tipo 8051 buscando el desarrollo de un dispositivo de muy buen

desempeño y a costos relativamente bajos (precio de la tarjeta UP2 + software).

1 Uno ejemplo de este trabajo es la tesis “Implementación de un modulo de sensado y de actuación para el control de nivel de un tanque mediante la técnica de codiseño hardware software”, donde se utiliza como elemento central de proceso un modulo IP 6805 de Motorola descrito en VHDL por Guillermo Jacquenod denominado FLEX6805

Page 34: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

34

En el área de diseño lógico digital la implementación de este tipo de

procesadores es tema de desarrollo, ya que se busca diariamente la forma de

optimizar la velocidad, el tamaño y los costos.

Un inconveniente que se posee al no trabajar con soluciones de este tipo es el

aprovechar parcialmente las características de los microcontroladores usados,

debido a que las aplicaciones no requieren en su mayoría de todos los módulos y

funciones del microcontrolador. Por eso al implementar un microcontrolador en

software, se deja a parte este problema, puesto que los módulos que no se

requieren pueden ser omitidos a la hora de desarrollar nuevas aplicaciones o

añadir al microcontrolador, módulos adicionales que cumplan funciones

específicas para un diseño particular.

Page 35: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

35

3 . JUSTIFICACIÓN

Es importante y cabe decir que el funcionamiento del microcontrolador embebido

es igual que el funcionamiento de un microcontrolador real, pero a diferencia de

este, el microcontrolador embebido posee la ventaja que en una misma pastilla se

pueda integrar los componentes necesarios y las funciones específicamente

necesarias para realizar la aplicación deseada.

Una característica es la programación, ya que es mucho mas sencilla, en donde

se desarrolla un archivo que lee el dispositivo, una vez compilado y programado,

por otra parte para programar el dispositivo real se debe estar borrando la

memoria y el proceso de pruebas es considerablemente mas tardado, sino queda

bien borrada o programada.

Al estudiante poseer un microcontrolador ya desarrollado en una tarjeta como la

UPX10K o UP2, adelanta mucho el proceso de desarrollo nuevas aplicaciones,

puesto que se enfocaría a los periféricos que necesita para la aplicación

especifica. De esta manera obtendríamos un número elevado de nuevas

aplicaciones en pro de la investigación haciendo uso de microprocesadores y

microcontroladores.

Page 36: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

36

Una ventaja de que el microcontrolador sea embebido y no real a la hora de

realizar nuevas aplicaciones es que el estudiante podrá optimizar al máximo sus

diseños, porque no tendrá que desperdiciar algunas de las características del

microcontrolador, puesto que este es hecho en software y puede ser modificado,

usando solo necesario.

Una de las razones de peso para la realización de este proyecto es el precio

comercial de un desarrollo de este tipo, debido a que es realmente elevado, (por

ejemplo la FPGA con Core E8051 cuesta en el mercado $4000 US

aproximadamente $11’600.000 pesos), si miramos un proveedor como ALDEC

notamos que sus valores son aun mas elevados ($33.000 US aproximadamente

95’700.000 pesos). Por tal motivo es bastante rentable la realización de un

dispositivo con estas características, que por el contrario comprarlo. Cabe decir

que el microcontrolador que se diseñará no alcanzará las velocidades en las que

estos otros dispositivos trabajan, puesto que no se compilará en dispositivos tan

robustos y de tan grandes velocidades, pero su funcionamiento será bastante

aceptable.

Además podemos decir que importantes investigaciones se están realizando en la

actualidad entorno a los IP cores por parte de diversas Universidades alrededor

del mundo. A continuación se citarán de tres de ellas: “Diseño de cores-ip para

redes de comunicaciones inalámbricas basadas en ofdm: optimización en área en

la estación base” Investigador Principal: Javier Valls Coquillat. Universidad

Politécnica de Valencia.

Page 37: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

37

“Adaptación del núcleo IP de un procesador tipo M6805 para operar en un en

ambiente multiprocesador y multitarea” Guillermo Jaquenod, Facultad de

Ingeniería, Universidad del Centro de la Provincia de Buenos Aires.

“Diseño de multiplicadores paralelos de 16 bits en FPGAs” Gustavo E. Ordóñez

Fernández, Lewin A. López López, Jaime Velasco Medina.

Siendo la Universidad Autónoma de Occidente impulsadora de grandes

desarrollos, un proyecto con estos enfoques encaja muy bien dentro de visiones

de progreso investigativo.

Page 38: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

38

4 . DISTRIBUCIÓN DEL TRABAJO

En este capítulo se mostrará como está divido el desarrollo del trabajo, y se dará

un pequeño apunte de cada parte.

MICRONTROLADOR, este capítulo es un abre bocas de todo este trabajo, en donde

se encuentra un pequeño resumen de que es un microcontrolador y una

descripción breve del Flex51.

FLEX10K DE ALTERA, este capítulo muestra brevemente los elementos que

Componen la Flex10k de altera y sus modos de funcionamiento.

CIRCUITOS COMBINATORIOS, este capítulo trata acerca de los circuitos

sumadores, multiplicadores, divisores, decodificadores y multiplexores que

existen y cuales se implementan en el Flex51.

REGISTROS Y CONTADORES, este capítulo habla de los dispositivos flip-flops,

registros y contadores implementados en el microcontrolador embebido Flex51.

MEMORIA, en esta parte se habla brevemente de los tipos de memorias que

utiliza el dispositivo flex10k y la manera en que fueron implementadas las

memorias de datos y de programa del microcontrolador Flex51.

Page 39: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

39

DISEÑO DEL FLEX51, en este capítulo se habla de cómo se diseñaron y como

funcionan los bloques funcionales ALU, AGU, CPU.

PERIFERICOS, está sección contiene todo lo concerniente a la información de los

periféricos que se le implementaron al Flex51, como funcionan y cuales son los

tiempos de operación de estos dispositivos.

PRUEBAS DE FUNCIONAMIENTO Y VALIDACIÓN, este capítulo documenta tres

pruebas realizadas con el Flex51 en la tarjeta UP2.

Page 40: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

40

5 . MICROCONTROLADOR

Los microcontroladores poseen internamente una serie de elementos básicos tales

como: la cpu, la alu, la agu,2 registros y diferentes tipos de buses (bus de datos,

bus de direcciones y bus de control). El eje de todo microcontrolador es la cpu, ya

que está se encarga de ejecutar cada orden que se dé al microcontrolador, genera

las señales de control para de los otros componentes tales como la agu, la alu y

los registros funcionen correctamente. Se encarga de orientar los datos, tanto a

procesar como los ya procesados.

Un microcontrolador además debe tener otros dispositivos que estén unidos a él

para su buen funcionamiento: memorias, puertos y una señal de sincronice el

sistema (reloj).

Para la implementación del microcontrolador embebido FLEX51 se tendrá una

unidad de direccionamiento AGU, una unidad aritmético lógica ALU, una máquina

de estados, una unidad de salidas de control de la máquina de estados, el registro

de interpretación de código IR, un bus de datos de 8 bits y un bus de direcciones

de 16 bits. Ver figura 1.

2 Morris Mano, M. INGENIERIA COMPUTACIONAL DISEÑO DEL HARDWARE.

Page 41: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

41

Figura 1. Diagrama Bloques general del FLEX51.

Page 42: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

42

6 . FLEX10K DE ALTERA

6.1 DESCRIPCIÓN GENERAL.

Los FLEX 10K de Altera son los primeros dispositivos PLDs embebidos de la

industria. Basados en elementos reconfigurables CMOS SRAM. Con un máximo de

250000 compuertas implementables, la familia FLEX 10K provee la densidad, la

velocidad, y las características para integrar sistemas enteros, incluyendo buses

múltiples de 32 bits, dentro de un solo dispositivo.

Cada dispositivo FLEX 10K contiene un arreglo embebido para implementar

memoria y funciones lógicas especializadas, y un arreglo lógico para implementar

lógica en general.

6.2 BLOQUE DE ARREGLOS EMBEBIDOS

El EAB es un bloque flexible de RAM con registros con puertos de entrada y salida,

y es usado para implementar mega funciones de arreglo de entrada común. El EAB

es también adecuado para funciones tales como multiplicaciones, vectores

escalares, circuitos de corrección de error, porque es grande y flexible. Estas

funciones pueden ser combinadas en aplicaciones tales como filtros digitales y

microcontroladores. Ver figura 2.

Page 43: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

43

Figura 2. Bloque de arreglos embebidos.

Flex10K Familia de dispositivos embebidos de lógica programable.

6.3 BLOQUE DE ARREGLOS LOGICOS

Cada LAB consiste en ocho LEs, ellos asociados con el carry y la cadena de

cascada, la señal de control del LAB y la interconexión local LAB. Los LABs proveen

la estructura de grano grueso a la arquitectura de la FLEX 10K, facilitando el

enrutamiento eficiente con una utilización óptima del dispositivo y alto

desempeño. Ver figura 3.

Page 44: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

44

Figura 3. Bloque de arreglos lógicos.

Flex10K Familia de dispositivos embebidos de lógica programable

6.4 ELEMENTO LOGICO

Los LE, son la unidad mas pequeña de la arquitectura lógica de la FLEX 10K, tiene

un tamaño compacto que provee una utilización lógica eficiente. Cada LE contiene

una LUT de cuatro entradas, la cual es una función generadora que puede

rápidamente computar algunas funciones de cuatro variables. En adición, cada LE

contiene un flipflop programable con habilitadores sincrónicos, cadena de carry, y

cadena de cascada. Cada LE maneja la interconexión local y la interconexión

FastTrack. Ver figura 4.

Page 45: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

45

Figura 4. Elemento lógico.

Flex10K Familia de dispositivos embebidos de lógica programable

6.5 MODOS DE OPERACIÓN

La FLEX 10K LE puede operar en los siguientes 4 modos:

Modo normal.

Modo aritmético.

Modo contador ascendente/ descendente.

Modo contador clareable.

6.5.1 Modo normal. El modo normal es adecuado generalmente para aplicaciones

lógicas y funciones de decodificación amplias que pueden tomar ventaja de una

cadena de cascada. En modo normal, cuatro entradas de interconexión local LAB y

carry-in son entradas para cuatro entradas LUT (ver figura 5). El compilador

automáticamente selecciona la señal de carry-in o DATA3 como una de las

Page 46: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

46

entradas a la LUT. La salida LUT es combinada con una señal cascade-in a una

cadena de cascada a través de una señal cascade-out.

El registro o la LUT puede manejar la interconexión local y la interconexión

FastTrack al mismo tiempo.

Figura 5. Modo normal.

Flex10K Familia de dispositivos embebidos de lógica programable

6.5.2 Modo aritmético. El modo aritmético ofrece dos LUT de tres entradas que

son ideales para la implementación de sumadores, acumuladores y comparadores.

Una LUT calcula funciones de tres entradas, y la otra genera una salida de carry

(ver figura 6). La primera LUT usa una señal de carry de entrada y dos entradas de

datos de la interconexión local LAB para generar una salida combinacional o

registrada. La segunda LUT usa las mismas tres señales para generar la señal de

carry de salida.

Page 47: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

47

Figura 6. Modo aritmético.

Flex10K Familia de dispositivos embebidos de lógica programable

6.5.3 Modo contador ascendente/descendente. El modo contador

ascendente/descendente ofrece habilitador de conteo, habilitador de reloj, control

sincrónico ascendente/descendente, y opción de carga de datos. Las señales de

control son generadas por las entradas de datos de la interconexión local LAB, la

señal carry de entrada y las salida realimentada del registro programable. El modo

contador ascendente/ descendente usa dos LUT de tres entradas: Una genera el

dato de conteo, y la otra genera el bit de carry rápido. Un multiplexor de 2 a 1

provee una carga sincrónica. El dato también puede ser cargado

asincrónicamente con las señales de control present y clear del registro, sin usar

las LUTs fuentes. Ver figura 7.

Page 48: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

48

Figura 7. Modo contador ascendente/descendente.

Flex10K Familia de dispositivos embebidos de lógica programable.

6.5.4 Modo contador clareable. El modo contador clareable es similar al modo

contador ascendente/ descendente, pero soporta clareo sincrónico en cambio del

control ascendente/ descendente. La función de clareo es sustituida por la señal

cascade de entrada en el modo contador ascendente/ descendente. Usa dos LUTs

de tres entradas: Una genera el dato de conteo, y la otra genera el bit de carry

rápido.

Figura 8. Modo contador clareable.

Flex10K Familia de dispositivos embebidos de lógica programable

Page 49: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

49

7. CIRCUITOS COMBINATORIOS

En este capítulo se hablará de los circuitos combinatorios, tales como circuitos

sumadores, restadores, multiplicadores, divisores y circuitos secuénciales, tales

como decodificadores y multiplexores, en donde se mostrará diferentes opciones

para cada uno, cuales fueron implementados en el microcontrolador Flex51.

7.1 CIRCUITOS ARITMETICOS

Un circuito aritmético es un circuito combinatorio que realiza operaciones

aritméticas tales como suma, resta, multiplicación y división con números binarios

o con números decimales en código binario.

7.1.1 Sumadores. La operación aritmética más simple es la adición de dos dígitos

binarios de cuatro posibles combinaciones. 0 + 0 = 0, 0 + 1 = 1, 1 + 0 = 1 y

1 + 1 = 10.

7.1.1.1 Semisumador. Es un circuito aritmético que genera la suma de dos dígitos

binarios. Posee tanto dos entradas como dos salidas. Su tabla de verdad es la

siguiente (ver tabla 1). X y Y representan las dos entradas, C y S representan el

acarreo y la suma (ver figura 9). Las funciones booleanas de las salidas son:

YXYXYXS ⊕=+=

Page 50: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

50

XYC =

Tabla 1. Tabla de verdad del semisumador.

Entradas Salidas

X Y C S

0 0 0 0

0 1 0 1

1 0 0 1

1 1 1 0

Ingeniería Computacional Diseño del Hardware.

Figura 9. Diagrama de lógica del sumador.

Ingeniería Computacional Diseño del Hardware.

7.1.1.2 Sumador completo. Un sumador completo es un circuito combinatorio

que forma la suma aritmética de tres bits de entrada (Dos entradas que son X y Y,

y el acarreo de la posición significativa inferior anterior Z) y dos bits de salida S y

C (Suma y acarreo). Las funciones booleanas de las salidas son:

Page 51: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

51

XYZZYXZYXZYXS +++=

YZXZXYC ++=

Veamos cual es su tabla de verdad y su diagrama esquemático (ver figura 10).

Tabla 2. Tabla de verdad del sumador completo.

Entradas Salidas

X Y Z C S

0 0 0 0 0

0 0 1 0 1

0 1 0 0 1

0 1 1 1 0

1 0 0 0 1

1 0 1 1 0

1 1 0 1 0

1 1 1 1 1

Ingeniería Computacional Diseño del Hardware.

Page 52: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

52

Figura 10. Diagrama de lógica del sumador completo.

Ingeniería Computacional Diseño del Hardware.

7.1.1.3 Sumador paralelo binario. La suma de dos números binarios de n bits se

puede generar en serie o paralelo. El método de adición serie solo cuenta con un

sumador completo y un dispositivo de almacenamiento para guardar el acarreo de

salida. El sumador paralelo es un circuito digital que consta de circuitos

sumadores completos conectados en cascada, con el acarreo de salida de uno a la

entrada del sumador siguiente (ver figura 11). Un sumador paralelo de n bits

requiere de n sumadores completos conectados en cascada.

Figura 11. Sumador paralelo de 4 bits.

Ingeniería Computacional Diseño del Hardware.

Page 53: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

53

Cuando el sumador se implementa en dispositivos FLEX y es configurada la opción

CARRY CHAIN el sumador requiere tantos LEs como bits de precisión se necesiten

(N), más aun LE para el acarreo de entrada y de salida de la cadena de acarreos, es

decir N+2 LEs.

7.1.1.4 Sumador-restador binario. Las operaciones de suma y resta se pueden

combinar en un circuito con un sumador común. Esta se hace incluyendo una

compuerta OR exclusiva con cada sumador completo. La entrada S controla la

operación a realizar, con S =1 realiza restas y con S =0 realiza sumas. Ver figura

12.

Figura 12. Circuito sumador-restador

Ingeniería Computacional Diseño del Hardware.

Page 54: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

54

Los LEs cuando tienen configurada la opción CARRY CHAIN solo pueden resolver

dos funciones de 3 variables de entrada y el sumador restador requiere 4

entradas, por eso la utilización de recursos es de N bits es de 2N+2 LEs.

7.1.1.5 Lpm_add_sub. La función LPM_ADD_SUB reemplaza todas las otras

funciones de sumadores-restadores, incluyendo algunos dispositivos estándar

tales como: 7480 (sumador completo), 7482 (sumador completo binario de 2

bits), 7483 (sumador completo binario de 4 bits con acarreo rápido), 74183

(sumador dual completo con acarreo salvado), 74283 (sumador completo de 4

bits con acarreo rápido), 74385 (sumador-restador de 4 bits con clareo).

7.1.1.6 Diseño de los sumadores utilizados en el Flex51. Para diseñar los

dispositivos sumadores del FLEX51 se tuvieron en cuenta los sumadores

anteriormente mencionados; pero, se opto por escoger el sumador LPM_ADD_SUB

debido a su gran facilidad de implementación y de cambio en cualquier momento

del desarrollo del proyecto (con la ayuda de la función MegaWizard Plug-In

Manager), mientras que los demás no contaban con estas características, porque

eran muy dispendiosos en sus implementación y muy rígidos. Además es mucho

más fácil la implementación de las banderas de acarreo (carry) y desbordamiento

(overflow) para el caso del sumador ADER_A.

7.1.1.6.1 Ader_a. El dispositivo ADER_A se diseño en el entorno gráfico de

ALTERA y es propio de la ALU, posee dos entradas de datos A y B, cada una de 8

bits, una entrada cin (acarreo de entrada) y dos entradas de control (s0 y s1).

Page 55: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

55

Tiene una salida de datos Q de 8 bits, una salida de acarreo intermedio AC, una

salida de acarreo final Co y una salida de desbordamiento OV (ver figura 13 y

tabla 3). En su interior consta de dos sumadores Sumador_A diseñados con la

función MegaWizard Plug-In Manager conectados en cascada (ver figura 15 y 16) y

controlados por las entradas s0 y s1. El dispositivo ADER_A ejecuta funciones

aritméticas tales como: Suma, Suma con acarreo y resta con préstamo (borrow).

Después de hacer un análisis en el set de instrucciones del microcontrolador 8051

se obtuvo que las entradas s0 y s1 fueran los dos bits menos significativos del

nibble alto del código de instrucción almacenado en el registro IR (bits 5 y 4). Con

la ayuda de este análisis se desarrollo la siguiente tabla que gobernará el

funcionamiento del dispositivo.

Tabla 3. Control de funcionamiento del ADER_A

S1 S0 Operación

0 0 A – B – Cin

0 1 A – B – Cin

1 0 A + B

1 1 A + B + Cin

Figura 13.Dispositivo ADER_A sumador-restador

Page 56: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

56

En la gráfica siguiente (figura 14) se ve el número de pines de entrada y salida que

utiliza el dispositivo en el que se compila, en este caso es el EPF10K70RC240-4.

Utiliza 18 LCs (circuitos lógicos) y 0% de de memoria.

Figura 14. Sumario de compilación del dispositivo ADER_A.

El retardo mas crítico es de 59.2ns dado en la salida Co y proveniente de la

entrada Ci.

Figura 15. Dispositivo diseñado con la función MegaWizard Pulg-In Manager

Sumador_A.

Page 57: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

57

Figura 16. Diagrama esquemático del ADER_A.

La lógica de control del acarreo de entrada que gobierna este dispositivo se

conforma por las compuertas AND de tres entradas, la OR y OR negada y las

entradas S0 y Cin. La entrada S1 se conecta a las entradas de selección de

operación de los dispositivos Sumador_A. Los sumadores-restadores se conectan

en cascada. La tabla muestra las combinaciones de S0 y S1 para elegir las

operaciones, esta tabla se hizo después realizar un análisis en el set de

instrucciones del microcontrolador 8051 y encontrar un patrón en los bits 5 y 4

del código de operación.

7.1.1.6.2 Sumagu. El dispositivo SUMAGU se diseño por medio la función

MegaWizard Plug-In Manager de ALTERA y es propio de la AGU (ver figura 17).

Page 58: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

58

Consta de dos entradas, cada una de 16 bits y una salida también de 16 bits. Este

dispositivo es un simple sumador, y es usado para las instrucciones de salto. El

dato que llega a la entrada B es un dato arreglado, puesto que en la parte alta

todos pueden ser unos o ceros dependiendo hacia donde se ejecute el la salto y la

parte baja corresponde al bus de datos.

Figura 17. Dispositivo diseñado con la función MegaWizard Pulg-In Manager

Sumagu.

7.1.2 Multiplicadores. La multiplicación de números binarios se realiza en la

misma forma que con números decimales. El multiplicando se multiplica por cada

bit del multiplicador, empezando desde el bit menos significativo. Cada

multiplicación de esta forma arroja un producto parcial. Los productos parciales

sucesivos se desplazan una posición a la izquierda. El producto final es obtenido

de la suma de los productos parciales.

7.1.2.1 Multiplicador serie. El multiplicador serial es útil cuando para realizar una

operación de multiplicación, el multiplicador MR es conocido en forma paralela,

en tanto el multiplicando MO ingresa de manera serial (ver figura 18). El producto

Page 59: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

59

de cada bit de MR por MO es realizado usando N funciones AND. El resultado de

cada producto parcial es sumado, mediante una cadena de sumadores seriales, al

resultado acumulado hasta entonces y desplazado a la derecha. La primera etapa

no recibe acarreos anteriores, por eso se usa un FFD. La salida del sumador serial

menos significativo RES corresponde al producto. Es necesario generar 2xN-1

ciclos de reloj, durante los N primeros se ingresa MO (Primero el menos

significativo) y después 0 para limpiar las etapas de acarreo salvado. Además todo

el circuito requiere 2N-1 LEs.

Figura 18. Multiplicador serial sin signo.

7.1.2.2 Multiplicador paralelo de n bits basado en arreglos de sumadores con

acarreo propagado. El multiplicador basado en un arreglo de sumadores de

acarreo propagado es una primera aproximación a la implementación del

algoritmo de sumas sucesivas y desplazamientos, tiene como característica

transferir la propagación del acarreo a la siguiente suma parcial en la fila hasta

terminar los productos de esa fila, en donde el acarreo generado se propaga al

Page 60: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

60

último producto de la fila siguiente de productos parciales. Esto continua hasta

que la multiplicación esta realizada. El bloque principal es un sumador completo

de un bit. Veamos la siguiente figura.

Figura 19. Multiplicador de 4 bits basado en sumadores con acarreo propagado.

Curso diseño de sistemas digitales avanzados

7.1.2.3 Multiplicador paralelo de n bits basado en arreglos de sumadores con

acarreo salvado. También conocido como el multiplicador de Braun, es una

segunda aproximación para implementar el algoritmo de sumas sucesivas y

desplazamientos. Lo que se pretende es reducir el retardo de cada suma, para que

la operación se realice más rápido. Este multiplicador permite salvar el acarreo

generado en las sumas parciales y transferirlo como acarreo de entrada a la

siguiente suma parcial de la siguiente fila de sumas parciales. Veamos un ejemplo

en la siguiente figura..

Page 61: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

61

Figura 20. Multiplicador de 4 bits basado en sumadores con acarreo salvado.

Curso diseño de sistemas digitales avanzados

7.1.2.4 Multiplicador de Wallace. Es una variante del algoritmo de sumas

sucesivas y desplazamientos, donde se usan bloques de sumadores completos

con tres entradas recibiendo productos y generando un termino que se agrega en

otro termino suma. Veamos un ejemplo en la siguiente figura.

Figura 21. Multiplicador de Wallace de 4 bits.

Diseño de multiplicadores paralelos de 16 bits en FPGAs.

Page 62: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

62

7.1.2.5 Multiplicador Parametrizado: Megafunción Lpm_mult. La megafunción

LPM_MULT reemplaza algunas de las funciones de multiplicación anteriores, e

incluyendo algunos dispositivos estándar tales como: 7497 (multiplicador

síncrono de 6 bits), 74261 (multiplicador paralelo binario de 2 bits), 74284

(multiplicador paralelo binario de 4 bits por 4 bits y resultado los 4 bits más

altos), 74285 (multiplicador paralelo binario de 4 bits por 4 bits y resultado los 4

bits más bajos).

7.1.2.6 Multiplicador paralelo basado en el algoritmo de Booth Este algoritmo

presenta dos ventajas, una ventaja es la unificación de los multiplicadores tanto

de números binarios positivos como de negativos de n bits; y la otra es que logra

cierta eficacia con respecto al número de productos parciales generados, cuando

tiene bloques grandes de unos. Veamos la estructura básica en la figura 22 y el

multiplicador como tal en la figura 23.

Este algoritmo se basa en que existen varias formas calcular un producto usando

la suma y resta, por tal motivo si se tiene una ALU que pueda sumar o restar se

podría obtener el mismo resultado.

Page 63: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

63

Figura 22. Celda básica de control.

Diseño de multiplicadores paralelos de 16 bits en FPGAs.

Figura 23. Multiplicador de Booth.

Diseño de multiplicadores paralelos de 16 bits en FPGAs.

7.1.2.7 Multiplicador de Baugh-Wooley. Este multiplicador permite realizar

multiplicaciones de números con signo utilizando la representación de

Page 64: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

64

complemento a dos. Se basa en arreglos de sumadores de acarreo salvado. Ver

figura 24.

Figura 24. Multiplicador de Baugh-Wooley de 4 bits.

Diseño de multiplicadores paralelos de 16 bits en FPGAs.

7.1.2.8 Resultados de optimización de multiplicadores paralelos. En esta sección,

se muestran los resultados de simulación para los diferentes multiplicadores

paralelos obtenidos en trabajos desarrollados por el grupo de Bioelectrónica y

Nanoelectrónica de la Universidad del Valle; el dispositivo utilizado es el

EPF10K70RC240-4 de la tarjeta UP2 de Altera. Veamos las tablas 4, 5, 6 y 7.

Page 65: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

65

Tabla 4. Multiplicadores paralelos optimizados por velocidad usando MAX+plus II.

Diseño de multiplicadores paralelos de 16 bits en FPGAs.

Tabla 5. Multiplicadores paralelos optimizados por área usando MAX+plus II.

Diseño de multiplicadores paralelos de 16 bits en FPGAs.

Page 66: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

66

Tabla 6. Multiplicadores paralelos optimizados por velocidad usando QUARTUS II

versión 3.

Diseño de multiplicadores paralelos de 16 bits en FPGAs.

Tabla 7. Multiplicadores paralelos optimizados por área usando QUARTUS II

versión 3.

Diseño de multiplicadores paralelos de 16 bits en FPGAs.

Se puede ver los multiplicadores más rápidos como los el desarrollado por Mega

Función y el multiplicador Pipeline son los que necesitan mayores recursos y

Page 67: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

67

generan más potencia, mientras que multiplicadores como el de Wallace y el de

carry salvado necesitan mucho menos recursos, pero no igualan las velocidades .

7.1.2.9 Diseño del multiplicador del Flex51. Para diseñar el dispositivo

multiplicador del FLEX51 se tuvo en cuenta la velocidad de funcionamiento, la

facilidad de implementación, cambios y prueba de errores. Por tal motivo se opto

por diseñar el multiplicador con ayuda de la función MegaWizard Plug-In Manager

de ALTERA (ver figura 25), ya que el dispositivo sería rápido en su funcionamiento

por ser un dispositivo parametrizado y de entradas paralelas; es mucho más fácil

de implementar que uno de los multiplicadores paralelos antes mencionados.

Aunque el multiplicador serial ocupaba mucho menos espacio en la FLEX10K

necesitaba muchos ciclos de reloj para su funcionamiento y otros dispositivos que

le ayudasen a entrar los datos serialmente y a sacarlos paralelo. El dispositivo

multiplicador consta de dos entradas de 8 bits y una salida de 16 bits.

Figura 25. Dispositivo diseñado con la función MegaWizard Plug-In Manager

Multiplicador.

Page 68: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

68

7.1.3 Divisores. En esta sección se hablará de algunas de las arquitecturas de

divisores que existen y por cual de ellos se opto.

7.1.3.1 Divisor basado en restas y desplazamientos. La división binaria más

simple está basada en el método tradicional de restas y desplazamientos, la idea

básica es comparar el dividendo reducido con los múltiplos del divisor para

determinar cuál múltiplo del divisor desplazado se restará.

7.1.3.2 Divisor con restauración de 2N-N bits. Su algoritmo es el siguiente, dados

dos enteros N y D tal que N < D, existirán dos enteros únicos Q y R que satisfacen

la ecuación:

RBQN +=2

La propiedad que fundamenta la utilización de este algoritmo es el reflejo de la

propiedad N < D al residuo y divisor (R < D), Figura 26. El circuito es

implementado a partir de un restador completo y un multiplexor de 2 a 1(Figura

27).

Page 69: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

69

Figura 26. Arreglo del divisor con restauración para N =4 bits.

Curso diseño de sistemas digitales avanzados

Figura 27. Celda básica para el arreglo del divisor con restauración.

Curso diseño de sistemas digitales avanzados

Page 70: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

70

7.1.3.3 Divisor sin restauración 2N-N bits. Dados dos enteros N y D tal que –D ≤

N < D, entonces existirán dos enteros únicos Q y R que satisfacen la ecuación:

RBBQDN ++=+ 222

La principal condición para este algoritmo es que los dos números deben ser

enteros positivos (0 ≤ N < D) (ver figura 28). La celda básica es un sumador-

restador con la señal C como señal de control del tipo de operación. Ver figura 29.

Figura 28. Arreglo divisor sin restauración con N =4 bits.

Curso diseño de sistemas digitales avanzados

Page 71: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

71

Figura 29. Celda básica para el arreglo del divisor sin restauración.

Curso diseño de sistemas digitales avanzados

7.1.3.4 Lpm_divide. La Mega función LPM_DIVIDE toma un numerador y un

denominador y computa un cociente y un residuo.

7.1.3.5 Diseño del divisor del Flex51. Para diseñar el dispositivo divisor del

FLEX51 se tuvo en cuenta la velocidad de funcionamiento, la facilidad de

implementación, cambios y prueba de errores. Por tal motivo se opto por diseñar

el divisor con ayuda de la función MegaWizard Plug-In Manager de ALTERA, ya

que el dispositivo sería rápido en su funcionamiento y más fácil de implementar

que uno de los divisores antes mencionados, debido a que solo es parametrizar

uno valores necesarios. Los divisores no escogidos son muy dispendiosos y de

muchísimo cuidado, ya que por ser diseños de muchos dispositivos en su interior

al menor descuido se tendría resultados no esperados, no obstante el diseño de la

manera elegida es un poco más seguro. El divisor consta de dos entradas de 8

bits (numerador y denominador) y dos salidas de 8bits (cociente y residuo). Ver

figura 30.

Page 72: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

72

Figura 30. Dispositivo diseñado con la función MegaWizard Plug-In Manager

Divisor.

7.2 DECODIFICADORES

Las cantidades discretas de información se representan con códigos binarios. Un

decodificador es un circuito combinatorio que convierte información binaria de n

entradas codificadas a un máximo de n2 salidas únicas. Todos los

decodificadores que se utilizaron el FLEX51 fueron desarrollados en lenguaje

VHDL, debido la facilidad de su diseño, dado a que para todos los casos un

decodificador de tipo estándar hubiera sido muy grande o muy pequeño, no

obteniendo así un diseño óptimo.

7.2.1Dec2to4. Este dispositivo desarrollado en VHDL es un decodificador de 2 a 4

con señal de habilitación (ver figura 31). Consta de una entrada de control de 2

bits S[1..0] y una entrada de habilitación E; una salida de 4 bits D[3..0]. El

dispositivo DEC2TO4 se usa en la ALU y en la AGU (más adelante se mostrará que

función especifica cumple en dichas unidades). Para ver su código referirse al

anexo A.

Page 73: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

73

Figura 31. Dispositivo diseñado en lenguaje de descripción hardware VHDL

DEC2TO4.

Su tabla de verdad es la siguiente:

Tabla 8. Tabla de verdad del DEC2TO4

E S1 S0 D[3..0]

0 0 0 0000

0 0 1 0000

0 1 0 0000

0 1 1 0000

1 0 0 0001

1 0 1 0010

1 1 0 0100

1 1 1 1000

7.2.2 Dec2to4h. Este dispositivo desarrollado en VHDL es un decodificador de 2 a

4 sin señal de habilitación (ver figura 32). Consta de una entrada de control de 2

bits S[1..0] y una salida de 4 bits D[3..0]. El dispositivo DEC2TO4H se usa en la

AGU (más adelante se mostrará que función especifica cumple en dicha unidad).

Para ver su código referirse al anexo A.

Page 74: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

74

Figura 32. Dispositivo diseñado en lenguaje de descripción hardware VHDL

DEC2TO4H.

Su tabla de verdad es la siguiente:

Tabla 9. Tabla de verdad del DEC2TO4H

S1 S0 D[3..0]

0 0 0001

0 1 0010

1 0 0100

1 1 1000

7.2.3 Decod127. Este dispositivo desarrollado en VHDL es un decodificador de 8 a

21 sin señal de habilitación. Consta de una entrada de control de 8 bits S[7..0] y

una salida de 21 bits D[20..0] (ver figura 33). El dispositivo DECOD127 es el

decodificador de la zona de registros de funciones especiales, su entrada proviene

de la parte baja del bus de direcciones. Para ver su código referirse al anexo A.

Page 75: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

75

Figura 33. Dispositivo diseñado en lenguaje de descripción hardware VHDL

DECOD127.

Su tabla de verdad es la siguiente:

Tabla 10. Tabla de verdad del DECOD127.

SEL[7..0] S[20..0]

11100000 000000000000000000001

11110000 000000000000000000010

10000011 000000000000000000100

10000010 000000000000000001000

10101000 000000000000000010000

10111000 000000000000000100000

10000000 000000000000001000000

10010000 000000000000010000000

10100000 000000000000100000000

10110000 000000000001000000000

11010000 000000000010000000000

10011001 000000000100000000000

10011000 000000001000000000000

Page 76: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

76

10000001 000000010000000000000

10001000 000000100000000000000

10001100 000001000000000000000

10001101 000010000000000000000

10001010 000100000000000000000

10001011 001000000000000000000

10001001 010000000000000000000

10010111 100000000000000000000

Para cualquier otra opción. 000000000000000000000

7.2.4 Decint. Este dispositivo desarrollado en VHDL es un decodificador de 5 a 4

con señal de clareo y salida en nivel bajo (ver figura 34). Consta de una entrada de

control de 5 bits S[5..0] y una salida de 4 bits D[4..0]. El dispositivo DECINT es un

decodificador que cumple unas funciones de selección muy especiales y es

utilizado en la unidad de interrupciones (más adelante se mostrará que función

especifica cumple en dicha unidad).. Para ver su código referirse al anexo A.

Figura 34. Dispositivo diseñado en lenguaje de descripción hardware VHDL

DECINT.

Page 77: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

77

Su tabla de verdad es la siguiente:

Tabla 11. Tabla de verdad del DECINT.

C S[5..0] D[3..0]

0 000000 11111

0 000011 11111

0 001011 11111

0 010011 11111

0 011011 11111

0 100011 11111

1 000000 11111

1 000011 11110

1 001011 11101

1 010011 11011

1 011011 10111

1 100011 01111

1 Para cualquier otra opcion 11111

7.3 MULTIPLEXORES

Un multiplexor es un circuito combinatorio que selecciona información binaria de

una de muchas líneas de entrada y la dirige a una sola línea de salida. La selección

una de entrada en particular es controlada por un conjunto de variables de

selección. Normalmente hay n2 líneas de entrada y n variables de selección cuyas

combinaciones de bits determinan que entrada se selecciona. Los multiplexores

Page 78: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

78

que se utilizan en el FLEX51 fueron desarrollados de dos maneras diferentes,

unos se diseñaron en lenguaje VHDL en editor de ALTERA y otros se diseñaron

con la ayuda de la función MegaWizard Pulg-In Manager de ALTERA.

7.3.1 Mux1of2_8b. Este dispositivo desarrollado en VHDL es un multiplexor que

consta de una entrada de control de S, dos entradas de datos A y B de 8 bits y una

salida Q de 8 bits (ver figura 35). El dispositivo MUX1OF2_8B se usa en la ALU

(más adelante se mostrará que función especifica cumple en dicha unidad).. Para

ver su código referirse al anexo A.

Figura 35. Dispositivo diseñado en lenguaje de descripción hardware VHDL

MUX1OF2_8B.

7.3.2 Mu3. Este dispositivo se desarrolló con ayuda de la función MegaWizard

Plug-In Manager de ALTERA. Es un multiplexor que consta de una entrada de

control de Sel de 2 bits, cuatro entradas de datos de 8 bits y una salida de datos

de 8 bits. El dispositivo MU3 se usa en la AGU (más adelante se mostrará que

función especifica cumple en dicha unidad). Se desarrolló con ayuda de esta

función por su facilidad de diseño y adaptación a cambios.

Page 79: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

79

Figura 36. Dispositivo diseñado con la función MegaWizard Plug-In Manager Mu3.

7.3.3 Mbit. Este dispositivo se desarrolló con ayuda de la función MegaWizard

Plug-In Manager de ALTERA. Es un multiplexor que consta de una entrada de

control SEL de 1 bit, dos entradas de datos de 1 bit y una salida de datos de 1 bit.

El dispositivo MBIT se usa en la Unidad de Temporizadores (más adelante se

mostrará que función especifica cumple en dicha unidad). Se desarrolló con ayuda

de esta función por su facilidad de diseño y adaptación a cambios.

Figura 37. Dispositivo diseñado con la función MegaWizard Plug-In Manager Mu3.

7.3.4 MUXPREES. Este dispositivo se desarrolló con ayuda de la función

MegaWizard Plug-In Manager de ALTERA. Es un multiplexor que consta de una

entrada de control de Sel de 1 bit, siete entradas de datos de 1 bit y una salida de

Page 80: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

80

datos de 1 bit. El dispositivo MUXPREES se usa en el dispositivo PREESCALER (más

adelante se mostrará que función especifica cumple en dicha unidad).

Figura 38. Dispositivo diseñado con la función MegaWizard Plug-In Manager

MUXPREES.

Page 81: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

81

8. REGISTROS Y CONTADORES

A continuación veremos los dispositivos slip-flops implementados en el

microcontrolador embebido FLEX51.

8.1 FLIP-FLOPS

Los flip-flops son fundamentales porque, en su ausencia, el circuito tan solo sería

un circuito netamente combinatorio. Un circuito con flip-flops se considera un

circuito secuencial. En el FLEX51 se puede observar el diseño de dos flip-flops

síncronos.

8.1.1 Ffd. Flip-flop síncrono diseñado en lenguaje de descripción hardware VHDL,

es un flip-flop de transición de alto a bajo, con entrada de clareo (ver figura 39).

Se usa en la unidad de interrupciones (más adelante se mostrará que función

especifica cumple en dicha unidad). Para ver su código referirse al anexo A.

Figura 39. Dispositivo diseñado en lenguaje de descripción hardware VHDL FDD.

Page 82: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

82

8.1.2 Ffd1. Flip-flop síncrono diseñado en lenguaje de descripción hardware

VHDL, es un flip-flop de transición de bajo a alto, con entrada de clareo (ver

figura 40). Se usa en la unidad de interrupciones (más adelante se mostrará que

función especifica cumple en dicha unidad). Para ver su código referirse al anexo

A.

Figura 40. Dispositivo diseñado en lenguaje de descripción hardware VHDL FDD1.

8.2 REGISTROS

Un registro es un grupo de flip-flops, cada uno de los flip-flops es capaz de

almacenar un bit de información. Un registro de n bits tiene un grupo de n flip-

flops y puede almacenar cualquier información binaria de n bits.. A continuación

veremos los registros que se implementaron el diseño del FLEX51.

8.2.1 Reg8b. Este dispositivo fue diseñado en VHDL y es el registro más básico

del FLEX51, además es el punto de partida de varios otros dispositivos

(std_reg8b22, STD_REG8B1 y std_reg8b2) (ver figura 41). Consta una entrada de

reloj, una de carga L de 1 bit, una de clareo C de 1 bit y 1 de datos D de 8 bits.

Tiene una salida Q de 8 bits. Este dispositivo es usado en la ALU, la AGU, BANREG

y es justamente el registro usado para hacer de registro IR (más adelante se

Page 83: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

83

mostrará que función especifica cumple en dichas unidades). Para ver su código

referirse al anexo A.

Figura 41. Dispositivo diseñado en lenguaje de descripción hardware VHDL

REG8B.

8.2.2 Std_regb8b2. El dispositivo STD_REG8B2 se diseño en el entorno gráfico de

ALTERA y es usado dentro del dispositivo BANREG y la Unidad AGU (en la sección

10 se presentará su funcionamiento). Posee cuatro entradas de 1 bit (una entrada

de carga de dato SLOAD, una entrada de clareo SCLR, una entrada de reloj CLK y

una entrada de habilitación de salida OC), una entrada de D de 8 bits y una salida

Q de 8 bits. La entrada OC habilita el dispositivo tri-estados que se tiene en la

salida dejando así colocar datos en el bus. En su interior consta de registro REG8B

y un dispositivo TRI. Ver figura 42 y 43.

Figura 42. Dispositivo STD_REG8B2.

Page 84: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

84

Figura 43. Diagrama esquemático del STD_REG8B2.

Este dispositivo es un arreglo del registro REG8B, puesto que se adicionó un

dispositivo TRI, para hacer que la salida sea tri-estados y puede ser conectada al

bus.

8.2.3 Std_reg8b22. El dispositivo STD_REG8B22 se diseño en el entorno gráfico de

ALTERA y es usado dentro de la Unidad ALU, Unidad de interrupciones y Unidad

de temporizadores (más adelante se mostrará que función especifica cumple en

dichas unidades). Posee cuatro entradas de 1 bit (una entrada de carga de dato

SLOAD, una entrada de clareo SCLR, una entrada de reloj CLK y una entrada de

habilitación de salida OC), una entrada de D de 8 bits y dos salidas Q y Q1 de 8

bits. La entrada OC habilita el dispositivo tri-estados que se tiene en la salida Q

dejando así colocar datos en el bus de Datos, la salida Q1 no posee dispositivos

tri-estados. En su interior consta de un registro REG8B y un dispositivo TRI. Ver

figura 44 y 45.

Page 85: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

85

Figura 44. Dispositivo STD_REG8B22.

Figura 45. Diagrama esquemático del STD_REG8B22.

La función de este dispositivo es proveer una salida tri-estados para ser

conectada al bus de datos y una salida normal para ser utiliza en distintas

operaciones donde se necesite tener el dato sin requerir del bus.

8.2.4 Std_reg8b1. El dispositivo STD_REG8B1 se diseño en el entorno gráfico de

ALTERA y es usado dentro de la Unidad AGU. Posee cinco entradas de 1 bit (una

entrada de carga de dato SLOAD, una entrada de clareo SCLR, una entrada de reloj

CLK, dos entradas de habilitación de salida OC y ETL), una entrada D de 8 bits y

dos salidas Q y TMPLDATO de 8 bits. La entrada OC habilita el dispositivo tri-

Page 86: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

86

estados (TRI) que se tiene en la salida Q dejando así colocar datos en el bus de

direcciones en la parte baja y la entrada ETL habilita el dispositivo tri-estados

(TRI) en la salida TMPLDATO dejando así colocar datos en el bus de datos, este

registro es justamente el registro temporal bajo de la AGU. En su interior consta

de registro REG8B y dos dispositivos TRI. Ver figura 46 y 47.

Figura 46. Dispositivo STD_REG8B1.

Figura 47. Diagrama esquemático del STD_REG8B1.

Page 87: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

87

Este dispositivo es un arreglo del registro REG8B, puesto que se adicionaron dos

dispositivos TRI, para hacer que las salidas sean tri-estados y puede ser

conectada al bus de direcciones y de datos.

8.2.5 Reg8bpsw. El dispositivo REG8BPSW se diseño en VHDL y forma parte de un

dispositivo llamado PSW, que veremos en el capitulo 10 con detenimiento. Cuenta

con once entradas de 1 bit (una entrada de clareo CL, una entrada de reloj CLK,

una entrada de carga de datos L, una entrada de paridad P, acarreo C, acarreo

intermedio AC, desbordamiento OV y sus respectivas entradas de carga LP, LC,

LAC, LOV), dos entradas D y R de 8 bits (D es la entrada de datos y R una entrada

de retroalimentación). Tiene una salida Q de 8 bits. Ver figura 48. Para ver su

código referirse al anexo A.

Figura 48. Dispositivo diseñado en lenguaje de descripción hardware VHDL

REG8BPSW.

8.2.6 Regtcon. Este dispositivo se diseño en VHDL y forma parte de un dispositivo

llamado TCON, que veremos con detenimiento en el capitulo 10. Tiene siete

Page 88: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

88

entradas de 1 bit (una entrada de carga L, una entrada de clareo C, una entrada de

reloj CLK, una entrada de la bandera de interrupción del temporizador 0, una

entrada de la bandera de interrupción del temporizador 1, una entrada de la

bandera de interrupción externa 0 y una entrada de la bandera de interrupción

externa 1), dos entradas D y R de 8 bits (D es la entra de datos y R la entrada de

retroalimentación). Tiene una salida Q de 8 bits. Ver figura 49. Para ver su código

referirse al anexo A.

Figura 49 Dispositivo diseñado en lenguaje de descripción hardware VHDL

REGTCON.

8.2.7 Regscon. Este dispositivo se diseño en VHDL y forma parte de un dispositivo

llamado SCON, que veremos con detenimiento en el capitulo 10. Tiene cinco

entradas de 1 bit (una entrada de carga L, una entrada de clareo C, una entrada de

reloj CLK, una entrada de la bandera de interrupción de transmisión serial TI y una

entrada de la bandera de interrupción de recepción serial RI), dos entradas D y R

de 8 bits (D es la entra de datos y R la entrada de retroalimentación). Tiene una

salida Q de 8 bits. Ver figura 50. Para ver su código referirse al anexo A.

Page 89: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

89

Figura 50. Dispositivo diseñado en lenguaje de descripción hardware VHDL

REGSCON.

8.2.8 Reg8btrans. Este dispositivo se diseño en VHDL y forma parte de un

dispositivo llamado TRASMISION, que veremos más adelante. Tiene tres entradas

de 1 bit (una entrada de carga L, una entrada de corrimiento E, una entrada de

reloj CLK, una entradas de datos D 8 bits. Tiene una salida OU de 1 bit para la

transmisión serial (ver figura 51). La carga de los datos es asíncrona y el

desplazamiento es sincrono, esto se debe a que no utiliza el reloj global, sino una

señal que proviene del dispositivo generador de rata de baudio BAUDRATE que

posee una frecuencia diferente. Para ver su código referirse al anexo A.

Figura 51. Dispositivo diseñado en lenguaje de descripción hardware VHDL

REG8BTRANS.

Page 90: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

90

8.2.9 Reg8brepc. Este dispositivo se diseño en VHDL totalmente sincrono y forma

parte de un dispositivo llamado RECEPCION, que veremos más adelante. Tiene

tres entradas de 1 bit (una entrada de datos seriales INT, una entrada de

corrimiento E, una entrada de reloj CLK. Tiene una salida Q de 10 bits para la

transmisión serial (ver figura 52). No utiliza el reloj global, sino la señal que

proviene del dispositivo PREESCALER, la señal de corrimiento la da la salida del

BAUDRATE. Para ver su código referirse al anexo A.

Figura 52. Dispositivo diseñado en lenguaje de descripción hardware VHDL

REG8BREPC.

8.3 CONTADORES

Los contadores, son máquinas de estado sincronas. Poseen un total de n2

estados. Donde n es el número de bits en su salida y el número de flip-flops de

contador. El contador recorrerá cada de sus estados en cada pulso de reloj.

8.3.1 Cont_reg8b. Este dispositivo fue desarrollado en VHDL, es un contador que

lo encontramos en los dispositivos PC y DPTR. Consta de una entrada de datos A

de 8 bits, una entrada de carga de datos L, una entrada de clareo C, una entrada

de habilitación de conteo E y una entrada de reloj CLK. Tiene una salida de datos

Page 91: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

91

Q de 8 bits y una salida de desbordamiento M. Ver figura 53. Para ver su código

referirse al anexo A.

Figura 53. Dispositivo diseñado en lenguaje de descripción hardware VHDL

CONT_REG8B.

Figura 54. Sumario de compilación del dispositivo CONT_REG8B.

La frecuencia máxima de este dispositivo compilado en un EPF10K70RC240-4 es

125MHz, con un retardo máximo de 23.4ns en la salida M.

8.3.2 Reg_sp. Este dispositivo fue desarrollado en VHDL, es el registro SP de la

zona de registros de funciones especiales; pero, por su comportamiento dentro

del FLEX51 se catalogó como contador; lo encontramos dentro de la unidad AGU.

Consta de una entrada de datos A de 8 bits, una entrada de carga de datos L, una

entrada de clareo C, una entrada de habilitación de conteo E, una entrada de

Page 92: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

92

selección de operación S (incremento con S =0 y decremento con S =1) y una

entrada de reloj CLK. Tiene una salida de datos Q de 8 bits. Ver figura 55. Para ver

su código referirse al anexo A.

Figura 55. Dispositivo diseñado en lenguaje de descripción hardware VHDL

REG_SP.

Figura 56. Sumario de compilación de dispositivo REG_SP.

8.3.3 Pc0. Este dispositivo contador fue diseñado con ayuda la función

MegaWizard Plug-In Manager de ALTERA. PC0 es el contador que hace las veces

de registro TL0 y TL1 de la zona de registros de funciones especiales y lo

encontramos en la Unidad de temporizadores. Consta de cuatro entradas de 1 bit

(una entrada de clareo SCLR, una entrada de carga SLOAD, una entrada de reloj

CLK y una entrada de habilitador de conteo cnt_en) y una entrada de datos de 8

Page 93: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

93

bits. Tiene una salida desbordamiento cout de 1 bit y una de datos de 8 bits (ver

figura 57).

Figura 57. Dispositivo diseñado con la función MegaWizard Plug-In Manager PC0.

8.3.4 Pc1. Este dispositivo contador fue diseñado con ayuda la función

MegaWizard Plug-In Manager de ALTERA. PC1 es el contador que hace las veces

de registro TH0 y TH1 de la zona de registros de funciones especiales y lo

encontramos en la Unidad de temporizadores. Consta de cinco entradas de 1 bit

(una entrada de clareo SCLR, una entrada de carga SLOAD, una entrada de reloj

CLK, una entrada de acarreo Cin y una entrada de habilitador de conteo cnt_en) y

una entrada de datos de 8 bits. Tiene una salida desbordamiento cout de 1 bit y

una de datos de 8 bits (ver figura 58).

Page 94: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

94

Figura 58. Dispositivo diseñado con la función MegaWizard Plug-In Manager PC1.

8.3.5 Inc_dec. Este contador se encuentra dentro del dispositivo de incremento y

decremento de la unidad ALU. Fue desarrollado en lenguaje VHDL. Tiene una

entrada de datos A de 8 bits, una entrada de selección de operación S y una salida

Q de 8 bits (ver figura 59). Para ver el sumario de compilación ver figura 60 y para

ver su código referirse al anexo A.

Figura 59. Dispositivo diseñado en lenguaje de descripción hardware VHDL

INC_DEC.

Figura 60. Sumario de compilación de dispositivo INC_DEC.

Page 95: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

95

Cuenta con un retardo máximo de 25.6ns.

8.3.6 Contbaudrate. Este contador se encuentra dentro del dispositivo

TRANSMISION de la unidad de transmisión serial. Fue desarrollado en lenguaje

VHDL debido a que necesitaba cumplir unas condiciones que uno parametrizado

no podía cumplir. Tiene una entrada de datos A de 1 bit, una entrada de

habilitación de conteo E, una entrada de clareo C asíncrono, una entrada de reloj

CLK y una salida M de 1 bits (ver figura 61). Este contador tiene un valor

predeterminado “1011” en su código para que cuando llegue a él se reinicie el

conteo y se ponga en alto la salida de M. Para ver el sumario de compilación ver

figura 62 y para ver su código referirse al anexo A.

Figura 61. Dispositivo diseñado en lenguaje de descripción hardware VHDL

CONTBAUDRATE.

Figura 62. Sumario de compilación de dispositivo CONTBAUDRATE.

Page 96: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

96

La frecuencia máxima de este dispositivo compilado en un EPF10K70RC240-4 es

106.38MHz, con un retardo máximo de 19.3ns.

8.3.7 Contbaudrate1. Este contador se encuentra dentro del dispositivo

RECEPCION de la unidad de transmisión serial. Fue desarrollado en lenguaje VHDL

debido a que necesitaba cumplir unas condiciones que uno parametrizado no

podía cumplir. Tiene una entrada de datos A de 1 bit, una entrada de habilitación

de conteo E, una entrada de clareo C asíncrono, una entrada de reloj CLK y una

salida M de 1 bits (ver figura 63). Este contador tiene un valor predeterminado

“1010” en su código para que cuando llegue a él se reinicie el conteo y se ponga

en alto la salida de M. Para ver el sumario de compilación ver figura 64 y para ver

su código referirse al anexo A.

Figura 63. Dispositivo diseñado en lenguaje de descripción hardware VHDL

CONTBAUDRATE1.

Figura 64. Sumario de compilación de dispositivo CONTBAUDRATE1.

Page 97: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

97

La frecuencia máxima de este dispositivo compilado en un EPF10K70RC240-4 es

106.38MHz, con un retardo máximo de 19.3ns.

8.3.8 CONT_REG6B. Este dispositivo fue desarrollado en VHDL, es un contador

que lo encontramos en los dispositivos PC y DPTR. Consta de una entrada de

clareo C, una entrada de reloj CLK y una salida de datos Q de 6 bits (ver figura

65). Para ver su código referirse al anexo A. El CONT_REG6B se utiliza en el

dispositivo PREESCALER.

Figura 65. Dispositivo diseñado en lenguaje de descripción hardware VHDL

CONT_REG6B.

Figura 66. Sumario de compilación de dispositivo CONT_REG6B.

La frecuencia máxima de este dispositivo compilado en un EPF10K70RC240-4 es

106.38MHz, con un retardo máximo de 17.4ns.

Page 98: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

98

9. MEMORIA

La unidad de memoria es un dispositivo al cual se transfiere información binaria

para su almacenamiento y de la cual se puede obtener información cuando sea

necesaria para ser procesarla. La unidad de memoria almacena información en

grupos de bits llamados palabras. Existen dos tipos de memorias que se

comunican directamente con la unidad central de procesamiento: La memoria de

acceso aleatorio (RAM) y la memoria de solo lectura (ROM).

Cada dispositivo FLEX10K contiene un arreglo embebido para implementar

memoria y funciones lógicas especializadas. Los arreglos embebidos consisten en

una serie de EABs (bloque flexible de RAM). Cuando implementamos funciones de

memoria, cada EAB provee 2048 bits, con lo cual puede ser usado para crear

memoria RAM, memoria ROM y RAM de puerto dual, o funciones tipo FIFO (el

primero en entrar es el primero en salir).

Cuando es usado como RAM, cada EAB puede ser configurada en alguno de estos

tamaños: 256x8, 512x4, 1024x2, o 2048x1.

Page 99: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

99

9.1 MEMORIA DE ACCESO ALEATORIO (RAM)

La memoria de acceso aleatorio o RAM puede aceptar nueva información para ser

almacenada y quedar disponible para utilizarse después. La memoria puede

realizar operaciones de lectura y escritura.

9.1.1 Diseño de la memoria ram del Flex51. La memoria RAM del FLEX51 se

diseño con ayuda de la función MegaWizard Plug-In Manager de ALTERA, tiene

una entrada de datos de 8 bits, una entrada de escritura We, una entrada de

direcciones de 8 bits y una entrada de reloj inclock. Posee una salida Q de 8 bits

(ver figura 67). Se desarrollo este dispositivo con la función de ALTERA debido a

su gran facilidad de implementación, puesto que no se debe desarrollar un

algoritmo que cumpla todas las funciones requeridas.

Figura 67. Dispositivo diseñado con la función MegaWizard Plug-In Manager

RDAM.

9.2 MEMORIA DE SOLO LECTURA (ROM)

Una memoria de solo lectura (ROM) es básicamente un dispositivo de memoria en

el cual se almacena información binaria permanente. Esta información debe ser

Page 100: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

100

especificada por el diseñador y después incorporada en la unidad para formar el

patrón de interconexión requerido.

9.2.1 Diseño de la memoria rom del Flex51. La memoria ROM del FLEX51 se

diseño con ayuda de la función MegaWizard Plug-In Manager de ALTERA, tiene

una entrada de datos de 8 bits, una entrada de escritura We, una entrada de

direcciones de 8 bits y una entrada de reloj inclock. Posee una salida Q de 8 bits

(ver figura 68). Se desarrollo este dispositivo con la función de ALTERA debido a

su gran facilidad de implementación, puesto que no se debe desarrollar un

algoritmo que cumpla todas las funciones requeridas.

Figura 68. Dispositivo diseñado con la función MegaWizard Plug-In Manager

MEMPROG.

Page 101: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

101

10. DISEÑO DEL FLEX51

Como partida de cualquier diseño se debe plantear cual es el punto al que se

desea llegar, como nuestro caso es el implementar un microcontrolador embebido

en una FPGA que sea compatible con el set de instrucciones del microcontrolador

8051, lo primero que se hará en esta sección es hablar de forma general sobre el

microcontrolador 8051, y su set de instrucciones, luego se procederá de forma

general del microcontrolador en bloques y por ultimo se verá ya de forma

detallada.

10.1 MICROCONTROLADOR 80C31/80C51/80C57

El Philips 80C31/80C51/87C51 es un microcontrolador de alto desempeño

fabricado con tecnología CMOS de alta densidad. La tecnología Philips CMOS

combina las características de velocidad y densidad de HMOS con los atributos de

baja potencia de CMOS.

El 8XC51 contiene 4k x 8 ROM (80C51) EPROM (87C51), 128 x 8 RAM, 32 líneas

de entrada y salida, dos contadores/temporizadores de 16 bits, cinco fuentes de

interrupciones, dos niveles de prioridad para abordar la estructura de

interrupciones, canal serial full duplex, cinco rangos de velocidad a VCC= 5V

(12MHz, 16MHz, 24MHz y 33MHz), un circuito de reloj y oscilador.

Page 102: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

102

Figura 69. Símbolo lógico.

Data Sheet 80c31, 80c51, 87c51 CMOS single-chip 8 bit microcontrollers.

A continuación veremos el diagrama de bloques del 80C51 en la figura 70 y los

modos de direccionamiento que utiliza en la tabla 12.

Page 103: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

103

Figura 70. Diagrama de Bloques.

80c51 family hardware description.

Page 104: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

104

Tabla 12. Set de instrucciones y modos de direccionamiento.

Rn Registros de R7-R0 que se seleccionan de un banco de

registros.

Direct 8 bits para direccionamiento de datos internos. Pueden

localizarse de 0 a 127 byes o en la zona de resgistros de

funciones especiales.

@Ri 8 bits de RAM interna de datos localizada de 0 a 255

direccionable a través de los registros R0 y R1.

#data Constante de 8 bits incluida en una instrucción.

#data16 Constante de 16 bits incluida en una instrucción.

Addr 16 Direcciones destino de 16 bits. Usado por LCALL y LJMP.

Addr 11 Direcciones destino de 11 bits. Usado por ACALL y AJMP.

Rel Byte offset de 8 bits en complemento a dos. Usado por SJMP y

todas las condiciones de salto. Su rango de -128 a 128 bytes

relativo al byte de la siguiente instrucción.

Bit Bit de direccionamiento directo en RAM interna o registros de

funciones especiales.

Veamos cual es el set de instrucciones del microcontrolador 8051 en la figura 71

y 72.

Page 105: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

105

Figura 71. Set de instrucciones del 8051 parte 1.

Page 106: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

106

Figura 72. Set de instrucciones del 8051 parte 2.

Page 107: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

107

10.2 FLEX51

El Flex51 es un microcontrolador embebido en una FLEX10K, diseñado bajo el

software MAX+PLUS II 10.1 BASELINE de ALTERA, es compatible totalmente con el

set de instrucciones del microcontrolador 8051 y utiliza una arquitectura Von

Neuman.

Sus elementos internos fueron desarrollados con la ayuda de varias funciones y

entornos del software de ALTERA, tales como: MegaWizard plug-in Manager,

entorno gráfico y editor de texto (lenguaje VHDL, lenguaje AHDL).

Tiene una entrada de clareo global CLR, una entrada global de reloj CLK, una

entrada de recepción serial RX, dos entradas de interrupciones externas INT[1..0]

(interrupción externa 0 e interrupción externa 1), un puerto de entrada P0_IN[7..0]

y un puerto de entrada P1_IN[7..0]. Cuenta con una salida del bus de direcciones

DIR[15..0] para la memoria externa, una salida de transmisión serial TX, dos

salidas de control para la memoria externa Y[1..0] (la utilización de esta memoria

es solo escogencia de la persona que utilice el FLEX51), una salida de datos

BDATOS[7..0], un puerto de salida P2_OUT[7..0] y un puerto de salida

P3_OUT[7..0] (ver figura 73).

Page 108: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

108

Figura 73. Microcontrolador embebido FLEX51.

10.2.1 Características. El Flex51 es un microcontrolador embebido con un bus de

datos de 8 bits tri-estados, un bus de direcciones de 16 bits tri-estados (esto es

debido a que en un principio se pensó utilizar una memoria direccionable por 16

bits, pero la implementación en el dispositivo no es realizable por opciones de

área, dejando la oportunidad de en futuras adaptaciones sea este utilizado

completamente), una memoria RAM direccionable por 8 bits y una memoria ROM

direccionable por 8 bits. Cumple totalmente con el set de instrucciones del

microcontrolador 8051. Trabaja con el mismo concepto de banco de registros

como el 8051 y además se seleccionan de igual forma.

El procesamiento de cada instrucción a diferencia del 8051 no cumple con un

estándar de ciclos de reloj para ejecutarla (12, 24 y 48 ciclos), sino que, por el

contrario utiliza el mismo numero de ciclos como estados tenga la instrucción,

esto se realiza para ayudar en parte a la velocidad del procesamiento, aunque no

es recomendable al utilizar herramientas de codiseño.

Page 109: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

109

Los puertos de entrada y salida del Flex51 no son bidireccionales como los

puertos del 8051, se utilizan los puertos P0 y P1 como puertos de entrada de

datos y los puertos P2 y P3 como puertos de salida de datos.

La unidad de contadores y temporizadores cumple los mismos modos de

funcionamiento de esa unidad en el microcontrolador 8051.

La unidad serial no cumple ninguno de los modos de funcionamiento de su

homologa en el 8051, por el contrario trabaja con una arquitectura propia, muy

sencilla, donde se utilizan registros de desplazamientos, contadores y máquinas

de estados pequeñas.

El Flex51 cuenta con las mismas fuentes de interrupción del 8051, tales como:

interrupción externa 0, interrupción externa 1, interrupción por desbordamiento

del temporizador 0, interrupción por desbordamiento del temporizador 1 e

interrupción serial.

10.2.2 Flex51 en bloques. Antes de afrontar todo el diseño de un dispositivo a

nivel macro, o sea en todo su esplendor, veamos el dispositivo desde una

perspectiva de diagramas de bloques. Para ser más exactos veremos el

microcontrolador embebido Flex51 dividido en los tres principales bloques

funcionales, como son: La unidad de control (CPU), la unidad de direccionamiento

(AGU) y la unidad aritmética lógica (ALU).

Page 110: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

110

Comencemos hablando de la unidad de control del Flex51, esta unidad en

términos generales se compone de una máquina de estados, un decodificador de

señales de control, un registro de instrucción IR, una unidad de saltos y un

registro de banderas PSW (ver figura 74).

Figura 74. Diagrama de bloques de la unidad de control implementada en el

Flex51.

El funcionamiento de esta unidad de control es el siguiente: los códigos de

operación que vienen de la memoria de programa (instrucciones) son

almacenados en registro IR, luego esta instrucción se lleva a la máquina de

estados, la cual decide cuales son las señales que el decodificador debe mostrar,

todo esto depende del tipo de instrucción a realizar y de las entradas de saltos e

interrupciones.

Page 111: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

111

La unidad generadora de direcciones de manera general está compuesta por los

registros PCH, PCL, DPH, DPL, TMP1, TPM2, SP y un sumador de 16 bits (ver figura

75).

Figura 75. Diagrama de bloques de la unidad generadora de direcciones AGU.

Se puede observar que se posee un bus interno de datos de 8 bits, que viene de

un multiplexor; este multiplexor escoge entre el resultado alto o bajo del

Page 112: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

112

sumador, el bus de datos y un dato que es acomodado por un dispositivo interno

de la AGU para generar una dirección (instrucciones indirectas y llamados a

subrutinas).

El sumador de 16 bits es utilizado en las instrucciones de direccionamiento

relativo, suma del contenido en el bus de direcciones con el contenido de bus de

datos (se adicionan 8 bits para completar el operando de 16 bits).

La unidad ALU implementada en el Flex51 es muy sencilla, cuenta con cuatro

registros: A, B, TMP1 y TMP2, con los cuales realiza todas sus operaciones (ver

figura 76). Dentro de está ALU podremos encontrar la unidad aritmética (se

encarga de las operaciones de adición y substracción), la unidad lógica (se

encarga de las operaciones AND, OR y XOR), la unidad de incremento-

decremento, la unida de corrimiento, la unida de intercambio y la unidad de

multiplicación y división. La ALU lleva los datos al Bus de Datos por medio de

dispositivos tri-estados.

Page 113: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

113

Figura 76. Diagrama de bloques de la unidad aritmética lógica ALU.

10.3.3 Flex51 en partes. Como todo microcontrolador, el Flex51 es un conjunto

de varias partes funcionales unidas entre sí por medio de buses y señales de

control. Veamos a grandes rasgos el diagrama de bloques del Flex51 (ver figura

77).

Page 114: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

114

Figura 77. Diagrama de bloques del microcontrolador embebido Flex51.

Veamos ahora el diagrama esquemático realizado en ALTERA.

Page 115: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

115

Figura 78. Diagrama esquemático del Flex51. a)CPU, b)DIROUT, c)IR, d)ALU,

e)AGU, f)Banco de puertos, g)DECOD127, h)Memoria ROM, i)Memoria RAM,

j)Unidad de bits, k)PSW, l)Unidad de temporizadores, m)Unidad de interrupciones,

n)unidad de transmisión serial.

A continuación veamos cada uno de los bloques funcionales del Flex51.

10.2.3.1 Decodificador de zona de registros de funciones especiales DECOD127

Este decodificador es el encargado de elegir cual de los registros de la zona de

registros de funciones especiales puede cargar un valor o mandarlo al bus de

datos para realizar alguna instrucción. Su código se puede ver en el anexo A.

Page 116: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

116

10.2.3.2 Dispositivo de salidas de control de la máquina de estados DIROUT. Es

dispositivo es el encargado de dar la salida de todas las señales de control del

Flex51 dependiendo del estado en donde se encuentre la CPU, la operación a

ejecutarse y si hay salto o no. Cuenta con una entrada de 8 bits IR[7..0], una

entrada del estado actual de 5 bits SA[4..0] y una entrada indicadora de saltos ZE

de 1 bit. Tiene una salida Q de 46 bits (ver figura 79).

Figura 79. Dispositivo diseñado en lenguaje de descripción hardware VHDL

DIROUT.

Veamos las salidas de este dispositivo y sus respectivas funciones.

Tabla 13. Salidas del dispositivo DIROUT y sus funciones.

BITS FUNCIONES

0 Escritura en memoria de datos

1 Habilitador de salida al bus de datos desde la ALU

2 Lectura de memoria de programa

3 Lectura de memoria de datos

4 Cargar en el SP

5 Conteo ascendente o descendente en el SP

Page 117: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

117

6 Habilitador del decodificador carga de la AGU

7 Selector 0 del decodificador carga de la AGU

8 Selector 1 del decodificador carga de la AGU

9 Cargar en el registro IR

10 Habilitador del decodificador de salida de la ALU

11 Selector 0 del decodificador de salida de la ALU

12 Selector 1 del decodificador de salida de la ALU

13 Habilitador del decodificador carga de la ALU

14 Selector 0 del decodificador carga de la ALU

15 Selector 1 del decodificador carga de la ALU

16 Sel. 0 del decodificador de salida baja de la AGU al bus de dir.

17 Sel. 1 del decodificador de salida baja de la AGU al bus de dir.

18 Sel. 0 del decodificador de salida alta de la AGU al bus de dir.

19 Sel. 1 del decodificador de salida alta de la AGU al bus de dir.

20 Sel. 0 del multiplexor del bus interno de la AGU.

21 Sel. 0 del multiplexor del bus interno de la AGU.

22 Sel. 0 del decodificador de conteo de la AGU.

23 Sel. 1 del decodificador de conteo de la AGU.

24 Habilitador de salida al bus de la salida QB del U_EXCH.

25 Habilitador de salida de la parte baja del multiplicador de la ALU.

26 Habilitador de salida del residuo del divisor en la ALU.

27 Habilitador de carga de los registros de funciones especiales.

28 Habilitador de salida de los registros de funciones especiales.

29 Habilitador de salida de la parte alta del multiplicador de la ALU.

Page 118: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

118

30 Habilitador de salida del cociente del divisor en la ALU.

31 Habilitador de carga del dpl.

32 Habilitador de carga del dph.

33 Habilitador de salida del PC bajo al bus de datos.

34 Habilitador de salida del PC alto al bus de datos.

35 Habilitador de salida del registro temporal bajo al bus de datos.

36 Habilitador de salida de la unidad de dir. de bits al bus de datos.

37 Habilitador de salida de la unidad de bits al bus de datos.

38 Carga del Carry en el PSW.

39 Carga del Carry intermedio en el PSW.

40 Carga del bit de paridad en el PSW.

41 Habilitador de salida baja de la unidad de int. al bus de dir.

42 Habilitador de salida alta de la unidad de int. al bus de dir.

43 Bit de Clareo del decodificador de entradas de ininterrupción.

44 Bit de Clareo del decodificador de salidas de interrupción.

45 Carga del Overflow en el PSW.

Además veamos el sumario de compilación de este dispositivo dentro del

EPF10K70RC240-4 y utilización de recursos.

Figura 80. Sumario de compilación del dispositivo DIROUT.

Page 119: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

119

Para ver código del dispositivo ir al anexo A.

10.2.3.3 Memoria de Programa ROMPROG. La memoria de programa está

conformada por los dispositivos memprog y tri. Este dispositivo fue creado en el

entorno gráfico de ALTERA y es un dispositivo asíncrono, puesto que no posee

entrada de reloj, porque crearía un estado más de espera en la maquina de

estados. Ver figuras 81 y 82.

La memoria de programa tiene una entrada para el bus de direcciones bajo de 8

bits y una entrada de habilitación de lectura; cuenta con una salida al bus de

datos Q[7..0].

Figura 81. Dispositivo diseñado en el entorno grafico de ALTERA ROMPROG.

Figura 82. Esquema de la memoria de programa ROMPROG.

Page 120: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

120

Figura 83. Sumario de compilación del dispositivo ROMPROG.

Este dispositivo tiene un retardo máximo de 47.2ns en su salida Q7.

10.2.3.4 Tri. Este dispositivo fue creado con ayuda de la función MegaWizard

Plug-In Manager de ALTERA y es utilizado en todos los dispositivos que necesiten

llevar datos a través del bus de datos o del bus de direcciones.

Es un dispositivo que tiene una entrada y salida de datos de 8 bits, y una entrada

de habilitación (ver figura 84).

Figura 84. Dispositivo diseñado con la función MegaWizard Plug-In Manager TRI.

10.2.3.5 Memoria de datos RAMD. La memoria de datos está conformada por los

dispositivos rdam y tri. Este dispositivo fue creado en el entorno gráfico de

ALTERA, por el contrario de la memoria de programa este dispositivo es síncrono.

Page 121: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

121

La memoria de datos tiene una entrada para el bus de direcciones bajo de 8 bits

ADD[7..0], una entrada de datos de 8 bits DATOIN[7..0], una entrada de escritura

WR y una entrada de habilitación de lectura MD; cuenta con una salida al bus de

datos DATOUT[7..0]. Ver figuras 85 y 86.

Figura 85. Dispositivo diseñado en el entorno grafico de ALTERA RAMD.

Figura 86. Esquema de la memoria de datos RAMD.

10.2.3.6 Registro IR. El registro IR es el registro que almacena el código de

operación; este registro es un dispositivo REG8B

10.2.3.7 Zona de puertos de entrada y salida. Este dispositivo está compuesto por

dos puertos de entrada P0 y P1, y dos puertos de salida P2 y P3. Tiene una

Page 122: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

122

entrada de reloj, una entrada de clareo, una entrada de carga LBREG, una entrada

de datos INBREG[7..0], dos entradas de puertos P0_IN[7..0] y P1_IN[7..0], una

entrada de selección del puerto s[9..6]. Posee dos salidas de puertos P2_OUT

[7..0] y P3_OUT[7..0], y una salida al bus de datos OUTBREG[7..0] (ver figura 87).

Figura 87. Dispositivo diseñado en el entorno grafico de ALTERA BANREG.

Los puerto 0 y 1 son dos dispositivos STD_REG8B, sus entradas de datos vienen

de los pines de entrada/salida directamente y sus salidas se llevan a la salida tri

estrado OUTBREG[7..0] que va conectada al bus de datos (ver figura 88).

Los puertos 2 y 3 son dos dispositivos REG8B, entradas de datos vienen del bus

de datos y sus salidas se llevan directamente a los pines de entrada/salida.

Page 123: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

123

Figura 88. Esquema del dispositivo de puertos de entrada y salida.

10.2.3.8 Registro PSW. Este dispositivo fue diseñado en el entorno grafico de

ALTERA y es el registro de banderas, en su interior está compuesto por el registro

REG8BPSW, el dispositivo CABLE y el dispositivo TRI (ver figura 89).

Cuenta con 12 entradas de 1 bit (cargar dato SLOAD, clarear SCLR, reloj, bit de

paridad P, carga de paridad LP, carga de acarreo LC, carga de acarreo intermedio

LAC, bit de acarreo C, bit de acarreo intermedio AC, carga de desbordamiento

LOV y bit de desbordamiento OV) y una entrada de datos de 8 bits D[7..0]. Posee

una salida tri estado de 8 bits PSWOUT[7..0] conectada al bus de datos, dos

salidas de 1 bit PSW6 y PSW7 (acarreo intermedio y acarreo) y una salida PSW[5..0]

Page 124: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

124

de donde sus bits PSW3 y PSW4 son los selectores del banco de registros a

utilizar.

Figura 89. Dispositivo diseñado en el entorno grafico de ALTERA PSW.

El dispositivo REG8BPSW del interior de PSW es sincrono y mantiene

constantemente revisando sus entradas de carga para actualizarse, si estas

entradas no cumplen con los parámetros propuestos el REG8BPSW lo único que

hace es actualizarse con la entrada de retroalimentación que le llega a A[7..0] por

medio del dispositivo cable. Para salir al bus de datos se utiliza un dispositivo TRI

(ver figura 90).

Page 125: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

125

Figura 90. Esquema del dispositivo PSW.

10.2.3.9 Dispositivo CABLE. Como su nombre lo dice este dispositivo es una

simulación de un cable, fue diseñado en VHDL y su función es la de poner en la

salida lo que le llega a la entrada; en la entrada de un dispositivo cable en su

mayoría de veces llegamos de una salida tri estados. También es utilizado en los

dispositivos que realizan retroalimentación.

Tiene una entrada de 8 bits X[7..0] y una salida igual de 8 bits Q[7..0] (ver figura

91). Para ver su código ir al anexo A.

Figura 91. Dispositivo diseñado en lenguaje de descripción hardware VHDL

CABLE.

Page 126: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

126

10.2.3.10 Arreagu1. Este dispositivo no forma parte de ninguna unidad específica,

pero es de mucha importancia porque él da soporte a distintas unidades y

dispositivos, tales como: la AGU, memoria RAM y registro de banderas PSW.

Esta dispositivo tiene una entrada de carga de registros de la zona de registros de

funciones especiales X27, una entrada de carga del Stack Pointer LSP, una entrada

de habilitación de salida de datos de registros de la zona de registros de

funciones especiales X28, una entrada de selección de registros de la zona de

registros especiales de 21 bits N[20..0], dos entradas de carga X32 y X1 para DPH

y DPL respectivamente, una entrada de habilitación de escritura para la memoria

de datos MN y una entrada de habilitación de lectura para la memoria de datos

MD.

Como salidas tiene carga del registro DPL LDPL, carga del registro DPH LDPH,

carga del registro SP, habilitación de salida de datos del registro PSW, carga del

registro PSW, carga del generador de rata de baudios LBAUD, escritura de la

memoria de datos MN y habilitador de lectura de la memoria de datos MD (ver

figura 92).

Page 127: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

127

Figura 92. Dispositivo diseñado en el entorno grafico de ALTERA ARREAGU1.

Una de las funciones de este dispositivo es habilitar la señal de carga de los

registros DPH, DPL, SP y PSW; esto se consigue de la siguiente manera: llega la

señal de habilitación de carga global de la zona de registros de funciones

especiales X27 y realiza una operación AND con la señal de selección de registro

SFRs N2, N3, N13 y N10 respectivamente. Para el caso de los registros DPH, DPL y

SP que pueden ser habilitados por una señal producida por el dispositivo de

salidas de control de la máquina de estados DIROUT, la salida de la operación

AND hace una operación OR con las señales antes mencionadas (X32, X31, LSP).

La señal de salida EOPSW se consigue al realizar una operación AND entre la señal

de habilitación de salida de la zona de registros de funciones especiales y la señal

de selección de registro SFRs N10 (ver figura 93).

Page 128: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

128

Figura 93. Esquema del dispositivo Arreagu1.

Otra de las funciones de este dispositivo es la de habilitar la escritura y la lectura

de la memoria de datos, para ello tenemos la ayuda del dispositivo AND20, el cual

da una señal en alto para cuando el código de operación no requiere de ninguno

de los registros SFRs. La señal de salida del dispositivo AND20 hace una

operación AND con la señal de carga global X27 y su salida a su vez realiza una

operación OR con la señal de escritura de la memoria de datos X0 que proviene

del dispositivo de salidas de control de la máquina de estados. Para la lectura este

proceso es el mismo, pero la operación AND se realiza entre la salida de AND20 y

la señal de habilitación global X28, y su salida hace la operación OR con la señal

de lectura de la memoria de datos X3.

Page 129: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

129

10.2.3.10.1 And20. Este dispositivo es el encargado de decir si se ha seleccionado

alguno de los registros de la zona de funciones especiales SFRs; si ninguno es

seleccionado presenta salida alta y si alguno es seleccionado presenta salida baja.

Tiene una entrada de 21 bits a[20..0] y una salida s de un bit (ver figura 94). Para

ver su código ver anexo A.

Figura 94. Dispositivo diseñado en lenguaje de descripción hardware VHDL

AND20.

10.2.3.11 Agu. Este dispositivo es de las partes más importantes de todo el

diseño del microcontrolador embebido Flex51, puesto que es la unidad de

direccionamiento. Este dispositivo se encarga de las tareas de direccionamiento

de la memoria de programa y de datos, en forma directa, indirecta; saltos

relativos largos y cortos; por medios incrementos en el contador de programa PC,

en registros temporales y en el DPTR.

Cuenta con una entrada para el código de instrucción IR[7..0], una entrada de

datos DATOIN[7..0], una entrada selección de parte alta del bus de direcciones

SDIRH[1..0], una entrada de selección de parte baja del bus de direcciones

SDIRL[1..0], una entrada de selección de banco de registros PSW[1..0], una entrada

de selección de dato de entrada SDATOIN[1..0], una entrada de carga de datos en

el registro SP L_SP, una entrada de selección de registro (se selecciona entre el

Page 130: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

130

PCH, PCL, TMPH y TMPL), una entrada de habilitación de registros EREG, una

entrada de carga de datos en el registro DPH LDPH, una entrada de carga de datos

en el registro DPL LDPL, una entrada habilitación de conteo en los registros PCH,

PCL, DPH y DPL SENA[1..0], una entrada de selección de registros SFRs N[3..2],

una entrada de selección de registro SFRs N13, una entrada de habilitación de

salida del registro PCH para el bus de datos PH, una entrada de habilitación de

salida del registro PCL para el bus de datos PL, una entrada de habilitación de

salida del registro temporal bajo ETL, una entrada de habilitación de salida de

datos de registros de la zona de registros de funciones especiales X28, una

entrada de selección de operación suma o resta UPDOWNSP, una entrada de clareo

CLR y una entrada de reloj CLK.

En las salidas tenemos: una salida datos DATOUT[7..0], una salida de la parte alta

del bus de direcciones BUSH y una salida de la parte baja del bus de direcciones

BUSL (ver figura 95).

La AGU en su interior se compone de los siguientes dispositivos: PC, DPTR,

REG_SP, STD_REG8B1, STD_REG8B2, TRI, ARREAGU2, CABLE2, ARREGLOAGU,

ARREAGU3, REG8BAGU, DEC2TO4, DEC2TO4H, MU3 y SUMAGU (algunos de los

dispositivos nombrados fueron explicados en capítulos anteriores).

Page 131: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

131

Figura 95. Dispositivo diseñado en el entorno grafico de ALTERA AGU.

10.2.3.11.1 Pc. Este dispositivo es más conocido como el contador de programa,

su función es dar la posición de memoria de programa a seguir. En su interior

consta de dos contadores CONT_REG8B y cuatro dispositivos TRI.

Tiene una entrada de datos para el contador alto AH[7..0], una entrada de carga

del PCH LPCH, una entrada de habilitación de salida del PCH OPCH, una entrada

de datos para el contador alto AL[7..0], una entrada de carga del PCL LPCH, una

entrada de clareo del PC, una entrada de habilitación de conteo E, una entrada de

reloj CLK, una entrada de habilitación de salida del PCL OPCL, una entrada de

habilitación de salida del registro PCH para el bus de datos PH, una entrada de

habilitación de salida del registro PCL para el bus de datos PL.

Page 132: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

132

El dispositivo tiene una salida de direcciones de la parte alta del PC PCH[7..0], una

salida de datos de la parte alta del PC PCHOUT[7..0], una salida de direcciones de

la parte baja del PC PCL[7..0] y una salida de datos de la parte baja del PC

PCLOUT[7..0]. Ver figuras 96.

Figura 96. Dispositivo diseñado en el entorno grafico de ALTERA PC.

Este dispositivo es un arreglo en cascada de contadores CONT_REG8B, en donde

la salida M del contador llega a la entrada de contador del siguiente. Cuenta con

cuatro salidas, dos para el bus de direcciones (parte alta y baja) y dos para el bus

de datos, las cuales primero pasan por dispositivo TRI.

Page 133: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

133

Figura 97. Esquema del dispositivo PC.

10.2.3.11.2 Dptr. Este dispositivo es muy utilizado en operaciones de tipo MOVC

(operaciones con la memoria de programa) y trabajo de tablas.

Tiene una entrada de datos para el registro contador alto DPHI[7..0], una entrada

de carga del DPH LDPH, una entrada de habilitación de salida del PDH OCH, una

entrada de datos para el registro contador alto DPLI[7..0], una entrada de carga

del DPL LDPL, una entrada de clareo del DPTR C, una entrada de habilitación de

conteo E, una entrada de reloj CLK, una entrada de habilitación de salida del DPL

OCL, una entrada de habilitación de salida del registro DPH para el bus de datos

EH, una entrada de habilitación de salida del registro DPL para el bus de datos EL.

Page 134: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

134

El dispositivo tiene una salida de direcciones de la parte alta del DPTR DPH[7..0],

una salida de datos de la parte alta del DPTR DPHDATO[7..0], una salida de

direcciones de la parte baja del DPTR DPL[7..0] y una salida de datos de la parte

baja del DPTR DPLDATO[7..0] (ver figura 98).

Figura 98. Dispositivo diseñado en el entorno grafico de ALTERA DPTR.

Figura 99. Esquema del dispositivo DPTR.

Page 135: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

135

En la figura anterior se pude ver como este dispositivo es un arreglo en cascada

de contadores CONT_REG8B, en donde la salida M del contador entrada a la

entrada de conteo del siguiente. Cuenta con cuatro salidas, dos para el bus de

direcciones (parte lata y baja) y dos para el bus de datos, las cuales primero pasan

por dispositivo TRI.

10.2.3.11.3 Reg8bagu. Este dispositivo se encarga de acomodar alguno de los

datos de direcciones a la AGU, acomoda la dirección en las operaciones con el

banco de registros, operaciones indirectas con R0 y R1, y en operaciones de

llamados a subrutina.

Tiene una entrada de clareo C, tiene una entrada de selección de operación

SEL[1..0], una entrada de selección del banco de registros PSW[1..0] y una entrada

de código de operación D[7..0]. El dispositivo tiene una única salida Q[7..0] (ver

figura 100).

Figura 100. Dispositivo diseñado en lenguaje de descripción hardware VHDL

REG8BAGU.

Page 136: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

136

10.2.3.11.4 Arreagu2. Este dispositivo es el encargado de habilitar la salida al bus

de datos de los registros DPH, DPL y SP. Tiene una entrada de habilitación global

de zona de registros de funciones especiales SFRs X28, tres entradas de selección

de registro N2, N3 y N13.

Como salidas tiene: una salida de habilitación de salida al bus EDPH, una salida de

habilitación de salida al bus EDPL y una salida de habilitación de salida al bus ESP

(ver figura 101).

Figura 101. Dispositivo diseñado en el entorno grafico de ALTERA ARREAGU2.

10.2.3.11.5 Arreagu3. Este dispositivo tiene función habilitar la salida al bus de

direcciones de los dispositivos PC, DPTR, TMPH, TMPL y REG_SP. Tiene una

entrada de selección de la parte alta SBDIRHO[1..0], una entrada de selección de la

parte baja SBDIRLO[1..0], una salida selectora de la parte alta CO[3..0] y una salida

selectora de la parte baja DO[3..0] (ver figura 102).

En su interior encontramos dos dispositivos DEC2TO4H, uno para cada parte (ver

figura 103).

Page 137: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

137

Figura 102. Dispositivo diseñado en el entorno grafico de ALTERA ARREAGU3.

Figura 103. Esquema del dispositivo ARREAGU3.

10.2.3.11.6 Arregloagu. La función este dispositivo acomodar el valor del dato

que va al dispositivo SUMAGU ( si la operación es suma en la salida encontramos

ceros y si la operación substracción encontramos unos) y dar la señal de selección

para el dispositivo REG8BAGU.

Tiene una entrada del nibble bajo del código de operación IR[3..0], una entrada de

selección de operación suma o resta A, una salida de datos D[7..0] y una salida de

selección S[1..0] (ver figura 104).

Page 138: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

138

Figura 104. Dispositivo diseñado en el entorno grafico de ALTERA ARREGLOAGU.

Para cumplir con sus funciones este dispositivo en su interior consta de un

dispositivo AS2 y LOGAGU1 (ver figura 105).

Figura 105. Esquema del dispositivo ARREGLOAGU.

El AS2 es el dispositivo que selecciona unos a la salida o ceros dependiendo de la

entrada A, está diseñado en lenguaje VHDL. Para ver su código referirse al anexo

A.

El dispositivo LOGAGU1 es un arreglo de lógica combinacional queda la señal de

selección del dispositivo REG8BAGU1.

10.2.3.11.7 Cable2. Este dispositivo fue diseñado en lenguaje VHDL y su función

es la de poner en la salida lo que le llega a la entrada; en la entrada de un

Page 139: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

139

dispositivo cable en su mayoría de veces llegamos de una salida tri estados.

Tiene una entrada de la parte alta del bus de direcciones X[7..0], una entrada de la

parte baja del bus de direcciones Y[7..0] y una salida Q[15..0] (ver figura 106).

Para ver su código ir al anexo A.

Figura 106. Dispositivo diseñado en lenguaje de descripción hardware VHDL

CABLE2.

10.2.3.11.8 Funcionamiento general de la AGU. Como primer apunte hay que

decir que la selección de carga, la salida y el incremento de los dispositivos PC,

DPTR, TMPH, TMPL y REG_SP se hace por medios de decodificadores (DEC2TO4H,

DEC2TO4) o arreglos de ellos.

Este dispositivo cuenta con un bus interno de datos que tiene como controlador

del flujo de datos al multiplexor MU3, que escoge entre la señal que viene del bus

de datos, la señal que sale del dispositivo REG8BAGU y la salida alta y baja del

dispositivo SUMAGU.

Debido a que todos los dispositivos que tienen salida al bus de direcciones

cuentan dispositivos tri-estados en sus salidas y es necesario realizar una

operación de suma o resta dentro de la AGU con el dispositivo SUMAGU para los

Page 140: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

140

códigos de operación de saltos se utiliza el dispositivo CABLE2 que elimina este

efecto.

Figura 107. Esquema del dispositivo AGU. a)PC, b)DPTR, c)Registros temporales,

d)SP, e)sumador, f)REG8BAGU, g)MU3, h)CABLE, i)ARREAGU2, j)ARREGLOAGU

Veamos el sumario de compilación de este dispositivo y cuantos recursos del

flex10k requiere ( ver figura 108).

Page 141: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

141

Figura 108. Sumario de compilación del dispositivo AGU.

La frecuencia máxima que puede alcanzar este dispositivo es de 42.37MHz y tiene

un retardo máximo de 32.3ns.

10.2.3.12 Alu (Prueba4). Este dispositivo es uno de los más importantes en

cualquier tipo de microcontrolador, puesto que desarrolla la mayoría de las

instrucciones. En el caso del microcontrolador Flex51 el dispositivo ALU es de

vital importancia por que es el encargado de ejecutar las instrucciones de tipo

aritmético, lógico e intercambio, además de las instrucciones de salto (CJNE) y

parte de las operaciones con bits.

Este dispositivo lleva el nombre de prueba4 y en su interior contiene un

dispositivo ALU, LOGALU, ARREOV y TRI (ver figura 110).

Este dispositivo tiene una entrada de habilitación de salida al bus de datos EOALU,

una entrada de palabra de instrucción IR[7..0], una entrada de reloj CLK, un

entrada de acarreo CF, una entrada de acarreo intermedio, una entrada de datos

BUSIN[7..0], una entrada de selección de carga SD[1…0], una entrada de

habilitación de salida SO[1..0], una entrada de habilitación del decodificador de

carga ESD, una entrada de habilitación del decodificador de salida ESO, una

Page 142: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

142

entrada de habilitación de salida del dispositivo DIRBIT, una entrada de los

habilitadores de carga y de salida globales X[1..0], una entrada de habilitación de

los dispositivos tri-estados F1[9..7] y F1[4..3], y una entrada de selección de

registros SFRs N[1..0].

Tiene una salida de datos del temporal 2 TMP2[7..0], una salida de datos

BUSOUT[7..0], una salida del acarreo intermedio AC, una salida de la bandera de

cero Z, una salida de acarreo generada por el sumador, una salida de acarreo

generada por la unidad de intercambio CEXCH, una salida de selección de bits

BITS[2..0], una salida de acarreo generada por la unidad de desplazamiento

CCORR, una salida de acarreo generada por la unidad salto CJNE, una salida por la

bandera de desbordamiento OV, una salida indicadora de salto ZETA y una salida

indicadora de paridad P (ver figura 109).

Figura 109. Dispositivo diseñado en el entorno grafico de ALTERA PRUEBA4.

Page 143: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

143

Figura 110. Esquema del dispositivo PRUEBA4.

10.2.3.12.1 Alu. En este dispositivo se llevan a cabo todas las operaciones

aritméticas, lógicas, de desplazamiento, cjne y encuentra la dirección del byte y

bit en operaciones con bits (ejemplo: clr bit).

Este dispositivo tiene una entrada de habilitación de salida al bus de datos EOALU,

una entrada de la parte baja de palabra de instrucción IRL[3..0], una entrada de

reloj CLK, una entrada de clareo global CLR, una entrada de clareo del acumulador

CLRA, una entrada de acarreo CF, una entrada de acarreo intermedio, una entrada

de datos BUSIN[7..0], una entrada de selección de carga SD[1…0], una entrada de

habilitación de salida SO[1..0], una entrada de habilitación del decodificador de

carga ESD, una entrada de habilitación del decodificador de salida ESO, una

Page 144: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

144

entrada de habilitación de salida del dispositivo DIRBIT, una entrada de los

habilitadores de carga y de salida globales X[1..0], una entrada de habilitación de

los dispositivos tri-estados F1[9..0], una entrada de selección del multiplexor SUL

de la unidad lógico, una entrada de selección del multiplexor SID del dipositivo de

incremento- decremento y una entrada de selección de registros SFRs N[1..0].

Tiene una salida de datos del temporal 2 TMP2[7..0], una salida de datos

BUSOUT[7..0], una salida del acarreo intermedio AC, una salida de la bandera de

cero Z, una salida de acarreo generada por el sumador, una salida de acarreo

generada por la unidad de intercambio CEXCH, una salida de selección de bits

BITS[2..0], una salida de acarreo generada por la unidad de desplazamiento

CCORR, una salida de acarreo generada por la unidad salto CJNE, una salida por la

bandera de desbordamiento OV generada por el sumador, una salida por la

bandera de desbordamiento OV generada por el multiplicador, una salida por la

bandera de desbordamiento OV generada por el divisor , una salida indicadora de

salto R y una salida indicadora de paridad PARIDAD (ver figura 111).

Para ver el diagrama esquemático referirse a la figura 112.

Page 145: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

145

Figura 111. Dispositivo diseñado en el entorno gráfico de Altera ALU.

Figura 112. Esquema del dispositivo ALU. a)registros, b) ADER_A, c)UL, d)

Multiplicador, e)divisor, f)U_exch, g)U_corri, h)dirbit, i)Paridad, j)Multiplexores,

k)Decodificadores, l)CJNE, m)Arreglodirecto, n)Incdec.

Page 146: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

146

U_corri. Este dispositivo es el encargado de realizar las operaciones de

desplazamiento en el registro acumulador (RR A, RRC A, RL A, RLC A). Tiene una

entrada de datos que proviene del registro acumulador A[7..0] que esta unido

directamente, una entrada de acarreo proveniente de la salida del registro PSW,

una entrada de selección de operación SEL[1..0], una salida de acarreo que se

lleva a la entrada del registro PSW y una salida al bus de datos X[7..0] (ver figura

113).

El funcionamiento de este dispositivo es el siguiente: recibe el dato del registro

acumulador y el bit de acarreo de entrada, la operación a realizarse se selecciona

de acuerdo a la configuración de bits en la entrada SEL[1..0] (los bits que

controlan estas operaciones son los dos bits menos significativos del nibble alto

del código de operación). Para ver el código referirse al anexo A.

Figura 113. Dispositivo diseñado en lenguaje de descripción hardware VHDL

U_CORRI.

U_exch. Este dispositivo es el encargado de realizar las operaciones de

intercambio (swap,xch,xchd) y la operación de ajuste decimal DA A. Tiene dos

entradas de datos A[7..0] y B[7..0] que son los que en algunas de las operaciones

se intercambiarán, una entrada S0 que viene del bit menos significativo del nibble

Page 147: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

147

alto del código de operación, una entrada de acarreo intermedio CV que viene de

la salida del registro PSW, una entrada de acarreo C que viene de la salida del

registro PSW y una entrada IRH[3..0] que proviene del nibble bajo del código de

operación. Tiene tres salidas, una salida de acarreo COUT que va a la entrada del

registro PSW y dos salidas al bus de datos QA[7..0] y QB[7..0] (ver figura 114).

Para ver el código referirse al anexo A.

Figura 114. Dispositivo diseñado en lenguaje de descripción hardware VHDL

U_EXCH.

Paridad. Este dispositivo cumple una función única y especifica dentro del

microcontrolador embebido Flex51 y es la de generar el bit indicar de paridad del

registro acumulador.

Este dispositivo es un arreglo lógico de compuertas OR-exclusivas en cascada,

tiene una única entrada A[7..0] que proviene del acumulador y una única salida P

que va a la entrada del registro PSW (ver figura 115).

Page 148: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

148

Figura 115. Dispositivo diseñado en el entorno gráfico de Altera PARIDAD.

Veamos su diagrama esquemático.

Figura 116. Esquema del dispositivo PARIDAD.

Dirbit. De forma exacta este elemento es solo una carcaza de otros dispositivos

que prestan funciones específicas a la unidad de bits, en su interior este

dispositivo contiene: un DIRBITS y un TRI

Tiene una entrada de datos TMP1[7..0], la cual sirve para recibir el byte que

contiene la información del bit requerido, una entrada de habilitación de salida al

bus de datos ODIRBIT, una salida al bus de datos DIRBITS[7..0] que contiene la

Page 149: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

149

dirección del byte que contiene el bit necesario para la operación y una salida

BITS[2..0] para seleccionar el bit (ver figura 117).

Figura 117. Dispositivo diseñado en el entorno gráfico de Altera DIRBIT.

Veamos su diagrama esquemático.

Figura 118. Esquema del dispositivo DIRBIT.

*Dirbits. La función específica de este dispositivo es generar la dirección del byte

en memoria en donde se encuentra el bit requerido para la operación deseada y

se dar la codificación del bit requerido. Tiene una entrada de datos TMP1[7..0],

una salida de datos DATOUT[7..0] que da la dirección del byte en donde se

encuentra el bit y una salida BIT[2..0] que da el bit requerido por la operación.

Para ver el código referirse al anexo A.

Page 150: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

150

El funcionamiento es el siguiente: se toma el dato de entrada y se verifica si el bit

más significativo es uno o cero, si es uno se concatenan los cinco bits más

significativos de la entrada con tres ceros (TPM1[7..3]&”000”) y si el bit es cero se

concatena la palabra “0010” con cuatro bits de la entrada (“0010”&TPM1[6..3]).

Para generar la salida de bits[2..0] se toman los tres bits menos significativos de

la entrada (TMP1[2..0]) (ver figura 119).

Figura 119. Dispositivo diseñado en lenguaje de descripción hardware VHDL

DIRBITS.

Cjne. Este dispositivo es el encargado de ejecutar las operaciones de CJNE

(compare y salte si no es cero), está diseñado en lenguaje de descripción

hardware VHDL. Tiene dos entradas de datos A[7..0] y B[7..0], una entrada de

datos para la palabra de operación IR[7…0], una entrada de acarreo CIN, una

entrada indicadora de salto, una salida indicadora de salto S y una salida de

acarreo COUT (ver figura 120). Para ver el código referirse al anexo A.

Page 151: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

151

Figura 120. Dispositivo diseñado en lenguaje de descripción hardware VHDL CJNE.

Incdec. Este dispositivo es el encargado de realizar las operaciones de incremento

y decremento. Tiene una entrada de datos A[7..0], una entrada de selección de

operación, una salida de datos al bus Q[7..0] y una salida indicadora de cero Z.

Cuando hay dato con valor de cero en la salida del dispositivo interno se genera

un uno en la salida Z (ver figura 121).

Figura 121. Dispositivo diseñado en el entorno gráfico de Altera INCDEC.

Veamos su diagrama esquemático.

Page 152: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

152

Figura 122. Esquema del dispositivo INCDEC.

Ul. Este dispositivo se encarga de realizar las operaciones lógicas (AND, OR, XOR)

y fue diseñado en lenguaje de descripción hardware VHDL. La señal de selección

proviene de los dos bits menos significativos del nibble alto del código de

operación.

Tiene dos entradas de datos X[7..0] y Y[7..0], una entrada selección de las

operaciones SEL[1..0] y una salida al bus de datos Z[7..0] (ver figura 123). Para ver

el código referirse al anexo A.

Figura 123. Dispositivo diseñado en lenguaje de descripción hardware VHDL UL.

Page 153: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

153

Arreglodirecto. Este dispositivo tiene como función controlar la carga de datos y la

habilitación de salida al bus de los registros A y B, en operaciones de

direccionamiento directo (ejemplo: mov dir_A,#data).

Tiene una entrada DI[1..0] de selección carga entre el registro A o B, una entrada

X[1..0] que son los bits de carga y habilitación global SFRs, una entrada de

selección de registros N[1..0], una entrada de selección de habilitación de salida

DO[1..0] y unas salidas D0, D1, E0 y E1 (habilitador de salida de A, habilitador de

salida de B, habilitador de carga de A y habilitador de carga de B) (ver figura 124).

Figura 124. Dispositivo diseñado en el entorno gráfico de Altera

ARREGLODIRECTO.

Figura 125. Esquema del dispositivo ARREGLODIRECTO.

Page 154: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

154

Bandera de Cero. Esta bandera se consigue conectando la salida del registro

acumulador a una compuerta OR negada (ver figura 126).

Figura 126. Bandera de Cero.

Bandera de desbordamiento de la división. Para obtener está bandera conectamos

la salida del registro B a una compuerta OR negada (ver figura 127)

Figura 127. Bandera de desbordamiento de la división.

Bandera de desbordamiento de la multiplicación. Para obtener está bandera

conectamos la salida baja del dispositivo de multiplicación a una compuerta OR

(ver figura 128).

Page 155: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

155

Figura 128. Bandera de desbordamiento de la multiplicación.

10.2.3.12.2 Logalu. Este dispositivo fue diseñado con arreglos de compuertas en

el entorno gráfico de Altera, su función es dar las señales de control a los

multiplexores que funcionan en el interior de la ALU y las señales de habilitación

de las salidas de las unidades funcionales del dispositivo ALU hacia el bus de

datos.

Tiene una entrada de código de instrucción IR[7..0], una entrada de habilitación

de salida de datos del dispositivo ALU al bus, una salida de selección de operación

del dispositivo multiplexor de incremento-decremento SID, una salida de

selección de operación del dispositivo multiplexor de la unidad lógica SUL, una

salida de clareo del registro acumulador CLRA y unas salida de habilitación de la

salida al bus F1[2..0] y F1[6..5] (ver figura 129).

En el diseño de este dispositivo se sacaron ecuaciones para implementar cada una

de las salidas de control del dispositivo ALU. La señal F0 tiene la siguiente

ecuación:

( ) ( ) ( )( )4*5*6*75*6*7320 IRIRIRIRIRIRIRIRIRF +∗+=

Page 156: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

156

La señal F1 tiene la siguiente ecuación:

( ) ( )( ) ( )( )( ) ( )( )

∗∗∗∗∗∗∗+

++∗∗∗+∗∗=

45673210

1235674671

IRIRIRIRIRIRIRIR

IRIRIRIRIRIRIRIRIRF

La señal F2 tiene la siguiente ecuación:

( ) ( )5*6*7322 IRIRIRIRIRF ∗+=

La señal F5 tiene la siguiente ecuación:

( ) ( ) ( )( )( )( ) ( )( )( ) ( )( )( )( )

∗∗∗∗∗∗+

∗∗∗∗∗∗∗+

∗∗∗∗∗∗∗+

∗+∗+∗∗∗∗

=

1234567

45673210

45673210

021234567

5

IRIRIRIRIRIRIR

IRIRIRIRIRIRIRIR

IRIRIRIRIRIRIRIR

IRIRIRIRIRIRIRIRIR

F

La señal F6 tiene la siguiente ecuación:

( ) ( )0123676 IRIRIRIRIRIRF ∗∗∗∗∗=

Hay que aclarar que estas señales antes de salir hacen un operación AND con la

entrada de habilitación de salidas al bus EOALU, convirtiéndolas en las salidas

F1[1..0] y F1[6..5]. Para la salida F12 se debe realizar otras operaciones, por lo

tanto su ecuación final es:

Page 157: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

157

( ) ( )( )( )( )( )01234567212 IRIRIRIRIRIRIRIRFEOALUF ∗∗+∗∗∗∗+∗=

La salida CLRA tiene como ecuación:

( )3210467 IRIRIRIRIRIRIRCLRA ∗∗∗∗∗∗=

La salida SID tiene la siguiente ecuación:

( )( ) ( )( )( ) ( ) ( )( )

( )

∗∗∗

∗+∗+∗+++++++

∗∗∗∗+∗∗

=

567

021235673210

45673210

IRIRRI

IRIRIRIRIRIRIRIRIRIRIRIR

IRIRIRIRIRIRIRIRSID

Para hablar de la ecuación de la salida SUL, hay que apuntar que utiliza las salidas

de los dispositivos CJNEMUX y CJNEMUX1 como dos entradas en el arreglo de

compuertas. La ecuación SUL tiene la siguiente ecuación:

( ) ( ) ( )( )( ) ( ) ( )( )( ) ( ) ( )( )

∗∗+∗∗∗∗∗∗+

+++∗++∗++∗

++∗++∗∗+

∗=

5674670123

0123567467

56746732

1IRIRIRIRIRIRIRIRIRIR

IRIRIRIRIRIRIRIRIRIR

IRIRIRIRIRIRIRIRCJNEMUX

CJNEMUXSUL

Figura 129. Dispositivo diseñado en el entorno gráfico de Altera LOGALU.

Page 158: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

158

Cjnemux. Este dispositivo fue diseñado en VHDL y tiene como función dar una

salida alta cuando la instrucción que está cargada en el registro IR es: cjne

@Ri,#data,rel o cjne Rn,#data,rel. Tiene una única entrada para el código de

instrucción IR[7..0] y una única salida s (ver figura 130).

Figura 130. Dispositivo diseñado en lenguaje de descripción hardware VHDL

CJNEMUX.

Cjnemux1. Este dispositivo fue diseñado en VHDL y tiene como función dar una

salida baja cuando la instrucción que está cargada en el registro IR es: cjne

A,#data,rel o cjne A,direct,rel. Tiene una única entrada para el código de

instrucción IR[7..0] y una única salida s (ver figura 131).

Figura 131. Dispositivo diseñado en lenguaje de descripción hardware VHDL

CJNEMUX1.

10.2.3.12.3 Arreov. Este dispositivo se encarga de dar el indicador de

desbordamiento OVERFLOW al registro PSW, a partir de unas señales de

Page 159: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

159

desbordamientos aisladas, como lo son: la señal de desbordamiento por adición,

por multiplicación y por división.

Tiene una entrada de desbordamiento por adición OVA, una entrada de

desbordamiento por división OVD, una entrada de desbordamiento por

multiplicación OVM, una entrada de la palabra de operación IR[7..0] y una única

salida Q (ver figura 132). Para ver código referirse al anexo A.

Figura 132. Dispositivo diseñado en lenguaje de descripción hardware VHDL

ARREOV.

Para desarrollar el dispositivo unidad aritmética lógica, se encontraron una serie

de similitudes en las palabras de operación y se formaron grupos. Las

instrucciones INC y DEC están en un grupo; las instrucciones de ADD, ADDC y

SUBB están otro grupo; las instrucciones OR, ANL y XRL están en un tercer grupo;

las instrucciones CPL C, CLR C, SETB C, ORL C,/bit, ANL C,/bit, MOV C,bit, MOV

bit,C, ANL C,bit, CPL bit, CLR bit, SETB bit y ORC,bit están en un cuarto grupo; las

instrucciones JBC, JB, JNB, JC, JNC, JZ, y JNZ están en un quinto grupo; las

instrucciones de llamado a subrutina y salto absoluto están en un sexto grupo; las

instrucciones de almacenamiento están en un séptimo grupo; las instrucciones

Page 160: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

160

SWAP, DA, CLR A y CPLA están en un octavo grupo y las instrucciones de salto

DJNZ y CJNE están en otro grupo. Estos grupos fueron formados por similitud de

en las instrucciones y tomando encuentra los bits menos significativos del nibble

alto de la palabra de operación.

El dispositivo PUREBA4 tiene una frecuencia máxima de funcionamiento de

51.28MHz y un retardo máximo en la salida de 50.7ns.

Veamos el sumario de compilación del dispositivo y cuantos recursos del flex10k

necesita.

Figura 133. Sumario de compilación del dispositivo PRUEBA4.

10.2.3.13 Unidad_bits. Este dispositivo es el encargado de ejecutar todas las

operaciones que se hacen con bits, tales como MOV C,bit, CLR bit, JB bit,rel, etc.

Tiene una entrada de la palabra de operación IR[7..0], una entrada de datos

DATOIN[7..0], una entrada de selección de bits BITS[2..0], una entrada de acarreo,

una entrada indicadora de cero en el acumulador Z, una entrada indicadora de

salto, una entrada de habilitación de salida al bus EOBIT, una entrada indicadora

de acarreo por adición, una entrada indicadora de acarreo por unidad de

intercambio de la ALU, una entrad indicadora de acarreo por unidad de

Page 161: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

161

corrimiento de la ALU, una entrada de acarreo por dispositivo CJNE de la ALU, una

salida indicadora de salto S, una salida de acarreo COUT y una salida de datos al

bus DATOUT[7..0] (ver figura 134).

Figura 134. Dispositivo diseñado en ele entorno gráfico de Altera UNIDAD_BITS.

En su interior este dispositivo está compuesto por tres dispositivos. PRUBIT,

ARRECARRY, TRI y SALTOARRE (ver figura 135).

Figura 135. Esquema del dispositivo UNIDAD_BITS.

Page 162: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

162

10.2.3.13.1 Prubit. Este dispositivo es el encargado de hacer las operaciones con

bits, él recibe en una entrada el byte que contiene bit y en otra la codificación del

bit requerido. Aparte de estas entradas posee una entrada para al acarreo, la

bandera de cero y la señal indicadora de salto. Como salida tiene: una salida de

acarreo, una salida indicadora de salto que va a la máquina de estados y una

salida de datos al bus DATOOUT[7..0] (ver figura 136).

Este dispositivo primero saca el bit necesario para realizar la instrucción, después

dependiendo del valor de la entrada IR[7..0] ejecuta la operación con la ayuda de

CIN, Z y R; finalmente acomoda el bit resultante en el byte y lo coloca a la salida.

Para ver código referirse al anexo A.

Figura 136. Dispositivo diseñado en lenguaje de descripción hardware VHDL

PRUBIT.

10.2.3.13.2 Arrecarry. Este dispositivo se encarga de escoger cual de las entradas

CADDER, CEXCH, CCORR, CCJNE y CBIT va a la salida, dependiendo del código de

operación que se encuentre en la entrada IR[7..0] (cumple una función de

multiplexor) (ver figura 137). Para ver código referirse al anexo A.

Page 163: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

163

Figura 137. Dispositivo diseñado en lenguaje de descripción hardware VHDL

ARRECARRY.

10.2.3.13.3 Saltoarre. El dispositivo Saltoarre fue diseñado en lenguaje VHDL,

Tiene una entrada para el estado actual SA[4..0], una entrada para el código de

operación IR[7..0], una entrada indicadora de salto SQ, una salida indicadora de

salto s. Su función es generar la salida indicadora de salto que va conectada a la

máquina de estados (ver figura 138). Para ver código referirse al anexo A.

Figura 138. Dispositivo diseñado en lenguaje de descripción hardware VHDL

SALTOARRE.

10.2.3.13.4 Compilación del dispositivo Unidad_bits. Debido a que este

dispositivo no cuenta con una señal de reloj, no podemos obtener la frecuencia

máxima de funcionamiento, pero si el retardo máximo en la salida que es de

52.8ns. Veamos el sumario de compilación de este dispositivo.

Page 164: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

164

Figura 139. Sumario de compilación del dispositivo UNIDAD_BITS

10.2.3.14 Arre_ramex. Este dispositivo se encarga de escoger entre memoria

interna o memoria externa. Tiene una única entrada de instrucción IR[7..0] con la

que selecciona la memoria externa o interna y una salida de selección de

memoria (ver figura 140), cuando la salida es “10” la memoria seleccionada es la

externa y cuando el valor de la salida es “01” la memoria seleccionada es la

interna.

Figura 140. Dispositivo diseñado en lenguaje descripción hardware VHDL

ARRE_RAMEX.

10.3 MAQUINA DE ESTADOS DEL FLEX51

La máquina de estados es dispositivo de control más importante del

microcontrolador embebido FLEX51, fue diseñado en lenguaje AHDL puesto que

es mucho más fácil su implementación y corrección a la hora de presentarse

cualquier error, su función es señalar el estado a seguir dependiendo del código

de operación y las banderas de interrupción y salto. El nombre de este dispositivo

Page 165: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

165

es CPU. Utiliza de 22 estados para llevar a cabalidad todo el set de instrucciones

del 8051 y cada estado se realiza en un pulso de reloj.

Este dispositivo tiene una entrada de reloj CLK, una entrada de clareo RESET, una

entrada indicadora de interrupción, una entrada indicadora de salto, una entrada

para el código de operación y una única salida indicadora del estado siguiente

SA[4..0] (ver figura 141).

Figura 141. Dispositivo diseñado en lenguaje de descripción hardware AHDL CPU.

Veamos cuantos estados requiere cada tipo de instrucción en los diferentes

grupos (una tabla para cada grupo de instrucciones), y recordemos que el número

de estados es igual que el número de ciclos de reloj, puesto que el

microcontrolador embebido Flex51 no cumple con el estándar de 12, 24 y 48

ciclos de reloj para ejecutar una instrucción.

Tabla 14. Tabla de operaciones aritméticas con su número de estados

MNEMONICO BYTE ESTADOS

ADD A,Rn 1 6

Page 166: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

166

ADD A,direct 2 5

ADD A,@Ri 1 8

ADD A,#data 2 4

ADDC A,Rn 1 6

ADDC A,direct 2 5

ADDC A,@Ri 1 8

ADDC A,#data 2 4

SUBB A,Rn 1 6

SUBB A,direct 2 5

SUBB A,@Ri 1 8

SUBB A,#data 2 4

INC A 1 3

INC Rn 1 6

INC direct 2 5

INC @Ri 1 8

DEC A 1 3

DEC Rn 1 6

DEC direct 2 5

DEC @Ri 1 8

INC DPTR 1 3

MUL AB 1 5

DIV AB 1 5

DA 1 3

Page 167: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

167

Tabla 15. Tabla de operaciones lógicas con su número de estados

MNEMONICO BYTE ESTADOS

ANL A,Rn 1 6

ANL A,direct 2 5

ANL A,@Ri 1 8

ANL A,#data 2 4

ANL direct,A 2 5

ANL direct,#data 3 6

ORL A,Rn 1 6

ORL A,direct 2 5

ORL A,@Ri 1 8

ORL direct,A 2 5

ORL direct,#data 2 6

ORL A,#data 3 4

XRL A,Rn 1 6

XRL A,direct 2 5

XRL A,@Ri 1 8

XRL A,#data 2 4

XRL direct,A 2 5

XRL direct,#data 3 6

CLR A 1 3

CPL A 1 3

RL A 1 3

RLC A 1 3

Page 168: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

168

RR A 1 3

RRC A 1 3

SWAP A 1 3

Tabla 16. Tabla de operaciones de transferencia de datos con su número de

estados.

MNEMONICO BYTE ESTADOS

MOV A,Rn 1 5

MOV A,direct 2 4

MOV A,@Ri 1 7

MOV A,#data 2 4

MOV Rn,A 1 4

MOV Rn,direct 2 6

MOV Rn,#data 2 5

MOV direct,A 2 5

MOV direct,Rn 2 7

MOV direct,direct 3 7

MOV direct,@Ri 2 9

MOV direct,#data 3 5

MOV @Ri,A 1 6

MOV @Ri,direct 2 7

MOV @Ri,#data 2 7

MOV DPTR,#data16 3 4

Page 169: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

169

MOVC A,@A+DPTR 1 4

MOVC A,@A+PC 1 4

MOVX A,@Ri 1 7

MOVX A,@DPTR 1 4

MOVX @Ri,A 1 6

MOVX @DPTR,A 1 3

PUSH direct 2 6

POP direct 2 7

XCH A,Rn 1 7

XCH A,direct 2 6

XCH A,@Ri 1 9

XCHD A,@Ri 1 9

Tabla 17. Tabla de operaciones de manipulación de variables booleanas con su

número de estados.

MNEMONICO BYTE ESTADOS

CLR C 1 3

CLR bit 2 7

SETB C 1 3

SETB bit 2 7

CPL C 1 3

CPL bit 2 7

ANL C, bit 2 7

Page 170: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

170

ANL C,/bit 2 7

ORL C, bit 2 7

ORL C,/bit 2 7

MOV C,bit 2 7

MOV bit,C 2 7

JC rel 2 5

JNC rel 2 5

JB rel 3 9

JNB rel 3 9

JBC rel 3 10

Tabla 18. Tabla de operaciones de salto de programa con su número de estados

MNEMONICO BYTE ESTADOS

ACALL addr11 2 8

LCALL addr16 3 9

RET 1 7

RETI 1 7

AJMP addr11 2 4

LJMP addr16 3 4

SJMP rel 2 6

JMP @A+DPTR 1 4

JZ rel 2 5

JNZ rel 2 5

Page 171: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

171

CJNE A,direct,rel 3 7

CJNE A,#data,rel 3 7

CJNE Rn,#data,rel 3 10

CJNE @Ri,#data,rel 3 12

DJNZ Rn,rel 2 8

DJNZ direct,rel 3 7

NOP 1 3

Veamos que función cumple cada uno de los estados en la CPU (también ver

figura 142).

S0: Este estado se encarga únicamente de generar la señal de carga en el registro

de instrucciones IR.

S1: Este estado se encarga de interpretar el código de la instrucción.

S2: Se encarga de finalizar la ejecución de la instrucción y de escoger el estado

siguiente cuando se ha presentado una interrupción.

S3: Este estado es muy utilizado en instrucciones de direccionamiento inmediato y

su función es cargar los resultados en los registros o posiciones de memoria

finales.

Page 172: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

172

Figura 142. Máquina de estados del FLEX51.

S4: Este estado se usa generalmente en instrucciones de direccionamiento

indirecto y su función es acomodar la dirección del registro que se usa en la

instrucción en el registro TMPL de la unidad AGU.

S5: Este estado cumple diferentes funciones, tales como: guardar en la memoria

de datos y colocar la dirección en el bus para utilizar la memoria de datos.

Page 173: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

173

S6: Este estado se encarga de acomodar la dirección del registro o posición de

memoria que se usa en la instrucción para cuando se utiliza direccionamiento

directo.

S7: Este estado al igual que S3 se utiliza para cargar los resultados de las

operaciones en los registros y posiciones de memoria finales.

S8: La función de este estado es habilitar la salida de los datos al bus en la unidad

de bits.

S9: Su función es habilitar la carga de datos en el registro B cuando se genera una

petición de interrupción.

S10: Se usa comúnmente en operaciones de direccionamiento indirecto como un

estado de espera, debido a que la memoria de datos es sincronía y se demora un

estado en realizar las operaciones.

S11: Este estado se utiliza como estado mixto pues cumple diversas funciones

dando soporte a los demás estados (ejemplo: estado de espera, lectura de la

memoria de datos, etc).

S12: Es el encargado de decidir a cual estado sigue (S2 o S15) en las instrucciones

de salto.

Page 174: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

174

S13: Este estado cumple funciones de estado de espera, estado nulo y carga en el

registro TMP2 de la ALU.

S14: Se ocupa de cargar el resultado bajo de la suma (PC + rel) en las operaciones

de salto.

S15: Se ocupa de cargar el resultado alto de la suma (PC + rel) en las operaciones

de salto.

S16: Este estado habilita la salida baja de la dirección del vector de interrupción.

S17: Este estado habilita el incremento del registro SP.

S18: Este estado cumple la función de escritura en la memoria el valor contenido

de la parte baja del PC y habilitación de incremento del registro SP.

S19: Este estado cumple la función de escritura en la memoria el valor contenido

de la parte alta del PC.

S20: Este estado se encarga de cargar en la parte alta del PC el contenido del

registro temporal 1 de la ALU.

S21: Este estado se encarga de cargar en la parte baja del PC el contenido del

registro temporal 2 de la ALU.

Page 175: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

175

Veamos el ejemplo de cómo se ejecuta la instrucción DJNZ Rn,rel: En esta

instrucción se utilizan 9 estados. En el estado S0 se genera la señal de carga del

registro de instrucciones; en el estado S1 se interpreta el código de la instrucción;

se selecciona la salida 3 al bus interno y la carga del TMPL de la AGU; en el

estado S5 se habilita la salida del contenido del TMPH y TMPL al bus de

direcciones; en el estado S11 se carga la salida del dato del banco de registros y

se carga en el registro TMP2 de la ALU para ser decrementado; en el estado S7 se

carga el resultado en banco de registros nuevamente; en el estado S12 se habilita

la lectura de la memoria de programa y carga dato en TMP2 de la ALU; el estado

S15 se ejecuta si la bandera indicadora de salto está activa, este estado habilita la

salida del TMP2 para generar la parte baja del dato que se suma en la AGU para

las operaciones con saltos y el resultado alto se carga en el PCH; el estado S14

habilita la salida del TMP2 y carga el resultado bajo del sumador de la AGU en el

PCL; por ultimo este estado selecciona la actualización de la bandera de paridad.

Si no se genera una señal alta en la bandera indicadora de salto, se pasa del

estado S12 al estado S2.

Después de haber desarrollado cada una de las partes del microntrolador FLEX51,

veamos cuantos recursos del dispositivo FLEX10K utiliza y cual es la velocidad

máxima alcanzada (ver figura 143).

Page 176: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

176

Figura 143. Sumario de compilación del microcontrolador FLEX51.

La frecuenta máxima del microcontrolador FLEX51 para este primer desarrollo de

él es de 5.17MHz y tiene un retardo máximo de 54ns. Hay que tener en cuenta

que este es un primer paso, y que aun faltan muchas adaptaciones y mejoras que

se pueden realizar en fututos trabajos de tesis.

Page 177: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

177

11. PERIFERICOS DEL FLEX51

En esta sección se mostrarán los dispositivos periféricos con los que cuenta el

microcontrolador embebido Flex51, como son la unidad serial, la unidad de

temporizadores y la unidad de interrupciones.

Estos dispositivos hay que dejar muy claro que son dispositivos adicionales y que

no tienen que ver en nada con el cumplimiento de funcionamiento del set de

instrucciones del 8051, por tal motivo estos dispositivos no son diseñados

fielmente al estándar del 8051 en su arquitectura, pero si en su funcionamiento.

11.1 UNIDAD SERIAL

Este es un dispositivo periférico del Flex51, trasmite y recibe 10 bits (un bit de

inicio de transmisión que es cero, 8 bits de datos y el bit de stop que es uno) y no

es guiado por alguno de los modos de operación serial del microcontrolador

8051. Para seleccionar la velocidad utiliza una fórmula que veremos con mayos

detenimiento al final de esta sección.

Consta de 8 entradas de 1 bit (entrada de clareo CLR, entrada de carga del

registro sbuf LD, entrada de selección del registro sbuf N11, entrada de reloj CLK,

entrada de carga del generador de rata de baudios, un habilitador de salida ED,

una entrada serial RX y una entrada de selección del registro scon N12) y una

Page 178: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

178

entrada de datos de 8 bits. Tiene una salida de bandera de interrupción INTS, una

salida de transmisión serial de 1 bit y una salida de datos de 8 bits (ver figura

144).

Figura 144. Dispositivo diseñado en el entorno grafico de ALTERA

UNIDAD_SERIAL.

Este dispositivo está compuesto principalmente por una unidad de transmisión

serial, una unidad de recepción serial, un preescaler y el registro SCON.

11.1.1 Unidad de transmisión. Su función es realizar la operación de transmisión.

Este dispositivo tiene una entrada de reloj CLK global, una entrada de reloj

proveniente del dispositivo PREESCALER, una entrada de carga de datos en el

generador de rata de baudios FCLK, una entrada de clareo CLR, una entrada de

datos DATO[7..0], una entrada de carga del registro de transmisión LD y una

entrada de selección de registro N11. Como salida tiene una señal de transmisión

serial TX y una bandera de interrupción de transmisión (ver figura 145).

Page 179: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

179

Figura 145. Dispositivo diseñado en el entorno grafico de ALTERA TRANSMISION.

Este dispositivo en su interior esta constituido por los siguientes dispositivos:

BAUDRATE, REG8B, REG8BTRANS, MQTX, CONTBAUDRATE y FFD1 (algunos de

estos dispositivos fueron descritos en capítulos anteriores) (ver figura 146).

Figura 146. Esquema del dispositivo TRANSMISION.

Page 180: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

180

El funcionamiento de este dispositivo es el siguiente: El dispositivo BAUDRATE

almacena un valor con el cual se genera la señal para la transmisión en forma de

pulsos y con un intervalo de tiempo definido en baudios (ejemplo: una

transmisión a 9600 baudios); esta señal se lleva a un contador CONTBAUDRATE,

quien después de un número definido (11) genera la señal de fin a la maquina de

estados de este dispositivo. Por otro lado para empezar a transmitir este

dispositivo, se carga primero el valor en el registro REG8B, esta señal de carga es

el inicio para la máquina de estados del dispositivo, el dato se desplaza en el

dispositivo REG8BTRANS que tiene como salida serial TX. Una vez el dispositivo

CONTBAUDRATE cuenta los 11 pulsos y se genera la señal de fin, se deja de

desplazar el dato y la máquina de estados genera la bandera de interrupción T1.

Cuando no está transmitiendo nada la en la salida TX hay un uno.

11.1.1.1 Baudrate. Este dispositivo se encarga de generar la rata de baudios de

transmisión. Su funcionamiento es el siguiente: se almacena un dato, el cual es el

valor es el inicio del contador, cuando el contador se desborda genera un pulso

alto; en su primer conteo el dispositivo empieza en el dato más la mitad del valor

restante.

Consta de una entrada de reloj CLK, una entrada de carga L, una entrada de

habilitación de conteo, una entrada de datos A[7..0] y una salida M (ver figura

147).

Page 181: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

181

Este dispositivo está dispuesto en la posición de memoria 97h. Para ver su código

referirse al anexo A.

Figura 147. Dispositivo diseñado en lenguaje de descripción hardware VHDL

BAUDRATE.

11.1.1.2 Mqtx. Este dispositivo es la máquina de estados de transmisión y cuenta

con cuatro estados; tiene una entrada de reloj, una entrada de clareo, una entrada

de inicio y una entrada de fin. Sus salidas son: clareo de contador CLEAR, señal

desplazamiento SEND, señal de carga en registro de desplazamiento LOAD y la

señal de bandera de interrupción T1 (ver figura 148). Para ver el código de este

dispositivo referirse al anexo B.

Figura 148. Dispositivo diseñado en lenguaje de descripción hardware AHDL

MQTX.

Page 182: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

182

11.1.2 Unidad de recepción. Su función es recibir los datos que lleguen de manera

serial en el pin RX. Este dispositivo tiene entrada de reloj CLK global, una entrada

de reloj proveniente del dispositivo preescaler, una entrada de recepción serial

RX, una entrada de datos DATO[7..0], una entrada de habilitación global SFRs ED,

una entrada de selección de registro N11 (SBUF) y una entrada de carga de datos

del dispositivo generador de rata de baudios de recepción. Como salida tiene la

bandera de interrupción de recepción serial R1 y la de datos DATOUT[7..0] (ver

figura 149).

Este dispositivo en su interior se conforma por: FFD, FFD1, REG8B, REG8BREPC,

TRI, CONTBAUDRATE1 (ver figura 150).

Figura 149. Dispositivo diseñado en el entorno grafico de ALTERA RECEPCION.

Page 183: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

183

Figura 150. Esquema del dispositivo RECEPCION.

El dispositivo funciona de la siguiente manera: primero se debe cargar siempre el

dato en el dispositivo BAUDRATE1 para generar la rata de baudios de recepción,

una vez se ha hecho este proceso se está listo para recibir datos; en la entrada RX

siempre se detecta un uno, cuando esta señal cambia a cero da el inicio de

recepción a la máquina de estados, por ende la máquina de estados le da el inicio

al contador CONTBAUDRATE1 y al registro de desplazamiento. Cuando el

contador llega al tope genera la señal de fin que va a la máquina de estados y esta

da la señal de carga en el registro de salida REG8BREPC; la salida al bus de datos

es controlada por un dispositivo TRI.

Page 184: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

184

11.1.2.1 Mqrx. Este dispositivo es la máquina de estados de recepción y cuenta

con tres estados; tiene una entrada de reloj CLK, una entrada de clareo RESET, una

entrada de inicio STAR y una entrada de fin. Sus salidas son: clareo de contador

CLEAR, señal desplazamiento E, señal de carga en registro de salida LOADSBUF y

la señal de bandera de interrupción R1 (ver figura 151). Para ver el código de este

dispositivo referirse al anexo B.

Figura 151. Dispositivo diseñado en lenguaje de descripción hardware AHDL

MQRX.

11.1.3 Preescaler. Este dispositivo es que gran importancia dentro de la unidad

serial, puesto que como la frecuencia de reloj en la mayoría de los casos es muy

grande, es necesario dividir esa frecuencia. Este dispositivo divide la frecuencia en

2, 4, 8, 16, 32 y 64 (ver figura 152).

Figura 152. Dispositivo diseñado en el entorno grafico de ALTERA PREESCALER.

Page 185: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

185

Este dispositivo se compone en su interior por un contador CONT_REG6B y un

multiplexor MUXPREES. El funcionamiento de este dispositivo es el siguiente: la

señal de reloj global llega a la entrada de reloj del contador, la salida del contador

Q[5..0] se lleva a las entradas del multiplexor, finalmente la salida del multiplexor

es seleccionada por la entrada S[2..0] que viene de SCON[4..3](ver figura 153).

Figura 153. Esquema del dispositivo PREESCALER.

11.1.4 Scon. Este dispositivo cumple las funciones del registro SCON del

microcontrolador 8051. Tiene una entrada de carga de datos SLOAD, una entrada

de clareo SCLR, una entrada de reloj, entrada de la bandera de interrupción por

transmisión, una entrada de la bandera de interrupción por recepción, una

entrada de datos D[7..0] y una entrada de habilitación de salida al bus de datos.

Tiene una salida al bus de datos Q[7..0] y una salida Q1[4..2] (ver figura 154) que

se conecta a la entrada de selección del dispositivo preescaler.

Page 186: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

186

Figura 154. Dispositivo diseñado en el entorno grafico de ALTERA SCON.

Este dispositivo se compone por el registro REGSCON, el dispositivo CABLE y el

dispositivo TRI. El funcionamiento de este dispositivo es el siguiente: el

dispositivo REGSCON puede variar su contenido por una señal de carga SLOAD,

una señal de clareo SCLR, la bandera de interrupción por transmisión y la bandera

de interrupción por recepción (en estos casos se modifica algunos bits), cuando

ninguna de estas señales están presentes el registro se encuentra en constante

retroalimentación por medio del dispositivo CABLE. La salida al bus de datos pasa

primero por el dispositivo TRI y la salida que se lleva al dispositivo PREESCALER se

toma directamente de la salida del registro (ver figura 155).

Figura 155. Esquema del dispositivo SCON.

Page 187: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

187

11.1.5 Funcionamiento general de la unidad serial. El funcionamiento de esta

unidad es muy sencillo, primero se debe asegurar la carga del valor calculado en

el dispositivo BAUDRATE y acomodar el dispositivo preescaler para generar la rata

de baudio necesaria para la comunicación, una vez hecho esto ya está listo para

iniciarse la comunicación.

La comunicación empieza cuando se da la instrucción MOV SBUF,#dato o MOV

dir_SBUF,#dato en el caso de ser una transmisión y cuando cambia de alto a bajo

en la entrada RX en el caso de ser una recepción.

Figura 156. Esquema del dispositivo UNIDAD_SERIAL. a)Preescaler, b)Transmisión,

c)recepción, d)scon.

Page 188: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

188

11.1.6 Fórmula para generar la rata de baudios. La fórmula para calcular el

número que se debe cargar en el dispositivo BAUDRATE y BAUDRATE1 y generar

los pulsos para operación de transmisión o recepción es:

baudiosrataFCLKx_

256 −=

La variable FCLK es la frecuencia de reloj después de ser divida por el dispositivo

preescaler y la variable rata_baudios, es la rata de baudios necesaria para llevar a

cabo la comunicación (por ejemplo: 300, 1200, 2400, 4800, 9600 baudios, etc).

Para lograr una transmisión a 9600 debe cargar 0c0H en el registro SCON y 0d7H

en la posición de memoria 97H.

Veamos el sumario de compilación de este dispositivo.

Figura 157. Sumario de compilación de la unidad serial.

La frecuencia máxima de este dispositivo es de 29.06MHz y su retardo máximo es

de 37ns.

Page 189: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

189

11.2 UNI_INTERRUPCIONES

Este dispositivo fue diseñado en el entorno gráfico de altera y está compuesto por

dispositivos flp-flops, decodificadores y máquinas de control. La función principal

de este dispositivo es generar la señal indicadora de interrupción a partir de una

selección entre las cinco posibles fuentes de interrupción, para obtener esta señal

resultante se toma muy en cuenta el registro IE e IP (registro de habilitación de

interrupciones y registro de prioridad de interrupciones).

Tiene una entrada de reloj CLK, una entrada de clareo CLR, una entrada global de

carga LINT, una entrada global de habilitación de salida al bus de datos, una

entrada selectora de registro SFRs N[5..4], , una entrada para la bandera de

interrupción por desbordamiento de timer 0 y 1 TF[1..0], una entrada de clareo CL

para el primer decodificador, una entrada de clareo D para el segundo

decodificador, dos entrada de habilitación de salida al bus X[42..41], una salida

indicadora de de interrupción INT y una salida para datos INTEROUT[7..0] (ver

figura 158).

Figura 158. Dispositivo diseñado en el entorno grafico de ALTERA

UNI_INTERRUPCIONES.

Page 190: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

190

11.2.1 Funcionamiento general del dispositivo UNI_INTERRUPCIONES. El

funcionamiento de este dispositivo es el siguiente: como primera medida para

que alguna interrupción pueda ser atendida, esta debe ser habilitada en el

registro IE. Bien, una vez se tiene señalada la interrupción que se va a utilizar se

lleva a un arreglo de compuertas AND para habilitar los flip-flops de entrada,

estos flip-flops generan una entrada del dispositivo INTERRUP (E[4..0]) que junto

con la entrada IP[4..0] hacen que la máquina de estados seleccione el vector de

interrupción deseado. La salida de la máquina de estados es llevada al

decodificador 2 (DECINT) y luego al arreglo de flip-flops de la salida, para

finalmente con ayuda de una compuerta OR de cinco entradas se genera la señal

de interrupción que es lleva al dispositivo CPU. Veamos el diagrama esquemático

de esta unidad (ver figura 159).

Page 191: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

191

Figura 159. Esquema del dispositivo UNI_INTERRUPCIONES. a)arreglo de flip-flops

1, b) registro IR, c)registro IP, d)decodificador de interrupciones 1, e)interrup,

f)decodificador de interrupciones 2, g)arreglo de slip-flops 2.

Figura 160. Sumario de compilación del dispositivo UNI_INTERRUPCIONES.

Page 192: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

192

La frecuencia máxima de este dispositivo es de 21.50MHz y su retardo máximo es

de 35ns.

11.2.2 INTERRUP. Este dispositivo equivale a la máquina de estados de la unidad

de interrupciones y se diseño en lenguaje AHDL. Consta de seis estados, en donde

el estado cero es un estado de no actividad y los estados siguientes son de

selección de vector de interrupción.

Tiene una entrada de selección de interrupción IE[4..0], una entrada de selección

de prioridad IP[4..0], una entrada de reloj y una única salida Q[5..0] (ver figura

161). Para ver su código referirse al anexo B.

Figura 161. Dispositivo diseñado en lenguaje de descripción hardware AHDL

INTERRUP.

Los demás dispositivos que forma la unidad de interrupciones fueron descritos en

capítulos anteriores.

Page 193: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

193

11.3 UNIDAD DE TIMERS

Esta unidad es uno el único de dispositivos periféricos implementados para el

microcontrolador embebido flex51 que su arquitectura emula el funcionamiento

de todos modos que funcionan en el microcontrolador 8051.

La unidad de timers tiene una entrada de datos dato_in[7..0], una entrada de

clareo RESET, una entrada de reloj CLK, entrada de carga de datos global LBREG,

una entrada de habilitación de salida EOTIMER, una entrada de interrupción

externa /INT[1..0], una entrada de habilitación de dispositivo de la zona de

funciones especiales S[19..14], una salida de bandera de interrupción por de

desbordamiento de temporizador 0 TF0, una salida de bandera de interrupción

por desbordamiento de temporizador 1 TF1 y una salida de datos al bus

TIMEROUT[7..0] (ver figura 162).

Figura 162. Dispositivo diseñado en el entorno gráfico de Altera UNI_TIMER-

COUNTER.

Page 194: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

194

Vemos las características de los modos de funcionamiento de la unidad de

temporizadores y contadores que se implementaron en el Flex51.

Modo 0. En este modo el registro temporizador se configura como registro de 13

bits y cuando se desborda genera una bandera TF1. La entrada del temporizador

es habilitada por una señal alta en TR1 And con la salida de una operación OR

entre la entrada /INT =1 y GATE = 0. En el caso que GATE sea 1 todos

temporizadores son controlados por entrada externa /INT. De igual forma

funciona para el temporizador contador 0.

Modo 1. Este modo tiene el mismo funcionamiento del modo 0 pero con un

registro de 16 bits. De igual forma funciona para el temporizador contador 0.

Modo 2. En este modo se configura el registro temporizador como un contador de

8 bits TL1 con recarga automática, o sea que cuando se desborda el temporizador

TL1, es cargado con el valor contenido en el registro TH1. De igual forma

funciona para el temporizador contador 0.

Modo 3. En este modo el temporizador 1 no entra en funcionamiento, por el

contrario el temporizador 0 se convierte en dos contadores separados TL0 y TH0,

donde el contador TL0 mantiene sus señales de control y de salida propias (TR0,

INT0, TF0), mientras que el contador TH0 utiliza las señales de control del

temporizador 1 (TR1,TF1).

Page 195: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

195

Veamos la unidad timer-counter por etapas:

Figura 163. Esquema del temporizador cero.

Figura 164 Esquema del temporizador uno.

Page 196: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

196

Figura 165 Esquema de la salida de la unidad timer-counter. a)TCON, b)TMOD,

c)arreglo de salidas.

Veamos el sumario de compilación de este dispositivo en la figura 166.

Page 197: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

197

Figura 166. Sumario de compilación del dispositivo TIMER-COUNTER.

La frecuencia máxima de este dispositivo es de 15.01MHz y tiene un retardo

máximo de 43.8ns.

11.3.1 Tcon. Este dispositivo cumple las funciones del registro TCON del

microcontrolador 8051. Tiene una entrada de carga de datos SLOAD, una entrada

de clareo SCLR, una entrada de reloj, una entrada de la bandera de interrupción

por desbordamiento del temporizador 0, una entrada de la bandera de

interrupción por desbordamiento del temporizador 1, una entrada de las banderas

de interrupción externas IE[1..0], una entrada de datos D[7..0] y una entrada de

habilitación de salida al bus de datos OC. Tiene una salida al bus de datos Q[7..0]

y una salida Q1[7..0] (no es una salida tri-estado) (ver figura 167).

Figura 167. Dispositivo diseñado en el entorno gráfico de altera TCON.

Page 198: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

198

Este dispositivo se compone por el registro REGTCON, el dispositivo CABLE y el

dispositivo TRI. El funcionamiento de este dispositivo es el siguiente: el

dispositivo REGTCON puede variar su contenido por una señal de carga SLOAD,

una señal de clareo SCLR, la bandera de interrupción por desbordamiento del

temporizador 0, la bandera de interrupción por desbordamiento del temporizador

1, la bandera de interrupción externa 0 y la bandera de interrupción externa 1 (en

estos casos se modifica algunos bits), cuando ninguna de estas señales están

presentes, el registro se encuentra en constante retroalimentación por medio del

dispositivo CABLE. La salida al bus de datos pasa primero por el dispositivo TRI y

la salida que es tri-estado se lleva como control de los dispositivos de esta unidad

(ver figura 168).

Figura 168. Esquema del dispositivo TCON.

El registro TMOD se implementó con el dispositivo STD_REG8B22 que fue

explicado en capítulos anteriores.

Page 199: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

199

12. PRUEBAS DE FUNCIONAMIENTO Y

VALIDACIÓN

En este capítulo veremos algunas pruebas realizadas con el microcontrolador

embebido Flex51, donde se comprueba el buen funcionamiento del mismo. Las

pruebas realizadas prueban el funcionamiento partes del Flex51, tales como: Los

puertos de entrada y salida, interrupciones externas, unidad de transmisión y

recepción serial, multiplicador, entre otros.

Cabe decir que el programa para cada una de las pruebas se desarrolló bajo el

software Keil uVision 7, el cual es un compilador para 8051; este software genera

un archivo con extensión HEX, que se carga en la memoria rom del Flex51, una

vez hecho esto se compila y se programa en el sistema UPX2.

Para poder implementar cada una de estas pruebas se tuvo que acondicionar un

entorno que ayudase al microcontrolador flex51 funcionar correctamente, por

ejemplo se tuvo que agregar unos decodificadores 7447 a la salida del puerto 2

para la prueba 1 y adicionar un dispositivo que dividiera la frecuencia de la señal

de reloj pues era demasiado grande (se divide por 8, 25MHz/8) (ver figura 169).

Page 200: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

200

Figura 169. Montaje de dispositivos en ALTERA para pruebas.

Veamos el montaje físico (ver figura 170).

Figura 170. Tarjeta UP2 y protoboard.

Page 201: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

201

12.1 PRUEBA 1: TABLAS DE MULTIPLICAR DE 4 X (0 - F). HEXADECIMAL

La finalidad de esta prueba es la de mostrar el buen funcionamiento de los

puertos de entrada y salida de datos, instrucciones usando el banco de registros,

instrucciones usando el acumulador y el registro b, y la operación multiplicación.

Esta prueba se creó pensando en utilizar los recursos que trae el sistema de

desarrollo UPX2, como el dip switch y el display siete segmentos.

Esta prueba consiste en almacenar un valor constante en el registro R2 del banco

de registros (en este caso el valor #04h) y el valor de entrada en el puerto P0 se

almacena en el acumulador, luego el valor contenido en el registro R2 se lleva al

registro b para realizarse la multiplicación entre A y B. El resultado del contenido

en el acumulador se lleva al puerto P2. Para ver sumario de compilación ver figura

171.

El código de la prueba es el siguiente.

org 0000h

s: mov r2,#4h

mov a,p0

mov b,r2

mul ab

mov p2,a

ljmp s

end

Page 202: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

202

Figura 171. Sumario de compilación del FLEX51 con el programa de la prueba 1.

Veamos la simulación de esta prueba, primero se carga el número 4 en el registro

R2 con la instrucción 7Ah, luego se ingresa el número 2 por el puerto 0 con la

instrucción E5h en el estado S3, seguidamente cargamos el valor del registro R2

en el registro B con la instrucción 8Ah en el estado S7, después se realiza la

multiplicación entre A y B (A4h), finalmente se carga el valor de A en el puerto 2

con la instrucción F5h justamente en el cambio del estado S7 al estado S2.

Figura 172. Simulación de la prueba 1 en donde se multiplica 4 h x 2h.

12.2 PRUEBA 2: CONTADOR DE EVENTOS

La finalidad de esta prueba es la de mostrar el buen funcionamiento de los

puertos de salida, las interrupciones externas, las instrucciones usando

direccionamiento indirecto.

Page 203: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

203

Esta prueba consiste en habilitar la interrupción externa 1 en el registro IE de la

zona de registro de funciones especiales y quedarse esperando en un loop,

cuando es activada la interrupción vamos a la subrutina incrementamos

indirectamente (inc @r1) y finalmente le damos salida por el puerto P2.

El código de la prueba es el siguiente.

org 0000h

mov ie,#84h

ljmp $

org 0013h

inc @r1

mov p2,@r1

reti

end

Veamos un diagrama de bloques del montaje de esta prueba (ver figura 172) y el

sumario de compilación (ver figura 173).

Figura 173. Diagrama de bloques de la prueba 2.

Tarjeta UP2

De Display 7 segmentos P2

Reset

Pulsador

Page 204: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

204

Figura 174. Sumario de compilación del FLEX51 con el programa de la prueba 2

Veamos la simulación de esta prueba, en donde se produce una interrupción

externa. Como podemos ver se ejecutan las instrucciones de carga (75h) y se

queda en un loop (02h) esperando que ocurra una petición de interrupción

externa, cuando se presenta la interrupción se ejecutan las instrucciones que

están ubicadas a partir de la posición de memoria a la que apunta el vector de

interrupciones (las instrucciones son 07h, 87h y 32h, y el vector a punta a 0013h)

(ver figura 175).

Figura 175. Simulación de la prueba 2.

Veamos el circuito eléctrico de los pulsadores usan en la prueba.

Page 205: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

205

Figura 176. Circuito eléctrico de los pulsadores.

12.3 PRUEBA 3: TRANSMISIÓN SERIAL

En esta prueba se evalúan una variedad de factores, tales como: almacenamiento

de un dato a una posición de memoria, almacenamiento de una posición de

memoria a otra, salto si el bit es cero, datos almacenados en tablas, incremento

del banco de registros, clareo de bits, salto si el acumulador es cero, salto corto y

salto largo entre otros. Esta prueba se trata de mostrar en el hyperterminal un

mensaje guardado en una tabla en el micro y la tecla que se oprimió.

El código cargado en la memoria de programa del flex51 es el siguiente:

ORG 0000H

o: mov ie,#80h

mov 97h,#0d7h

mov scon,#0ch

loi: jnb scon.0,loi

clr scon.0

mov b,sbuf

mov DPTR,#TABLA_1

mov A,#00H

Page 206: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

206

mov r3,#00H

L0: movc A,@A+DPTR

inc r3

jz d

mov sbuf,A

s: jnb scon.1,s

clr scon.1

mov A,r3

sjmp L0

d: mov sbuf,b

y: jnb scon.1,y

clr scon.1

ljmp o

ORG 0040H

TABLA_1: db "FLEX51 ud digito: ",00

end

Veamos un diagrama de bloques del montaje de esta prueba (ver figura 174) y el

sumario de compilación (ver figura 175).

Page 207: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

207

Figura 177. Diagrama de bloques de la prueba 3.

Figura 178. Sumario de compilación del FLEX51 con el programa de la prueba 3

Veamos un ejemplo de esta prueba en el Hyper Terminal, cuando la persona

presiona la tecla d en el teclado aparece el mensaje “FLEX51 ud digito: ” y la tecla

digitada (ver figura 176).

Figura 179. Resultado de la prueba 3 en el Hyper Terminal.

Tarjeta

UP2 Computador

TX Reset

PulsadoCircuito

Rs-232

Page 208: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

208

El circuito Rs-232 que se montó es el siguiente.

Figura 180. Circuito RS-232.

El circuito eléctrico de los pulsadores es el siguiente.

Figura 181. Circuito eléctrico de los pulsadores.

Page 209: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

209

13. CONCLUSIONES

El desarrollo de un microcontrolador sintetizable sobre una FPGA, que cumple con

el set de instrucciones del microcontrolador 8051, será un punto de partida para

un sin número de nuevos proyectos y aplicaciones. Desde este punto de vista, el

trabajo realizado aporta un primer cimiento para el desarrollo de sistemas

embebidos, los cuales hoy por hoy son mas llamativos por su velocidad,

economía, espacio etc.

El diseño de la maquina de estados es la parte fundamental del desarrollo,

determinando los ciclos de reloj necesarios para ejecutar una instrucción. Aunque

dichos ciclos se minimizaron, inicialmente no se logro un estándar en cuanto a

numero de ciclos para ejecutar las instrucciones, (12, 24 y 48 ciclos de reloj para

ejecutar todas las instrucciones). Sin embargo, se logro acomodar los estados de

la maquina de estados para ejecutar las instrucciones en menor numero de ciclos

que la mayoría de versiones estándar del 80X51, ayudando así que el

funcionamiento sea un poco mas rápido.

Se pueden obtener sistemas procesadores compatibles con el set de instrucciones

del 80X51 más veloces, reconsiderando la tecnología de fabricación del

dispositivo lógico programable a usar, (Grado de velocidad, Capacidad de

integración, etc) y el tipo de estructura (Von Neuman o Harvard) a implementar.

Page 210: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

210

La arquitectura Von Neuman implementada, limita los tiempos de procesamiento

de información y la velocidad de ejecución de las instrucciones, sin embargo es

una solución que requiere menos recursos y es de mas fácil implementación que

una estructura Harvard. Se recomienda explorar nuevas configuraciones

(Hardvard, Pipe-Line), ya que, existen dispositivos FPGA’s con mayor capacidad de

almacenamiento, mayor grado de velocidad.

El diseño del sistema microcontrolador, permite utilizar como plataforma de

desarrollo, cualquier ensamblador que acepte los nomónicos del 80X51. Sin

embargo, algunas de las características del microcontrolador, (modos de bajo

consumo, banderas de usuario, entre otras) no están disponibles por la tecnología

y especificaciones del diseño propuesto.

Con la realización de este proyecto se plantea una propuesta viable para el

desarrollo de nuevas tecnologías hardware en Colombia y en específico por parte

de la Universidad, haciendo uso de los recursos y el talento existentes. El

producto final obtenido con la realización de este proyecto puede darse a conocer

con la intención de ser comercializado y dependiendo de su aceptación, pensar

en él como una opción laboral aprovechando que se cuenta con la experiencia

teórica y practica para su diseño y construcción.

Es importante resaltar, la flexibilidad de integración de periféricos, que hoy por

hoy permite un rápido prototipado de dispositivos a medida, sin desperdiciar así

recursos del microprocesador.

Page 211: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

211

14. RECOMENDACIONES

Para un futuro desarrollo de este microcontrolador embebido, se recomienda la

utilización de otra arquitectura como por ejemplo la HARVARD en donde el

procesamiento es más mucho más rápido o replantear el diseño de las unidades

ALU, AGU, CPU encontrando nuevas agrupaciones que favorezcan mucho más el

desempeño que el alcanzado con las planteadas en este trabajo.

Además de esto se recomienda eliminar algunas de las funciones del

microcontrolador, tales como el direccionamiento por bits y el banco de registros,

que retrazan en cierta manera los procesos, por depender de muchos factores.

La utilización de más registros temporales en la unidad ALU, sería de gran ayuda

en el desarrollo de las instrucciones, dando más soporte y haciendo que sean

necesarios menos estados para llevar a cabo la operación deseada.

Migrar a otras plataformas de diseño, ayudaría a una mejor sinterización del

diseño.

Page 212: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

212

BIBLIOGRAFIA

8051 [En línea] ALDEC, 2002: [Citada: 9 nov 2003]. Disponible por internet:

www.aldec.com. E-mail: [email protected]

8051[En línea] Digital Core Design, 2003: [Citada: 20 nov 2003]. Disponible por

internet: www.dcd.com.pl.

80c51 [En línea] Intel, 2003: [Citada: 15 oct 2003]. Disponible por internet:

http://www.hoeben.com/80C51_FAM_PROG_GUIDE_1.pdf

80c51 [En línea] Atmel, 2003: [Citada: 15 oct 2003]. Disponible por internet:

http://clubelec.enserg.fr/telechargement/Datasheets/controleur/ATMEL/89C52.

80c51 [En línea] Atmel, 2003: [Citada: 15 oct 2003]. Disponible por internet:

http://www.atmel.com/dyn/resources/prod_documents/doc0313.pdf

Max+plus 10.1 [En línea] Altera, 2003: [Citada: 16 oct 2003]. Disponible por

internet:

https://www.altera.com/support/software/download/altera_design/mp2_baseline

/dnl-baseline.jsp

Page 213: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

213

ANEXO A

CODIGO VHDL DEL DISPOSITIVO DEC2TO4.

Decodificador de dos entradas y cuatro salidas con enable.

library ieee;

USE ieee.std_logic_1164.all;

USE ieee.std_logic_signed.all;

USE ieee.std_logic_arith.all;

entity dec2to4 is

port( S: in std_logic_vector( 1 downto 0);

E: in std_logic;

D: out std_logic_vector(3 downto 0));

end entity;

architecture Op of dec2to4 is

begin

process (S,E)

begin

if(E = '0')Then

D <= "0000";

else

case S is

Page 214: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

214

when "00" => D<= "0001";

when "01" => D<= "0010";

when "10" => D<= "0100";

when "11" => D<= "1000";

when others=>D<= "0000";

end case;

end if;

end process;

end Op;

CODIGO VHDL DEL DISPOSITIVO DEC2TO4H.

Decodificador de dos entradas cuatro salidas sin enable

library ieee;

USE ieee.std_logic_1164.all;

USE ieee.std_logic_signed.all;

USE ieee.std_logic_arith.all;

entity dec2to4h is

port( S: in std_logic_vector( 1 downto 0);

D: out std_logic_vector(3 downto 0));

end entity;

architecture Op of dec2to4h is

begin

process (S)

Page 215: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

215

begin

case S is

when "00" => D<= "0001";

when "01" => D<= "0010";

when "10" => D<= "0100";

when "11" => D<= "1000";

when others=>D<= "0000";

end case;

end process;

end Op;

CODIGO VHDL DEL DISPOSITIVO DECOD127.

Decodificador de la zona de registros de funciones especiales, este código trabaja

a partir de un valor proveniente del bus datos, que para el caso de este

dispositivo es una dirección del registro en el banco de registros SFRs.

library ieee;

USE ieee.std_logic_1164.all;

USE ieee.std_logic_signed.all;

USE ieee.std_logic_arith.all;

entity decod127 is

port(sel: in std_logic_vector( 7 downto 0);

s: out std_logic_vector(20 downto 0));

end entity;

architecture operacion of decod127 is

begin

process

Page 216: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

216

begin

case sel is

when "11100000" => s<= "000000000000000000001";--ACC

when "11110000" => s<= "000000000000000000010";--B

when "10000011" => s<= "000000000000000000100";--DPH

when "10000010" => s<= "000000000000000001000";--DPL

when "10101000" => s<= "000000000000000010000";--IE

when "10111000" => s<= "000000000000000100000";--IP

when "10000000" => s<= "000000000000001000000";--P0

when "10010000" => s<= "000000000000010000000";--P1

when "10100000" => s<= "000000000000100000000";--P2

when "10110000" => s<= "000000000001000000000";--P3

when "11010000" => s<= "000000000010000000000";--PSW

when "10011001" => s<= "000000000100000000000";--SBUF

when "10011000" => s<= "000000001000000000000";--SCON

when "10000001" => s<= "000000010000000000000";--SP

when "10001000" => s<= "000000100000000000000";--TCON

when "10001100" => s<= "000001000000000000000";--TH0

when "10001101" => s<= "000010000000000000000";--TH1

when "10001010" => s<= "000100000000000000000";--TL0

when "10001011" => s<= "001000000000000000000";--TL1

when "10001001" => s<= "010000000000000000000";--TMOD

when "10010111" => s<= "100000000000000000000";--LBAUD

when others=> s<= "000000000000000000000";

end case;

end process;

end operacion;

Page 217: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

217

CODIGO VHDL DEL DISPOSITIVO DECINT.

Decodificador de la unidad de interrupciones de 6 entradas y 5 salidas. Su señal

de clareo es baja y carga “11111”, igualmente en la parte de selección de salida es

baja.

library ieee;

USE ieee.std_logic_1164.all;

USE ieee.std_logic_signed.all;

USE ieee.std_logic_arith.all;

entity decint is

port( S: in std_logic_vector( 5 downto 0);

CL: in std_logic;

D: out std_logic_vector(4 downto 0));

end entity;

architecture Op of decint is

begin

process (S)

begin

if(CL='0')then

D<="11111";

else

case S is

when "000000" => D<= "11111";

when "000011" => D<= "11110";

Page 218: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

218

when "001011" => D<= "11101";

when "010011" => D<= "11011";

when "011011" => D<= "10111";

when "100011" => D<= "01111";

when others=>D<= "11111";

end case;

end if;

end process;

end Op;

CODIGO VHDL DEL DISPOSITIVO MUX1OF2_8B.

Multiplexor de la ALU, dependiendo de la entrada de selección S se escoge la

salida de A o B.

library ieee;

use ieee.std_logic_1164.all;

Entity mux1of2_8b is

port(

A,B : in std_logic_vector ( 7 downto 0 );

Q : out std_logic_vector ( 7 downto 0 );

S : in std_logic);

end mux1of2_8b;

Architecture Op of mux1of2_8b is

Begin

Page 219: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

219

Q <= A when S = '0' else B;

end Op;

CODIGO VHDL DEL DISPOSITIVO FFD.

LIBRARY ieee;

USE ieee.std_logic_1164.all;

ENTITY ffd IS

PORT (

d : IN STD_LOGIC;

clk : IN STD_LOGIC;

clrn : IN STD_LOGIC;

q : OUT STD_LOGIC);

END entity;

ARCHITECTURE a OF ffd IS

SIGNAL q1 : STD_LOGIC;

BEGIN

PROCESS (clk,clrn)

BEGIN

IF clrn= '0' THEN

q1 <= '0';

ELSIF (clk'EVENT AND clk = '0') THEN

q1 <= d;

END IF;

END PROCESS;

Page 220: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

220

q<= q1;

END a;

CODIGO VHDL DEL DISPOSITIVO FFD1.

LIBRARY ieee;

USE ieee.std_logic_1164.all;

ENTITY ffd IS

PORT (

d : IN STD_LOGIC;

clk : IN STD_LOGIC;

clrn : IN STD_LOGIC;

q : OUT STD_LOGIC);

END entity;

ARCHITECTURE a OF ffd IS

SIGNAL q1 : STD_LOGIC;

BEGIN

PROCESS (clk,clrn)

BEGIN

IF clrn= '0' THEN

q1 <= '0';

ELSIF (clk'EVENT AND clk = '1') THEN

q1 <= d;

END IF;

END PROCESS;

Page 221: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

221

q<= q1;

END a;

CODIGO VHDL DEL DISPOSITIVO REG8B.

Este registro tiene una entrada de clareo C, que cuando esta en uno se coloca en

la salida Q un cero, y una entrada L que cuando está en uno se coloca en la salida

Q el valor de la entrada D.

library ieee;

use ieee.std_logic_1164.all;

Entity REG8B is

port(

L,C,CLK : in std_logic;

D : in std_logic_vector(7 downto 0);

Q : out std_logic_vector(7 downto 0));

end REG8B;

Architecture Op of REG8B is

Begin

Process(CLK)

variable REG : std_logic_vector(7 downto 0);

Begin

if(clk'event and clk = '1')then

if (C = '1') then

REG := "00000000";

Page 222: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

222

elsif (L = '1')then

REG := D;

end if;

end if;

Q <= REG;

end process;

end Op;

CODIGO VHDL DEL DISPOSITIVO REG8BPSW.

En el código del registro PSW se unen las entradas CL, L, LP, LC, LAC y LOV para

formar una variable auxiliar, esta variable se usa en el case para seleccionar la

salida.

library ieee;

use ieee.std_logic_1164.all;

Entity REG8Bpsw is

port(

L,CL,CLK,P,LP,LC,LAC,C,AC,LOV,OV : in std_logic;

D,R : in std_logic_vector(7 downto 0);

Q : out std_logic_vector(7 downto 0));

end entity;

Architecture Op of REG8Bpsw is

Begin

Process(CLK)

variable REG : std_logic_vector(7 downto 0);

variable t : std_logic_vector(5 downto 0);

Begin

if(clk'event and clk = '1')then

Page 223: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

223

t:=CL&L&LP&LC&LAC&LOV;

case t is

when "100000" => REG := "00000000";

when "010000" => REG:= D;

when "001000" => REG:= R(7 downto 1) & P;

when "001111" => REG:= C & AC & R(5 downto 3) & OV & R(1) & P;

when "000100" => REG:= C & R(6 downto 0);

when "001100" => REG:= C & R(6 downto 1) & P;

when "000101" => REG:= C & R(6 downto 3) & OV & R(1 downto 0) ;

when "000111" => REG:= C & AC & R(5 downto 3) & OV & R(1 downto 0) ;

when "001001" => REG:= R(7 downto 3) & OV & R(1) & P;

when "001101" => REG:= C & R(6 downto 3) & OV & R(1) & P;

when others=>REG:=R;

end case;

end if;

Q <= REG;

end process;

end Op;

CODIGO VHDL DEL DISPOSITIVO REGTCON.

En el código del registro REGTCON se unen las entradas L, C, TF1, TF0, IE e IE0

para formar una variable auxiliar, esta variable se usa en el case para seleccionar

la salida.

library ieee;

use ieee.std_logic_1164.all;

Entity REGTCON is

port(

L,C,CLK,TF0,TF1,IE0,IE1 : in std_logic;

Page 224: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

224

D,R : in std_logic_vector(7 downto 0);

Q : out std_logic_vector(7 downto 0));

end ENTITY;

Architecture Op of REGTCON is

Begin

Process(CLK)

variable REG : std_logic_vector(7 downto 0);

variable aux : std_logic_vector(5 downto 0);

Begin

if(clk'event and clk = '1')then

aux:=L&C&TF1&TF0&IE1&IE0;

case aux is

when "100000" => REG:=D;

when "010000" => REG:="00000000";

when "001000" => REG:=TF1&R(6 downto 0);

when "000100" => REG:=R(7 downto 6)& TF0 & R(4 downto 0);

when "000010" => REG:=R(7 downto 4)& IE1 & R(2 downto 0);

when "000001" => REG:=R(7 downto 2)& IE0 & R(0);

when others => REG:=R;

end case;

end if;

Q <= REG;

end process;

end Op;

Page 225: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

225

CODIGO VHDL DEL DISPOSITIVO REGSCON.

En el código del registro REGSCON se unen las entradas L, C, T1 y R1 para formar

una variable auxiliar, esta variable se usa en el case para seleccionar la salida.

library ieee;

use ieee.std_logic_1164.all;

Entity REGSCON is

port(

L,C,CLK,TI,RI : in std_logic;

D,R : in std_logic_vector(7 downto 0);

Q : out std_logic_vector(7 downto 0));

end ENTITY;

Architecture Op of REGSCON is

Begin

Process(CLK)

variable REG : std_logic_vector(7 downto 0);

variable aux : std_logic_vector(3 downto 0);

Begin

if(clk'event and clk = '1')then

aux:=L&C&TI&RI;

case aux is

when "1000" => REG:=D;

when "0100" => REG:="00000000";

when "0010" => REG:=R(7 downto 2)&TI&R(0);

when "0001" => REG:=R(7 downto 1)& RI;

when others => REG:=R;

Page 226: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

226

end case;

end if;

Q <= REG;

end process;

end Op;

CODIGO VHDL DEL DISPOSITIVO REG8BTRANS.

Este código configura el dispositivo para hacer una carga de datos asincrona y

una operación de desplazamiento sincrona.

library ieee;

use ieee.std_logic_1164.all;

Entity REG8BTRANS is

port(

L,CLK,E : in std_logic;

D : in std_logic_vector(7 downto 0);

ou : out std_logic;

Q : out std_logic_vector(10 downto 0));

end entity;

Architecture Op of REG8BTRANS is

Signal REG : std_logic_vector(10 downto 0);

Begin

Process(CLK)

Begin

Page 227: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

227

if (L = '1')then

ou<='1';

REG <= '1'&D&"01";

else

if(clk'event and clk = '1')then

if(E='1')then

REG<='1'&REG(10 downto 1);

ou<=REG(0);

end if;

end if;

end if;

Q <= REG;

end process;

end Op;

CODIGO VHDL DEL DISPOSITIVO REG8BREPC.

La función principal de este código es desplazar a la derecha los valores que

llegan a la entrada serial INT cuando la entrada E está en alto.

library ieee;

use ieee.std_logic_1164.all;

Entity REG8BREPC is

port(

CLK,E,INT : in std_logic;

Q : out std_logic_vector(10 downto 0));

end entity;

Page 228: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

228

Architecture Op of REG8BREPC is

Signal REG : std_logic_vector(10 downto 0);

Begin

Process(CLK)

Begin

if(clk'event and clk = '1')then

if(E='1')then

REG<=INT&REG(10 downto 1);

end if;

end if;

Q <= REG;

end process;

end Op;

CODIGO VHDL DEL DISPOSITIVO CONT_REG8B.

El código de este dispositivo es un punto de partida para los demás contadores

diseñados, ya que son contadores con pequeñas variaciones de este. Tiene dos

process porque realiza dos funciones diferentes, en la primera actúan las

entradas normales de control, si C es uno se clarea, si L es uno se carga el valor

de la entrada y si E es uno habilita el conteo; la función del segundo process

cuando la variable donde se lleva el conteo en todos sus bits contiene unos,

marca una salida alta en M, de lo contrario marca bajo.

Library ieee;

use ieee.std_logic_1164.all;

Page 229: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

229

use ieee.std_logic_unsigned.all;

Entity Cont_Reg8b is

Port(

A : in std_logic_vector (7 downto 0);

Q : out std_logic_vector (7 downto 0);

M : out std_logic;

L,C,E,Clk : in std_logic);

End Cont_Reg8b;

Architecture Op of Cont_Reg8b is

Signal Reg : std_logic_vector (7 downto 0);

Begin

Process(Clk)

Begin

if (Clk'event and Clk = '1')Then

if (C = '1') Then

Reg <= "00000000";

else

if (L = '1')Then

Reg <= A;

else

if (E = '1') then

Reg <= Reg + 1;

end if;

end if;

end if;

Page 230: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

230

end if;

Q <= Reg;

end process;

Process (Reg)

Begin

if (Reg = "11111111") then

M <= '1';

else

M <= '0';

end if;

end process;

End Op;

CODIGO VHDL DEL DISPOSITIVO REG_SP.

Este código funciona de manera similar al código del dispositivo CONT_REG8B,

con la única variante que cuando C está en alto no carga un cero sino un siete,

puesto que el registro SP generalmente siempre apunta a esa posición.

Library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

Page 231: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

231

Entity REG_SP is

Port(

A : in std_logic_vector (7 downto 0);

S : in std_logic;

Q : out std_logic_vector (7 downto 0);

L,C,E,Clk : in std_logic);

End entity;

Architecture Op of REG_SP is

Signal Reg : std_logic_vector (7 downto 0);

Begin

Process(Clk)

Variable Temp : std_logic_vector ( 7 downto 0);

Begin

if (Clk'event and Clk = '1')Then

if (C = '1') Then

Reg <= "00000111";

else

if (L = '1')Then

Reg <= A;

else

if (E = '1') then

if (S = '0') then

Temp := "00000001";

else

Temp := "11111111";

end if;

Page 232: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

232

Reg <= Reg + Temp;

end if;

end if;

end if;

end if;

Q <= Reg;

end process;

End Op;

CODIGO VHDL DEL DISPOSITIVO CONTBAUDRATE.

Este dispositivo es el contador de pulsos de la unidad de transmisión, tiene un

concepto parecido al contador CONT_REG8B; sus diferencias están en que su

señal de clareo es asíncrona y el nivel es bajo, en la parte de conteo no se le suma

un uno sino una entrada A y su límite no son todos los bits en uno sino “1011”.

Library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

Entity contbaudrate is

Port(

A : in std_logic;

M : out std_logic;

C,E,Clk : in std_logic);

End entity;

Architecture Op of contbaudrate is

Page 233: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

233

signal Reg : std_logic_vector (3 downto 0);

Begin

Process(Clk)

variable t:std_logic;

Begin

if (C = '0' ) Then

Reg <= "0000";

else

if (Clk'event and Clk = '1')Then

if (E = '1') then

Reg <= Reg + A;

end if;

end if;

end if;

end process;

process(Reg)

variable t:std_logic;

begin

if (Reg ="1011") then

t:='1';

else

t:= '0';

end if;

M<=t;

end process;

End Op;

Page 234: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

234

CODIGO VHDL DEL DISPOSITIVO CONTBAUDRATE1.

Este dispositivo es el contador de pulsos de la unidad de recepción, tiene un

concepto parecido al contador CONT_REG8B; sus diferencias están en que su

señal de clareo es asíncrona y el nivel es bajo, en la parte de conteo no se le suma

un uno sino una entrada A y su límite no son todos los bits en uno sino “1010”.

Library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

Entity contbaudrate is

Port(

A : in std_logic;

M : out std_logic;

C,E,Clk : in std_logic);

End entity;

Architecture Op of contbaudrate is

signal Reg : std_logic_vector (3 downto 0);

Begin

Process(Clk)

variable t:std_logic;

Begin

if (C = '0' ) Then

Page 235: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

235

Reg <= "0000";

else

if (Clk'event and Clk = '1')Then

if (E = '1') then

Reg <= Reg + A;

end if;

end if;

end if;

end process;

process(Reg)

variable t:std_logic;

begin

if (Reg ="1010") then

t:='1';

else

t:= '0';

end if;

M<=t;

end process;

End Op;

CODIGO VHDL DEL DISPOSITIVO CONT_REG6B.

Este código solo tiene un process, en donde se realiza el conteo y no tiene salida

para desbordamiento puesto que en el dispositivo que se utiliza no es necesario

tenerla, la variable de conteo es de 6 bits.

Page 236: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

236

Library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

Entity Cont_Reg6b is

Port(

Q : out std_logic_vector (5 downto 0);

C,Clk : in std_logic);

End entity;

Architecture Op of Cont_Reg6b is

Signal Reg : std_logic_vector (5 downto 0);

Begin

Process(Clk)

Begin

if (Clk'event and Clk = '1')Then

if (C = '1') Then

Reg <= "000000";

else

Reg <= Reg + 1;

end if;

end if;

Q <= Reg;

end process;

End Op;

Page 237: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

237

CODIGO VHDL DEL DISPOSITIVO DIROUT

El código de este dispositivo es bastante extensor, se trabaja con sentencias

CASE, IF y ELSE, en donde con la sentencia CASE se elige el estado en el que se

encuentra y con la otras dos sentencias la instrucción que está realizando en ese

estado.

library ieee;

USE ieee.std_logic_1164.all;

USE ieee.std_logic_signed.all;

entity DIROUT is

port( IR: in std_logic_vector(7 downto 0);

SA: in std_logic_vector(4 downto 0);

ZE: in std_logic;

q : out std_logic_vector(45 downto 0));

end entity;

architecture operacion of DIROUT is

begin

process(IR)

variable z: std_logic_vector(45 downto 0);--x24-->f17,f18,f19 x29-->F13, x30->F14,x31-

>ldpl,x32->ldph,x35->eotmpl,x36->edirbit

--x37->eobit,X38->LC,X39->LAC,X40->P,x41->QL,X42->QH,X43->CL,x44->D,X45->LOV

begin

case SA is

when "00000" => z:= "0000000000000000000000010000000000001000000100";--

0--1

------------------------------------------------------------------------1--------------------------------

-----------------------------

when "00001" =>

if (IR="00100100" or IR="00110100" or IR="01000100" or IR="01010100" or IR="01100100" or IR="10010100" or

IR="01110100")then

z:=

"0000000000000000000000000000001110000000000100";-- 1--3

end if;

if(IR="10000000" or IR="01100000" or IR="01110000" or IR="01000000" or

IR="01010000")then

z:=

"0000000000000000000000010000001110000000000100";

end if;

if(IR="10110100")then

Page 238: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

238

z:=

"0000000100000000000000010000001110000000000100";--

end if;

if(IR="01110101" )then

z:=

"0000000000000000000000011000000000000111000100";-- 75 Mov dir,#data

end if;

if(IR="11000100" or IR="11010100")then

z:=

"0000010000000000000000000000000010000000000010";

end if;

if(IR="11110101")then

z:=

"0000000000000000000000001000000000000111000100";

end if;

if(IR="00000001" or IR="00100001" or IR="01000001" or IR="01100001" or IR="10000001" or IR="10100001" or

IR="11000001" or IR="11100001")then

z:=

"0000000000000000000000001000000000000011000100";

end if;

if(IR="00010001" or IR="00110001" or IR="01010001" or IR="01110001" or IR="10010001" or IR="10110001" or

IR="11010001" or IR="11110001")then

z:=

"0000000000000000000000010000001110000000000100";

end if;

if(IR="00010010")then

z:=

"0000000000000000000000010000001010000000000100";

end if;

if(IR="10100011")then

z:=

"0000000000000000000000100000000000000000000000";

end if;

if(IR="00000010")then

z:=

"0000000000000000000000011011000000000001000100";

end if;

if(IR="10010000")then

z:=

"0000000000000100000000011000000000000000000100";

end if;

Page 239: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

239

if(IR="00000110" or IR="00010110" or IR="00100110" or IR="00110110" or IR="01000110" or IR="01010110" or

IR="01100110" or IR="01110110"

or IR="10000110" or IR="10010110" or IR="11000110" or IR="11010110" or IR="11100110" or IR="00000111" or

IR="00010111" or IR="00100111"

or IR="00110111" or IR="01000111" or IR="01010111" or IR="01100111" or IR="01110111" or IR="10000111" or

IR="10010111" or IR="11000111"

or IR="11010111" or IR="11100111" or IR="11110111" or IR="11110110" or IR="00001000" or IR="00001001" or

IR="00001010" or IR="00001011"

or IR="00001100" or IR="00001101" or IR="00001110" or IR="00001111" or IR="00011000" or IR="00011001" or

IR="00011010" or IR="00011011"

or IR="00011100" or IR="00011101" or IR="00011110" or IR="00011111" or IR="00101000" or IR="00101001" or

IR="00101010" or IR="00101011"

or IR="00101100" or IR="00101101" or IR="00101110" or IR="00101111" or IR="00111000" or IR="00111001" or

IR="00111010" or IR="00111011"

or IR="00111100" or IR="00111101" or IR="00111110" or IR="00111111" or IR="01001000" or IR="01001001" or

IR="01001010" or IR="01001011"

or IR="01001100" or IR="01001101" or IR="01001110" or IR="01001111" or IR="01011000" or IR="01011001" or

IR="01011010" or IR="01011011"

or IR="01011100" or IR="01011101" or IR="01011110" or IR="01011111" or IR="01101000" or IR="01101001" or

IR="01101010" or IR="01101011"

or IR="01101100" or IR="01101101" or IR="01101110" or IR="01101111" or IR="01111000" or IR="01111001" or

IR="01111010" or IR="01111011"

or IR="01111100" or IR="01111101" or IR="01111110" or IR="01111111" or IR="10001000" or IR="10001001" or

IR="10001010" or IR="10001011"

or IR="10001100" or IR="10001101" or IR="10001110" or IR="10001111" or IR="10011000" or IR="10011001" or

IR="10011010" or IR="10011011"

or IR="10011100" or IR="10011101" or IR="10011110" or IR="10011111" or IR="11001000" or IR="11001001" or

IR="11001010" or IR="11001011"

or IR="11001100" or IR="11001101" or IR="11001110" or IR="11001111" or IR="11101000" or IR="11101001" or

IR="11101010" or IR="11101011"

or IR="11101100" or IR="11101101" or IR="11101110" or IR="11101111" or IR="11111000" or IR="11111001" or

IR="11111010" or IR="11111011"

or IR="11111100" or IR="11111101" or IR="11111110" or IR="11111111" or IR="11011000" or IR="11011001" or

IR="11011010" or IR="11011011"

or IR="11011100" or IR="11011101" or IR="11011110" or IR="11011111"

or IR="10111000" or IR="10111001" or IR="10111010" or IR="10111011" or IR="10111100" or IR="10111101" or

IR="10111110" or IR="10111111"

or IR="10110110" or IR="10110111" or IR="11100010" or IR="11100011" or IR="11110010" or

IR="11110011")then

z:=

"0000000000000000000000001100000000000111000000";-- 1--4

end if;

if(IR="00100101" or IR="00110101" or IR="01000101" or IR="01010101" or IR="01100101" or IR="10010101" or

IR="11100101" or IR="10100110"

or IR="10100111" or IR="10101000" or IR="10101001" or IR="10101010" or IR="10101011" or IR="10101100" or

IR="10101101" or IR="10101110"

Page 240: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

240

or IR="10101111" or IR="00000101" or IR="00010101" or IR="01000010" or IR="01010010" or IR="01100010" or

IR="01000011" or IR="01010011"

or IR="01100011" or IR="11000000" or IR="11010000" or IR="11010101" or IR="11000101" or IR="10000101" or

IR="10110101")then

z:=

"0000000000000000000000001000000000000111000100";-- 1--6

end if;

if(IR="00000011" or IR="00100011" or IR="00000100" or IR="00010100" or

IR="11110100")then

z:=

"0000000000000000000000000000000010000000000010";

end if;

if(IR="00010011" or IR="00110011")then

z:=

"0000000100000000000000000000000010000000000010";

end if;

if(IR="11100100" or IR="00000000")then

z:=

"0000000000000000000000000000000000000000000000";

end if;

if(IR="10100100" )then---------------------------------Multiplicacion -

-------

z:=

"0000000000000000000010000000001110000000000000";

end if;

if(IR="10000100" )then---------------------------------Division--------

z:=

"0000000000000000000100000000001110000000000000";

end if;

if(IR="00100010" or IR="00110010")then

z:=

"0000000000000000000000001011110000000001001000";

end if;

if(IR="11000010" or IR="11010010" or IR="01110010" or IR="10000010" or IR="10010010" or IR="10100010" or

IR="10110010" or IR="10100000"

or IR="10110000" )then--clr bit, setb bit

z:=

"0000000000000000000000000000001010000000000100";

end if;

if(IR="11100000")then

Page 241: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

241

z:=

"0000000000000000000000000001010000000000000000";

end if;

if(IR="11110000")then

z:=

"0000000000000000000000000001010000010000000001";

end if;

if(IR="00100000" or IR="00110000" or IR="00010000")then

z:=

"0000000000000000000000010000001010000000000100";

end if;

if(IR="10110011" or IR="11000011" or IR="11010011")then

z:=

"0000000100000000000000000000000000000000000000";

end if;

if(IR="01110011")then

z:=

"0000000000000000000000000001010000010001000000";

end if;

if(IR="10010011")then

z:=

"0000000000000000000000000001010000010101000000";

end if;

if(IR="10000011")then

z:=

"0000000000000000000000000000000000010101000000";

end if;

-------------------------------------------------------------------2-------------------------------------

-----------------------------

when "00010" =>

if(IR="00000000" or IR="11100100"

or IR="11110100" or IR="11110111" or IR="11110110" or IR="11111000" or IR="11111001" or IR="11111010" or

IR="11111011" or IR="11111100"

or IR="11111101" or IR="11111110" or IR="11111111" or IR="00000001" or IR="00100001" or IR="01000001"

or IR="10000001" or IR="10100001" or IR="11000001" or IR="11100001" or IR="00000010" or IR="10100011" or

IR="00010001" or IR="00110001"

or IR="01010001" or IR="01110001" or IR="10010001" or IR="10110001" or IR="11010001" or IR="11110001" or

IR="00100010" or IR="00110010"

or IR="00010010" or IR="10000000" or IR="11011000" Or IR="11011001" or IR="11011010" or IR="11011011" or

IR="11011100" or IR="11011101"

or IR="11011110" or IR="11011111" or IR="11010101" or IR="10110011" or IR="11000011" or IR="11010011" or

IR="00001000" or IR="00001001"

Page 242: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

242

or IR="00001010" or IR="00001011" or IR="00001100" or IR="00001101" or IR="00001110" or IR="00001111" or

IR="00011000" or IR="00011001"

or IR="00011010" or IR="00011011" or IR="00011100" or IR="00011101" or IR="00011110" or IR="00011111" or

IR="00000110" or IR="00000111"

or IR="00010110" or IR="00010111" or IR="00100110" or IR="00110110" or IR="01000110" or IR="01010110" or

IR="01100110" or IR="10010110"

or IR="00100111" or IR="00110111" or IR="01000111" or IR="01010111" or IR="01100111" or IR="10010111" or

IR="11010111" or IR="11010110"

or IR="10110110" or IR="10110111" or IR="10111000" or IR="10111001" or IR="10111010" or IR="10111011" or

IR="10111100" or IR="10111101"

or IR="10111110" or IR="10111111" or IR="10110100" or IR="10110101" or IR="01100000" or IR="01110000" or

IR="01000000" or IR="01010000"

or IR="00100000" or IR="00110000" or IR="00010000" or IR="01110011" or

IR="00000101"

or IR="00000011" or IR="00010011" or IR="00100011" or IR="00110011" or IR="00000100" or IR="00010100" or

IR="00101000" or IR="00101001"

or IR="00101010" or IR="00101011" or IR="00101100" or IR="00101101" or IR="00101110" or IR="00101111" or

IR="00111000" or IR="00111001"

or IR="00111010" or IR="00111011" or IR="00111100" or IR="00111101" or IR="00111110" or IR="00111111" or

IR="01001000" or IR="01001001"

or IR="01001010" or IR="01001011" or IR="01001100" or IR="01001101" or IR="01001110" or IR="01001111" or

IR="01011000" or IR="01011001"

or IR="01011010" or IR="01011011" or IR="01011100" or IR="01011101" or IR="01011110" or IR="01011111" or

IR="01101000" or IR="01101001"

or IR="01101010" or IR="01101011" or IR="01101100" or IR="01101101" or IR="01101110" or IR="01101111" or

IR="10011000" or IR="10011001"

or IR="10011010" or IR="10011011" or IR="10011100" or IR="10011101" or IR="10011110" or IR="10011111" or

IR="10000100" or IR="10100100"

or IR="11100010" or IR="11100011" or IR="11110010" or IR="11110011" or IR="11100000" or IR="11110000" or

IR="11000110" or IR="11000111"

or IR="11001000" or IR="11001001" or IR="11001010" or IR="11001011" or IR="11001100" or IR="11001101" or

IR="11001110" or IR="11001111"

or IR="11000100" or IR="11101000" or IR="11101001" or IR="11101010" or IR="11101011" or IR="11101100" or

IR="11101101" or IR="11101110"

or IR="11101111" or IR="11100111" or IR="11100110" or IR="11010100" or IR="10010011" or

IR="00110000")then

z:=

"0000010000000000000000000000000000000000000000";

else

z:=

"0000010000000000000000010000000000000000000000";

end if;

-------------------------------------------------------------------3-------------------------------------

-----------------------------

when "00011" =>

IF(IR="01110110" or IR="01110111" or IR="01111000" or IR="01111001" or IR="01111010" or IR="01111011" Or

IR="01111100" or IR="01111101"

or IR="01111110" or IR="01111111" or IR="11011000" Or IR="11011001" or IR="11011010" or IR="11011011" or

IR="11011100" or IR="11011101"

Page 243: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

243

or IR="11011110" or IR="11011111" or IR="10101000" or IR="10101001" or IR="10101010" or IR="10101011" or

IR="10101100" or IR="10101101"

or IR="10101110" or IR="10101111" or IR="10100110" or

IR="10100111")THEN

z:=

"0000000000000000000000000011100001110000000001";-- 3--2 76,77, 78-7f

END IF;

IF(IR="00100100" or IR="00110100" or IR="10010100" or IR="00100101" or IR="00110101" or IR="10010101"

)THEN

z:=

"1000011100000000000000000000000010000000000010";--add,addc,subb

end if;

if(IR="01110100" )then

z:=

"0000010000000000000000000000000011110000000010";

end if;

if(IR="11100000")then

z:=

"0000010000000000000000000000000010000000001000";

end if;

IF(IR="01000100" or IR="01010100" or IR="01100100" )THEN

z:=

"0000010000000000000000000000000010000000000010";

END IF;

if(IR="10100100")then

z:=

"1000010100000000000000000000000011110000000000";

end if;

if(IR="10000100")then

z:=

"1000010100000000000000000000000111110000000000";

end if;

if(IR="01000101" or IR="01010101" or IR="01100101" )then

z:=

"0000000000000000000000000000000010000000000010";

end if;

if(IR="10010000")then

z:=

"0000000000000010000000001000000000000000000100";

end if;

if(IR="00000101" or IR="00010101" or IR="11010101")then

Page 244: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

244

z:=

"0000000000000000001000011011100000000000000010";

end if;

if(IR="01000010" or IR="01010010" or IR="01100010" or IR="01000011" or IR="01010011" or IR="01100011"

)then

z:=

"0000000000000000001000001011100000000000000010";

end if;

if(IR="11010000")then

z:=

"0000000000000000001000001011100001110000000000";

end if;

if(IR="00010001" or IR="00110001" or IR="01010001" or IR="01110001" or IR="10010001" or IR="10110001" or

IR="11010001" or IR="11110001")then

z:=

"0000000000000000000000001100000000000001000000";

end if;

if(IR="00100010")then

z:=

"0000000000000000000000110000000000000000100000";

end if;

if(IR="00110010")then

z:=

"0010000000000000000000110000000000000000100000";

end if;

if(IR="00010010")then

z:=

"0000000000000000000000001000000001010001000010";

end if;

if(IR="11000000")then

z:=

"0000000000000000000000000011110001110000000001";

end if;

if(IR="10000000")then

z:=

"0000000000100000000000001000000000000011000000";

end if;

if(IR="10110110" or IR="10110111" or IR="10111000" or IR="10111001" or IR="10111010" or IR="10111011" or

IR="10111100" or IR="10111101"

or IR="10111110" or IR="10111111")then

z:=

"0000000000000000000000010000001110000000000100";

Page 245: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

245

end if;

-------------------------------------------------------------------4-------------------------------------

-------------------------------

when "00100" =>

if(IR="00000110" or IR="00010110" or IR="00100110" or IR="00110110" or IR="01000110" or IR="01010110" or

IR="01100110" or IR="01110110"

or IR="10000110" or IR="10010110" or IR="11000110" or IR="11010110" or IR="11100110" or IR="00000111" or

IR="00010111" or IR="00100111"

or IR="00110111" or IR="01000111" or IR="01010111" or IR="01100111" or IR="01110111" or IR="10000111" or

IR="10010111" or IR="11000111"

or IR="11010111" or IR="11100111" or IR="11110111" or IR="11110110" or IR="10100110" or IR="10100111" or

IR="10110110" or IR="10110111"

or IR="10111000" or IR="10111001" or IR="10111010" or IR="10111011" or IR="10111100" or IR="10111101" or

IR="10111110" or IR="10111111"

or IR="11100010" or IR="11100011" or IR="11110010" or

IR="11110011")then

z:=

"0000000000000000000000000011100000000000000000";-- 4--10 --5

end if;

if(IR="01111000" or IR="01111001" or IR="01111010" or IR="01111011" Or IR="01111100" or IR="01111101" or

IR="01111110" or IR="01111111")then

z:=

"0000000000000000000000000000001110000000000100";

end if;

if(IR="00000001" or IR="00100001" or IR="01000001" or IR="10000001" or IR="10100001" or IR="11000001" or

IR="11100001")then

z:=

"0000000000000000000000001100000000000001000000";

end if;

if(IR="00000010")then

z:=

"0000000000000000000000001000000000000011000100";

end if;

----------------------------------------------------------------5----------------------------------------

-----------------------------

when "00101" =>

IF(IR="01110110" or IR="01110111" )THEN

z:=

"0000000000000000000000000000001110000000000100";-- 5--3 mov Rn o Ri,#data

END IF;

if(IR="11100111" or IR="11100110" or IR="00100110" or IR="00110110" or IR="01000110" or IR="01010110" or

IR="01100110" or IR="00010111"

or IR="00100111" or IR="00110111" or IR="01000111" or IR="01010111" or IR="01100111" or IR="10010110" or

IR="10010111" or IR="00000110"

Page 246: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

246

or IR="00010110" or IR="00000111" or IR="11000110" or IR="11010110" or IR="11000111" or IR="11010111" or

IR="10000110" or IR="10000111"

or IR="10100110" or IR="10100111" or IR="10110110" or IR="10110111" or IR="00101000" or IR="00101001" or

IR="00101010" or IR="00101011"

or IR="00101100" or IR="00101101" or IR="00101110" or IR="00101111" or IR="00111000" or IR="00111001" or

IR="00111010" or IR="00111011"

or IR="00111100" or IR="00111101" or IR="00111110" or IR="00111111" or IR="01001000" or IR="01001001" or

IR="01001010" or IR="01001011"

or IR="01001100" or IR="01001101" or IR="01001110" or IR="01001111" or IR="01011000" or IR="01011001" or

IR="01011010" or IR="01011011"

or IR="01011100" or IR="01011101" or IR="01011110" or IR="01011111" or IR="01101000" or IR="01101001" or

IR="01101010" or IR="01101011"

or IR="01101100" or IR="01101101" or IR="01101110" or IR="01101111" or IR="10011000" or IR="10011001" or

IR="10011010" or IR="10011011"

or IR="10011100" or IR="10011101" or IR="10011110" or IR="10011111" or IR="10001000" or IR="10001001" or

IR="10001010" or IR="10001011"

or IR="10001100" or IR="10001101" or IR="10001110" or IR="10001111" or IR="11001000" or IR="11001001" or

IR="11001010" or IR="11001011"

or IR="11001100" or IR="11001101" or IR="11001110" or IR="11001111" or IR="00001000" or IR="00001001" or

IR="00001010" or IR="00001011"

or IR="00001100" or IR="00001101" or IR="00001110" or IR="00001111" or IR="00011000" or IR="00011001" or

IR="00011010" or IR="00011011"

or IR="00011100" or IR="00011101" or IR="00011110" or IR="00011111" or IR="11101000" or IR="11101001" or

IR="11101010" or IR="11101011"

or IR="11101100" or IR="11101101" or IR="11101110" or IR="11101111" or IR="11011000" or IR="11011001" or

IR="11011010" or IR="11011011"

or IR="11011100" or IR="11011101" or IR="11011110" or IR="11011111" or IR="10111000" or IR="10111001" or

IR="10111010" or IR="10111011"

or IR="10111100" or IR="10111101" or IR="10111110" or IR="10111111" or IR="10110110" or IR="10110111" or

IR="11100010" or IR="11100011"

)then

z:=

"0000000000000000000000000011100000000000000000";-- 5--11 --2

end if;

if(IR="11110111" or IR="11110110" or IR="11110010" or IR="11110011"

)then-- 11--2

z:=

"0000000000000000000000000011100000010000000001";

end if;

------------------------------------------------------------------------6--------------------------------

----------------

when "00110" =>

if(IR="00100101" or IR="00110101" or IR="01000101" or IR="01010101" or IR="01100101" or IR="01110101" or

IR="10010101" or IR="11000101"

or IR="11100101" or IR="11110101" or IR="01000011" or IR="01010011" or IR="01100011" or IR="01000010" or

IR="01010010" or IR="01100010"

or IR="10100110" or IR="10100110" or IR="10101000" or IR="10101001" or IR="10101010" or IR="10101011" or

IR="10101100" or IR="10101101"

Page 247: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

247

or IR="10101110" or IR="10101111" or IR="10001000" or IR="10001001" or IR="10001010" or IR="10001011" or

IR="10001100" or IR="10001101"

or IR="10001110" or IR="10001111" or IR="10000110" or IR="10000111"

)then

z:=

"0000000000000000000000001000000000000111000100";--------

end if;

if(IR="01110101" or IR="11110101")then

z:=

"0000000000000000000000000000001110000000000100";--75,f5

end if;

if(IR="00100101" or IR="00110101" or IR="01000101" or IR="01010101" or IR="01100101" or IR="10010101" or

IR="00000101" or IR="00010101"

or IR="01000010" or IR="01010010" or IR="01100010" or

IR="11000101")then

z:=

"0000000000000000010000000011101110000000000000";--25,35,45,55,65,95,42.52.62

end if;

if(IR="01000011" or IR="01010011" or IR="01100011")then

z:=

"0000000000000000010000010011101010000000000000";--43,53,63

end if;

if(IR="10100110" or IR="10100111" or IR="10101000" or IR="10101001" or IR="10101010" or IR="10101011" or

IR="10101100" or IR="10101101"

or IR="10101110" or IR="10101111")then

z:=

"0000000000000000010000000011101110000000000000";--A8,A9,AA,AB,AC,AD,AE,AF

end if;

if(IR="10000101")then

z:=

"0000000000000000010000010011101110000000000000";

end if;

-------------------------------------------------------------------7-------------------------------------

-------------------------

when "00111" =>

if(IR="01000110" or IR="01010110" or IR="01100110" or IR="01000111" or IR="01010111" or IR="01100111" or

IR="01001000" or IR="01001001"

or IR="01001010" or IR="01001011" or IR="01001100" or IR="01001101" or IR="01001110" or IR="01001111" or

IR="01011000" or IR="01011001"

or IR="01011010" or IR="01011011" or IR="01011100" or IR="01011101" or IR="01011110" or IR="01011111" or

IR="01101000" or IR="01101001"

or IR="01101010" or IR="01101011" or IR="01101100" or IR="01101101" or IR="01101110" or IR="01101111" or

IR="11001000" or IR="11001001"

or IR="11001010" or IR="11001011" or IR="11001100" or IR="11001101" or IR="11001110" or IR="11001111" or

IR="11000110" or IR="11010110"

Page 248: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

248

or IR="11000111" or IR="11010110" or IR="11010111" or

IR="11000101")then

z:=

"1000011100000000000000000000000010000000000010";

end if;

IF(IR="00100110" or IR="00110110" or IR="00100111" or IR="00110111" or IR="00101000" or IR="00101001" or

IR="00101010" or IR="00101011"

or IR="00101100" or IR="00101101" or IR="00101110" or IR="00101111" or IR="00111000" or IR="00111001" or

IR="00111010" or IR="00111011"

or IR="00111100" or IR="00111101" or IR="00111110" or IR="00111111" or IR="10011000" or IR="10011001" or

IR="10011010" or IR="10011011"

or IR="10011100" or IR="10011101" or IR="10011110" or IR="10011111" or IR="10010110" or

IR="10010111")THEN

z:=

"1000011100000000000000000000000010000000000010";

END IF;

if(IR="00001000" or IR="00001001" or IR="00001010" or IR="00001011" or IR="00001100" or IR="00001101" or

IR="00001110" or IR="00001111"

or IR="00011000" or IR="00011001" or IR="00011010" or IR="00011011" or IR="00011100" or IR="00011101" or

IR="00011110" or IR="00011111"

or IR="00000110" or IR="00010110" or IR="00000111" or

IR="00010111")then

z:=

"0000000000000000000000000011100000000000000011"; ---ojo

end if;

if(IR="11011000" Or IR="11011001" or IR="11011010" or IR="11011011" or IR="11011100" or IR="11011101" or

IR="11011110" or IR="11011111" )then

z:=

"0000000000000000000000000011100000000000000011";

end if;

if(IR="01000011" or IR="01010011" or IR="01100011")then

z:=

"0000000000000000000000000000001110000000000100";

end if;

if(IR="00010010" or IR="00010001" or IR="00110001" or IR="01010001" or IR="01110001" or IR="10010001" or

IR="10110001" or IR="11010001" or IR="11110001")then

z:=

"0000000000000000000000001000000001110011000010";

end if;

if(IR="00100010" or IR="00110010")then

z:=

"0000000000000000000000001000001110000011001000";

end if;

Page 249: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

249

if(IR="10001000" or IR="10001001" or IR="10001010" or IR="10001011" or IR="10001100" or IR="10001101" or

IR="10001110"

or IR="10001111" or IR="10000110" or IR="10000111" or IR="01110101" or IR="11000010" or IR="11010010" or

IR="10010010" or IR="10110010" )then

z:=

"0000000000000000001000001011100001110000000000"; --88-8F,75,c2,d2

end if;

if(IR="01110010" or IR="10100000" or IR="10110000" or IR="10100010" or

IR="10000010")then

z:=

"0000000100000000001000001011100001110000000000";--72,a0,b0,a2,82

end if;

if(IR="10000101")then

z:=

"0000000000000000001000001011100001110000000000";

end if;

if(IR="00010000" )then

z:=

"0000000010000000001000001011100000000000000001";

end if;

if(IR="11110101" )then

z:=

"0000000000000000001000001011100000010000000000";--F5

end if;

if(IR="11100101")then

z:=

"0000000000000000010000000011100010000000000000";

end if;

if(IR="10010011" or IR="10000011")then

z:=

"0000000000000000000000000010100010000000000100";

end if;

------------------------------------------------------------------8--------------------------------------

-------------------------

when "01000" =>

if(IR="11000010" or IR="11010010" or IR="01110010" or IR="10000010" or IR="10010010" or IR="10100010" or

IR="10110010" or IR="10100000"

or IR="10110000" )then

z:=

"0000000010000000000000000000001110000000000000";

end if;

if(IR="00010000" and ZE='1')then

z:=

"0000000010000000000000000000001110000000000000";

Page 250: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

250

end if;

------------------------------------------------------------------9--------------------------------------

-------------------------

when "01001" => z:= "0001000000000000000000000000001010000000000000";

------------------------------------------------------------------10-------------------------------------

-------------------------

when "01010" =>

if(IR="00000110" or IR="00010110" or IR="00100110" or IR="00110110" or IR="01000110" or IR="01010110" or

IR="01100110" or IR="01110110"

or IR="10000110" or IR="10010110" or IR="11000110" or IR="11010110" or IR="11100110" or IR="00000111" or

IR="00010111" or IR="00100111"

or IR="00110111" or IR="01000111" or IR="01010111" or IR="01100111" or IR="01110111" or IR="10000111" or

IR="10010111" or IR="11000111"

or IR="11010111" or IR="11100111" or IR="11110111" or IR="11110110" or IR="00000111" or IR="00010111" or

IR="10110110" or IR="10110111"

or IR="11100010" or IR="11100011" or IR="11110010" or IR="11110011")

then

z:=

"0000000000000000000000001000000000000111001000";-- 10--5

end if;

if(IR="00100101" or IR="00110101" or IR="01000101" or IR="01010101" or IR="01100101" or IR="10010101"

)then

z:=

"0000000000000000010000000011101110000000000000";

end if;

if(IR="00010010" or IR="00010001" or IR="00110001" or IR="01010001" or IR="01110001" or IR="10010001" or

IR="10110001" or IR="11010001" or IR="11110001")then

z:=

"0000000000010000000000000011110000000000000001";

end if;

if(IR="00100010" or IR="00110010")then

z:=

"0000000000000000000000000011110000000000000000";

end if;

if(IR="11000000")then

z:=

"0000000000000000010000000011101110000000000000";

end if;

if(IR="11010000")then

z:=

"0000000000000000000000110000000000000000100000";

end if;

Page 251: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

251

if(IR="10000000")then

z:=

"0000000000000000000000000000000001110001000000";

end if;

if(IR="10000101")then

z:=

"0000000000000000000000000011100000000000000000";

end if;

if(IR="00100000" or IR="00110000" or IR="00010000")then

z:=

"0000000000000000000000000011100000000000000000";

end if;

if(IR="11000010" or IR="11010010" or IR="01110010" or IR="10000010" or IR="10010010" or IR="10100010"

or IR="10110010" or IR="10100000" or IR="10110000")then

z:=

"0000000000000000000000000011100000000000000000";--c2,d2,72,82,92,a2,b2,a0,b0

end if;

-----------------------------------------------------------------11--------------------------------------

------------------------

when "01011" =>

if(IR="11100111" or IR="11100110" or IR="11101000" or IR="11101001" or IR="11101010" or IR="11101011" or

IR="11101100" or IR="11101101"

or IR="11101110" or IR="11101111" or IR="11100010" or

IR="11100011")then

z:=

"0000000000000000000000000000000010000000001000";

end if;

if(IR="00100110" or IR="00110110" or IR="01000110" or IR="01010110" or IR="01100110" or IR="00100111" or

IR="00110111" or IR="01000111" or IR="01010111" or IR="01100111"

or IR="10010110" or IR="10010111" or IR="00000110" or IR="00010110" or IR="00001000" or IR="00001001" or

IR="00001010" or IR="00001011"

or IR="00001100" or IR="00001101" or IR="00001110" or IR="00001111" or IR="00011000" or IR="00011001" or

IR="00011010" or IR="00011011"

or IR="00011100" or IR="00011101" or IR="00011110" or IR="00011111" or IR="00010110" or IR="00000111" or

IR="00010111"

or IR="11001000" or IR="11001001" or IR="11001010" or IR="11001011" or IR="11001100" or IR="11001101" or

IR="11001110" or IR="11001111"

or IR="11000110" or IR="11010110" or IR="11000111" or IR="11010111" or IR="10000110" or IR="10000111" or

IR="11011000" or IR="11011001"

or IR="11011010" or IR="11011011" or IR="11011100" or IR="11011101" or IR="11011110" or IR="11011111"

)then

z:=

"0000000000000000000000000011101110000000001000";

end if;

if(IR="00101000" or IR="00101001" or IR="00101010" or IR="00101011" or IR="00101100" or IR="00101101" or

IR="00101110" or IR="00101111"

Page 252: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

252

or IR="00111000" or IR="00111001" or IR="00111010" or IR="00111011" or IR="00111100" or IR="00111101" or

IR="00111110" or IR="00111111"

or IR="01001000" or IR="01001001" or IR="01001010" or IR="01001011" or IR="01001100" or IR="01001101" or

IR="01001110" or IR="01001111"

or IR="01011000" or IR="01011001" or IR="01011010" or IR="01011011" or IR="01011100" or IR="01011101" or

IR="01011110" or IR="01011111"

or IR="01101000" or IR="01101001" or IR="01101010" or IR="01101011" or IR="01101100" or IR="01101101" or

IR="01101110" or IR="01101111"

or IR="10011000" or IR="10011001" or IR="10011010" or IR="10011011" or IR="10011100" or IR="10011101" or

IR="10011110" or IR="10011111"

or IR="10001000" or IR="10001001" or IR="10001010" or IR="10001011" or IR="10001100" or IR="10001101" or

IR="10001110" or IR="10001111"

)then

z:=

"0000000000000000000000000000001110000000001000";

end if;

if(IR="10111000" or IR="10111001" or IR="10111010" or IR="10111011" or IR="10111100" or IR="10111101" or

IR="10111110" or IR="10111111"

or IR="10110110" or IR="10110111")then

z:=

"0000000000000000000000000000001010000000001000";

end if;

if(IR="00010010" )then

z:=

"0000000000000000000000010000001110000000000100";

end if;

if(IR="11010000")then

z:=

"0000000000000000001000001000001110000000001000";

end if;

if(IR="10000000")then

z:=

"0000000000000000000000000100000001110111000000";

end if;

if(IR="11010101" or IR="00000101" or IR="00010101" )then

z:=

"0000000000000000010000000011101110000000000000";

end if;

if(IR="10110101")then

z:=

"0000000000000000010000010011101110000000000000";

end if;

Page 253: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

253

if(IR="11000010" or IR="11010010" or IR="01110010" or IR="10000010" or IR="10010010" or IR="10100010" or

IR="10110010" or IR="10100000"

or IR="10110000" or IR="00100000" or IR="00110000" or

IR="00010000")then--clr bit, setb bit

z:=

"0000000001000000000000001000000000000111000000";

end if;

if(IR="11110111" or IR="11110110" or IR="11111000" or IR="11111001" or IR="11111010" or IR="11111011" or

IR="11111100" or IR="11111101"

or IR="11111110" or IR="11111111")then-- 11--2

z:=

"0000000000000000000000000011100000010000000001";

end if;

------------------------------------------------------------12-------------------------------------------

-----------------------------

when "01100" =>

if(IR="11001000" or IR="11001001" or IR="11001010" or IR="11001011" or IR="11001100" or IR="11001101" or

IR="11001110" or IR="11001111"

or IR="11000110" or IR="11010110" or IR="11000111" or

IR="11010111")then

z:=

"0000000000000000000001000011100000000000000001";

end if;

if( IR="11000101")then

z:=

"0000000000000000001000001011100000010000000000";

end if;

if(IR="10100100" )then

z:=

"0000000000000000100000000000000110000000000000";

end if;

if(IR="10000100" )then

z:=

"0000000000000001000000000000000010000000000000";

end if;

if(IR="11011000" Or IR="11011001" or IR="11011010" or IR="11011011" or IR="11011100" or IR="11011101" or

IR="11011110" or IR="11011111" or IR="11010101"

or IR="10110110" or IR="10110111" or IR="10111000" or IR="10111001" or IR="10111010" or IR="10111011" or

IR="10111100" or IR="10111101" or IR="10111110"

or IR="10111111" or IR="10110100" or IR="10110101" )then

z:=

"0000000000000000000000010000001110000000000100";--

end if;

Page 254: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

254

if(IR="10100110" or IR="10100111" or IR="10101000" or IR="10101001" or IR="10101010" or IR="10101011" or

IR="10101100" or IR="10101101" or IR="10101110" or IR="10101111")then

z:=

"0000000000000000000000001100000000000111000000";

end if;

if(IR="00010010" or IR="00010001" or IR="00110001" or IR="01010001" or IR="01110001" or IR="10010001" or

IR="10110001" or IR="11010001" or IR="11110001")then

z:=

"0000000000001000000000110011110000000000000001";

end if;

if(IR="10000101")then

z:=

"0000000000000000000000001000000000000111000100";

end if;

if(IR="00100000" or IR="00110000" or IR="00010000")then

z:=

"0000000000000000000000011000001010000000000100";

end if;

------------------------------------------------------------------13-------------------------------------

-----------------------------

when "01101" =>

if(IR="11001000" or IR="11001001" or IR="11001010" or IR="11001011" or IR="11001100" or IR="11001101" or

IR="11001110" or IR="11001111"

or IR="11000110" or IR="11010110" or IR="11000111" or

IR="11010111")then

z:=

"0000000000000000000000000011100000000000000000";

end if;

if(IR="10110110" or IR="10110111" or IR="10111000" or IR="10111001" or IR="10111010" or IR="10111011" or

IR="10111100" or IR="10111101"

or IR="10111110" or IR="10111111" or IR="10110100" or

IR="10110101")then

z:=

"0000000000000000000000000000000000000000000000";

end if;

if(IR="00100000" or IR="00110000" or IR="00010000")then

z:=

"0000000000000000010000000011101110000000000000";

end if;

-----------------------------------------------------------------14--------------------------------------

----------------------------

when "01110" =>

Page 255: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

255

if(IR="11010000")then

z:=

"0000000000000000000000000011110000000000000000";

end if;

if(IR="11000010" or IR="11010010" or IR="01110010" or IR="10000010" or IR="10010010" or IR="10100010"

or IR="10110010" or IR="10100000" or IR="10110000")then

z:=

"0000000000000000010000000011101110000000000000";--c2,d2,72,82,92,a2,b2,a0,b0

end if;

if(IR="11000000" or IR="00010010" or IR="00010001" or IR="00110001" or IR="01010001" or IR="01110001" or

IR="10010001" or IR="10110001" or IR="11010001" or IR="11110001")then

z:=

"0000000000000000000000110000000000000000000000";

end if;

if(IR="00100010" or IR="00110010")then

z:=

"0000000000000000000000110000000000000000100000";

end if;

if((IR="11011000" Or IR="11011001" or IR="11011010" or IR="11011011" or IR="11011100" or IR="11011101" or

IR="11011110" or IR="11011111" or IR="11010101"

or IR="01100000" or IR="01110000" or IR="01000000" or IR="01010000" or IR="00100000")and ZE='1')then

z:=

"0000000000000000000000000100000001110011000000";

end if;

if((IR="10110110" or IR="10110111" or IR="10111000" or IR="10111001" or IR="10111010" or IR="10111011" or

IR="10111100" or IR="10111101" or IR="10111110"

or IR="10111111" or IR="10110100" or IR="10110101")and ZE='1')then

z:=

"0000000100000000000000000100000001110011000000";

end if;

if((IR="00100000" or IR="00110000" or IR="00010000")and ZE='1')then

z:=

"0000000000000000000000000100000001010011000000";

end if;

if(IR="01110011")then

z:=

"0000000000000000000000000101010000010011000000";

end if;

if(IR="10010011")then

z:=

"0000000000000000000000000101010000010111000000";

Page 256: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

256

end if;

if(IR="10000011")then

z:=

"0000000000000000000000000100000000010111000000";

end if;

-----------------------------------------------------------------15--------------------------------------

-----------------------------

WHEN "01111" =>

If((IR="11011000" Or IR="11011001" or IR="11011010" or IR="11011011" or IR="11011100" or IR="11011101" or

IR="11011110" or IR="11011111" or IR="11010101"

or IR="10110110" or IR="10110111" or IR="10111000" or IR="10111001" or IR="10111010" or IR="10111011" or

IR="10111100" or IR="10111101" or IR="10111110"

or IR="10111111" or IR="10110100" or IR="10110101" or IR="01100000" or IR="01110000" or IR="01000000" or

IR="01010000" or IR="00100000")and ZE='1')then

z:=

"0000000000000000000000000000000001110001000000";

end if;

if((IR="00100000" or IR="00110000" or IR="00010000")and ZE='1')then

z:=

"0000000000000000000000000000000001010001000000";

end if;

if(IR="10100110" or IR="10100111" )then

z:=

"0000000000000000000000001000000000000111001000";

end if;

-----------------------------------------------------------------16--------------------------------------

----------------------------

when "10000" => z:= "0000100000000000000000000000001110000000000000";

-----------------------------------------------------------------17--------------------------------------

----------------------------

when "10001" => z:= "0000000000000000000000110000000000000000000000";

-----------------------------------------------------------------18--------------------------------------

----------------------------

when "10010" => z:= "0000000000001000000000110011110000000000000001";

-----------------------------------------------------------------19--------------------------------------

----------------------------

when "10011" => z:= "0000000000010000000000000011110000000000000001";

-----------------------------------------------------------------20--------------------------------------

----------------------------

when "10100" => z:= "0000000000000000000000001000000001010001000000";

-----------------------------------------------------------------21--------------------------------------

----------------------------

when "10101" => z:= "0100000000000000000000001000000001110011000000";

when others=> z:= "0000000000000000000000000000000000000000000000";

end case;

q<=z;

Page 257: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

257

end process;

end operacion;

CODIGO VHDL DEL DISPOSITIVO CABLE

Este código simplemente coloca lo que llega en la entrada en la salida, es útil

cuando se necesitan datos de los buses tri-estados en la misma unidad de donde

se generan estos datos.

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

Entity cable is

Port(

X : in std_logic_vector ( 7 downto 0 );

Q : out std_logic_vector ( 7 downto 0 ));

End cable;

Architecture Op of cable is

Begin

Q<= X;

End Op;

CODIGO VHDL DEL DISPOSITIVO AND20

Este código funciona como una compuerta AND negada de 21 entradas.

Page 258: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

258

library ieee;

USE ieee.std_logic_1164.all;

USE ieee.std_logic_signed.all;

USE ieee.std_logic_arith.all;

entity and20 is

port(a: in std_logic_vector( 20 downto 0);

s: out std_logic);

end entity;

architecture operacion of and20 is

begin

process

begin

if(a="000000000000000000000")then

s<='1';

else

s<='0';

end if;

end process;

end operacion;

Page 259: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

259

CODIGO VHDL DEL DISPOSITIVO REG8BAGU

Este dispositivo se utiliza en la unidad generadora de direcciones para acomodar

el valor de la posición de memoria en las instrucciones de direccionamiento a

banco de registros, indirecto y llamados a subrutinas.

library ieee;

use ieee.std_logic_1164.all;

Entity REG8Bagu is

port(

C : in std_logic;--C = Clr,CLK

SEL,PSW : in std_logic_vector(1 downto 0);

D : in std_logic_vector(7 downto 0);

Q : out std_logic_vector(7 downto 0));

end entity;

Architecture Op of REG8Bagu is

Signal REG : std_logic_vector(7 downto 0);

Begin

Process(SEL)

Begin

--if(clk'event and clk = '1')then

if (C = '1') then

REG <= "00000000";

else

REG <= D;

Page 260: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

260

end if;

--end if;

case SEL is

when "01" => Q<= "000" & PSW(1 downto 0) & "00" & REG(0);--RI

when "10" => Q<= "000" & PSW(1 downto 0) & REG(2 downto 0);--

RN

when "11" => Q<= "00000" & REG(7 downto 5);--ACALL

when others=>Q<= "00000000";

end case;

end process;

end Op;

CODIGO VHDL DEL DISPOSITIVO AS2

Este código se utiliza en las instrucciones de salto relativo para escoger si la parte

alta del dato que entra al sumador debe ser “11111111” o “00000000”.

library ieee;

USE ieee.std_logic_1164.all;

USE ieee.std_logic_signed.all;

Entity as2 is

port(

A : in std_logic;

Page 261: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

261

Q : out std_logic_vector(7 downto 0));

end as2;

Architecture Op of as2 is

Begin

Process

Variable REG : std_logic_vector(7 downto 0);

Variable REG1: std_logic;

Begin

if (A = '1') then

REG := "11111111";

else

REG := "00000000";

end if;

Q <= REG;

end process;

end Op;

CODIGO VHDL DEL DISPOSITIVO CABLE2

Este código cumple la función concatenar las dos entradas y ponerlas en la salida.

library ieee;

Page 262: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

262

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

Entity cable2 is

Port(

X,Y : in std_logic_vector ( 7 downto 0 );

Q : out std_logic_vector ( 15 downto 0 ));

End entity;

Architecture Op of cable2 is

Begin

Q<= X&Y;

End Op;

CODIGO VHDL DEL DISPOSITIVO U_CORRI

Este código funciona de la siguiente manera: se tiene primero en cuenta el valor

del bit 1 del nibble alto del IR, si es cero las posibles operaciones a realizar son

RR A y RRC A, donde el bit 0 del nibble alto es quien decide cual de las dos se

cumple; en el caso que el bit 1 sea uno las posibles operaciones son RL A y RLC A,

y de igual manera el bit 0 es quien decide. Esto se puede dar debido a que los

códigos de operación del nibble alto de estas instrucciones son 0,1,2 y3.

LIBRARY ieee;

USE ieee.std_logic_1164.all;

USE ieee.std_logic_arith.all;

Page 263: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

263

entity U_CORRi is

port(A: in std_logic_vector(7 downto 0);

Ci: in std_logic;

sel: in std_logic_vector(1 downto 0);

Co:out std_logic;

x: out std_logic_vector(7 downto 0));

end entity;

architecture U_CORRi of U_CORRi is

begin

process (sel)

variable temp1,temp2 : std_logic_vector (7 downto 0);

begin

temp1 := A;

if ( sel(1) = '1') then

if (sel(0) = '0') then

temp2 := temp1(6 downto 0) & temp1(7);--RL

Co <= Ci;

else

temp2 := temp1(6 downto 0) & Ci;--RLC

Co <= temp1(7);

end if;

else

Page 264: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

264

if (sel(0) = '0') then

temp2 := temp1(0) & temp1(7 downto 1);--RR

Co <= ci;

else

temp2 := Ci & temp1(7 downto 1);--RRC

Co <= temp1(0);

end if;

end if;

x <= temp2;

end process;

end U_CORRi;

CODIGO VHDL DEL DISPOSITIVO U_EXCH

Este código para cumplir con sus operaciones se basa en los 5 primeros bits del

IR; la primera selección la hace con el bit 4, osea el bit menos significativo del

nibble alto del IR, si es cero tiene como posibilidades las instrucciones SWAP y

XCH, para seleccionar entre estas dos se utiliza todo el nibble bajo del IR, ya que

si es su valor es “0100” se escoge la instrucción SWAP, sino se escoge la

instrucción XCH. Para cuando el bit 4 valga uno se tiene como posibilidades las

instrucciones DA y XCHD, e igualmente se elige con la ayuda del nibble bajo del

IR, cuando este valga “0100” se elige la instrucción DA y cuando tenga cualquier

otro valor escoge la instrucción XCHD.

library ieee;

USE ieee.std_logic_1164.all;

Page 265: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

265

USE ieee.std_logic_signed.all;

entity u_exch is

port( A,B : in std_logic_vector (7 downto 0);--Entradas de los

registros A y Temp 2

S0,C,CV:in std_logic;

--Entrada de seleccion S0 IR(4), Carry y Carry intermedio

IRH : in std_logic_vector (3 downto 0);--Parte baja del IR.

Determina si se hace el ajuste decimal o no

Cout: out std_logic;

QA,QB: out std_logic_vector (7 downto 0));

end entity;

architecture operacion of u_exch is

begin

process(A,B,S0)

variable T1, T2,C1 : std_logic;

variable U1 ,U2 : std_logic_vector(5 downto 0);

variable T3 : std_logic_vector(8 downto 0);

begin

case S0 is

when '0' => if (IRH = "0100") then

QA<= A(3 downto 0) & A(7 downto 4);-

-SWAP

QB<="00000000";

C1:=C;

else

Page 266: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

266

QA <= B; --XCH

QB <= A;

C1:=C;

end if;

when '1' => if (IRH = "0100") then --Ajuste Decimal

T1:= CV or (A(3) and (A(2) or A(1)));

T2:= C or (A(7) and (A(6) or A(5)));

if (T1 = '1')then

U1:='0'&A(3downto 0)+"00110";

else

U1 := "00" & A(3 downto 0);

end if;

if(T2 = '1')then

U2:='0'&A(7downto 4)+"00110";

else

U2 := "00" &A(7 downto 4);

end if;

T3:= U2 & "0000"+U1;

QA<=T3(7 downto 0);

QB<= "00000000";

C1:=T3(8);

else

QA<= A(7 downto 4) & B(3 downto 0);--XCHD

QB<= B(7 downto 4) & A(3 downto 0);--XCHD

C1:=C;

end if;

when others=>

Page 267: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

267

QA<="00000000"; QB<="00000000";

C1:=C;

end case;

Cout<=C1;

end process;

end operacion;

CODIGO VHDL DEL DISPOSITIVO DIRBITS

Este código recibe un valor en la entrada que contiene información de la dirección

en memoria del byte que contiene el bit necesario para realizar la instrucción y del

bit. Para encontrar la dirección se verifica el valor del bit más significativo (si es

cero es porque el byte que contiene el bit está entre 20h y 2fh, y si el bit es uno el

byte está en la zona de registros de funciones especiales) y para la salida del

código del bit se coloca los tres bits menos significativos de la entrada..

Library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

Entity dirbits is

Port(

tmp1 : in std_logic_vector (7 downto 0);

datout : out std_logic_vector (7 downto 0);

bit : out std_logic_vector(2 downto 0));

Page 268: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

268

End entity;

Architecture Op of dirbits is

Begin

Process

variable tmp: std_logic_vector(7 downto 0);

Begin

if (tmp1(7) = '0') Then

tmp:="0010" &tmp1(6 downto 3);

else

tmp:=tmp1(7 downto 3) & "000";

end if;

bit<=tmp1(2 downto 0);

datout<=tmp;

end Process;

End Op;

CODIGO VHDL DEL DISPOSITIVO CJNE

Este código verifica para realizar sus operaciones que los dos bits menos

significativos del nibble alto estén en uno, de lo contrario lo que haya en la

entrada es puesto en la salida. Cuando la verificación es satisfactoria se realizan

Page 269: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

269

operaciones de “igualdad” y “menor que” entre los datos que llegan a las entradas

A y B.

library ieee;

use ieee.std_logic_1164.all;

Entity cjne is

port(

a,b : in std_logic_vector(7 downto 0);

ir : in std_logic_vector(1 downto 0);

cin,r : in std_logic;

s,cout : out std_logic);

end entity;

Architecture Op of cjne is

Begin

Process

variable temp: std_logic;

Begin

if(ir="11")then

if(a=b)then

temp:='0';

cout<=cin;

Page 270: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

270

else

if(a<b)then

temp:='1';

cout <= '1';

else

temp:='1';

cout <= '0';

end if;

end if;

s<=temp;

else

s<=r;

cout<=cin;

end if;

end process;

end Op;

CODIGO VHDL DEL DISPOSITIVO UL

Este código tiene como función escoger entre las operaciones lógicas AND, OR,

XOR y NOT, teniendo en cuenta los dos bit menos significativos del nibble alto del

IR, “00” para la instrucción ORL, “01” para la instrucción ANL, “10” para la

instrucción XRL y “11” para la instrucción CPL A.

Page 271: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

271

library ieee;

USE ieee.std_logic_1164.all;

USE ieee.std_logic_signed.all;

entity ul is

port(x,y: in std_logic_vector(7 downto 0);

sel: in std_logic_vector(1 downto 0);

z: out std_logic_vector(7 downto 0));

end entity;

architecture operacion of ul is

begin

process

begin

case sel is

when "00" => z<= x or y;

when "01" => z<= x and y;

when "10" => z<= x xor y;

when "11" => z<= not x;

when others=> z<= "00000000";

end case;

end process;

end operacion;

Page 272: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

272

CODIGO VHDL DEL DISPOSITIVO CJNEMUX

library ieee;

use ieee.std_logic_1164.all;

Entity cjnemux is

port(

IR : in std_logic_vector(7 downto 0);

s : out std_logic);

end entity;

Architecture Op of cjnemux is

Begin

Process(IR)

Begin

if(IR="10110110" or IR="10110111" or IR="10111000" or IR="10111001"

or IR="10111010" or IR="10111011" or IR="10111100"

or IR="10111101" or IR="10111110" or IR="10111111")then

s <= '1';

else

s <= '0';

end if;

end process;

end Op;

Page 273: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

273

CODIGO VHDL DEL DISPOSITIVO CJNEMUX1

library ieee;

use ieee.std_logic_1164.all;

Entity cjnemux1 is

port(

IR : in std_logic_vector(7 downto 0);

s : out std_logic);

end entity;

Architecture Op of cjnemux1 is

Begin

Process(IR)

Begin

if(IR="10110100" or IR="10110101" )then

s <= '0';

else

s <= '1';

end if;

end process;

end Op;

Page 274: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

274

CODIGO VHDL DEL DISPOSITIVO ARREOV

La función de este código es elegir cual de las banderas de desbordamiento se

coloca en la salida dependiendo de la palabra de operación IR.

library ieee;

use ieee.std_logic_1164.all;

Entity ARREOV is

port(

OVA,OVD,OVM: in std_logic;--

IR : in std_logic_vector(7 downto 0);

Q : out std_logic);

end entity;

Architecture Op of ARREOV is

Begin

Process

variable REG : std_logic;

Begin

IF(IR="10000100")THEN

REG:=OVD;

END IF;

if(IR="10100100")then

REG:=OVM;

end if;

Page 275: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

275

if(IR="00100100" or IR="00110100" or IR="10010100"

or IR="00100101" or IR="00110101" or IR="10010101"

or IR="00100110" or IR="00110110" or IR="00100111"

or IR="00110111" or IR="00101000" or IR="00101001"

or IR="00101010" or IR="00101011" or IR="00101100"

or IR="00101101" or IR="00101110" or IR="00101111"

or IR="00111000" or IR="00111001" or IR="00111010"

or IR="00111011" or IR="00111100" or IR="00111101"

or IR="00111110" or IR="00111111" or IR="10011000"

or IR="10011001" or IR="10011010" or IR="10011011"

or IR="10011100" or IR="10011101" or IR="10011110"

or IR="10011111" or IR="10010110" or IR="10010111")then

REG:=OVA;

end if;

Q <= REG;

end process;

end Op;

CODIGO VHDL DEL DISPOSITIVO PRUBIT

library ieee;

USE ieee.std_logic_1164.all;

Page 276: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

276

USE ieee.std_logic_signed.all;

entity prubit is

port(ir,datoin: in std_logic_vector(7 downto 0);

bits : in std_logic_vector(2 downto 0);

cin,Z,R : in std_logic;

cout,s : out std_logic;

datoout: out std_logic_vector(7 downto 0));

end entity;

architecture operacion of prubit is

begin

process

variable temp1: std_logic_vector(7 downto 0);

variable temp2: std_logic;

variable temp3,s1: std_logic;

begin

temp1:=datoin;

case bits is

when "000"=>temp2:=datoin(0);

when "001"=>temp2:=datoin(1);

when "010"=>temp2:=datoin(2);

when "011"=>temp2:=datoin(3);

Page 277: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

277

when "100"=>temp2:=datoin(4);

when "101"=>temp2:=datoin(5);

when "110"=>temp2:=datoin(6);

when "111"=>temp2:=datoin(7);

when others=>temp2:='0';

end case;

case ir is

when "01110010" => cout<= cin or temp2; --C

or bit

temp3:= temp2;s1:='0';

when "10000010" => cout<= cin and temp2; -

-C and bit

temp3:= temp2;s1:='0';

when "10010010" => cout<= cin; --mov

bit,C

temp3:= cin;s1:='0';

when "10100010" => cout<= temp2; --

mov C,bit

temp3:= temp2;s1:='0';

when "10110010" => cout<= cin; --cpl bit

temp3:= not temp2;

Page 278: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

278

when "11000010" => cout<= cin;s1:='0';

--clr bit

temp3:= '0';s1:='0';

when "11010010" => cout<= cin; --setb

bit

temp3:= '1';s1:='0';

when "10100000" => cout<= cin or (not temp2); --C

or /bit

temp3:= temp2;s1:='0';

when "10110000" => cout<= cin and (not temp2); --C

and /bit

temp3:= temp2;s1:='0';

when "11000011" => cout<= '0';

--Clr C

temp3:=temp2;s1:='0';

when "11010011" => cout<= '1'; --

setb C

temp3:=temp2;s1:='0';

when "10110011" => cout<= not cin;

--Cpl C

temp3:=temp2;s1:='0';

Page 279: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

279

when "00010000" => if(temp2='1')then

--JBC

s1:='1';

temp3:='0';

else

s1:='0';

temp3:=temp2;

end if;

cout<=cin;

when "00100000" => if(temp2='1')then

--JB

s1:='1';

else

s1:='0';

end if;

cout<=cin;

temp3:=temp2;

when "00110000" => if(temp2='0')then

--JNB

s1:='1';

else

s1:='0';

end if;

cout<=cin;

Page 280: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

280

temp3:=temp2;

when "01000000" => if(cin='1')then

--JC

s1:='1';

else

s1:='0';

end if;

cout<=cin;

temp3:=temp2;

when "01010000" => if(cin='0')then

--JNC

s1:='1';

else

s1:='0';

end if;

cout<=cin;

temp3:=temp2;

when "01100000" => if(z='1')then

--JZ

s1:='1';

else

s1:='0';

end if;

cout<=cin;

Page 281: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

281

temp3:=temp2;

when "01110000" => if(z='0')then

--JNZ

s1:='1';

else

s1:='0';

end if;

cout<=cin;

temp3:=temp2;

when others=> cout<= '0'; temp3:='0';s1:=R;

end case;

s<=s1;

case bits is

when "000"=>temp1:=temp1(7 downto 1)&temp3;

when "001"=>temp1:=temp1(7 downto

2)&temp3&temp1(0);

when "010"=>temp1:=temp1(7 downto

3)&temp3&temp1(1 downto 0);

when "011"=>temp1:=temp1(7 downto

4)&temp3&temp1(2 downto 0);

when "100"=>temp1:=temp1(7 downto

5)&temp3&temp1(3 downto 0);

Page 282: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

282

when "101"=>temp1:=temp1(7 downto

6)&temp3&temp1(4 downto 0);

when "110"=>temp1:=temp1(7)&temp3&temp1(5

downto 0);

when "111"=>temp1:=temp3&temp1(6 downto 0);

when others=>temp1:="00000000";

end case;

datoout<=temp1;

end process;

end operacion;

CODIGO VHDL DEL DISPOSITIVO ARRECARRY

Este código escoge entre todas las señales de acarreo que le llegan a la entrada

(acarreo por adición, acarreo por multiplicación, acarreo por división, acarreo por

intercambio, acarreo por la instrucción cjne y acarreo por instrucciones de bits).

library ieee;

use ieee.std_logic_1164.all;

Entity ARRECARRY is

port(

CADDER,CEXCH,CCORR,CCJNE,CBIT: in std_logic;--

IR : in std_logic_vector(7 downto 0);

Page 283: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

283

Q : out std_logic);

end entity;

Architecture Op of ARRECARRY is

Begin

Process

variable REG : std_logic;

Begin

IF(IR="10000100" or IR="10100100")THEN

REG:='0';

END IF;

if(IR="01110010" or IR="10000010" or IR="10100010"

or IR="10100000" or IR="10110000" or IR="10110011"

or IR="11000011"

or IR="11010011")then

REG:=CBIT;

end if;

if(IR="11010100")then

REG:=CEXCH;

end if;

if(IR="00010011" or IR="00110011")then

REG:=CCORR;

end if;

Page 284: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

284

if(IR="00100100" or IR="00110100" or IR="10010100"

or IR="00100101" or IR="00110101" or IR="10010101"

or IR="00100110" or IR="00110110" or IR="00100111"

or IR="00110111" or IR="00101000" or IR="00101001"

or IR="00101010" or IR="00101011" or IR="00101100"

or IR="00101101" or IR="00101110" or IR="00101111"

or IR="00111000" or IR="00111001" or IR="00111010"

or IR="00111011" or IR="00111100" or IR="00111101"

or IR="00111110" or IR="00111111" or IR="10011000"

or IR="10011001" or IR="10011010" or IR="10011011"

or IR="10011100" or IR="10011101" or IR="10011110"

or IR="10011111" or IR="10010110" or IR="10010111")then

REG:=CADDER;

end if;

if(IR="10110110" or IR="10110111" or IR="10111000"

or IR="10111001" or IR="10111010" or IR="10111011"

or IR="10111100"

or IR="10111101" or IR="10111110" or IR="10111111"

or IR="10110100" or IR="10110101")then

REG:=CCJNE;

end if;

Q <= REG;

end process;

Page 285: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

285

end Op;

CODIGO VHDL DEL DISPOSITIVO SALTOARRE

library ieee;

USE ieee.std_logic_1164.all;

USE ieee.std_logic_signed.all;

USE ieee.std_logic_arith.all;

entity saltoarre is

port(sa: in std_logic_vector( 4 downto 0);

IR: in std_logic_vector(7 downto 0);

sq: in std_logic;

s: out std_logic);

end entity;

architecture operacion of saltoarre is

begin

process

begin

if(((sa="01100" )and (IR="00010000"

or IR="00100000" or IR="00110000" )and sq='1')

or ((sa="00001" )and (IR="01000000"

Page 286: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

286

or IR="01010000" or IR="01100000" or

IR="01110000")and sq='1'))then

s<='1';

else

if((sa="01110" or sa="01111")and

(IR="00010000" or IR="00100000" or IR="00110000"

or IR="01000000" or IR="01010000"

or IR="01100000" or IR="01110000"

))then

s<='1';

else

s<='0';

end if;

end if;

end process;

end operacion;

CODIGO VHDL DEL DISPOSITIVO ARRE_RAMEX

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

Entity arre_ramex is

Page 287: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

287

Port(

IR : in std_logic_vector ( 7 downto 0 );

Q : out std_logic_vector ( 1 downto 0 ));

End entity;

Architecture Op of arre_ramex is

Begin

process(IR)

begin

if(IR="11100000" or IR="11110000" or IR="11100010"

or IR="11110010"

or IR="11100011" or IR="11110011")then

Q<="10";

else

Q<="01";

end if;

end process;

End Op;

Page 288: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

288

ANEXO B

CODIGO AHDL DEL DISPOSITIVO CPU

Este código tiene como función generar el estado siguiente que debe cumplir una

instrucción para ejecutarse a cabalidad, se desarrolla en lenguaje ADHL por la

facilidad que otorga para implementar máquinas de estados.

SUBDESIGN CPU

(

clk : INPUT;

reset : INPUT;

INT : INPUT;

IR[7..0] : INPUT;--PALABRA DE INSTRUCCION

SALTO : INPUT;

sa[4..0] : OUTPUT;

)

VARIABLE

% current current %

% state output %

ss: MACHINE OF BITS (sa[4..0])

WITH STATES (s0 = B"00000",

s1 = B"00001",

s2 = B"00010",

s3 = B"00011",

Page 289: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

289

s4 = B"00100",

s5 = B"00101",

s6 = B"00110",

s7 = B"00111",

s8 = B"01000",

s9 = B"01001",

s10 = B"01010",

s11 = B"01011",

s12 = B"01100",

s13 = B"01101",

s14 = B"01110",

s15 = B"01111",

s16 = B"10000",

s17 = B"10001",

s18 = B"10010",

s19 = B"10011",

s20 = B"10100",

s21 = B"10101");

BEGIN

ss.clk = clk;

ss.reset = reset;

TABLE

% current current next %

% state input state %

ss, IR[7..0], SALTO, INT => ss;

s0, B"XXXXXXXX", x, x => s1;

Page 290: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

290

s1, B"00000000", x, x => s2;--Op. modo implicito*********************

s1, B"00000011", x, x => s2;--Op. RR A*******************************

s1, B"00000100", x, x => s2;--Op. INC A******************************

s1, B"00010011", x, x => s2;--Op. RRC A******************************

s1, B"00010100", x, x => s2;--Op. DEC A******************************

s1, B"00100011", x, x => s2;--23 RL A********************************

s1, B"00110011", x, x => s2;--33 RLC A*******************************

s1, B"101x0011", x, x => s2;--inc dptr , cpl c***********************

s1, B"110x0011", x, x => s2;--Op. clr c y setb c*********************

s1, B"110x0100", x, x => s2;--Op. D4 DA A y C4 SWAP A****************

s1, B"111x0100", x, x => s2;--Op. modo implicito*********************

s1, B"10x00100", x, x => s12;--OP. mu a, div a***********************

s12, B"10x00100", x, x => s3;

s3, B"10x00100", x, x => s2;--***************************************

s1, B"001x0100", x, x => s3;--Op. modo inmediato con destino A*******

s1, B"01xx0100", x, x => s3;

s1, B"10010100", x, x => s3;

s3, B"001x0100", x, x => s2;

s3, B"10010100", x, x => s2;

s3, B"01xx0100", x, x => s2;--Op. modo inmediato con destino A*******

s1, B"11100000", x, x => s3;--Op. movx a,dptr*********************

s3, B"11100000", x, x => s2;--***************************************

s1, B"11110000", x, x => s2;--Op. movx dptr,a************************

s1, B"0111011x", x, x => s4;--Op. modo inmediato con destino Ri******

s4, B"0111011x", x, x => s10;

s10, B"0111011x", x, x => s5;

s5, B"0111011x", x, x => s3;

s3, B"0111011x", x, x => s2;--Op. modo inmediato con destino Ri******

Page 291: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

291

s1, B"01111xxx", x, x => s4;--Op. modo inmediato con destino Rn******

s4, B"01111xxx", x, x => s3;

s3, B"01111xxx", x, x => s2;--Op. modo inmediato con destino Rn******

s1, B"01110101", x, x => s6;--Op. modo inmediato con destino dir(mov)

s6, B"01110101", x, x => s7;

s7, B"01110101", x, x => s2;--Op. modo inmediato con destino dir*****

s1, B"001x011x", x, x => s4;--Op. modo indirecto con destino A*******

s1, B"010x011x", x, x => s4;

s1, B"0110011x", x, x => s4;

s1, B"1001011x", x, x => s4;

s4, B"001x011x", x, x => s10;

s4, B"010x011x", x, x => s10;

s4, B"0110011x", x, x => s10;

s4, B"1001011x", x, x => s10;

s10, B"001x011x", x, x => s5;

s10, B"010x011x", x, x => s5;

s10, B"0110011x", x, x => s5;

s10, B"1001011x", x, x => s5;

s5, B"001x011x", x, x => s11;

s5, B"010x011x", x, x => s11;

s5, B"0110011x", x, x => s11;

s5, B"1001011x", x, x => s11;

s11, B"001x011x", x, x => s7;

s11, B"010x011x", x, x => s7;

s11, B"0110011x", x, x => s7;

s11, B"1001011x", x, x => s7;

s7, B"001x011x", x, x => s2;

Page 292: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

292

s7, B"010x011x", x, x => s2;

s7, B"0110011x", x, x => s2;

s7, B"1001011x", x, x => s2;--Op. modo indirecto con destino A*******

s1, B"110x011x", x, x => s4;--Op. modo ind con destino A (xch a,ri)**

s4, B"110x011x", x, x => s10;

s10, B"110x011x", x, x => s5;

s5, B"110x011x", x, x => s11;

s11, B"110x011x", x, x => s12;

s12, B"110x011x", x, x => s7;

s7, B"110x011x", x, x => s2;--Op. modo indirecto con destino A*******

s1, B"1011011x", x, x => s4;--Op. CJNE Ri,#data**********************

s4, B"1011011x", x, x => s10;

s10, B"1011011x", x, x => s3;

s3, B"1011011x", x, x => s5;

s5, B"1011011x", x, x => s11;

s11, B"1011011x", x, x => s13;

s13, B"1011011x", x, x => s12;

s12, B"1011011x", 1, x => s15;

s15, B"1011011x", 1, x => s14;

s14, B"1011011x", 1, x => s2;

s12, B"1011011x", 0, x => s2;--***************************************

s1, B"10111xxx", x, x => s3;--Op. CJNE RN,#data**********************

s3, B"10111xxx", x, x => s5;

s5, B"10111xxx", x, x => s11;

s11, B"10111xxx", x, x => s13;

s13, B"10111xxx", x, x => s12;

s12, B"10111xxx", 1, x => s15;

Page 293: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

293

s15, B"10111xxx", 1, x => s14;

s14, B"10111xxx", 1, x => s2;

s12, B"10111xxx", 0, x => s2;--***************************************

s1, B"10110100", x, x => s13;--Op. CJNE A,#data********************

s13, B"10110100", x, x => s12;

s12, B"10110100", 1, x => s15;

s15, B"10110100", 1, x => s14;

s14, B"10110100", 1, x => s2;

s12, B"10110100", 0, x => s2;--***************************************

s1, B"11011xxx", x, x => s5;--Op. DNJZ RN****************************

s5, B"11011xxx", x, x => s11;

s11, B"11011xxx", x, x => s7;

s7, B"11011XXX", X, x => s12;

s12, B"11011XXX", 1, x => s15; --SALTO

s15, B"11011xxx", 1, x => s14;

s14, B"11011xxx", 1, x => s2;

s12, B"11011xxx", 0, x => s2;--***************************************

s1, B"10110101", x, x => s11;--Op. CJNE A,dir************************

s11, B"10110101", x, x => s13;

s13, B"10110101", x, x => s12;

s12, B"10110101", 1, x => s15;

s15, B"10110101", 1, x => s14;

s14, B"10110101", 1, x => s2;

s12, B"10110101", 0, x => s2;--***************************************

s1, B"11010101", x, x => s11;--Op. DJNZ dir**************************

Page 294: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

294

s11, B"11010101", x, x => s3;

s3, B"11010101", x, x => s12;

s12, B"11010101", 1, x => s15;

s15, B"11010101", 1, x => s14;

s14, B"11010101", 1, x => s2;

s12, B"11010101", 0, x => s2;--***************************************

s1, B"00010000", x, x => s11;--Op. JBC*******************************

s11, B"00010000", x, x => s10;

s10, B"00010000", x, x => s13;

s13, B"00010000", x, x => s7;

s7, B"00010000", x, x => s12;

s12, B"00010000", 1, x => s15;

s15, B"00010000", 1, x => s14;

s14, B"00010000", 1, x => s2;

s12, B"00010000", 0, x => s2;--***************************************

s1, B"00100000", x, x => s11;--Op. JB********************************

s11, B"00100000", x, x => s10;

s10, B"00100000", x, x => s13;

s13, B"00100000", x, x => s12;

s12, B"00100000", 1, x => s15;

s15, B"00100000", 1, x => s14;

s14, B"00100000", 1, x => s2;

s12, B"00100000", 0, x => s2;--***************************************

s1, B"00110000", x, x => s11;--Op. JNB*******************************

s11, B"00110000", x, x => s10;

s10, B"00110000", x, x => s13;

s13, B"00110000", x, x => s12;

Page 295: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

295

s12, B"00110000", 1, x => s15;

s15, B"00110000", 1, x => s14;

s14, B"00110000", 1, x => s2;

s12, B"00110000", 0, x => s2;--***************************************

s1, B"01000000", 1, x => s15;--Op. JC********************************

s15, B"01000000", 1, x => s14;

s14, B"01000000", 1, x => s2;

s1, B"01000000", 0, x => s2;--***************************************

s1, B"01010000", 1, x => s15;--Op. JNC*******************************

s15, B"01010000", 1, x => s14;

s14, B"01010000", 1, x => s2;

s1, B"01010000", 0, x => s2;--***************************************

s1, B"01100000", 1, x => s15;--Op. JZ********************************

s15, B"01100000", 1, x => s14;

s14, B"01100000", 1, x => s2;

s1, B"01100000", 0, x => s2;--***************************************

s1, B"01110000", 1, x => s15;--Op. JNZ*******************************

s15, B"01110000", 1, x => s14;

s14, B"01110000", 1, x => s2;

s1, B"01110000", 0, x => s2;--***************************************

s1, B"01110011", x, x => s14;--Op. JMP A+DPTR************************

s14, B"01110011", x, x => s2;--***************************************

s1, B"10010011", x, x => s14;--Op. MOVC A,A+DPTR********************

s14, B"10010011", x, x => s7;

Page 296: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

296

s7, B"10010011", x, x => s2;--**************************************

s1, B"10000011", x, x =>s14;--Op.MOVCA,A+PC**********************

s14, B"10000011", x, x => s7;

s7, B"10000011", x, x => s2;--**************************************

s1, B"11001xxx", x, x => s5;--Op. modo ind con destino A (xch a,rn)**

s5, B"11001xxx", x, x => s11;

s11, B"11001xxx", x, x => s12;

s12, B"11001xxx", x, x => s7;

s7, B"11001xxx", x, x => s2;--Op. modo ind con destino A (xch a,rn)**

s1, B"11000101", x, x => s6;--Op. modo dir con destino A(xch A,dir)*

s6, B"11000101", x, x => s12;

s12, B"11000101", x, x => s7;

s7, B"11000101", x, x => s2;--**************************************

s1, B"001x0101", x, x => s6;--Op. modo directo con destino A*********

s1, B"010x0101", x, x => s6;

s1, B"01100101", x, x => s6;

s1, B"10010101", x, x => s6;

s6, B"001x0101", x, x => s3;

s6, B"010x0101", x, x => s3;

s6, B"01100101", x, x => s3;

s6, B"10010101", x, x => s3;

s6, B"001x0101", x, x => s3;

s3, B"010x0101", x, x => s2;

s3, B"01100101", x, x => s2;

s3, B"10010101", x, x => s2;

Page 297: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

297

s3, B"001x0101", x, x => s2;--Op. modo directo con destino A*********

s1, B"11110101", x, x => s6;--Op. modo dir con destino A(mov dir,a)**

s6, B"11110101", x, x => s7;

s7, B"11110101", x, x => s2;--Op. modo directo con destino A*********

s1, B"11100101", x, x => s7;--Op. modo dir con destino A(mov a,dir)**

s7, B"11100101", x, x => s2;--Op. modo dir con destino A*************

s1, B"10000101", x, x => s10;--Op. modo mov dir,dir******************

s10, B"10000101", x, x => s6;

s6, B"10000101", x, x => s12;

s12, B"10000101", x, x => s7;

s7, B"10000101", x, x => s2;--Op. modo mov dir,dir*******************

s1, B"1110011x", x, x => s4;--Op. modo ind con destino A(mov a, Ri)**

s4, B"1110011x", x, x => s10;

s10, B"1110011x", x, x => s5;

s5, B"1110011x", x, x => s11;

s11, B"1110011x", x, x => s2;--Op. modo indirecto con destino A*******

s1, B"1110001x", x, x => s4;--Op. modo ind con destino A(movx a, Ri)*

s4, B"1110001x", x, x => s10;

s10, B"1110001x", x, x => s5;

s5, B"1110001x", x, x => s11;

s11, B"1110001x", x, x => s2;--Op. modo indirecto con destino A*******

s1, B"xxx00001", x, x => s4;--Op. AJMP******************************

s4, B"xxx00001", x, x =>s2;--**************************************

Page 298: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

298

s1, B"xxx10001", x, x => s14;--Op. ACALL*****************************

s14, B"xxx10001", x, x => s12;

s12, B"xxx10001", x, x => s10;

s10, B"xxx10001", x, x => s7;

s7, B"xxx10001", x, x => s3;

s3, B"xxx10001", x, x => s2;--***************************************

s1, B"11000000", x, x => s14;--Op. PUSH direct***********************

s14, B"11000000", x, x => s10;

s10, B"11000000", x, x => s3;

s3, B"11000000", x, x => s2;--***************************************

s1, B"11010000", x, x => s14;--Op. POP direct************************

s14, B"11010000", x, x => s11;

s11, B"11010000", x, x => s10;

s10, B"11010000", x, x => s3;

s3, B"11010000", x, x => s2;--***************************************

s1, B"00010010", x, x => s11;--Op. LCALL*****************************

s11, B"00010010", x, x => s14;

s14, B"00010010", x, x => s12;

s12, B"00010010", x, x => s10;

s10, B"00010010", x, x => s7;

s7, B"00010010", x, x => s3;

s3, B"00010010", x, x => s2;--***************************************

s1, B"001x0010", x, x => s14;--Op. RET y RETI************************

s14, B"001x0010", x, x => s10;

s10, B"001x0010", x, x => s7;

Page 299: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

299

s7, B"001x0010", x, x => s3;

s3, B"001x0010", x, x => s2;--***************************************

s1, B"00000010", x, x => s4;--Op. LJMP******************************

s4, B"00000010", x, x => s2;--**************************************

s1, B"1000011x", x, x => s4;--Op. modo ind destino dir(mov dir,ri)***

s4, B"1000011x", x, x => s10;

s10, B"1000011x", x, x => s5;

s5, B"1000011x", x, x => s11;

s11, B"1000011x", x, x => s6;

s6, B"1000011x", x, x => s7;

s7, B"1000011x", x, x => s2;--Op. modo indirecto con destino dir*****

s1, B"000x011x", x, x => s4;--Op. modo ind con destino Ri(inc ri)****

s4, B"000x011x", x, x => s10;

s10, B"000x011x", x, x => s5;

s5, B"000x011x", x, x => s11;

s11, B"000x011x", x, x => s7;

s7, B"000x011x", x, x => s2;--Op. modo indirecto con destino Ri******

s1, B"010x0010", x, x => s6;--Op. modo A dir(orl,anl,xrl dir, a)****

s1, B"01100010", x, x => s6;

s6, B"010x0010", x, x => s3;

s6, B"01100010", x, x => s3;

s3, B"010x0010", x, x => s2;

s3, B"01100010", x, x => s2;--Op. modo A con destino dir*************

s1, B"010x0011", x, x => s6;--Op. modo inm dir(orl,anl,xrl)**********

s1, B"01100011", x, x => s6;

Page 300: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

300

s6, B"010x0011", x, x => s7;

s6, B"01100011", x, x => s7;

s7, B"010x0011", x, x => s3;

s7, B"01100011", x, x => s3;

s3, B"010x0011", x, x => s2;

s3, B"01100011", x, x => s2;--Op. modo inmediato con destino dir*****

s1, B"000x1xxx", x, x => s5;--Op. modo Rn con destino rn(inc rn)*****

s5, B"000x1xxx", x, x => s11;

s11, B"000x1xxx", x, x => s7;

s7, B"000x1xxx", x, x => s2;--Op. modo Rn con destino rn*************

s1, B"10101xxx", x, x => s6;--Op. MOV Rn,dir*************************

s6, B"10101xxx", x, x => s12;

s12, B"10101xxx", x, x => s3;

s3, B"10101xxx", x, x => s2;--***************************************

s1, B"1010011x", x, x => s6;--Op. MOV Ri,dir*************************

s6, B"1010011x", x, x => s12;

s12, B"1010011x", x, x => s4;

s4, B"1010011x", x, x => s15;

s15, B"1010011x", x, x => s5;

s5, B"1010011x", x, x => s3;

s3, B"1010011x", x, x => s2;--***************************************

s1, B"10000000", x, x => s11;--OP. SJMP******************************

s11, B"10000000", x, x => s10;

s10, B"10000000", x, x => s3;

s3, B"10000000", x, x => s2;--***************************************

Page 301: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

301

s1, B"000x0101", x, x => s11;--Op. modo diredir(inc y dec dir)*******

s11, B"000x0101", x, x => s3;

s3, B"000x0101", x, x => s2;--Op. modo directo con destino dir*******

s1, B"10001xxx", x, x => s5;--Op. modo Rn con destino dir(mov dir,rn)

s5, B"10001xxx", x, x => s11;

s11, B"10001xxx", x, x => s6;

s6, B"10001xxx", x, x => s7;

s7, B"10001xxx", x, x => s2;--Op. modo Rn con destino dir************

s1, B"11111xxx", x, x => s11;--Op. modo A con destino Rn(mov rn ,a)**

s11, B"11111xxx", x, x => s2;--Op. modo A con destino Rn**************

s1, B"1111011x", x, x => s4;--Op. modo A con destino Ri(mov ri,a)***

s4, B"1111011x", x, x => s10;

s10, B"1111011x", x, x => s5;

s5, B"1111011x", x, x => s2;--Op. modo A con destino Ri**************

s1, B"1111001x", x, x => s4;--Op. modo A con destino Ri(movx ri,a)***

s4, B"1111001x", x, x => s10;

s10, B"1111001x", x, x => s5;

s5, B"1111001x", x, x => s2;--Op. modo A con destino Ri**************

s1, B"001x1xxx", x, x => s5;--Op. modo Rn con destino A**************

s1, B"010x1xxx", x, x => s5;

s1, B"01101xxx", x, x => s5;

s1, B"10011xxx", x, x => s5;

s5, B"001x1xxx", x, x => s11;

s5, B"010x1xxx", x, x => s11;

s5, B"01101xxx", x, x => s11;

Page 302: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

302

s5, B"10011xxx", x, x => s11;

s11, B"001x1xxx", x, x => s7;

s11, B"010x1xxx", x, x => s7;

s11, B"01101xxx", x, x => s7;

s11, B"10011xxx", x, x => s7;

s7, B"001x1xxx", x, x => s2;

s7, B"010x1xxx", x, x => s2;

s7, B"01101xxx", x, x => s2;

s7, B"10011xxx", x, x => s2;--Op. modo Rn con destino A**************

s1, B"11101xxx", x, x => s5;--Op. modo Rn con destino A**************

s5, B"11101xxx", x, x => s11;

s11, B"11101xxx", x, x => s2;--Op. modo Rn con destino A**************

s1, B"1010011x", x, x => s6;--Op. modo mov Ri,dir********************

s6, B"1010011x", x, x => s7;

s7, B"1010011x", x, x => s4;

s4, B"1010011x", x, x => s5;

s5, B"1010011x", x, x => s2;--Op. modo mov Ri,dir********************

s1, B"10010000", x, x => s3;--Op. MOV DPTR,#data16*******************

s3, B"10010000", x, x => s2;--***************************************

s1, B"110x0010", x, x => s11;--Op.bits(clr bit,setb bit)*************

s1, B"10xx0010", x, x => s11;

s1, B"101x0000", x, x => s11;

s1, B"01110010", x, x => s11;

s11, B"110x0010", x, x => s10;

s11, B"10xx0010", x, x => s10;

s11, B"101x0000", x, x => s10;

Page 303: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

303

s11, B"01110010", x, x => s10;

s10, B"110x0010", x, x => s14;

s10, B"10xx0010", x, x => s14;

s10, B"101x0000", x, x => s14;

s10, B"01110010", x, x => s14;

s14, B"110x0010", x, x => s8;

s14, B"10xx0010", x, x => s8;

s14, B"101x0000", x, x => s8;

s14, B"01110010", x, x => s8;

s8, B"110x0010", x, x => s7;

s8, B"101x0000", x, x => s7;

s8, B"10xx0010", x, x => s7;

s8, B"01110010", x, x => s7;

s7, B"110x0010", x, x => s2;

s7, B"10xx0010", x, x => s2;

s7, B"101x0000", x, x => s2;

s7, B"01110010", x, x => s2;--***************************************

s2, B"XXXXXXXX", x, 0 => s0;

s2, B"XXXXXXXX", x, 1 => s9;-----interr******************************

s9, B"XXXXXXXX", x, x => s16;

s16, B"XXXXXXXX", x, x => s17;

s17, B"XXXXXXXX", x, x => s18;

s18, B"XXXXXXXX", x, x => s19;

s19, B"XXXXXXXX", x, x => s20;

s20, B"XXXXXXXX", x, x => s21;

s21, B"XXXXXXXX", x, x => s0;

Page 304: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

304

END TABLE;

END;

CODIGO AHDL DEL DISPOSITIVO MQTX

Este código pertenece a la máquina de estados del dispositivo de transmisión

serial, cuenta con solo 4 estados. Este dispositivo funciona de la siguiente

manera: Se está en el estado cero hasta que la señal de inicio y se pone en alto

pasando al estado uno (señal de salida LOAD se coloca en alto) y luego al dos (las

señal de salida SEND y CLEAR se ponen en alto), en el estado dos se mantiene

mientras la señal de fin de transmisión no se pone en alto, una vez esta señal está

en alto se pasa al estado tres (la señal indicadora de interrupción por transmisión

serial se pone en alto) y finalmente pasa de nuevo al estado cero.

SUBDESIGN mqtx

(

clk : INPUT;

reset : INPUT;

LS : INPUT;

fin : INPUT;

load : OUTPUT;

clear : OUTPUT;

send : OUTPUT;

T1 : OUTPUT;

Page 305: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

305

)

VARIABLE

% current current %

% state output %

ss: MACHINE OF BITS (send,load,clear,T1)

WITH STATES (s0 = B"0010",

s1 = B"0110",

s2 = B"1010",

s3 = B"0001");

BEGIN

ss.clk = clk;

ss.reset = reset;

TABLE

% current current next %

% state input state %

ss, LS, fin => ss;

s0, 0, 0 => s0;

s0, 1, 0 => s1;

s1, 1, 0 => s2;

s1, 0, 0 => s1;

s2, 0, 0 => s2;

Page 306: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

306

s2, 0, 1 => s3;

s3, 0, x => s0;

END TABLE;

END;

CODIGO AHDL DEL DISPOSITIVO MQRX

Este código pertenece a la máquina de estados del dispositivo de recepción serial

y cuenta con solo 3 estados. Este dispositivo funciona de la siguiente manera: Se

está en el estado cero hasta que la señal de inicio y se pone en alto pasando al

estado uno (las señal de salidas CLEAR y E se coloca en alto), en el estado uno se

mantiene mientras la señal de fin de transmisión no se pone en alto, una vez esta

señal está en alto se pasa al estado dos (la señal indicadora de interrupción por

recepción serial se pone en alto, al igual de la señal LOADSBUF) y finalmente pasa

de nuevo al estado cero.

SUBDESIGN mqrx

(

clk : INPUT;

reset : INPUT;

star : INPUT;

fin : INPUT;

loadsbuf : OUTPUT;

R1 : OUTPUT;

clear : OUTPUT;

Page 307: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

307

e : OUTPUT;

)

VARIABLE

% current current %

% state output %

ss: MACHINE OF BITS (loadsbuf,R1,clear,e)

WITH STATES (s0 = B"0010",

s1 = B"0011",

s2 = B"1100");

BEGIN

ss.clk = clk;

ss.reset = reset;

TABLE

% current current next %

% state input state %

ss, star, fin => ss;

s0, 0, 0 => s0;

s0, 1, 0 => s1;

s1, 1, 0 => s1;

s1, 1, 1 => s2;

s2, 0, 1 => s2;

Page 308: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

308

s2, 0, 0 => s0;

END TABLE;

END;

CODIGO AHDL DEL DISPOSITIVO INTERRUP

Este código se encarga de generar la dirección del vector de interrupción,

dependiendo de la entrada de prioridad y la entrada de habilitación global de

interrupciones.

SUBDESIGN interrup

(

IE[4..0],IP[4..0]: INPUT;

clk : INPUT;

Q[5..0] : OUTPUT;

)

variable

ss:MACHINE OF BITS (Q[5..0])

WITH STATES (s0 = B"000000",

s1 = B"000011",--IE0

s2 = B"001011",--TF0

s3 = B"010011",--IE1

s4 = B"011011",--TF1

s5 = B"100011");--S

Page 309: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

309

BEGIN

ss.clk = clk;

TABLE

IE[4..0], IP[4..0] => ss;

B"00000", B"xxxxx" => s0;--0

B"xxxx1", B"00000" => s1;

B"xxx10", B"00000" => s2;

B"xx100", B"00000" => s3;

B"x1000", B"00000" => s4;

B"10000", B"00000" => s5;

B"xxxx1", B"00001" => s1;--1

B"xxx10", B"00001" => s2;

B"xx100", B"00001" => s3;

B"x1000", B"00001" => s4;

B"10000", B"00001" => s5;

B"xxx01", B"00010" => s1;--2

B"xxx1x", B"00010" => s2;

B"xx100", B"00010" => s3;

Page 310: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

310

B"x1000", B"00010" => s4;

B"10000", B"00010" => s5;

B"xxxx1", B"00011" => s1;--3

B"xxx10", B"00011" => s2;

B"xx100", B"00011" => s3;

B"x1000", B"00011" => s4;

B"10000", B"00011" => s5;

B"xx0x1", B"00100" => s1;--4

B"xx010", B"00100" => s2;

B"xx1xx", B"00100" => s3;

B"x1000", B"00100" => s4;

B"10000", B"00100" => s5;

B"xxxx1", B"00101" => s1;--5

B"xx010", B"00101" => s2;

B"xx1x0", B"00101" => s3;

B"x1000", B"00101" => s4;

B"10000", B"00101" => s5;

B"xx001", B"00110" => s1;--6

B"xxx1x", B"00110" => s2;

B"xx10x", B"00110" => s3;

Page 311: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

311

B"x1000", B"00110" => s4;

B"10000", B"00110" => s5;

B"xxxx1", B"00111" => s1;--7

B"xxx10", B"00111" => s2;

B"xx100", B"00111" => s3;

B"x1000", B"00111" => s4;

B"10000", B"00111" => s5;

B"x0xx1", B"01000" => s1;--8

B"x0x10", B"01000" => s2;

B"x0100", B"01000" => s3;

B"x1xxx", B"01000" => s4;

B"10000", B"01000" => s5;

B"xxxx1", B"01001" => s1;--9

B"x0x10", B"01001" => s2;

B"x0100", B"01001" => s3;

B"x1xx0", B"01001" => s4;

B"10000", B"01001" => s5;

B"x0x01", B"01010" => s1;--10

B"xxx1x", B"01010" => s2;

B"x0100", B"01010" => s3;

Page 312: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

312

B"x1x0x", B"01010" => s4;

B"10000", B"01010" => s5;

B"xxxx1", B"01011" => s1;--11

B"xxx10", B"01011" => s2;

B"x0100", B"01011" => s3;

B"x1x00", B"01011" => s4;

B"10000", B"01011" => s5;

B"x00x1", B"01100" => s1;--12

B"x0010", B"01100" => s2;

B"xx1xx", B"01100" => s3;

B"x10xx", B"01100" => s4;

B"10000", B"01100" => s5;

B"xxxx1", B"01101" => s1;--13

B"x0010", B"01101" => s2;

B"xx1x0", B"01101" => s3;

B"x10x0", B"01101" => s4;

B"10000", B"01101" => s5;

B"x0001", B"01110" => s1;--14

B"xxx1x", B"01110" => s2;

B"xx10x", B"01110" => s3;

Page 313: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

313

B"x100x", B"01110" => s4;

B"10000", B"01110" => s5;

B"xxxx1", B"01111" => s1;--15

B"xxx10", B"01111" => s2;

B"xx100", B"01111" => s3;

B"x1000", B"01111" => s4;

B"10000", B"01111" => s5;

B"0xxx1", B"10000" => s1;--16

B"0xx10", B"10000" => s2;

B"0x100", B"10000" => s3;

B"01000", B"10000" => s4;

B"1xxxx", B"10000" => s5;

B"xxxx1", B"10001" => s1;--17

B"0xx10", B"10001" => s2;

B"0x100", B"10001" => s3;

B"01000", B"10001" => s4;

B"1xxx0", B"10001" => s5;

B"0xx01", B"10010" => s1;--18

B"xxx1x", B"10010" => s2;

B"0x100", B"10010" => s3;

Page 314: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

314

B"01000", B"10010" => s4;

B"1xx0x", B"10010" => s5;

B"xxxx1", B"10011" => s1;--19

B"xxx10", B"10011" => s2;

B"0x100", B"10011" => s3;

B"01000", B"10011" => s4;

B"1xx00", B"10011" => s5;

B"0x0x1", B"10100" => s1;--20

B"0x010", B"10100" => s2;

B"xx1xx", B"10100" => s3;

B"01000", B"10100" => s4;

B"1x0xx", B"10100" => s5;

B"xxxx1", B"10101" => s1;--21

B"0x010", B"10101" => s2;

B"xx1x0", B"10101" => s3;

B"01000", B"10101" => s4;

B"1x0x0", B"10101" => s5;

B"0x001", B"10110" => s1;--22

B"xxx1x", B"10110" => s2;

B"xx100", B"10110" => s3;

Page 315: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

315

B"01000", B"10110" => s4;

B"1x00x", B"10110" => s5;

B"xxxx1", B"10111" => s1;--23

B"xxx10", B"10111" => s2;

B"xx100", B"10111" => s3;

B"01000", B"10111" => s4;

B"1x000", B"10111" => s5;

B"00xx1", B"11000" => s1;--24

B"00x10", B"11000" => s2;

B"00100", B"11000" => s3;

B"x1xxx", B"11000" => s4;

B"10xxx", B"11000" => s5;

B"xxxx1", B"11001" => s1;--25

B"00x10", B"11001" => s2;

B"00100", B"11001" => s3;

B"x1xx0", B"11001" => s4;

B"10xx0", B"11001" => s5;

B"00x01", B"11010" => s1;--26

B"xxx1x", B"11010" => s2;

B"00100", B"11010" => s3;

Page 316: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

316

B"x1x0x", B"11010" => s4;

B"10x0x", B"11010" => s5;

B"xxxx1", B"11011" => s1;--27

B"xxx10", B"11011" => s2;

B"00100", B"11011" => s3;

B"x1x00", B"11011" => s4;

B"10x00", B"11011" => s5;

B"000x1", B"11100" => s1;--28

B"00010", B"11100" => s2;

B"xx1xx", B"11100" => s3;

B"x10xx", B"11100" => s4;

B"100xx", B"11100" => s5;

B"xxxx1", B"11101" => s1;--29

B"0001x", B"11101" => s2;

B"xx1x0", B"11101" => s3;

B"x10x0", B"11101" => s4;

B"100x0", B"11101" => s5;

B"00001", B"11110" => s1;--30

B"xxx1x", B"11110" => s2;

B"xx10x", B"11110" => s3;

Page 317: DISEÑO E IMPLEMENTACION DE UN MICROCONTROLADOR …

317

B"x100x", B"11110" => s4;

B"1000x", B"11110" => s5;

B"xxxx1", B"11111" => s1;--31

B"xxx10", B"11111" => s2;

B"xx100", B"11111" => s3;

B"x1000", B"11111" => s4;

B"10000", B"11111" => s5;

END TABLE;

END;