TFG Carlos Luengo Rubia Ines de Miguel Mateo
TFG Carlos Luengo Rubia Ines de Miguel Mateo
Autores:
Tutor:
Julio, 2016
Agradecimientos
En primer lugar, me gustaría dar las gracias a mi familia, que ha hecho posible
este momento. A mi padre, Juan Diego; mi madre, Inmaculada; y mis hermanos, Juan
Diego e Irene. Mi familia me ha apoyado incondicionalmente desde siempre y gracias a
ellos he conseguido llegar hasta aquí, convirtiéndome en la mujer que soy. No tengo
palabras para agradecer toda vuestra ayuda, esfuerzo y lucha constante, lo que ha
permitido que tanto mis hermanos como yo dispongamos de esta gran oportunidad. Os
quiero muchísimo.
Finalmente, quiero nombrar a mi tutor, Antonio Díaz, la persona que nos asesoró,
guió y brindó esta oportunidad. Gracias por creer en nosotros.
Inés de Miguel
I
Quiero expresar mi gratitud a todas las personas que me han ayudado a llegar
hasta aquí y en particular a mi padre, Pedro Pablo; a mi madre, Mercedes; y a mi
hermana Irene, que siempre han estado apoyándome y ayudándome en todo lo que han
podido y sin ellos no podría haber llegado al final de esta etapa. Os quiero.
Por último, quería agradecer a mi tutor académico, Antonio Díaz, la persona que
nos dio la oportunidad de hacer este proyecto, por guiarnos en todo momento.
Carlos Luengo
II
Índice
Agradecimientos ................................................................................................................. I
Índice ................................................................................................................................ III
Índice de figuras.............................................................................................................. VIII
Índice de tablas ............................................................................................................... XIII
Glosario de acrónimos ................................................................................................... XIV
Palabras clave .............................................................................................................. XVII
Resumen ..................................................................................................................... XVIII
Abstract.......................................................................................................................... XIX
1. Introducción ................................................................................................................ 1
1.1. Estado del arte sobre el parking ....................................................................... 1
1.2. Un caso real: Torres de Autostadt .................................................................... 5
1.3. Objetivos .......................................................................................................... 8
1.4. Planteamiento del problema. ............................................................................ 9
2. Dispositivos lógicos configurables. Fabricantes. Familias y dispositivos ................ 18
2.1. Historia ........................................................................................................... 18
2.2. Desarrollo: Dispositivos Lógicos Programables (PLDs) .................................. 21
2.2.1 SPLDs .......................................................................................................... 22
2.2.1.1. ROM (Read-Only Memory / Memoria de Solo Lectura) ......................... 22
2.2.1.1.1. PROM (Programmable Read-Only Memory / Memoria Programable
de Solo Lectura) ............................................................................................. 23
2.2.1.1.2. EPROM (Erasable Programmable Read-Only Memory / Memoria
Programable y Borrable de Solo Lectura) ....................................................... 24
2.2.1.1.3. EEPROM (Electrically Erasable Programmable Read-Only Memory /
Memoria Programable y Borrable Eléctricamente de Solo Lectura) ................ 25
2.2.1.1.4. Flash EEPROM .............................................................................. 26
2.2.1.2. PAL (Programmable Array Logic / Matriz Lógica Programable)............. 26
2.2.1.3. PLA (Programmable Logic Array / Lógica de matrices programables)... 27
2.2.1.4. GAL (Generic Array Logic / Matriz Lógica Genérica) ............................. 28
2.2.2 CPLDs .......................................................................................................... 31
2.2.3 FPGAs .......................................................................................................... 31
2.3. Arquitectura de los dispositivos FPGA ............................................................ 32
2.4. Tipologías de FPGAs ..................................................................................... 39
2.5. Ventajas e inconvenientes de los dispositivos FPGA...................................... 42
2.6. Aplicaciones ................................................................................................... 43
III
2.7. Fabricantes .................................................................................................... 44
2.7.1. XILINX ......................................................................................................... 44
2.7.1.1 Spartan-6 ............................................................................................... 45
2.7.1.2. Virtex-6 ................................................................................................. 57
2.7.2. ALTERA ...................................................................................................... 65
2.7.2.1. Cyclone IV............................................................................................. 66
2.7.2.2. Stratix IV ............................................................................................... 74
3. Placas de prototipado rápido ................................................................................. 81
3.1. Nexys 3 .......................................................................................................... 81
3.2. Kit de evaluación ML605 ................................................................................ 83
3.3. DE2-115 ......................................................................................................... 84
3.4. Placa de desarrollo FPGA Stratix IV GX ......................................................... 85
4. Diseño y desarrollo del sistema ............................................................................. 87
4.1. Caracterización del proyecto .......................................................................... 87
4.2. Especificación de requisitos ........................................................................... 88
4.2.1. Paneles exteriores................................................................................... 88
4.2.2. Paneles interiores.................................................................................. 100
5. Verificación y validación del sistema. Implementación......................................... 118
5.1. Diseño e implementación Hardware ............................................................. 118
5.1.1. Paneles exteriores................................................................................. 118
5.1.1.1. Implementación del contador de unidades / decenas ....................... 118
5.1.1.2. Implementación del contador de centenas........................................ 119
5.1.1.3. Implementación de uno de los paneles exteriores ............................ 120
5.1.2. Paneles interiores.................................................................................. 123
5.1.2.1. Implementación del contador de plazas para vehículos normales de la
zona marrón..................................................................................................... 124
5.1.2.2. Implementación del contador de plazas para minusvalidos de la zona
marrón 125
5.1.2.3. Implementación del contador de plazas para vehículos eléctrics de la
zona marrón..................................................................................................... 126
5.1.2.4. Implementación del panel de la zona marrón ................................... 127
5.2. Pruebas ........................................................................................................ 130
5.2.1. Panel exterior. Verificación funcional ..................................................... 130
5.2.1.1. Prueba contador para ud = 1 (Modo ascendente) ............................. 130
5.2.1.2. Prueba contador para ud = 0 (Modo descendente) ........................... 131
5.2.1.3. Prueba panel exterior completo ........................................................ 132
IV
5.2.2. Panel exterior. Validación temporal (POST-PLACE & ROUTE) ............. 135
5.2.2.1. Prueba contador para ud = 1 (Modo ascendente) ............................. 135
5.2.2.2. Prueba contador para ud = 0 (Modo descendente) ........................... 136
5.2.2.3. Prueba panel exterior completo ........................................................ 137
5.2.3. Panel interior. Verificación funcional ...................................................... 141
5.2.3.1. Prueba contador plazas normales para ud = 1 (Modo ascendente) ..... 141
5.2.3.2. Prueba contador plazas normales para ud = 0 (Modo descendente) ... 142
5.2.3.3. Prueba contador plazas para minusválidos para ud = 1 (Modo
ascendente) ..................................................................................................... 142
5.2.3.4. Prueba contador plazas para minusválidos para ud = 0 (Modo
descendente) ................................................................................................... 143
5.2.3.5. Prueba contador plazas para vehículos eléctricos para ud = 1 (Modo
ascendente) ..................................................................................................... 144
5.2.3.6. Prueba contador plazas para vehículos eléctricos para ud = 0 (Modo
descendente) ................................................................................................... 145
5.2.3.7. Prueba panel interior. Zona marrón. .................................................... 146
5.2.4. Panel Interior. Validación temporal (POST - PLACE & ROUTE) ................ 150
5.2.4.1. Prueba contador plazas normales para ud = 1 (Modo ascendente) ..... 150
5.2.4.2. Prueba contador plazas normales para ud = 0 (Modo descendente) ... 151
5.2.4.3. Prueba contador plazas para minusválidos para ud = 1 (Modo
ascendente) ..................................................................................................... 152
5.2.4.4. Prueba contador plazas para minusválidos para ud = 0 (Modo
descendente) ................................................................................................... 153
5.2.4.5. Prueba contador plazas para vehículos eléctricos para ud = 1 (Modo
ascendente) ..................................................................................................... 154
5.2.4.6. Prueba contador plazas para vehículos eléctricos para ud = 0 (Modo
descendente) ................................................................................................... 155
5.2.4.7. Prueba panel interior. Zona marrón. .................................................... 156
5.3. Volcado en la placa ...................................................................................... 160
5.4. Test en la placa Nexys 3 .............................................................................. 170
5.5. Test en la placa Genesys ............................................................................. 173
6. Costes ................................................................................................................. 177
7. Conclusiones y líneas de mejora ......................................................................... 180
8. Planificación ........................................................................................................ 185
8.1. Gantt inicial .................................................................................................. 185
8.2. Gantt final ..................................................................................................... 187
9. Impactos sociales y ambientales (responsabilidad ética y profesional) ................ 189
Bibliografía ..................................................................................................................... XIX
V
Anexos ........................................................................................................................ XXVII
a. Figuras ............................................................................................................. XXVII
b. Código .................................................................................................................. XLI
b1. Paneles exteriores ............................................................................................. XLI
b1.1. Puerta NOT ................................................................................................. XLI
b1.2. Puerta AND ................................................................................................. XLI
b1.3. Puerta XOR ................................................................................................. XLI
b1.4. Senial ......................................................................................................... XLII
b1.5. Contador unidades ..................................................................................... XLII
b1.6. Contador decenas ..................................................................................... XLIII
b1.7. Contador centenas ................................................................................... XLIV
b1.8. Panel exterior completo ............................................................................. XLV
b2. Paneles interiores .......................................................................................... XLVII
b.2.1. Contador plazas normales. Zona morada ............................................... XLVII
b.2.2. Contador plazas minusválidos. Zona morada ........................................ XLVIII
b.2.3. Panel interior completo. Zona morada ..................................................... XLIX
b.2.4. Contador plazas normales. Zona marrón ...................................................... LI
b.2.5. Contador plazas minusválidos. Zona marrón ............................................... LII
b.2.6. Contador plazas eléctricas. Zona marrón ................................................... LIII
b.2.7. Panel interior completo. Zona marrón ......................................................... LIV
b.2.8. Contador plazas normales. Zona gris ........................................................ LVII
b.2.9. Contador plazas eléctricos. Zona gris ....................................................... LVIII
b.2.10. Panel completo. Zona gris ........................................................................ LIX
b.2.11. Contador plazas normales. Zona azul ....................................................... LX
b.2.12. Contador plazas eléctricos. Zona azul ..................................................... LXII
b.2.13. Panel completo. Zona azul ..................................................................... LXIII
b3. Divisor de frecuencia........................................................................................ LXV
c. Test bench ........................................................................................................ LXVI
c1. Paneles exteriores........................................................................................... LXVI
c1.1. Test Contador unidades............................................................................ LXVI
c1.2. Test Contador decenas............................................................................ LXVII
c1.3. Test Contador centenas........................................................................... LXVII
c1.4. Test panel exterior .................................................................................. LXVIII
c1.5. Test panel exterior post-place & root ......................................................... LXX
c2. Paneles interiores ........................................................................................... LXXI
c2.1. Test Contador plazas normales ................................................................ LXXI
VI
c2.2. Test Contador plazas minusválidos ......................................................... LXXII
c2.3 Test Contador plazas eléctricos ............................................................... LXXIII
c2.4. Test panel marrón................................................................................... LXXIV
c2.5. Test panel morado ................................................................................... LXXV
c2.6. Test panel gris ....................................................................................... LXXVII
c2.7. Test panel azul ..................................................................................... LXXVIII
VII
Índice de figuras
Figura 1. El garaje Dupont, 1907 (Sociedad Histórica de Washington, D.C). Fuente: Van
Melsen, Nicole. Parking Industry Blog, 2012. ..................................................................... 2
Figura 2. Uno de los primeros garajes verticales con elevador, Chicago, 1932. Fuente:
Reddit, 2014. ..................................................................................................................... 2
Figura 3. Modelo de garaje radial con estacionamiento automático, por el arquitecto Casto
Fernández Shaw. Fuente: Integral Park Systems. ............................................................. 3
Figura 4. Noria horizontal. Fuente: Integral Park Systems. ................................................ 4
Figura 5. Aparcamiento totalmente robotizado, Volkswagen, Wolfsburg, Alemania. Fuente:
Arraztio, Pedro. Diario La Tercera, 2011. ........................................................................... 4
Figura 6. Orden cronológico de la historia del parking........................................................ 5
Figura 7. Torres de estacionamiento de coches Volkswagen, Parque de atracciones
Autostadt, Wolfsburg, Alemania. Fuente: Chaparro, Javier. Maravillas modernas, 2008. ... 6
Figura 8. Extracción de un vehículo en una de las torres de Autostadt, Wolfsburg,
Alemania. Fuente: Baptiste, Fubiz, 2012. ........................................................................... 7
Figura 9. Planta baja. ......................................................................................................... 9
Figura 10. Primera Planta. ................................................................................................. 9
Figura 11. Entrada / Salida de vehículos. ......................................................................... 10
Figura 12. Panel de entrada ............................................................................................. 10
Figura 13. Carril de entrada ............................................................................................. 11
Figura 14. Primer panel de plazas por zonas. .................................................................. 13
Figura 15. Segundo panel de plazas por zonas. .............................................................. 13
Figura 16. Distintas plazas con leds. ................................................................................ 14
Figura 17. Subida y acceso a primera planta. .................................................................. 15
Figura 18. Máquina para pagar. ....................................................................................... 15
Figura 19. Carril de salida. ............................................................................................... 17
Figura 20. Salida de emergencia...................................................................................... 17
Figura 21. Escalera y ascensor. ....................................................................................... 17
Figura 22. Lavabo. ........................................................................................................... 17
Figura 23. Tubos de vacío. Fuente: Tesolín, Rubén. Blog Museo de Electrónica ,2013. .. 18
Figura 24. Transistor de contacto puntual. Fuente: Espindola, Yoselin; Landazabal,
Angelica; Rodriguez, Neida. Blog Hardware manual ........................................................ 19
Figura 25. El primer CI, desarrollado por Jack Kilby. Fuente: José, Abadía Digital (2009).
........................................................................................................................................ 20
Figura 26. Esquema de una memoria ROM (4 x 2). Fuente: Jiménez, Raúl. Dpto.
Ingeniería Electrónica de Sistemas Informáticos y Automática. ....................................... 23
Figura 27. Esquema de una memoria PROM. .................................................................. 24
Figura 28. Memoria EPROM de 32 KB. Fuente: Wikipedia. ............................................. 25
Figura 29. Memoria EEPROM.Fuente: Slideshare. .......................................................... 25
Figura 30. Memoria EEPROM Flash. Fuente: Shutterstock.............................................. 26
Figura 31. Esquema de una PAL (4 x 8 x 2). .................................................................... 27
Figura 32. Esquema de una PLA (4 x 8 x 2). Fuente: Electronics tutorial. ........................ 28
Figura 33. Macrocelda OMLC. Fuente: Jorge, Blog Iindustrial, 2009. ............................... 29
Figura 34. Diagrama de bloques funcionales del dispositivo GAL22V10. Fuente: Lattice
Semiconductor, Datasheet GAL22V10, 1998. .................................................................. 30
Figura 35. Arquitectura básica de un CPLD. .................................................................... 31
VIII
Figura 36. Arquitectura general de un FPGA de la serie 4000 de Xilinx. Fuente: Farooq, U.
Chapter 2. FPGA Architectures: An Overview, 2012. ....................................................... 32
Figura 37. Estructura interna de un CLB de la familia XC4000. Fuente: Septién del
Castillo, Julio; Mecha López, Hortensia. Hardware Dinámicamente Reconfigurable, 2003.
........................................................................................................................................ 33
Figura 38. Bloque básico de un CLB. ............................................................................... 34
Figura 39. Estructura interna de un SB. Fuente: Farooq, U. Chapter 2. FPGA
Architectures: An Overview, 2012. ................................................................................... 35
Figura 40. Estructura interna de un CB. Fuente: Farooq, U. Chapter 2. FPGA
Architectures: An Overview, 2012. ................................................................................... 35
Figura 41. Bloques de entrada salida. Fuente: Jorge, Iindustrial Obolog, 2009. ............... 36
Figura 42. Interconexiones programables en una FPGA. Fuente: National Instruments. .. 36
Figura 43. Antifusible metal – metal. ................................................................................ 37
Figura 44. Celda de memoria SRAM. Fuente: Espinoza Juárez, Francisco. Tecnologías de
configuración. .................................................................................................................. 38
Figura 45. Familias de FPGA según la tecnología de programación en sus conexiones. . 39
Figura 46. FPGA de organización tipo terraza. Fuente: Cinta Oria, Ana; Dispositivos
lógicos programables de alta capacidad, 2010................................................................. 40
Figura 47. FPGA de organización tipo cuadrícula. ........................................................... 40
Figura 48. FPGA de organización tipo mar de puertas. .................................................... 41
Figura 49. Porcentajes de ventas de FPGAs por sectores industriales y valoración de
mercado de las principales empresas en 2013. ............................................................... 43
Figura 50. Arquitectura de un dispositivo FPGA de Xilinx Spartan 3. Fuente: Sisterna,
Cristian. Field Programmable Gate Arrays. ...................................................................... 44
Figura 51. Estructura de una SliceM de la familia Spartan-6. Fuente: Xilinx, Spartan-6
family Overview, 2011. ..................................................................................................... 49
Figura 52. Estructura de una SliceL de la familia Spartan-6. Fuente: Xilinx, Spartan-6
family Overview, 2011. ..................................................................................................... 50
Figura 53. Estructura de una SliceX de la familia Spartan-6. Fuente: Xilinx, Spartan-6
family Overview, 2011. ..................................................................................................... 51
Figura 54. Estructura interna de un CLB. ......................................................................... 52
Figura 55. Estructura interna de un CLB. Fuente: Borensztejn, Patricia. Arquitecturas
FPGA , 2013. ................................................................................................................... 53
Figura 56. Diagrama de bloque de un CMT la familia Spartan-6. Fuente: Xilinx. Spartan-6
family Overview, 2011. .................................................................................................... 54
Figura 57. Diagrama de bloque funcional DCM. Fuente: Xilinx. Spartan-6 family Overview,
2011................................................................................................................................. 54
Figura 58. Diagrama de bloque de una PLL de la familia Spartan-6. Fuente: Xilinx.
Spartan-6 family Overview, 2011. ................................................................................... 55
Figura 59. MCB de la familia Spartan-6. Fuente: Xilinx. Spartan-6 family Overview, 2011.
........................................................................................................................................ 56
Figura 60. Nomenclatura de una FPGA de la serie Spartan-6 de Xilinx. Fuente: Xilinx.
Spartan-6 family Datasheet, 2011. ................................................................................... 56
Figura 61. Slice DSP48E1 de las FPGAs Virtex-6. Fuente: Xilinx. Virtex-6 FPGA DSP48E1
Slice , 2011. ..................................................................................................................... 59
Figura 62. Diagrama de bloque simplificado del transceptor GTX. Fuente: Xilinx. Virtex-6
FPGA GTX Transceivers , 2011. ...................................................................................... 60
IX
Figura 63. Shift Register de 32 bits. Fuente: Xilinx, Virtex-6 FPGA Configurable Logic
Block , 2012. .................................................................................................................... 62
Figura 64. Diagrama de bloque de un CMT de la familia Virtex-6. Fuente: Xilinx, Virtex-6
FPGA Clocking Resources , 2014. ................................................................................... 62
Figura 65. Diagrama de bloque de un MMCM de la familia Virtex-6. Fuente: Xilinx, Virtex-6
FPGA Clocking Resources , 2014. ................................................................................... 63
Figura 66. Nomenclatura de una FPGA de la serie Virtex-6 de Xilinx. Fuente: Xilinx, Virtex-
6 family Datasheet, 2015. ................................................................................................ 64
Figura 67. Primer dispositivo lógico programable de Atera, el EP300. Fuente: Altera, In the
beginning, 2015. .............................................................................................................. 65
Figura 68. Arquitectura de un dispositivo FPGA de Altera. Fuente: Sisterna, Cristian. Field
Programmable Gate Arrays (FPGAs). .............................................................................. 65
Figura 69. Elementos Lógicos en la familia Cyclone IV. Fuente: Altera, Cyclone IV device
handbook,, 2016. ............................................................................................................. 70
Figura 70. Arquitectura de la familia Cyclone IV. Fuente: Labrada, Mauricio. Familia
Cyclone, 2014. ................................................................................................................. 70
Figura 71. Arquitectura de los PLLs. Fuente: Altera, Cyclone IV device handbook, 2016. 71
Figura 72. Nomenclatura de una FPGA de la serie Cyclone IV de Altera. Fuente: Altera,
Cyclone IV family Datasheet, 2016. ................................................................................. 72
Figura 73. Arquitectura de la serie Stratix IV. Fuente: Altera, Stratix IV FPGAs , 2016. .... 77
Figura 74. Estructura de un LAB. Fuente: Espejo Juárez, David. Demodulación PSK y
FSK: Implementación en FPGAs, 2014. ........................................................................... 78
Figura 75. Bloques DSP. Fuente: Altera, Stratix IV device handbook , 2016. ................... 79
Figura 76. Nomenclatura de una FPGA de la serie Stratix IV de Altera. Fuente: Altera,
Stratix IV family Datasheet, 2016. .................................................................................... 79
Figura 77. Composición del dispositivo Nexys 3. Fuente: Digilent. ................................... 82
Figura 78. Composición del Kit de evaluación ML605. Fuente: Xilinx, Virtex-6 FPGA
ML605 Evaluation Kit, 2012. ............................................................................................ 83
Figura 79. Composición de la placa DE2-115. Fuente: Terasic. ....................................... 84
Figura 80. Composición de la placa de desarrollo FPGA Stratix IV GX. Fuente: Altera.
Stratix IV GX FPGA Development Board. Reference Manual, 2012. ................................ 85
Figura 81. Diagrama de flujo de los contadores de unidades y decenas. ......................... 89
Figura 82. Diagrama de flujo del contador de las centenas. ............................................. 89
Figura 83. Diseño de la caja negra para los contadores de unidades y decenas. ............ 91
Figura 84. Circuito lógico ampliado de los contadores de unidades y decenas. ............... 92
Figura 85. Circuito lógico ampliado del contador de centenas. ......................................... 93
Figura 86. Diseño de la caja negra para el panel exterior del parking. ............................. 96
Figura 87. Circuito lógico ampliado de uno de los paneles exteriores. ............................. 98
Figura 88. Circuito lógico de la interconexión entre los componentes lógicos de los
paneles exteriores............................................................................................................ 99
Figura 89. Diagrama de flujo para las plazas normales. ................................................. 101
Figura 90. Diagrama de flujo para las plazas de minusválidos. ...................................... 101
Figura 91. Diagrama de flujo para las plazas de coches eléctricos. ............................... 101
Figura 92. Diseño de la caja negra para el contador de plazas normales....................... 105
Figura 93. Circuito lógico ampliado del contador de plazas normales. ........................... 106
Figura 94. Diseño de la caja negra para el contador de plazas para minusválidos. ........ 107
Figura 95. Circuito lógico ampliado del contador de plazas para minusválidos. ............. 108
Figura 96. Diseño de la caja negra para el contador de plazas para eléctricos. ............. 109
X
Figura 97. Circuito lógico ampliado del contador de plazas para vehículos eléctricos. ... 110
Figura 98. Diseño de la caja negra para el panel de la zona marrón. ............................. 113
Figura 99. Circuito lógico ampliado del panel interior de la zona marrón. ....................... 116
Figura 100. Circuito lógico de la interconexión entre los componentes lógicos del panel de
la zona marrón. .............................................................................................................. 117
Figura 101. Contador ascendente. ................................................................................. 131
Figura 102. Contador descendente. ............................................................................... 132
Figura 103. Salidas de vehículos del Parking. ................................................................ 133
Figura 104. Entrada de vehículos del Parking. ............................................................... 135
Figura 105. Contador ascendente en simulación temporal. ............................................ 136
Figura 106. Contador descendente en simulación temporal. .......................................... 137
Figura 107. Salidas de vehículos del Parking. ................................................................ 138
Figura 108. Entrada de vehículos del Parking. ............................................................... 140
Figura 109. Contador ascendente para plazas normales. .............................................. 141
Figura 110. Contador descendente para plazas normales. ............................................ 142
Figura 111. Contador ascendente para plazas de minusválidos. ................................... 143
Figura 112. Contador descendente para plazas de minusválidos. ................................. 144
Figura 113. Contador ascendente para vehículos eléctricos. ......................................... 145
Figura 114. Contador descendente para vehículos eléctricos. ....................................... 146
Figura 115. Salida de vehículos de la zona marrón. ....................................................... 147
Figura 116. Entrada de vehículos de la zona marrón. .................................................... 149
Figura 117. Contador ascendente para plazas normales. .............................................. 150
Figura 118. Contador descendente para plazas normales. ............................................ 151
Figura 119. Contador ascendente para plazas de minusválidos. ................................... 152
Figura 120. Contador descendente para plaza de misnuválidos. ................................... 153
Figura 121. Contador ascendente para vehículos eléctricos. ......................................... 154
Figura 122. Contador descendente para vehículos eléctricos. ....................................... 155
Figura 123. Salida de vehículos de la zona marrón. ....................................................... 157
Figura 124. Entrada de vehículos de la zona marrón. .................................................... 159
Figura 125. Especificación del tipo de placa en el ISE 14.7. .......................................... 162
Figura 126. Revisión y síntesis del código. .................................................................... 162
Figura 127. Translate, Map y Place & Route. ................................................................. 163
Figura 128. Selección del JTAG Clock. .......................................................................... 164
Figura 129. Crear archivo con extensión .ucf. ................................................................ 164
Figura 130. Configuración de los pines de la FPGA Nexys 3. ........................................ 166
Figura 131. Comprobación del archivo con extensión .ucf. ............................................ 166
Figura 132. Editor del archivo con extensión .ucf. .......................................................... 167
Figura 133. Archivo generado .ucf de la Nexys 3. .......................................................... 167
Figura 134. Configuración de la FPGA. .......................................................................... 168
Figura 135. Configuración de la FPGA. .......................................................................... 168
Figura 136. Componente de la Nexys 3. ........................................................................ 168
Figura 137. Archivo “.bit” para programar la FPGA. ....................................................... 169
Figura 138. Opción de programar memoria PROM. ....................................................... 169
Figura 139. Programación satisfactoria. ......................................................................... 170
Figura 140. Incremento de plazas en el Parking. ........................................................... 171
Figura 141. Decremento de plazas en el Parking. .......................................................... 172
Figura 142. Salidas inhibidas. ........................................................................................ 173
Figura 143. Incremento de plazas en el Parking. ........................................................... 174
XI
Figura 144. Decremento de plazas en el Parking. .......................................................... 175
Figura 145. Salidas inhibidas. ........................................................................................ 176
Figura 146. Conector Shuko. Fuente: Endesa, 2013. ..................................................... 181
Figura 147. Conector SAE J1772. Fuente: Endesa, 2013. ............................................. 182
Figura 148. Conector Mennekes. Fuente: Endesa, 2013. .............................................. 182
Figura 149. Conector CSS. Fuente: Endesa, 2013. ....................................................... 182
Figura 150. Conector Scame. Fuente: Lugenergy, 2016. ............................................... 183
Figura 151. Conector CHAdeMO. Fuente: Mis coches electricos, 2013. ........................ 183
XII
Índice de tablas
XIII
Glosario de acrónimos
XIV
GAL → Generic Array Logic / Matriz Lógica Genérica.
GCLK → Global Clock/ Reloj global.
GTP → Gigabit Transceiver with Low Power / Transceptor Gigabit de baja potencia.
HDL → Hardware Description Language / Lenguaje de descripción hardware.
HSTL → High Speed Transceiver Logic / Lógica de transceptor de alta velocidad.
IC → Integrated Circuit / Circuito Integrado.
IOB → Input-Output Block / Bloque de Entrada y Salida.
IP → Internet Protocol / Protocolo de Internet.
ISE → Integrated Software Environment / Entorno de software integrado.
ISP → In System Programmable / Programable en el Sistema.
JTAG → Joint Test Action Group.
LAB → Logic Array Block / Bloque de elementos lógicos.
LC → Logic Cell / Celda Lógica.
LCD → Liquid Cristal Display / Pantalla de cristal líquido.
LE → Logic Element / Elemento Lógico.
LED → Light-Emitting Diode / Diodo emisor de luz.
LPDDR → Low Power Double Data Rate / Doble tasa de transferencia de datos de baja
potencia.
LSI → Large Scale Integration / Integración a gran escala.
LUT → Look Up Table / Tabla de consultas.
LVDS → Low Voltage Digital Signal / Señal digital de bajo voltaje.
MAC → Media Access Control / Control de Acceso a Medios.
MCB → Memory Controller Block / Bloques de control de memoria.
MMCM → Mixed-Mode Clock Managers / Gestores de reloj modo mezclado.
MSI → Medium Scale Integration / Integración a escala media.
OBSAI → Open Base Station Architecture Initiative / Iniciativa de arquitectura abierta para
estaciones base.
OLMC → Output Logic Macrocell / Macrocelda Lógica de Salida.
PAL → Programmable Array Logic / Matriz Lógica Programable.
PCB → Printed Circuit Board / Placa del circuito impreso.
PCI → Peripheral Component Interconnect / Interconexión de componentes periféricos.
PCLK → Peripheral Clock / Reloj periférico.
PCM → Phase-Change Memory / Memoria de cambio de fase.
PCS → Physical Coding Sublayer / Subcapa de codificación física.
PLA → Programmable Logic Array /Lógica de matrices programables.
PLD → Programmable Logic Device / Dispositivo Lógico Programable.
PLL → Phase-Locked Loop / Lazo de seguimiento de fase.
XV
PMA → Physical Media Attachment / Acoplamiento de medios físicos.
PROM → Programmable Read-Only Memory / Memoria Programable de Solo Lectura.
PSM → Programmable Switch Matrix / Matriz interruptora programable.
QDR → Quad Data Rate / Velocidad de datos cuádruple.
RAM → Random Access Memory / Memoria de acceso aleatorio.
RCLK → Regional Clock / Reloj regional.
RLDRAM → Reduced Latency Dynamic Random Access Memory / Memoria de Acceso
Aleatorio Dinámico de Latencia Reducida.
ROM → Read-Only Memory / Memoria de Solo Lectura.
RTL → Register-Transfer Level / Nivel de transferencia de registros.
SATA → Serial Advanced Technology Attachment / Tecnología de acoplamiento
avanzado en serie.
SB → Switch Box / Caja interruptora.
SDI → Serial Digital Interface / Interfaz digital en serie.
SERDES → SERializer/DESerializer.
SODIMM → Small Outline Dual In-line Memory Module / Módulo de memoria en línea
Dual de contorno pequeño.
SPI → Serial Peripheral Interface / Interfaz de periféricos en serie.
SPLD → Simple Programmable Logic Device / Dispositivo Lógico Programable Simple.
SRAM → Static Random Access Memory / Memoria estática de acceso aleatorio.
SRL16 → 16-bit shift registers / Registros de desplazamiento de 16 bits.
SRL32 → 32-bit shift registers / Registros de desplazamiento de 32 bits.
SSI → Small Scale Integration / Integración a pequeña escala.
SSRAM → Synchronous Static Random Access Memory / Memoria de acceso aleatorio
estática síncrona.
SSTL → Stub-Series Terminated Logic.
VCC → Collector Supply Voltage / Voltaje de corriente continua.
VHSIC → Very High Speed Integrated Circuit / Circuito integrado de muy alta velocidad.
VLSI → Very Large Scale Integration / Integración a muy gran escala.
XAUI → Gigabit Attachment Unit Interface / Interfaz de unidad de conexión Gigabit.
XVI
Palabras clave
FPGA, HDL, tarjeta, board, control parking, simulación, ISIM, pruebas, test, ISE,
entorno de diseño y desarrollo.
XVII
Resumen
El diseño del parking consiste en una estructura de dos plantas con un aforo de
100 vehículos por planta. Cada una de dichas plantas se subdivide a su vez en cuatro
zonas, con 25 plazas cada una, que hemos identificado mediante los colores azul,
morado, marrón y gris.
En la parte exterior del parking se han situado convenientemente dos paneles que
informan del número de plazas totales disponibles en el mismo. El interior, por su parte,
dispone de cuatro paneles por planta, ubicados de dos en dos, para cada dos zonas.
XVIII
Abstract
The parking of vehicles has become a big problem in the last few years, especially
in big cities. This is due to the increase of the population and therefore the growth in the
number of vehicles. With this project we pretend to develop a real-time system of the
controllers of the free spots of a parking.
The design of the parking consists on a structure of two floors with a capacity of
100 vehicles per floor. Each of these floors is subdivided in four areas, with 25 spots each
one, which we have identified by using blue, purple, brown and grey colours.
In addition to the normal spots, we have also taken into account the disabled spots
(Comunidad de Madrid, 1993) as well as the electric ones (Gobierno de España. Ministerio
de Industria, Energía y Turismo, 2014) which are established by the current regulations.
In the ouside of the parking, two panels have been placed conveniently, which
inform of the total number of free spots in the whole parking. In the inside, four panels
have been placed per floor, arranged two by two, for every two areas.
Before the development of the code of the parking’s panels, we have obtained the
necessary inputs and outputs for each case, we have obtained the truth tables and we
have created the logic circuit by using these tables. The components we have used are
basically counters and logic gates. Once this is done, we have developed the code based
on the obtained tables and logic circuits. The code has been developed in VHDL language
by using ISE 14.7 platform, developed by Xilinx.
Once the code is developed and tested, we have dumped and verified it by using
two programmable boards: the Nexys 3, which belongs to the Spartan-6 family (Digilent,
2016b), and the Genesys, which belongs to the Virtex-5 family (Digilent, 2016a), both
developed by Xilinx, which has made possible to watch the real time performance of the
developed code.
XIX
1. Introducción
Desde la invención del primer automóvil (un vehículo provisto de una máquina de
vapor compuesta de una caldera y un motor de dos cilindros verticales), el 23 de Octubre
de 1769, por Nicholas-Joseph Cugnot (Karwatka, 2015), hasta nuestros días, han pasado
247 años en los que la población mundial ha crecido de manera acelerada y por tanto el
número de automóviles. A día de hoy, se calcula que existen más de 1.200 millones de
vehículos en todo el mundo (Alegret, 2016), lo que significa que hay uno por cada siete
personas, cifras que aumentan cada año considerablemente. Y se prevé que en 2035
esta cifra supere los 2.000 millones.
Los primeros coches no eran tan resistentes a las inclemencias del tiempo como
los actuales, ya que tenían techos abiertos, asientos hechos con materiales sensibles
como el cuero, por lo que a principios del siglo XX los lugares de almacenamiento de
estos vehículos estaban cubiertos (Swope, 2009). También cabe decir que los primeros
vehículos estaban considerados por la mayoría como simples máquinas, en contraste con
la idea que tenemos hoy en día de los coches, por lo que estos lugares se asemejaban
más a almacenes que a los garajes que conocemos actualmente [Fig. 1].
1
Figura 1. El garaje Dupont, 1907 (Sociedad Histórica de Washington, D.C). Fuente: Van Melsen, Nicole.
Parking Industry Blog, 2012.
Figura 2. Uno de los primeros garajes verticales con elevador, Chicago, 1932. Fuente: Reddit, 2014.
1 Sistema que almacena los vehículos verticalmente aprovechando la altura de la estructura, y por tanto
ocupando un mínimo de superficie. Contiene una serie de celdas giratorias en sentido circular, que se
desplazan hacia el operario por el camino más corto, optimizando así el tiempo (Pérez Carmona, 2015).
2
Figura 3. Modelo de garaje radial con estacionamiento automático, por el arquitecto Casto Fernández Shaw.
Fuente: Integral Park Systems.
En los años 40, con el gran desarrollo experimentado por la aviación, los
transportes y las comunicaciones, el aparcamiento automático se presenta como una
innovación revolucionaria. Se diseña un modelo de unidades autónomas completamente
mecanizadas y operadas por personal de servicio, con un número variable de plantas en
edificios cuyo uso está destinado exclusivamente al almacenamiento de vehículos.
En los años 50, con el “boom” de la construcción, aparecieron los primeros parking
modulares robotizados en edificios especializados. Estas estructuras contaban con
grandes volúmenes de almacenamiento y estaban asentadas en zonas comerciales de
alto volumen de población. En las siguientes décadas estas construcciones proliferarán en
EEUU y Europa (Melsen, 2012). El proceso de aparcamiento en estos primeros espacios
robotizados conllevaba:
3
En los 70 se disparan las patentes de sistemas de aparcamiento robotizados
basados en las variantes surgidas en los años 60 y se desarrollan nuevos modelos. La
mecánica tradicional se complementa con sistemas electrónicos de gestión [Fig. 4].
Figura 5. Aparcamiento totalmente robotizado, Volkswagen, Wolfsburg, Alemania. Fuente: Arraztio, Pedro.
Diario La Tercera, 2011.
4
A continuación, en la figura 6, se muestra un cronograma de la evolución del
parking expuesta hasta este momento.
5
Figura 7. Torres de estacionamiento de coches Volkswagen, Parque de atracciones Autostadt, Wolfsburg,
Alemania. Fuente: Chaparro, Javier. Maravillas modernas, 2008.
2
Premio por “El sistema de parking automatizado más rápido del mundo”
Las torres de coches de Autostadt entraron en el Libro Guinness de los Récords en 2014 (Autostadt, 2016a)
por la tecnología de transporte empleada, en la categoría “elevadores extraordinarios”, con una velocidad
récord de 2 m/s, los vehículos nuevos son transportados en 1 minuto y 44 segundos desde la entrada a las
torres hasta el espacio de aparcamiento más elevado.
6
Figura 8. Extracción de un vehículo en una de las torres de Autostadt, Wolfsburg, Alemania. Fuente: Baptiste,
Fubiz, 2012.
El parking que vamos a desarrollar en este proyecto, está pensado para una zona
comercial con una afluencia de público intermedia, ya que cuenta con una capacidad
moderada.
7
1.3. Objetivos
Hemos querido que nuestro proyecto sea un reflejo lo más cercano posible a la
realidad, por lo que, basándonos en ejemplos reales se hará una planificación muy
racionalizada del espacio, y un diseño de la señalización simple y clarificador.
También hemos querido que nuestro parking tenga una proyección de futuro, y por
ello hemos introducido plazas de vehículos eléctricos, ya que la previsión del mercado
dice que en los próximos años estos van a proliferar (Rodríguez, 2015).
8
1.4. Planteamiento del problema.
En las figuras 9 y 10, se muestran las plantas de los dos niveles que componen
nuestro parking (para una observación más detallada ir al Anexo, Apartado a).
9
Nuestro parking consta de dos plantas con un aforo máximo de 100 plazas cada
una, numeradas del 1 al 100. Cada planta a su vez está dividida en cuatro zonas: azul,
marrón, morada y gris, cada una de ellas con 25 plazas. Hemos hecho esta división con
colores y numeración para facilitar a los usuarios la búsqueda de plazas libres, así como
la tarea de recordar el lugar en que aparcaron su vehículo. Cada plaza consta de un
sensor óptico y magnético ubicado en el suelo (Universitat Politècnica de Catalunya,
2010), que detecta el vehículo y consecuentemente, si la plaza está libre u ocupada.
Además, disponemos de dos carriles en todo momento, uno de entrada y uno de salida
[Fig. 11]. Estos carriles están señalizados con varias señales de ceda el paso en el suelo,
para que el tráfico siempre sea fluido y para evitar las posibles colisiones.
10
Teniendo en cuenta que el número de plazas totales es de 200, los indicadores se
irán incrementando o decrementando desde 0 hasta 199, según vayan entrando o
saliendo los vehículos.
Una vez que un usuario decida entrar en el parking con su vehículo, se encontrará
con una máquina con un botón, una baliza bajada que se encargará del control de acceso
al parking, un semáforo en rojo asociado a la baliza y dos cámaras [Fig. 13].
11
vez el usuario retire el ticket, el semáforo pasará a estar en verde, y la baliza se levantará
para dejar paso al vehículo.
3 El crecimiento en las ventas de vehículos eléctricos ha sido de un 729% en 2011 con respecto a 2010, un
150% en 2012 y un 50% en 2014, con lo que el millón de ventas ha sido alcanzado en tan sólo cinco años
(Rodríguez, 2015). A la vista de estos datos, se estima que las ventas sigan creciendo considerablemente en
los próximos años, aumentando el número de vehículos eléctricos en las calles y, en consecuencia, la
demanda de espacios habilitados para este tipo de vehículos.
12
2 displays por zona destinados a indicar las plazas libres para vehículos
normales de que dispone el usuario (hay 24 plazas normales en cada zona, por
lo que un display indicará las unidades y otro las decenas).
1 display por zona para indicar el número de plazas libres para vehículos
eléctricos que hay disponibles en dicha zona (hay 1 plaza en cada zona, por lo
que el display indicará las unidades).
Visto esto, el usuario del vehículo tiene tres opciones: continuar recto, girar a la
izquierda hacia la zona gris o girar a la derecha hacia la zona azul. Si éste decide
continuar recto, porque no hay plazas en estas zonas para sus necesidades o
simplemente porque quiere aparcar su vehículo más adelante, se encontrará con otro
panel correspondiente a las zonas morada y marrón [Fig. 15] (para una observación más
detallada ir al Anexo, Apartado a). A diferencia del anterior panel, éste además indica las
plazas libres para minusválidos. Por lo tanto, este indicador constará de 7 displays de 7
segmentos: 3 para la zona de la izquierda (morada) y 4 para la zona de la derecha
(marrón).
13
En ambos casos, se destinarán:
2 de estos displays por zona para indicar el número de plazas libres para
vehículos normales (al haber 23 plazas en la zona morada y 22 en la marrón,
usaremos 1 para las unidades y 1 para las decenas).
1 display por zona para indicar las plazas libres para minusválidos (al haber 2
plazas de minusválidos por cada zona, lo emplearemos para las unidades).
Por último, necesitaremos 1 display más en la zona marrón (parte derecha del
panel) para señalar el número de plazas disponibles para vehículos eléctricos (al haber
una única plaza, el display indicará las unidades).
14
En el caso de que el usuario decidiera aparcar, éste se dirigiría a la plaza libre
deseada e introduciría el coche, con lo que el sensor del suelo dispuesto en cada plaza lo
detectaría, cambiando el led de color verde a color rojo.
Si por el contrario, nuestro usuario decide que no quiere aparcar en esta zona,
podrá continuar circulando, respetando siempre las señalizaciones, hasta llegar
nuevamente al punto del último panel, nombrado anteriormente. En este caso, podría ir a
otra zona o continuar recto. Si tomara la segunda opción, ascendería a la primera planta
de nuestro parking mediante una rampa [Fig. 17], cuya distribución es la misma que la de
la planta baja, empleando los mismos colores por zona y un número igual de plazas para
cada tipo de vehículo.
A la hora de salir del Parking, los usuarios deben dirigirse, con el ticket que
recibieron al acceder, a las máquinas de pago que hay tanto en la planta baja como en la
primera planta del Parking [Fig. 18]. Simultáneamente, se ofrece el servicio de cobro
mediante una taquilla situada en frente de las máquinas de la planta baja, atendida por
personal del parking.
15
En el caso de las máquinas, cada usuario deberá pasar el código de barras de su
ticket por un lector dispuesto en cada una de ellas, y dicha máquina leerá el código y
buscará en la base de datos el número de matrícula correspondiente al ticket del usuario,
mirará la hora a la que ha accedido éste con su vehículo y aplicará el importe que debe
pagar según el tiempo que ha permanecido aparcado su coche. Se aplicarán las tarifas
según la Tabla 2.
Una vez que el usuario haya pagado el importe que la máquina le indique, se
actualizará la base de datos indicando que el conductor ha pagado la suma que le
corresponde. Cada usuario dispone de 15 minutos para retirar su vehículo del parking
desde que realiza el pago.
Cuando el usuario se dirija a la salida del parking, se encontrará con una máquina
con un lector, una baliza bajada que se encargará del control de salida del parking, un
semáforo en rojo asociado a la baliza y otras dos cámaras [Fig. 19]. Deberá entonces
pasar el ticket por el lector de la máquina, y ésta comprobará en la base de datos que el
usuario ha pagado la cifra correspondiente al tiempo en que ha permanecido su vehículo
aparcado. Entonces, si el ticket se encuentra pagado, borrará el registro completo de la
base de datos y la baliza se levantará, pasando a estar el semáforo en verde para que
pueda salir del Parking. Se realizan copias de seguridad de la base de datos, para poder
acreditar la estancia de cada vehículo en fechas y horas determinadas, destinadas al uso,
en caso de que sea necesario.
16
Figura 19. Carril de salida.
Una vez que el coche salga, la baliza volverá a bajarse y el semáforo pasará de
nuevo a estar en rojo. Los paneles exteriores al parking se irán actualizando en base a las
balizas, tanto de entrada como de salida.
Aparte de todo esto, hemos incluido 2 salidas de emergencia por planta [Fig. 20],
cumpliendo así la legislación (Comunidad de Madrid, 2003), así como 2 escaleras y
ascensores [Fig. 21], y dos lavabos por planta [Fig. 22].
17
2. Dispositivos lógicos configurables. Fabricantes.
Familias y dispositivos
2.1. Historia
A principios del siglo XX, el inventor Lee De Forest desarrolló los llamados tubos
de vacío [Fig. 23], lo que contribuyó al rápido crecimiento de la electrónica. Estos
dispositivos surgieron de una serie de descubrimientos y experimentos que comenzaron a
hacerse sin pensar en su posible uso en las comunicaciones inalámbricas, y con su
creación se hizo posible la manipulación de señales, como la amplificación de señales de
radio débiles (Arroyo Galán, 2005).
Figura 23. Tubos de vacío. Fuente: Tesolín, Rubén. Blog Museo de Electrónica ,2013.
A pesar de las grandes ventajas que aportaron estos tubos, también daban
importantes problemas, y es que producían mucho calor, necesitaban mucha energía y
debían ser reemplazados continuamente, con lo que urgía dar con otro método que
hiciese posible la amplificación de señales. Como consecuencia de esta necesidad, en
1925 se creó un centro de investigación conocido como Bell Labs (Nokia Bell Labs, 2016).
18
Tras la segunda guerra mundial, el director de Bell Labs, Mervin Kelly, buscó un
grupo de científicos que diesen con la solución a los problemas de los tubos de vacío,
mientras él tenía en mente una cuestión principal: los semiconductores4.
Figura 24. Transistor de contacto puntual. Fuente: Espindola, Yoselin; Landazabal, Angelica; Rodriguez,
Neida. Blog Hardware manual
Dos años más tarde, en 1949, el ingeniero alemán Werner Jacobi (Siemens AG)
completó la primera solicitud de patente para CIs (Integrated Circuits / Circuitos
Integrados)5, con dispositivos amplificadores de semiconductores, pero la aplicación que
realizó al final no fue registrada.
4
Son elementos que se comportan como conductores o como aislantes dependiendo de diversos factores
(presión, campo eléctrico o magnético, temperatura o radiación que le incide).
5 Hoy en día nos referimos a CI o Circuito Integrado como un chip formado por transistores, resistencias,
diodos... embebidos en una resina, empleados para realizar una función electrónica específica.
19
El primer CI fue desarrollado finalmente en el verano de 1958 por el ingeniero Jack
Kilby en la empresa Texas Instruments [Fig. 25], tan sólo una década después de la
invención del transistor (French, P. J., & Sarro, P. M., 2012).
Figura 25. El primer CI, desarrollado por Jack Kilby. Fuente: José, Abadía Digital (2009).
A partir de entonces, se fueron fabricando CIs cada vez más complejos y se fue
ampliando el campo de sus utilidades y, ya en 1966, los CIs se empezaron a fabricar
masivamente (Delgado Huayta, 2014). La capacidad de una producción tan elevada de
CIs, la facilidad con que se les podía agregar complejidad y su confiabilidad, llevó a su
estandarización, reemplazando diseños con transistores discretos y dejando obsoletos a
los tubos de vacío.
20
expandieron el abanico de usos de los CIs y el desplazamiento de la tecnología de
componentes aislados.
Circuitos VLSI (Very Large Scale Integration o Integración a muy gran escala)
Contienen más de 1000 puertas lógicas o más de 10000 transistores. Éstos
suponen el inicio de la era de la miniaturización de los equipos.
Actualmente son una pieza esencial en nuestro día a día, ya que se encuentran en
prácticamente todos nuestros aparatos electrónicos. Los ordenadores, teléfonos móviles y
otros dispositivos electrónicos que son indispensables en la sociedad actual, son posibles
gracias a los CIs.
6 Dispositivo de almacenamiento temporal en forma asíncrona de dos estados (biestable). Hay tres tipos: SR,
¬ (SR), D (Molina Martínez & Soto Valles, 2010).
7 Dispositivo síncrono cuyos cambios de salida se producen sincronizadamente con el reloj. Hay tres tipos:
21
2.2.1 SPLDs
Los SPLDs son la forma más simple y barata que podemos encontrar de PLDs.
Constan de una matriz de puertas AND y una OR que puede ser fija o programable. Los
clasificaremos en cuatro clases tal y como se muestra en la tabla 3, según el tipo de
matriz programable que incluyan en su estructura lógica (Buj Gelonch, 2007):
22
Figura 26. Esquema de una memoria ROM (4 x 2). Fuente: Jiménez, Raúl. Dpto. Ingeniería Electrónica de
Sistemas Informáticos y Automática.
Son memorias digitales cuya principal característica es que solamente pueden ser
programadas una única vez por el usuario a través de un dispositivo especial: un
programador PROM (Ipaya, 2008). Están formadas por un conjunto fijo de puertas AND
(no programable) conectadas como decodificador, y una matriz programable OR [Fig. 27].
23
Leyenda:
Conexión fija
Conexión programable
Son memorias PROM que pueden ser programadas por el usuario mediante un
programador, y sus datos guardados pueden ser borrados mediante radiación ultravioleta,
ya que incide en los fusibles de la memoria y los resetea a “1”, lo que implica que pueden
volver a ser reutilizadas por otros datos o programas, a diferencia de las PROM (Ipaya,
2008) [Fig. 28].
24
Figura 28. Memoria EPROM de 32 KB. Fuente: Wikipedia.
25
2.2.1.1.4. Flash EEPROM
Fueron desarrolladas por Monolithic Devices alrededor del año 1976. Están
formadas por una matriz de puertas AND programable y una matriz de puertas OR fija
(Buj Gelonch, 2007). Al tener una matriz de puertas OR fijas, las entradas a estas puertas
deben ser independientes, con lo que sólo pueden estar conectadas a una salida, al
contrario que las memorias ROM. Su notación es PAL (n x p x m), donde n es el número
de entradas, p es el número de productos lógicos (debe cumplir que p ≤ 2n ) y m es el
número de salidas (Jiménez, 2016). En la figura 31 se muestra una PAL (4 x 8 x 2).
26
Figura 31. Esquema de una PAL (4 x 8 x 2).
Los dispositivos PLA están formados por una matriz de puertas AND y una de
puertas OR, ambas programables (Buj Gelonch, 2007). Su notación es PLA (n x p x m),
donde n es el número de entradas, p es el número de productos lógicos (debe cumplir que
p ≤ 2n ) y m es el número de salidas (Jiménez, 2016). En la figura 32 se muestra una PLA
(4 x 8 x 2).
27
Figura 32. Esquema de una PLA (4 x 8 x 2). Fuente: Electronics tutorial.
Una de las diferencias con respecto a los dispositivos PAL es que pueden ser
programables y borrables eléctricamente mediante la tecnología EECMOS (Electrically
Erasable CMOS / CMOS Borrable Eléctricamente) (Maxinez, D. G, & Alcalá, J., 2002). A
continuación, vamos a detallar algunas características de los dispositivos GAL:
28
Tienen salida en macrocelda OLMC (Output Logic Macrocell / Macrocelda Lógica
de Salida) [Fig. 33] que contiene puertas OR y circuitos lógicos programables
mediante lógica combinacional o secuencial.
Utilizan sistemas de desarrollo idénticos a los que se emplean en los dispositivos
PAL.
Algunos dispositivos GAL se reprograman en el sistema ISP (In System
Programmable / Programable en el Sistema). Esto implica la capacidad de poder
ser programados mientras están instalados en un sistema completo, en lugar de
requerir que el chip sea programado con antelación a su instalación.
Tienen menor retardo que los dispositivos PAL.
29
Figura 34. Diagrama de bloques funcionales del dispositivo GAL22V10. Fuente: Lattice Semiconductor,
Datasheet GAL22V10, 1998.
30
2.2.2 CPLDs
2.2.3 FPGAs
31
2.3. Arquitectura de los dispositivos FPGA
Figura 36. Arquitectura general de un FPGA de la serie 4000 de Xilinx. Fuente: Farooq, U. Chapter 2. FPGA
Architectures: An Overview, 2012.
32
CLB (Configurable Logic Block / Bloque Lógico Configurable). Son la parte lógica
más compleja dentro de los dispositivos FPGA, cuya finalidad es la
implementación de la lógica del usuario. Los CLB básicamente están compuestos
por transistores, puertas lógicas básicas, multiplexores, tablas de consultas (LUTs,
Look-up tables) y flip-flops, pero varían dependiendo del fabricante. En la figura 37
se muestra la estructura interna de un CLB de la familia XC4000 de Xilinx, que se
compone de 2 LUT de 4 entradas, 1 LUT de 3 entradas, multiplexores
programables y dos flip-flops (para una observación más detallada ir al Anexo,
Apartado a).
Figura 37. Estructura interna de un CLB de la familia XC4000. Fuente: Septién del Castillo, Julio; Mecha
López, Hortensia. Hardware Dinámicamente Reconfigurable, 2003.
Las tablas de consultas o LUT son la parte más importante, ya que toda la
lógica combinacional se implementa gracias a estos elementos. Éstas están
compuestas por celdas de memoria SRAM (Static Random Access Memory /
Memoria estática de acceso aleatorio)8 y multiplexores con los que se selecciona
la salida [Fig. 38]. Cabe destacar que el retardo a través de la LUT es constante e
independiente de la función que se desee implementar.
8 Tecnología RAM basada en semiconductores capaz de mantener los datos sin necesidad de un circuito de
refresco, siempre y cuando esté alimentada por corriente eléctrica(Stankovich, 2008).
33
Figura 38. Bloque básico de un CLB.
34
Figura 39. Estructura interna de un SB. Fuente: Farooq, U. Chapter 2. FPGA Architectures: An Overview,
2012.
Figura 40. Estructura interna de un CB. Fuente: Farooq, U. Chapter 2. FPGA Architectures: An Overview,
2012.
IOB (Input Output Blocks / Bloques de Entrada y Salida) [Fig. 41] (para una
observación más detallada ir al Anexo, Apartado a). Son recursos lógicos que
permiten el enlace entre los bloques lógicos internos y los terminales de
entrada/salida. Existe un IOB por cada terminal de E/S (Entrada/Salida) del
dispositivo FPGA, con lo cual cada terminal puede actuar como entrada, salida o
bidireccional según queramos configurarlos (Herrera Lozada & González Robles,
2013). Cada IOB cuenta con los siguientes elementos:
9Permiten que un puerto de salida tenga 3 posibles niveles lógicos: “1”, “0” o alta impedancia, lo que hace
posible que muchos circuitos puedan compartir la misma línea de salida.
35
- Entradas con posibilidad de pull-up o pull down programables.
- Registros de salida.
- Registros de entrada.
Figura 41. Bloques de entrada salida. Fuente: Jorge, Iindustrial Obolog, 2009.
36
- Tecnología antifusible (Antifuse) Los antifusibles son elementos de
memoria compuestos por dos zonas conductoras separadas por un aislante
de alta impedancia. Al aplicar corriente entre las dos zonas, el aislante se
transforma en conductor, creando una “zona de conexión”, con lo que se
reduce la impedancia10. Estas estructuras pueden ser de distintos
materiales, como metal para las zonas conductoras y silicio para el aislante
[Fig. 43], o una capa conductora de polisilicio y otra capa de difusión n+
separadas ambas por un dieléctrico. Dicho dieléctrico puede ser una capa
de óxido o una multicapa (oxide-nitride-oxide).
37
Figura 44. Celda de memoria SRAM. Fuente: Espinoza Juárez, Francisco. Tecnologías de
configuración.
38
Figura 45. Familias de FPGA según la tecnología de programación en sus conexiones.
Según estén organizados los CLBs dentro de un FPGA, podemos distinguir tres tipos de
organizaciones de FPGA (Santos Cruz, 2008):
39
Figura 46. FPGA de organización tipo terraza. Fuente: Cinta Oria, Ana; Dispositivos lógicos programables de
alta capacidad, 2010.
40
FPGA de organización tipo mar de puertas. La organización de los CLBs es la
misma que en la tipo cuadrícula, ya que se organizan en filas y columnas [Fig. 48].
La gran diferencia es que los recursos de interconexión van en capas diferentes,
con lo que en la primera capa tenemos los CLBs, y en la segunda y tercera, los
recursos de interconexión, tanto horizontales como verticales. Esta distribución
hace posible la disminución en los retardos, ya que su velocidad de operación es
menos sensible a las decisiones de partición y ubicación de los CLBs.
Compañía Organización
Actel Gate Array, Terraza
Tabla 4. Tipo de organización empleado para fabricación de FPGAs de las principales compañías.
41
2.5. Ventajas e inconvenientes de los dispositivos FPGA
Ventajas:
Inconvenientes:
11 Software que no requiere ajustes significativos para poder ser utilizado por el cliente una vez
instalado(Budiño & Prato, 2013).
42
2.6. Aplicaciones
Figura 49. Porcentajes de ventas de FPGAs por sectores industriales y valoración de mercado de las
principales empresas en 2013.
Dentro de estos campos cabe destacar una gran variedad de aplicaciones de los
FPGAs, como los sistemas de visión artificial, sistemas de imágenes médicas, radio
definida por software, sistemas de codificación y encriptación, radioastronomía,
reconocimiento de voz, defensa aeroespacial, etc. Con lo cual, viendo la gran variedad de
campos y aplicaciones que han hecho posible los dispositivos FPGA, podemos decir que
su desarrollo ha supuesto un gran avance para la humanidad.
43
2.7. Fabricantes
2.7.1. XILINX
Figura 50. Arquitectura de un dispositivo FPGA de Xilinx Spartan 3. Fuente: Sisterna, Cristian. Field
Programmable Gate Arrays.
44
Xilinx ha desarrollado una gran variedad de dispositivos FPGA, con distintas
características y prestaciones, destinados a cubrir las necesidades de los usuarios.
Dentro de la oferta de Xilinx podemos encontrar seis familias ordenadas de menores a
mayores prestaciones: Spartan, Virtex, Kintex, Artix, Kintex UltraSCALE y Virtex
UltraSCALE (Xilinx, 2016e). Cada una de estas familias está formada por distintas series
de FPGAs que Xilinx ha ido desarrollando a lo largo de los años.
2.7.1.1 Spartan-6
Los dispositivos de la familia Spartan son los dispositivos FPGA más optimizados
en cuanto a costes, ofreciendo características de conectividad dirigidas a empresas. Esta
familia está dirigida a aplicaciones de baja potencia, sensibilidad muy alta y de gran
volumen, como pantallas y decodificadores.
45
Baja potencia estática y dinámica.
- Procesador de 45 nm optimizado para menor coste y baja potencia.
- Modo de suspensión con gasto cero de energía.
- El modo de suspensión mantiene el estado y la configuración.
- Potencia más baja Voltaje en el núcleo de 1.0 V.
- Alto rendimiento Voltaje en el núcleo de 1.2 V.
Bancos de interfaces SelectIO multi-estándar y multi-voltaje.
- Rango de transferencia de datos Hasta 1080 Mb/s por diferencial de E/S
(Entrada/Salida / Input/Output).
- Hasta 24 mA por pin de salida.
- Estándares y protocolos de E/S De 3.3 V hasta 1.2 V.
- Interfaces de memoria HSTL (High Speed Transceiver Logic / Lógica de
transceptor de alta velocidad) y SSTL (Stub-Series Terminated Logic) de
bajo coste.
- Cumplimiento de hot-swap (sustitución en caliente)12.
- Rangos de E/S ajustables para mejorar la integridad de la señal.
Transceptores en serie GTP (Gigabit Transceiver with Low Power / Transceptor
Gigabit de baja potencia) de alta velocidad en los FPGAs tipo LXT.
- Son transmisores y receptores combinados para funcionar a una velocidad
máxima de datos de 3.2 Gb/s.
- Interfaces de alta velocidad.
- Bloques integrados para diseños PCI Express (Peripheral Component
Interconnect / Interconexión de componentes periféricos), que son
interfaces punto a punto.
Soporte tecnológico PCI de bajo coste compatible con la especificación de 33 MHz
y 32/64 bit.
Porciones DSP48A1 eficientes.
- Procesamiento aritmético y de señal de alto rendimiento.
- Multiplicador rápido de 18 x 18 y acumulador de 48 bit.
- Canalización y capacidad en cascada.
- Pre-sumador para soporte de las aplicaciones de filtro.
Bloques controladores de memoria integrada.
- Soporte DDR (Double Data Rate / Doble tasa de transferencia de datos),
DDR2, DDR3 y LPDDR (Low Power Double Data Rate / Doble tasa de
transferencia de datos de baja potencia).
46
- Velocidades de datos de hasta 800 Mb/s.
- Estructura de bus multipuerto con FIFO (First In First Out / Primero en
entrar primero en salir) independiente para reducir los problemas en el
tiempo de diseño.
Recursos lógicos abundantes con mayor capacidad lógica.
- Cambio de registro opcional o soporte RAM distribuido.
- LUTs eficientes de 6 entradas que mejoran el rendimiento y minimizan el
consumo.
- LUT con flip-flops dobles para aplicaciones céntricas de canalización.
Bloque RAM con un ancho rango de granularidad.
- Rapidez de bloque RAM mediante Byte Write Enable (con un Low se
procesan Bytes).
- Bloques de 18 Kb que pueden ser opcionalmente programables como dos
RAMs independientes de 9 Kb.
Clock Management Tile (CMT o Mosaico de gestión de reloj) para una mejora del
rendimiento.
- Bajo nivel de ruido, sincronización flexible.
- Digital Clock Managers (DCMs o Gestores del reloj digital) Eliminan el
sesgo del reloj y la distorsión en el ciclo de trabajo.
- Phase-Locked Loops (PLLs, Lazos de seguimiento de fase) Para una
sincronización de baja fluctuación.
- Síntesis de frecuencia con multiplicación simultánea, división y cambio de
fase.
- 16 redes de reloj global de bajo sesgo.
Configuración simplificada soporte de estándares de bajo coste.
- 2 pines de configuración con detección automática.
- Soporte NOR flash.
- Riqueza de características de la plataforma Flash de Xilinx con JTAG (Joint
Test Action Group).
- Soporte multiarranque para actualizaciones remotas con múltiples flujos de
bits, usando la protección de “perro-guardián” (watchdog)13.
Seguridad mejorada para la protección del diseño.
- Identificador único de dispositivos DNA (Digital Network Architecture /
Arquitectura de redes digitales) para autenticación de diseño.
13Sistema de protección que reinicia el programa cuando éste realiza una acción imprevista (Peña Toledo,
2008).
47
- Cifrado de flujos de bits AES (Advanced Encryption Standard / Estándar de
encriptación avanzada) en dispositivos de mayor tamaño.
Procesamiento integrado más rápido con un procesador “soft” MicroBlaze de bajo
coste y mejorado.
IP dirigidas a la industria y diseños de referencia.
Tabla 5. Características generales de los dispositivos de la serie Spartan-6 de Xilinx. Fuente: Xilinx, Spartan-6
family Datasheet, 2011.
SliceM La cuarta parte de las Slices de las FPGAs de la serie Spartan-6 son de
este tipo. Cada una de las 4 LUTs de las celdas lógicas de las SliceM pueden ser
configuradas como LUT de 6 entradas y una salida, y como LUT de 5 entradas
dobles con direcciones idénticas de 5 bits y dos salidas independientes. Cada
48
salida de las LUT puede ser registrada en un flip-flop dentro del CLB. Para
operaciones aritméticas, una cadena de acarreo de alta velocidad propaga las
señales de acarreo de forma ascendente en una columna de Slices [Fig. 51].
Figura 51. Estructura de una SliceM de la familia Spartan-6. Fuente: Xilinx, Spartan-6 family Overview, 2011.
49
SliceL Constituyen otra cuarta parte de las FPGAs de la serie Spartan-6.
Contienen todas las características de las SliceM excepto la función de
Memoria/Registro de desplazamiento [Fig. 52].
Figura 52. Estructura de una SliceL de la familia Spartan-6. Fuente: Xilinx, Spartan-6 family Overview, 2011.
SliceX La mitad de las Slices de las FPGAs de la serie Spartan-6 son de este
tipo. Éstas tienen la misma estructura que las SliceLs, exceptuando la opción de
acarreo aritmético y los amplios multiplexores [Fig. 53].
50
Figura 53. Estructura de una SliceX de la familia Spartan-6. Fuente: Xilinx, Spartan-6 family Overview, 2011.
51
correspondiente (SLICE X0Y0) (Wawrzynek, 2010). Cada Slice se va ordenando de esta
forma hasta la última, que estará situada en la parte superior derecha y cuya coordenada
dependerá del tamaño del dispositivo FPGA. Además, cada CLB consta de rutas para el
acarreo Cin (Carry In / entrada de acarreo) y Cout (Carry Out / salida de acarreo), cuyo
número resultará a una función más o menos compleja, así como de conexiones a la
matriz que garantizan la comunicación entre las Slices de cada CLB y entre los CLBs
cercanos.
Las Slices a su vez están formadas por 2 o más celdas lógicas (LC, Logic Cells)
[Fig. 55] individuales que comparten la misma señal de reloj. Las LCs son la unidad más
pequeña de una FPGA. Una celda lógica contiene las tablas de consultas (LUTs, Look Up
Tables), además de flip-flops, registros y multiplexores programables.
52
Figura 55. Estructura interna de un CLB. Fuente: Borensztejn, Patricia. Arquitecturas FPGA , 2013.
53
Figura 56. Diagrama de bloque de un CMT la familia Spartan-6. Fuente: Xilinx. Spartan-6 family Overview,
2011.
Figura 57. Diagrama de bloque funcional DCM. Fuente: Xilinx. Spartan-6 family Overview, 2011.
54
Figura 58. Diagrama de bloque de una PLL de la familia Spartan-6. Fuente: Xilinx. Spartan-6 family Overview,
2011.
Cada dispositivo de esta serie consta de entre 12 y 268 bloques RAM de doble
puerto, con una capacidad de 18 Kb cada uno. Estos son bloques internos de memoria
RAM de alta velocidad. Cada bloque RAM (BRAM) tiene dos puertos totalmente
independientes que comparten únicamente los datos almacenados. Cada acceso a la
memoria, sea de lectura o escritura, es controlado por el reloj.
55
Figura 59. MCB de la familia Spartan-6. Fuente: Xilinx. Spartan-6 family Overview, 2011.
En cuanto al rango de pines de E/S, en cada dispositivo FPGA de esta serie varía
desde 102 hasta 576. Cada pin es configurable y puede obedecer a un gran número de
estándares, usando hasta 3.3 V (Xilinx, 2011). Todos los pines de E/S están organizados
en bancos, con 4 bancos para los dispositivos más pequeños, y 6 para los más grandes.
Figura 60. Nomenclatura de una FPGA de la serie Spartan-6 de Xilinx. Fuente: Xilinx. Spartan-6 family
Datasheet, 2011.
56
2.7.1.2. Virtex-6
Por otro lado, dentro de la familia de dispositivos FPGA Virtex de Xilinx nos vamos
a centrar en los dispositivos de la serie Virtex-6.
57
MMCM (Mixed-Mode Clock Managers / Gestores de reloj modo mezclado)
potentes.
- Los bloques MMCM proporcionan un almacenamiento sin retardo, síntesis
de frecuencia, desplazamiento en la fase de reloj, filtrado de la fluctuación
de las entradas y división de la fase de reloj.
Bloques de RAM/FIFOs de 34 Kb.
- Bloques de RAM de puertos dobles.
- Puertos dobles programables con un ancho de hasta 36 bits.
- Puertos dobles simples con un ancho de hasta 72 bits.
- Lógica FIFO programable mejorada.
- Incorporación de cableado con corrección opcional de errores.
- Posibilidad de uso de cada bloque como dos bloques independientes de 18
Kb.
Tecnología SelectIO paralela de alto rendimiento.
- Operación E/S de entre 1.2 y 1.5 V.
- Interconexión síncrona de la fuente usando tecnología ChipSync.
- Terminación activa de la impedancia controlada digitalmente (DCI, Digitally
controlled impedance).
- Banco flexible de E/S de grano fino.
- Soporte de la interfaz de memoria de alta velocidad con capacidad de
escritura en el nivel integrado.
Slices avanzadas DSP48E1 [Fig. 61].
- Multiplicador/acumulador complemento a 2 de 25 x 18.
- Canalización opcional.
- Nuevo pre-sumador opcional para ayudar a las aplicaciones de filtrado.
- Funcionalidad de lógica bit-a-bit opcional.
- Conexiones dedicadas en cascada.
58
Figura 61. Slice DSP48E1 de las FPGAs Virtex-6. Fuente: Xilinx. Virtex-6 FPGA DSP48E1 Slice , 2011.
59
Figura 62. Diagrama de bloque simplificado del transceptor GTX. Fuente: Xilinx. Virtex-6 FPGA GTX
Transceivers , 2011.
60
Tabla 6. Características de los dispositivos de la serie Virtex-6 de Xilinx. Fuente: Xilinx, Virtex-6 family
Datasheet, 2015.
Cada LUT puede ser configurada como una LUT de 6 entradas (ROMs de 64 bit)
con una salida, o como 2 LUTs de 5 entradas (ROMs de 32 bit), con salidas separadas
pero direcciones comunes o entradas lógicas. Cada salida de las LUT puede ser
registrada opcionalmente en un flip-flop. Cada Slice está formada por 4 LUTs, sus 8 flip-
flops, multiplexores y lógica de acarreo aritmético, y 2 Slices forman un CLB. Se pueden
configurar opcionalmente como latches 4 flip-flops de una Slice. En ese caso los 4 flip-
flops restantes de esa Slice deben permanecer sin uso.
Entre el 25% y el 50% de todas las Slices pueden usar sus LUTs como RAM
distribuidas de 64 bit, como SRL32 (Shift Registers / Registros de desplazamiento) de 32
bits [Fig. 63], o como 2 SRL16. Estos registros son circuitos donde la información de
entrada se va desplazando en las salidas cuando se les aplica una señal de sincronismo;
si se deja de aplicar esta señal, en la salida se mantiene la información (Universidad
Nacional de Educación a Distancia, s.f.).
61
Figura 63. Shift Register de 32 bits. Fuente: Xilinx, Virtex-6 FPGA Configurable Logic Block , 2012.
Figura 64. Diagrama de bloque de un CMT de la familia Virtex-6. Fuente: Xilinx, Virtex-6 FPGA Clocking
Resources , 2014.
62
Figura 65. Diagrama de bloque de un MMCM de la familia Virtex-6. Fuente: Xilinx, Virtex-6 FPGA Clocking
Resources , 2014.
Además, las FPGAs tienen entre 156 y 1064 bloques RAM de doble puerto, y
almacenan 36 Kb cada uno. Ambos puertos de la RAM son independientes, compartiendo
únicamente los datos almacenados. Cada acceso a memoria, lectura y escritura, es
controlado por el reloj. La dirección de entrada siempre está temporizada, conservando
los datos hasta la siguiente operación. Cada bloque RAM puede ser dividido en dos
bloques de RAM completamente independientes de 18 Kb.
63
Figura 66. Nomenclatura de una FPGA de la serie Virtex-6 de Xilinx. Fuente: Xilinx, Virtex-6 family Datasheet,
2015.
64
2.7.2. ALTERA
Altera es otra de las principales compañías que compite con Xilinx para hacerse
con el monopolio de la venta de FPGAs. Fue fundada en 1983 por Robert Hartmann,
Michael Magranet, Paul Newhagen y Jim Sansbury. En 1984 lanzó su primer dispositivo
lógico programable, el chip EP300 [Fig. 67]. A medida que han ido pasando los años y la
tecnología ha avanzado, Altera ha ido desarrollando dispositivos cada vez más complejos,
destacando la creación en 1992 de su primer dispositivo FPGA: un mar flexible de
elementos lógicos (Altera, 2016c).
Figura 67. Primer dispositivo lógico programable de Atera, el EP300. Fuente: Altera, In the beginning, 2015.
Figura 68. Arquitectura de un dispositivo FPGA de Altera. Fuente: Sisterna, Cristian. Field
Programmable Gate Arrays (FPGAs).
65
Altera ha desarrollado una gran variedad de dispositivos FPGA con distintas
características y prestaciones destinados a cubrir las necesidades de los usuarios. Dentro
de la oferta de Altera podemos encontrar tres familias: Cyclone, Arria y Stratix (Altera,
2016a). Cada una de estas familias está formada a su vez por distintas series de FPGAs
que Altera ha ido desarrollando a lo largo de los años.
2.7.2.1. Cyclone IV
La familia Cyclone consta de cinco series que son: Cyclone, Cyclone II, Cyclone
III, Cyclone IV y Cyclone V. En la tabla 8 se muestran algunos datos de cada serie de la
familia Cyclone.
Tabla 8. Introducción a las series de familia Cyclone de Altera. Fuente: Altera, Cyclone Series Introduction,
2016.
66
Como ya hemos adelantado, vamos a abordar la serie Cyclone IV, ya que es la
homónima de la Spartan-6 de Xilinx. Esta serie incluye una nueva variante de
transceptores, y es ideal para un alto volumen de aplicaciones de bajo coste.
14 Sin la interrupción de un programa que se está ejecutando (Hadzic, Smith, & Marcus, 1998).
67
- 150 mW por consumo de potencia del canal.
- Estructura de reloj flexible para soportar varios protocolos en un único
bloque de transceptores.
Los dispositivos Cyclone IV GX ofrecen “hard IP” dedicadas para PCI Express
(PIPE) (PCIe) Gen 1:
- Configuraciones de carril x1, x2 y x4.
- Configuraciones end-point y root-port.
- Hasta 256 Bytes de carga útil (Payload).
- Un canal virtual.
- 2 KB en el buffer de respuesta.
- 4 KB en el buffer receptor (Rx).
Los dispositivos Cyclone IV GX ofrecen un amplio rango de soporte de protocolo:
- PCIe (PIPE) Gen 1 x1, x2 y x4 (2.5 Gbps).
- Gigabit Ethernet (1.25 Gbps).
- Interfaz CPRI (hasta 3.072 Gbps).
- Interfaz XAUI (Gigabit Attachment Unit Interface / Interfaz de unidad de
conexión Gigabit) (3.125 Gbps).
- Interfaz digital en serie (SDI, Serial Digital Interface) de triple rango (hasta
2.97 Gbps).
- RapidIO en serie (3.125 Gbps).
- Modo básico (hasta 3.125 Gbps).
- V-by-One (hasta 3.0 Gbps).
- Puerto display (2.7 Gbps).
- Tecnología de acoplamiento avanzado en serie (SATA, Serial Advanced
Technology Attachment) (hasta 3.0 Gbps).
- OBSAI (Open Base Station Architecture Initiative / iniciativa de arquitectura
abierta para estaciones base) (hasta 3.072 Gbps).
Hasta 532 pines de E/S de usuarios.
- Interfaces LVDS (Low Voltage Digital Signal / Señal digital de bajo voltaje)
de transmisores de hasta 840 Mbps (Tx), 875 Mbps Rx.
- Soporte para interfaces SRAM QDRII (Quad Data Rate II / Velocidad de
datos cuádruple II) y DRAM DDR de hasta 167 MHz.
Hasta 8 Phase-Locked Loops (PLLs) por dispositivo.
Ofrecidos en grados de temperatura industrial y comercial.
68
En las tablas 9 y 10 podemos observar las características principales de cada uno
de los dispositivos FPGA de los tipos GX y E de la serie Cyclone IV.
Tabla 9. Características de los dispositivos tipo GX de la serie Cyclone IV. Fuente: Altera, Cyclone IV family
Datasheet, 2016.
Tabla 10. Características de los dispositivos tipo E de la serie Cyclone IV. Fuente: Altera, Cyclone IV family
Datasheet, 2016.
69
Figura 69. Elementos Lógicos en la familia Cyclone IV. Fuente: Altera, Cyclone IV device handbook,, 2016.
Figura 70. Arquitectura de la familia Cyclone IV. Fuente: Labrada, Mauricio. Familia Cyclone, 2014.
70
Los dispositivos Cyclone IV incluyen hasta de 30 redes de CLK globales (GCLK) y
hasta 8 PLLs [Fig. 71] con 5 salidas por cada PLL para proporcionar una fuerte gestión y
síntesis del reloj (Altera, 2016b). Hay 2 tipos de PLLs en los dispositivos tipo GX:
Figura 71. Arquitectura de los PLLs. Fuente: Altera, Cyclone IV device handbook, 2016.
71
Figura 72. Nomenclatura de una FPGA de la serie Cyclone IV de Altera. Fuente: Altera, Cyclone IV family
Datasheet, 2016.
Son muchas las diferencias de esta serie con respecto a la Spartan-6 de Xilinx. En
relación al funcionamiento de los estándares de E/S, para soportar el amplio rango de
requisitos de E/S encontrados en los sistemas de alto volumen, los dispositivos Spartan-6
proporcionan mayor rapidez con LVDS (Low Voltage Digital Signal / Señal digital de bajo
voltaje): hasta 1,080 Mb/s, mientras que los Cyclone IV GX son de 840 Mb/s (Smerdon,
2016).
72
Tabla 11. Estudio comparativo del rendimiento de las FPGAs Spartan-6 vs Cyclone IV. Fuente: Altera, High-
Volume Spartan-6 FPGAs: Performance and Power Leadership by Design, 2011.
En cuanto a los DCMs y los PLLs, los de los dispositivos Spartan-6 ofrecen mayor
flexibilidad, y los DCMs añaden una capacidad de cambio de fase mejor que los PLLs
disponibles en los dispositivos de la familia Cyclone IV (Smerdon, 2016).
Tabla 12. Comparación de la capacidad de las FPGAs Spartan-6 respecto a las FPGAs Cyclone IV. Fuente:
Altera, High-Volume Spartan-6 FPGAs: Performance and Power Leadership by Design, 2011.
73
2.7.2.2. Stratix IV
La familia Stratix consta de 5 series que son: Stratix, Stratix GX, Stratix II, Stratix
III, Stratix IV, Stratix V y Stratix 10, como se puede observar en la tabla 13.
Tabla 13. Introducción a las series de familia Stratix de Altera. Fuente: Altera, Stratix Series Introduction, 2016.
Como hemos indicado, vamos a abordar la serie Stratix IV, ya que es la homónima
de la Virtex-6 de Xilinx.
74
La serie de dispositivos Stratix IV ofrece las siguientes características, aparte de las
mencionadas anteriormente de cada tipo de dispositivo (Altera, 2016d):
75
Pines de salida para dispositivos Stratix IV E diseñados para permitir la migración
de diseños de Stratix III a Stratix IV E con un mínimo impacto PCB (Printed Circuit
Board / Placa del circuito impreso).
Respecto a los dispositivos Stratix IV GX destacamos que proporcionan hasta 48
canales de transceptores full-duplex basados en CDR por dispositivo, y de los cuales
(Altera, 2016d):
76
Figura 73. Arquitectura de la serie Stratix IV. Fuente: Altera, Stratix IV FPGAs , 2016.
77
Figura 74. Estructura de un LAB. Fuente: Espejo Juárez, David. Demodulación PSK y FSK: Implementación
en FPGAs, 2014.
Los bloques DSP pueden ser configurados como multiplicadores de alta precisión
de 9 x 9 bits, 12 x 12 bits, 18 x 18 bits y 36 x 36 bits [Fig. 75].
78
Figura 75. Bloques DSP. Fuente: Altera, Stratix IV device handbook , 2016.
Figura 76. Nomenclatura de una FPGA de la serie Stratix IV de Altera. Fuente: Altera, Stratix IV family
Datasheet, 2016.
79
Como se puede comprobar, son muchas las diferencias de esta serie con respecto a
la Virtex-6 de Xilinx. Podemos observar algunas de las diferencias en la tabla 14.
80
3. Placas de prototipado rápido
En este capítulo describiremos varias placas tanto de Xilinx como de Altera que
contienen dispositivos FPGA de las series anteriormente mencionadas, Spartan-6 y
Virtex-6 de Xilinx, y Cyclone IV y Stratix IV de Altera, y haremos una comparativa entre
estos dispositivos y los distintos fabricantes.
3.1. Nexys 3
Vamos a hablar de una de las placas (board) que hemos seleccionado para
desarrollar nuestro proyecto, la Nexys 3 [Fig. 77]. Esta placa aloja un dispositivo FPGA
del tipo XC6SLX16 perteneciente a la familia Spartan-6, con un grado de velocidad de -3,
un tipo de encapsulado CS, fabricado sin plomo (G), y con un número total de pines de
324. Toda esta información nos la proporciona la nomenclatura utilizada por Xilinx en los
dispositivos de la familia Spartan-6, tema que hemos mencionado en la figura 60 (véase
Capítulo 2, Apartado 7.1).
Esta FPGA contiene 14.579 celdas lógicas (LCs), 2.278 Slices (cada una formada
por 4 LUTs y 8 flip-flops), 18.224 flip-flops y un máximo de 136 Kb de RAM distribuida.
Contiene además 32 Slices del tipo DSP48A1. Dispone de 2 CMTs, y un máximo de
MCBs de 2. Tiene 4 bancos de E/S y un total de 232 pines de E/S de usuario (Xilinx,
2011).
81
Figura 77. Composición del dispositivo Nexys 3. Fuente: Digilent.
82
3.2. Kit de evaluación ML605
En cuanto a la serie Virtex-6 de Xilinx, hemos elegido la placa ML605 [Fig. 78]
(para una observación más detallada ir al Anexo, Apartado a). Esta placa aloja un
dispositivo FPGA del tipo XC6VLX240T, perteneciente a la serie Virtex-6 tipo LXT,
dispositivo que hemos empleado para conocer la nomenclatura de los dispositivos Virtex-
6 en la figura 66 (véase Capítulo 2, Apartado 7.1). Esta FPGA consta de 241.152 LCs,
37.680 Slices (cada una formada por 4 LUTs y 8 flip-flops) y 3.650 Kb de RAM distribuida.
Contiene además 768 Slices del tipo DSP48E1. Dispone de 12 CMTs que contienen 2
MMCMs cada uno, 18 bancos de E/S y un máximo de 720 pines de E/S de usuario (Xilinx,
2015).
Figura 78. Composición del Kit de evaluación ML605. Fuente: Xilinx, Virtex-6 FPGA ML605 Evaluation Kit,
2012.
83
3.3. DE2-115
84
3.4. Placa de desarrollo FPGA Stratix IV GX
Figura 80. Composición de la placa de desarrollo FPGA Stratix IV GX. Fuente: Altera. Stratix IV GX FPGA
Development Board. Reference Manual, 2012.
85
Respecto a los dispositivos de memoria, la placa cuenta con 512 MB de memoria
SDRAM DDR3, 128 MB de SDRAM DDR3 con un bus de datos de 16 bit, dos SRAM de
128 MB con buses de datos de 18 bits, SSRAM (Synchronous Static Random Access
Memory / Memoria de acceso aleatorio estática síncrono) de 2MB con buses de datos de
2 MB, y 64 MB de memoria flash síncrona (Altera, 2012).
86
4. Diseño y desarrollo del sistema
Con este proyecto hemos desarrollado, por un lado, un sistema que gestione y
controle el número de plazas disponibles en un parking, además del número total de
plazas libres que hay disponibles, mediante dos paneles exteriores. Por otro lado, al estar
el parking dividido por zonas, también hemos implementado varios sistemas que indican
si hay plazas libres o no por zona, y cuántas quedan exactamente, mediante cuatro
paneles situados en el interior del parking repartidos entre ambas plantas (véase Capítulo
1, Apartado 3).
87
describir el comportamiento de un circuito electrónico. Hemos utilizado el entorno ISE
(Integrated Software Environment / Entorno de software integrado) de Xilinx para realizar
la implementación del diseño, así como los diferentes tipos de simulación, las pruebas y la
depuración del código, ya que el entorno ISE nos aporta una información muy detallada
para depurar y corregir errores y, además, nos ha permitido volcar posteriormente el
código desarrollado en las placas que hemos elegido para este proyecto, pertenecientes a
las familias Spartan-6 y Virtex-5: la Nexys 3 y la Genesys.
88
Figura 81. Diagrama de flujo de los contadores de unidades y decenas.
La tabla de estados que se obtiene a partir del diagrama de flujo de los contadores
de unidades y decenas se muestra en la tabla 15.
89
Estado Actual Estado Siguiente ̅̅̅̅̅̅̅̅̅
Up/𝑫𝒐𝒘𝒏
0000 1001 0
1001 1000 0
1000 0111 0
0111 0110 0
0110 0101 0
0101 0100 0
0100 0011 0
0011 0010 0
0010 0001 0
0001 0000 0
0000 0001 1
0001 0010 1
0010 0011 1
0011 0100 1
0100 0101 1
0101 0110 1
0110 0111 1
0111 1000 1
1000 1001 1
1001 0000 1
Tabla 15. Tabla de estados de los contadores de las unidades y de las decenas.
La tabla de estados que se obtiene a partir del diagrama de flujo del contador de
las centenas es la mostrada en la tabla 16.
90
Figura 83. Diseño de la caja negra para los contadores de unidades y decenas.
Como se puede apreciar, las entradas del contador son clk (señal de reloj), e
̅̅̅̅̅̅̅̅ ascendente/descendente). Por otra parte, las
(enable), rst (reinicio) y ud (Up/𝐷𝑜𝑤𝑛,
salidas son qi (3:0) (estado en el que se encuentra el contador) y carry (último estado). A
continuación, vamos a detallar esas entradas y salidas.
91
carry Es la salida asociada al último estado. Su valor será ‘1’ cuando el
estado sea 9 y su valor de salida será ‘0’ en cualquier otro caso.
92
Figura 85. Circuito lógico ampliado del contador de centenas.
93
salida se pondrá en verde y la barrera de salida se levantará para permitir la salida del
vehículo.
Los nombres que hemos asignado a las señales de semáforos y barreras son los
siguientes:
Para resumir esta información, hemos creado la tabla de verdad que se muestra
en la tabla 17, con el fin de facilitar la comprensión de lo que se pretende implementar en
los paneles exteriores.
0 1 0 1 1 0 1 1 0 1
1 0 1 0 0 1 0 0 1 1
1 1 1 1 X 1 0 1 0 0
94
Otras entradas que debemos tener en cuenta para nuestro diseño son la señal clk
(señal de reloj) y la señal rst (reset), para reiniciar los contadores. En el caso de la señal
rst (reset), ésta se conecta directamente al pin de entrada de rst correspondiente a cada
contador. La señal global de clk se conecta a todos los contadores por la entrada de clk
de cada uno, con lo que conseguimos que nuestros contadores sean síncronos. Por otra
parte, la salida carry del contador de las unidades se conecta a la entrada e (enable) del
contador de las decenas, y a su vez la salida carry de las decenas se conecta a la
entrada e (enable) del contador de las centenas.
Para gestionar el led que acompaña a los displays que indican el número de
plazas libres, se toma una AND de las salidas carry de los tres contadores. Obtendremos
entonces dos salidas, LEDR y LEDV (led rojo y led verde respectivamente), de manera
que el led se ilumina de color verde si quedan plazas libres y de color rojo si están todas
ocupadas. A partir de esta información, obtenemos la tabla de verdad que se muestra en
la tabla 18.
95
Del estudio anterior resulta el diseño del parking que presentamos en la figura 86
con el entorno ISE (para una observación más detallada ir al Anexo, Apartado a).
Figura 86. Diseño de la caja negra para el panel exterior del parking.
96
CountDec (3:0) Salida de estado del contador de las decenas.
CountDec (0) es el bit menos significativo y CountDec (3) es el bit más
significativo.
CountCent (0:0) Salida de estado del contador de las centenas.
LEDR Salida del indicador luminoso de plazas libres de color rojo. Se
activa cuando no quedan plazas libres en el parking.
LEDV Salida del indicador luminoso de plazas libres de color verde. Se
activa cuando quedan plazas libres en el parking.
Ser Salida del led rojo del semáforo de entrada.
Sev Salida del led verde del semáforo de entrada.
Ssr Salida del led rojo del semáforo de salida.
Ssv Salida del led verde del semáforo de salida.
Be Salida de barrera de entrada.
Bs Salida de barrera de salida.
97
Figura 87. Circuito lógico ampliado de uno de los paneles exteriores.
98
Como puede apreciarse, en el circuito que se obtiene de la ampliación se divisan
componentes como puertas lógicas (NOT, AND), los tres contadores anteriormente
comentados, etc. que han sido empleados para la elaboración del panel exterior.
Figura 88. Circuito lógico de la interconexión entre los componentes lógicos de los paneles exteriores.
99
4.2.2. Paneles interiores
Para el caso del contador de las plazas normales, hemos diseñado un diagrama
de flujo [Fig. 89] en el que A=1 es la señal ascendente, y A=0 la señal descendente.
100
Figura 89. Diagrama de flujo para las plazas normales.
101
La tabla de estados que se obtiene a partir del primer diagrama de flujo del
contador, referente a las plazas normales, se muestra en la tabla 19.
102
00101 00110 1
00110 00111 1
00111 01000 1
01000 01001 1
01001 01010 1
01010 01011 1
01011 01100 1
01100 01101 1
01101 01110 1
01110 01111 1
01111 10000 1
10000 10001 1
10001 10010 1
10010 10011 1
10011 10100 1
10100 10101 1
10101 00000 1
103
La tabla de estados que se obtiene a partir del tercer diagrama de flujo del
contador, correspondiente a las plazas para vehículos eléctricos, se visualiza en la tabla
21.
0 1 0
1 0 0
0 1 1
1 0 1
104
Figura 92. Diseño de la caja negra para el contador de plazas normales.
Como se puede observar, las entradas del contador son clk (señal de reloj), e
̅̅̅̅̅̅̅̅, ascendente/descendente). Por otra parte, las
(enable), rst (reinicio) y ud (Up/𝐷𝑜𝑤𝑛
salidas son qi (4:0), que indica el estado en el que se encuentra el contador y carry,
indicador de último estado. A continuación, vamos a detallar esas entradas y salidas.
105
segmentos que permita visualizar más claramente el estado en el que se
encuentra el contador.
carry Es la salida asociada al estado. Su valor será ‘1’ cuando el estado
sea 22 y su valor de salida será ‘0’ en cualquier otro caso.
106
Figura 94. Diseño de la caja negra para el contador de plazas para minusválidos.
Las entradas del contador son clk (señal de reloj), e (enable), rst (reinicio) y ud
̅̅̅̅̅̅̅̅, ascendente/descendente). Asimismo las salidas son qi (1:0), que indica el
(Up/𝐷𝑜𝑤𝑛
estado en el que se encuentra el contador y carry, indicador de último estado. A
continuación, vamos a detallar esas entradas y salidas.
107
conectarlas, a través de un circuito combinacional, a un display de siete
segmentos que permita visualizar más claramente el estado en el que se
encuentra el contador.
carry Es la salida asociada al estado. Su valor será ‘1 cuando el estado
sea 2 y su valor de salida será ‘0’ en cualquier otro caso.
Figura 95. Circuito lógico ampliado del contador de plazas para minusválidos.
108
Figura 96. Diseño de la caja negra para el contador de plazas para eléctricos.
Las entradas del contador son clk (señal de reloj), e (enable), rst (reinicio) y ud
̅̅̅̅̅̅̅̅, ascendente/descendente). Asimismo las salidas son qi (0:0), que indica el
(Up/𝐷𝑜𝑤𝑛
estado en el que se encuentra el contador y carry, indicador de último estado. A
continuación, vamos a detallar esas entradas y salidas.
109
segmentos que permita visualizar más claramente el estado en el que se
encuentra el contador.
carry Es la salida asociada al estado. Su valor será ‘1’ cuando el estado
sea 1 y su valor de salida será ‘0’ cuando el estado sea 0.
Figura 97. Circuito lógico ampliado del contador de plazas para vehículos eléctricos.
110
Cuando un usuario aparca su vehículo en una plaza normal se activa una señal
LEDRN (señal de entrada que indica que hay un vehículo ocupando una plaza normal);
en el caso de vehículos para minusválidos o eléctricos, esta señal es LEDRM y LEDRE,
respectivamente. La activación de esta señal implica que hay una plaza menos para esa
zona, en este caso la marrón. Si el vehículo abandona la plaza normal o dicha plaza está
libre, se activa una señal LEDVN. Esta señal es LEDVM en el caso de plazas de
minusválidos, y LEDVE en el caso de vehículos eléctricos. La activación de esta señal
implica que hay una plaza más para la zona marrón.
Cabe decir que estas señales se encargan de gestionar la señal de enable del
circuito. Cuando no estén activadas, el valor del enable será ‘0’. Sin embargo, en el
momento en que una de las dos señales esté activa, el valor del enable será ‘1’. Por otra
parte, también se encargarán de gestionar la activación de la señal
ascendente/descendente de los contadores, en función de que el usuario deposite un
vehículo o abandone el lugar. Si no se activa ninguna o están ambas activadas
̅̅̅̅̅̅̅̅) no será relevante, ya que el valor del enable
simultáneamente, el valor de ud (Up/𝐷𝑜𝑤𝑛
será ‘0’ y, por lo tanto, el contador estará deshabilitado
̅̅̅̅̅̅̅̅̅ Enable
LedR LedV Up/𝑫𝒐𝒘𝒏
0 0 X 0
0 1 1 1
1 0 0 1
1 1 X 0
Tabla 22. Tabla de Funcionamiento para plazas normales, de minusválidos y de vehículos eléctricos.
Otras entradas que debemos tener en cuenta para nuestro diseño son las señales
globales clk (señal de reloj) y rst (reset). En el caso de la señal global rst, ésta se
conecta directamente al pin de entrada rst de cada contador, al igual que la señal global
clk se conecta a la entrada clk de todos los contadores, para que sean síncronos.
111
Para gestionar los leds que acompañan los displays indicadores del número de
plazas libres, vamos a analizar los tres casos disponibles:
Tabla 23. Tabla de verdad para los leds de las plazas para vehículos normales.
Tabla 24. Tabla de verdad para los leds de las plazas para vehículos de minusválidos.
112
tanto, hace que el led se ilumine de color rojo. A partir de esta información,
obtenemos la tabla de verdad mostrada en la tabla 25.
Tabla 25. Tabla de verdad para los leds de las plazas para vehículos eléctricos.
Del estudio anterior resulta la figura 98, que contiene el diseño obtenido con el
entorno ISE para la zona marrón (para una observación más detallada ir al Anexo,
Apartado a).
Las entradas y salidas del circuito del panel correspondiente a la zona marrón son
las siguientes.
113
clk señal de entrada de reloj. Los contadores son activos en flanco de
subida.
LEDAMARILLO Señal de entrada que indica que se trata de una plaza
para vehículos de minusválidos.
LEDAZUL Señal de entrada que indica que se trata de una plaza para
vehículos eléctricos.
LEDRE Señal de enable activa a nivel alto para los vehículos aparcados
en una plaza de eléctricos. Implica que la plaza está ocupada.
LEDRM Señal de enable activa a nivel alto para los vehículos aparcados
en una plaza de minusválidos. Implica que la plaza está ocupada.
LEDRN Señal de enable activa a nivel alto para los vehículos aparcados
en una plaza normal. Implica que la plaza está ocupada.
LEDVE Señal de activación (enable) activa a nivel alto para los
vehículos que abandonan una plaza de eléctricos o para indicar que la
plaza está libre.
LEDVM Señal de enable activa a nivel alto para los vehículos que
abandonan una plaza de minusválidos o para indicar que la plaza está
libre.
LEDVN Señal de enable activa a nivel alto para los vehículos que
abandonan una plaza normal o para indicar que la plaza está libre.
rst señal de entrada global de reinicio. Se conecta directamente a los
pines de rst de los contadores. Es activa a nivel alto y pone los contadores
a 0 cuando está activada.
LEDAMARILLOS Señal de salida que indica que se trata de una plaza
para vehículos de minusválidos.
LEDAZULS Señal de salida que indica que se trata de una plaza para
vehículos de minusválidos.
LedLibreE Salida del indicador luminoso de plazas libres de vehículos
eléctricos. Indica que la plaza está libre.
LedLibreM Salida del indicador luminoso de plazas libres de vehículos
para minusválidos. Indica que la plaza está libre.
LedLibreN Salida del indicador luminoso de plazas libres para vehículos
normales. Indica que la plaza está libre.
CountElect (0:0) Salida de estado del contador de las plazas de
vehículos eléctricos.
114
CountMinus (1:0) Salida de estado del contador de las plazas de
minusválidos. CountMinus (0) es el bit menos significativo y CountMinus (1)
es el bit más significativo.
CountNormal (4:0) Salida de estado del contador de las plazas
normales. CountNormal (0) es el bit menos significativo y CountNormal (4)
es el bit más significativo.
LedOcupadoE Salida del indicador luminoso de plazas libres de
vehículos eléctricos. Indica que la plaza está ocupada.
LedOcupadoM Salida del indicador luminoso de plazas libres de
minusválidos. Indica que la plaza está ocupada.
LedOcupadoN Salida del indicador luminoso de plazas libres de
vehículos normales. Indica que la plaza está ocupada.
115
Figura 99. Circuito lógico ampliado del panel interior de la zona marrón.
116
Como puede apreciarse, en el circuito que se se obtiene de la ampliación se
divisan componentes como puertas lógicas (NOT, AND, XOR), los tres contadores
anteriormente comentados, que han sido empleados para la elaboración del panel interior
para la zona marrón.
Figura 100. Circuito lógico de la interconexión entre los componentes lógicos del panel de la zona marrón.
El circuito lógico se ha creado a partir de las anteriores tablas, esto es, los tres
últimos módulos (M2, M3 y M4) se han creado a partir de la tabla 22 y, además, cada uno
de ellos se ha podido obtener a través de las otras tablas, es decir, el módulo 2 (M2) se
ha obtenido además a través de la tabla 23, el módulo 3 (M3) se ha podido obtener a
través de la tabla 24, mientras que el módulo 4 (M4), se ha obtenido a partir de la tabla 25
(véase Capítulo 4, Apartado 2.2).
117
5. Verificación y validación del sistema. Implementación
118
El contador es activo a nivel alto, y se reinicia cuando la señal de entrada rst
(reset) es activa a nivel alto. Cada pulso de reloj hace que el contador se incremente o
̅̅̅̅̅̅̅̅) por lo
decremente, dependiendo del estado en el que se encuentre la señal ud (Up/𝐷𝑜𝑤𝑛
que, si está activa, el contador es ascendente (0 a 9) y, en caso contrario, descendente (9
a 0). Si la entrada e (enable) está desactivada, el contador está deshabilitado, por lo que
no funcionará y permanecerá en el último estado.
process(clk,rst)
begin
if rst = '1' then qi <=0;
elsif (clk= '1' and clk 'EVENT) then
if e = '0' then
qi <= qi;
elsif (ud = '1') then
qi <= qi+1;
if (qi=1) then
qi<=0;
end if;
elsif (ud = '0') then
qi <= qi-1;
if (qi=0) then
qi<=1;
end if;
end if;
end if;
end process;
carry <= '1' WHEN qi =1 ELSE '0';
end funcional;
119
El contador es activo a nivel alto, y se reinicia cuando la señal de entrada rst
(reset) es activa a nivel alto. Cada pulso de reloj hace que el contador se incremente o
̅̅̅̅̅̅̅̅) por lo
decremente, dependiendo del estado en el que se encuentre la señal ud (Up/𝐷𝑜𝑤𝑛
que, si está activa, el contador es ascendente (0 a 1) y, en caso contrario, descendente (1
a 0). Si la salida e (enable) está desactivada, el contador está deshabilitado, por lo que no
funcionará y permanecerá en el último estado.
entity PanelExt is
Port ( clk : in STD_LOGIC;
rst : in STD_LOGIC;
Ep : in STD_LOGIC;
Sp : in STD_LOGIC;
Be : out STD_LOGIC;
Bs : out STD_LOGIC;
Sev : out STD_LOGIC;
Ser : out STD_LOGIC;
Ssv : out STD_LOGIC;
Ssr : out STD_LOGIC;
LEDR : inout STD_LOGIC;
LEDV : out STD_LOGIC;
CountUd : inout INTEGER RANGE 0 TO 9;
CountDec : inout INTEGER RANGE 0 TO 9;
CountCent : inout INTEGER RANGE 0 TO 1);
end PanelExt;
120
A continuación, hemos declarado los componentes utilizados en la programación
estructural del panel: puertas AND, NOT, XOR y Senial. Hemos programado estos
componentes previamente con una arquitectura de flujo de datos para poder emplearlos
en esta parte. Dentro de cada componente, hemos declarado sus entradas y salidas.
COMPONENT PuertaNot
PORT(
a : IN STD_LOGIC;
f : OUT STD_LOGIC
);
END COMPONENT;
COMPONENT PuertaAnd
PORT(
a,b : IN STD_LOGIC;
f : OUT STD_LOGIC
);
END COMPONENT;
COMPONENT PuertaXor
PORT(
a,b : IN STD_LOGIC;
f : OUT STD_LOGIC
);
END COMPONENT;
COMPONENT PuertaAndTres
PORT(
a,b,c : IN STD_LOGIC;
f : OUT STD_LOGIC
);
END COMPONENT;
COMPONENT senial
PORT(
a : IN STD_LOGIC;
f : OUT STD_LOGIC
);
END COMPONENT;
COMPONENT ContadorUnid
PORT(
rst,e,clk,ud : IN STD_LOGIC;
carry : INOUT STD_LOGIC;
qi : INOUT INTEGER RANGE 0 TO 9
);
END COMPONENT;
COMPONENT ContadorDec
PORT(
rst,e,clk,ud : IN STD_LOGIC;
carry : INOUT STD_LOGIC;
qi : INOUT INTEGER RANGE 0 TO 9
)
121
END COMPONENT;
COMPONENT ContadorCent
PORT(
rst,e,clk,ud : IN STD_LOGIC;
carry : INOUT STD_LOGIC;
qi : INOUT INTEGER RANGE 0 TO 1
);
END COMPONENT;
122
Begin
Nos hemos decantado por comentar únicamente el código del panel de la zona
marrón, ya que es el más completo de todos: contiene plazas normales, de minusválidos y
para coches eléctricos.
Hemos implementado este panel con tres contadores, uno para plazas normales,
otro para plazas de minusválidos y otro para plazas de vehículos eléctricos. A
continuación, se explica cómo hemos codificado estos paneles mediante lenguaje VHDL y
con la herramienta ISE 14.7 de Xilinx.
123
5.1.2.1. Implementación del contador de plazas para vehículos normales de la
zona marrón
process(clk, rst)
begin
124
5.1.2.2. Implementación del contador de plazas para minusvalidos de la zona
marrón
process(clk, rst)
begin
if rst = '1' then qi <=0;
elsif (clk= '1' and clk 'EVENT) then
if e = '0' then
qi <= qi;
elsif (ud = '1') then
qi <= qi+1;
if (qi=2) then
qi<=2;
end if;
elsif (ud = '0') then
qi <= qi-1;
if (qi=0) then
qi<=0;
end if;
end if;
end if;
end process;
carry <= '1' WHEN qi =2 ELSE '0';
end funcional;
125
5.1.2.3. Implementación del contador de plazas para vehículos eléctrics de la
zona marrón
process(clk, rst)
begin
if rst = '1' then qi <=0;
elsif (clk= '1' and clk 'EVENT) then
if e = '0' then
qi <= qi;
elsif (ud = '1') then
qi <= qi+1;
if (qi=1) then
qi<=1;
end if;
elsif (ud = '0') then
qi <= qi-1;
if (qi=0) then
qi<=0;
end if;
end if;
end if;
end process;
carry <= '1' WHEN qi =1 ELSE '0';
end funcional;
126
5.1.2.4. Implementación del panel de la zona marrón
entity PanelZonaMarron is
Port (clk : in STD_LOGIC;
rst : in STD_LOGIC;
LEDVN : in STD_LOGIC;
LEDRN : in STD_LOGIC;
LEDVM : in STD_LOGIC;
LEDRM : in STD_LOGIC;
LEDVE : in STD_LOGIC;
LEDRE : in STD_LOGIC;
LEDAZUL : in STD_LOGIC;
LEDAMARILLO : in STD_LOGIC;
LEDAZULS : out STD_LOGIC;
LEDAMARILLOS : out STD_LOGIC;
LedLibreN : out STD_LOGIC;
LedOcupadoN: inout STD_LOGIC;
LedLibreM : out STD_LOGIC;
LedOcupadoM: inout STD_LOGIC;
LedLibreE : out STD_LOGIC;
LedOcupadoE: inout STD_LOGIC;
CountNormal : inout INTEGER RANGE 0 TO 22;
CountMinus : inout INTEGER RANGE 0 TO 2;
CountElect : inout INTEGER RANGE 0 TO 1);
end PanelZonaMarron;
127
architecture estructural of PanelZonaMarron is
COMPONENT Senial
PORT(
a : IN STD_LOGIC;
f : OUT STD_LOGIC
);
END COMPONENT;
COMPONENT PuertaNot
PORT(
a : IN STD_LOGIC;
f : OUT STD_LOGIC
);
END COMPONENT;
COMPONENT PuertaAnd
PORT(
a,b : IN STD_LOGIC;
f : OUT STD_LOGIC
);
END COMPONENT;
COMPONENT PuertaXor
PORT(
a,b : IN STD_LOGIC;
f : OUT STD_LOGIC
);
END COMPONENT;
COMPONENT ContadorNormalMarron
PORT(
rst,e,clk,ud : IN STD_LOGIC;
carry : INOUT STD_LOGIC;
qi : INOUT INTEGER RANGE 0 TO 22
);
END COMPONENT;
COMPONENT ContadorMinusMarron
PORT(
rst,e,clk,ud : IN STD_LOGIC;
carry : INOUT STD_LOGIC;
qi : INOUT INTEGER RANGE 0 TO 2
);
END COMPONENT;
COMPONENT ContadorElectMarron
PORT(
rst,e,clk,ud : IN STD_LOGIC;
carry : INOUT STD_LOGIC;
qi : INOUT INTEGER RANGE 0 TO 1
);
END COMPONENT;
128
Declaramos a continuación las señales auxiliares que hemos empleado para
guardar los valores obtenidos de las ecuaciones lógicas.
129
begin
5.2. Pruebas
Como puede apreciarse en la figura 101, en el intervalo de tiempo [T0, T1] la señal
rst está a ‘0’, si estuviera a ‘1’ el contador se reiniciaría y cargaría el estado ‘0’. La señal e
(enable) está a ‘1’, lo que nos indica que el contador está habilitado. En caso de que
estuviera a ‘0’ el contador estaría deshabilitado. La señal clk hasta los 30 ns está a ‘0’ y,
130
̅̅̅̅̅̅̅̅) está a ‘1’,
cuando llega a los 30 ns se activa en flanco de subida. La señal ud (Up/𝐷𝑜𝑤𝑛
lo que nos indica que el contador está en modo ascendente. La salida carry está a ‘0’
siempre que el estado sea distinto de ‘1001’, y cuando llegue al estado ‘1001’ se pondrá a
‘1’. La señal de salida qi está en el estado ‘0’ hasta los 30 ns, momento en el que la señal
clk se pone a ‘1’. Acto seguido qi pasa al estado siguiente que es ‘1’. En el intervalo [T1,
T2] la señal rst está a ‘0’, la señal e está a ‘1’, habilitando el contador, además la señal
clk está a ‘0’ desde los 40 ns hasta los 50 ns. Después, desde los 50 ns hasta los 60 ns
pasa a estar a ‘1’. La señal ud sigue valiendo ‘1’ y la señal carry sigue estando a ‘0’, ya
que no hemos llegado al estado ‘1001’. Por último, la salida qi está en el estado ‘1’ hasta
los 50 ns, y cuando la señal clk está a ‘1’, que es a los 50 ns, qi pasa al estado siguiente
que es ‘10’. Si seguimos analizando la imagen, vemos que la señal qi sigue aumentando
de estado cada vez que se da un impulso de reloj.
Como se observa en la figura 102, en el intervalo de tiempo [T2, T3] la señal rst
está a ‘0’, si estuviera a ‘1’ el contador se reiniciaría y cargaría el estado ‘0’. La señal e
(enable) está a ‘1’, lo que nos indica que el contador está habilitado. En caso de que
estuviera a ‘0’ el contador estaría deshabilitado. La señal clk hasta los 50 ns está a ‘0’ y,
̅̅̅̅̅̅̅̅) está a ‘0’,
cuando llega a los 50 ns se activa en flanco de subida. La señal ud (Up/𝐷𝑜𝑤𝑛
lo que nos indica que el contador está en modo descendente. La salida carry está a ‘1’
hasta los 50 ns, ya que el estado es ‘1001’, pero después de los 50 ns la señal carry se
pone a ‘0’ ya que no estamos en el estado ‘1001’. La señal de salida qi está en el estado
‘1001’ hasta los 50 ns, momento en el que la señal clk se pone a ‘1’. Acto seguido qi pasa
al estado siguiente que es ‘1000’. En el intervalo [T3, T4] la señal rst está a ‘0’, la señal e
está a ‘1’, habilitando el contador, además la señal clk está a ‘0’ desde los 60 ns hasta los
131
70 ns. Después, desde los 70 ns hasta los 80 ns pasa a estar a ‘1’. La señal ud sigue
valiendo ‘0’ y la señal carry sigue estando a ‘0’, ya que no estamos en el estado ‘1001’.
Por último, la salida qi está en el estado ‘1000’ hasta los 70 ns, y cuando la señal clk está
a ‘1’, que es a los 70 ns, qi pasa al estado siguiente que es ‘111’. Si seguimos analizando
la imagen, vemos que la señal qi sigue disminuyendo de estado cada vez que se da un
impulso de reloj.
Tal como puede apreciarse en la figura 103, los resultados de las salidas se
corresponden con los valores de la tabla 17, mostrada en el Capítulo 4, Apartado 2.1. En
el intervalo [T0, T1], la señal clk está a ‘0’ hasta la mitad del intervalo, cuando llega a la
mitad del intervalo se pone a ‘1’. La señal rst está a ‘0’, si estuviera a ‘1’ el contador se
reiniciaría y cargaría el estado ‘0’ para cada contador. Las señales ep y sp, están a ‘0’ y
‘1’ respectivamente, estas señales sirven para indicar si es up o down los contadores, en
este caso están en modo ascendente. La señal ledr (led parking ocupado) está a ‘0’ ya
que no está completo el parking. El countud está en el estado ‘1’ hasta la mitad del
intervalo, cuando la señal clk se pone a ‘1’ cambia de estado a ‘10’. El countdec está en
el estado ‘10’ y el countcent está en el estado ‘1’. La señal be (barrera de entrada) está a
‘0’ ya que la señal de entrada ep está a ‘0’. La señal bs (barrera de salida) está a ‘1’ ya
que la señal de entrada sp está a ‘1’. La señal sev (semáforo de entrada verde) está a ‘0’
ya que la señal de entrada ep está a ‘0’. La señal ser (semáforo de entrada rojo) está a ‘1’
ya que la señal de entrada ep está a ‘0’. La señal ssv (semáforo de salida verde) está a
‘1’ ya que la señal de entrada sp está a ‘1’, eso quiere decir que están saliendo coches.
La señal ssr (semáforo de salida rojo) está a ‘0’ ya que la señal de entrada sp está a ‘1’.
Y por último, la salida ledv (led parking libre) está a ‘1’ ya que todavía pueden entrar
132
coches. En el intervalo [T1, T2], la señal clk está a ‘0’ hasta la mitad del intervalo, cuando
llega a la mitad del intervalo se pone a ‘1’. La señal rst está a ‘0’, si estuviera a ‘1’ el
contador se reiniciaría y cargaría el estado ‘0’ para cada contador. Las señales ep y sp,
están a ‘0’ y ‘1’ respectivamente, estas señales sirven para indicar si es up o down los
contadores, en este caso están en modo ascendente. La señal ledr (led parking ocupado)
está a ‘0’ ya que no está completo el parking. El countud está en el estado ‘10’ hasta la
mitad del intervalo, cuando la señal clk se pone a ‘1’ cambia de estado a ‘11’. El
countdec está en el estado ‘10’ y el countcent está en el estado ‘1’. La señal be (barrera
de entrada) está a ‘0’ ya que la señal de entrada ep está a ‘0’. La señal bs (barrera de
salida) está a ‘1’ ya que la señal de entrada sp está a ‘1’. La señal sev (semáforo de
entrada verde) está a ‘0’ ya que la señal de entrada ep está a ‘0’. La señal ser (semáforo
de entrada rojo) está a ‘1’ ya que la señal de entrada ep está a ‘0’. La señal ssv
(semáforo de salida verde) está a ‘1’ ya que la señal de entrada sp está a ‘1’, eso quiere
decir que están saliendo coches. La señal ssr (semáforo de salida rojo) está a ‘0’ ya que
la señal de entrada sp está a ‘1’. Y, por último, la salida ledv (led parking libre) está a ‘1’
ya que todavía pueden entrar coches. Si seguimos analizando la imagen, vemos que
countud, sigue aumentando de estado cada vez que se da un impulso de reloj, y cuando
llegue al estado ‘1001’, dará un impulso al countdec para que avance de estado, y
llegaría a un estado máximo ‘1001’, ya que si nos fijamos tenemos en el estado ‘1’ el
countcent y nuestra capacidad máxima es de 199 plazas.
133
En la figura 104 se constata que los resultados de las salidas se corresponden
también con los valores de la tabla de verdad mencionada. En el intervalo [T0, T1], la
señal clk está a ‘0’ hasta la mitad del intervalo, cuando llega a la mitad del intervalo se
pone a ‘1’. La señal rst está a ‘0’, si estuviera a ‘1’ el contador se reiniciaría y cargaría el
estado ‘0’ para cada contador. Las señales ep y sp, están a ‘1’ y ‘0’ respectivamente,
estas señales sirven para indicar si es up o down los contadores, en este caso están en
modo descendente. La señal ledr (led parking ocupado) está a ‘0’ ya que no está
completo el parking. El countud está en el estado ‘101’ hasta la mitad del intervalo,
cuando la señal clk se pone a ‘1’ cambia de estado a ‘100’. El countdec está en el estado
‘10’ y el countcent está en el estado ‘1’. La señal be (barrera de entrada) está a ‘1’ ya
que la señal de entrada ep está a ‘1’. La señal bs (barrera de salida) está a ‘0’ ya que la
señal de entrada sp está a ‘0’. La señal sev (semáforo de entrada verde) está a ‘1’ ya que
la señal de entrada ep está a ‘0’, eso quiere decir que están entrando coches. La señal
ser (semáforo de entrada rojo) está a ‘0’ ya que la señal de entrada ep está a ‘1’. La señal
ssv (semáforo de salida verde) está a ‘0’ ya que la señal de entrada sp está a ‘0’. La
señal ssr (semáforo de salida rojo) está a ‘1’ ya que la señal de entrada sp está a ‘0’. Y
por último, la salida ledv (led parking libre) está a ‘1’ ya que todavía pueden entrar
coches. En el intervalo [T1, T2], la señal clk está a ‘0’ hasta la mitad del intervalo, cuando
llega a la mitad del intervalo se pone a ‘1’. La señal rst está a ‘0’, si estuviera a ‘1’ el
contador se reiniciaría y cargaría el estado ‘0’ para cada contador. Las señales ep y sp,
están a ‘1’ y ‘0’ respectivamente, estas señales sirven para indicar si es up o down los
contadores, en este caso están en modo descendente. La señal ledr (led parking
ocupado) está a ‘0’ ya que no está completo el parking. El countud está en el estado
‘100’ hasta la mitad del intervalo, cuando la señal clk se pone a ‘1’ cambia de estado a
‘11’. El countdec está en el estado ‘10’ y el countcent está en el estado ‘1’. La señal be
(barrera de entrada) está a ‘1’ ya que la señal de entrada ep está a ‘1’. La señal bs
(barrera de salida) está a ‘0’ ya que la señal de entrada sp está a ‘0’. La señal sev
(semáforo de entrada verde) está a ‘1’ ya que la señal de entrada ep está a ‘0’, eso quiere
decir que están entrando coches. La señal ser (semáforo de entrada rojo) está a ‘0’ ya
que la señal de entrada ep está a ‘1’. La señal ssv (semáforo de salida verde) está a ‘0’
ya que la señal de entrada sp está a ‘0’. La señal ssr (semáforo de salida rojo) está a ‘1’
ya que la señal de entrada sp está a ‘0’. Y por último, la salida ledv (led parking libre) está
a ‘1’ ya que todavía pueden entrar coches. Si seguimos analizando la imagen, vemos que
countud, sigue disminuyendo de estado cada vez que se da un impulso de reloj, y
cuando llegue al estado ‘1001’, dará un impulso al countdec para que disminuya de
estado y así sucesivamente.
134
Figura 104. Entrada de vehículos del Parking.
En las dos figuras anteriores comprobamos que se cumple la tabla de verdad. Por
tanto, podemos asegurar al 100% que el código implementado se ejecuta correctamente,
tal y como hemos definido en las especificaciones.
Podemos verificar en la figura 105 que en el intervalo de tiempo [T0, T1] la señal
rst está a ‘0’, si estuviera a ‘1’ el contador se reiniciaría y cargaría el estado ‘0000’. La
señal e (enable) está a ‘0’ hasta los 13 ns aproximadamente, después se pone a ‘1’ lo que
nos indica que el contador está habilitado. La señal clk desde los 10 ns está a ‘1’ y,
̅̅̅̅̅̅̅̅) está a ‘0’ hasta los 13 ns
cuando llega a los 20 ns se pone a ‘0’. La señal ud (Up/𝐷𝑜𝑤𝑛
aproximadamente, después se pone a ‘1’, lo que nos indica que el contador está en modo
ascendente. La salida carry está a ‘0’ siempre que el estado sea distinto de ‘1001, y
cuando llegue al estado ‘1001 se pondrá a ‘1’. La señal de salida qi está en el estado
‘0000’. En el intervalo [T1, T2] la señal rst está a ‘0’, la señal e está a ‘1’, habilitando el
contador, además la señal clk está a ‘1’ desde los 30 ns hasta los 40 ns. Después, desde
los 40 ns hasta los 50 ns pasa a estar a ‘0’. La señal ud sigue valiendo ‘1’ y la señal carry
sigue estando a ‘0’, ya que no hemos llegado al estado ‘10110’. Por último, la salida qi
135
está en el estado ‘0000’. Como observamos, la señal qi sigue estando en el estado ‘0000’
hasta aproximadamente los 118 ns, y acto seguido pasa al estado ‘0001’.
La diferencia con la figura 101 es que, en este caso, hemos ejecutado el código de
prueba del contador de plazas normales de forma temporal. El retardo que hay en la
salida qi desde el primer flanco de subida del clk es de 108,721 ns, eso se debe a los
retardos que hay en los bloques que utilizamos y sus interconexionados. Se pueden
observar en la figura 105 las “marcas” en las cuales están relacionadas, es decir, ese
flanco de subida a los 10 ns está relacionado con el aumento del estado a ‘0001’. Aún
habiendo retardos, se constata que el contador sigue cumpliendo la misma función
correctamente.
Como se aprecia en la figura 106, en el intervalo de tiempo [T0, T1] la señal rst
está a ‘0’, si estuviera a ‘1’ el contador se reiniciaría y cargaría el estado ‘0000’. La señal e
(enable) está a ‘0’ hasta los 13 ns aproximadamente, después se pone a ‘1’ lo que nos
indica que el contador está habilitado. La señal clk desde los 10 ns está a ‘1’ y, cuando
̅̅̅̅̅̅̅̅) está a ‘0’, lo que nos indica que el
llega a los 20 ns se pone a ‘0’. La señal ud (Up/𝐷𝑜𝑤𝑛
contador está en modo descendente. La salida carry está a ‘0’ siempre que el estado sea
distinto de ‘1001’, y cuando llegue al estado ‘1001’ se pondrá a ‘1’. La señal de salida qi
está en el estado ‘0000’. En el intervalo [T1, T2] la señal rst está a ‘0’, la señal e está a ‘1’,
habilitando el contador, además la señal clk está a ‘1’ desde los 30 ns hasta los 40 ns.
Después, desde los 40 ns hasta los 50 ns pasa a estar a ‘0’. La señal ud sigue valiendo
‘0’ y la señal carry sigue estando a ‘0’, ya que no hemos llegado al estado ‘1001’. Como
puede apreciarse, la señal de salida qi sigue estando en el estado ‘0000’ hasta
aproximadamente los 118 ns, y acto seguido pasa al estado ‘1001’.
136
Figura 106. Contador descendente en simulación temporal.
La diferencia con la figura 102 es que, en este caso, hemos ejecutado el código de
prueba del contador de plazas normales de forma temporal. El retardo que hay en la
salida qi es de 108,721 ns, eso se debe a los retardos que hay en los bloques que
utilizamos y sus interconexionados. Pueden observarse en la figura 106 las “marcas” en
las cuales están relacionadas, es decir, ese flanco de subida a los 10 ns está relacionado
con la disminución del estado a ‘1001’. Aún habiendo retardos, se constata que el
contador sigue cumpliendo la misma función correctamente.
137
hasta la mitad del intervalo, cuando llega a la mitad del intervalo se pone a ‘0’. La señal
rst está a ‘0’, si estuviera a ‘1’ se reiniciaría y cargaría el estado ‘0’ para cada contador.
Las señales ep y sp, están a ‘0’ y ‘1’ respectivamente, estas señales sirven para indicar si
es up o down los contadores, en este caso están los contadores en modo ascendente. La
señal ledr (led parking ocupado) está a ‘0’ ya que no está completo el parking. El
countud está en el estado ‘0000’ hasta la mitad del intervalo, y después está en el estado
‘0001’. El countdec está en el estado ‘0000’ y el countcent está en el estado ‘0’. La señal
be (barrera de entrada) está a ‘0’ ya que la señal de entrada ep está a ‘0’. La señal bs
(barrera de salida) está a ‘1’ ya que la señal de entrada sp está a ‘1’. La señal sev
(semáforo de entrada verde) está a ‘0’ ya que la señal de entrada ep está a ‘0’. La señal
ser (semáforo de entrada rojo) está a ‘1’ ya que la señal de entrada ep está a ‘0’. La señal
ssv (semáforo de salida verde) está a ‘1’ ya que la señal de entrada sp está a ‘1’, eso
quiere decir que están saliendo coches. La señal ssr (semáforo de salida rojo) está a ‘0’
ya que la señal de entrada sp está a ‘1’. Y por último, la salida ledv (led parking libre) está
a ‘1’ ya que todavía pueden entrar coches.
La diferencia con la figura 103 es que, en este caso, hemos ejecutado el código de
prueba del panel exterior de forma temporal. El retardo que hay desde el primer flanco de
subida del clk para pasar de estado en el countud es de 108,874 ns, eso se debe a los
retardos que hay en los bloques que utilizamos y sus interconexionados. Se pueden
observar en la figura 107 las “marcas” en las cuales están relacionadas, es decir, ese
flanco de subida a los 10 ns está relacionado con el aumento del estado a ‘0001’ para el
138
contador de unidades. Aún habiendo retardos, se constata que el contador sigue
cumpliendo la misma función correctamente.
139
está a ‘1’. La señal bs (barrera de salida) está a ‘1’ ya que la señal de entrada sp está a
‘0’. La señal sev (semáforo de entrada verde) está a ‘1’ casi todo el intervalo, ya que la
señal de entrada ep está a ‘1’. La señal ser (semáforo de entrada rojo) está a ‘0’ ya que la
señal de entrada ep está a ‘1’. La señal ssv (semáforo de salida verde) está a ‘0’ ya que
la señal de entrada sp está a ‘0’. La señal ssr (semáforo de salida rojo) está a ‘1’ ya que
la señal de entrada sp está a ‘0’. Y por último, la salida ledv (led parking libre) está a ‘1’
ya que todavía pueden entrar coches.
La diferencia con la figura 104 es que, en este caso, hemos ejecutado el código de
prueba del panel exterior de forma temporal. El retardo que hay desde el primer flanco de
subida del clk para pasar de estado en el countud es de 108,874 ns, eso se debe a los
retardos que hay en los bloques que utilizamos y sus interconexionados. Se pueden
observar en la figura 108 las “marcas” en las cuales están relacionadas, es decir, ese
flanco de subida a los 70 ns está relacionado con la disminución del estado a ‘0010’ para
el contador de unidades. Aún habiendo retardos, se constata que el contador sigue
cumpliendo la misma función correctamente.
140
5.2.3. Panel interior. Verificación funcional
Como se desprende de la figura 109, en el intervalo de tiempo [T0, T1] la señal rst
está a ‘0’, si estuviera a ‘1’ el contador se reiniciaría y cargaría el estado ‘0000’. La señal e
(enable) está a ‘1’, lo que nos indica que el contador está habilitado. En caso de que
estuviera a ‘0’ el contador estaría deshabilitado. La señal clk hasta los 330 ns está a ‘0’ y,
̅̅̅̅̅̅̅̅) está a ‘1’,
cuando llega a los 330 ns se activa en flanco de subida. La señal ud (Up/𝐷𝑜𝑤𝑛
lo que nos indica que el contador está en modo ascendente. La salida carry está a ‘0’
siempre que el estado sea distinto de ‘10110’, y cuando llegue al estado ‘10110’ se
pondrá a ‘1’. La señal de salida qi está en el estado ‘1111’ hasta los 330 ns, momento en
el que la señal clk se pone a ‘1’. Acto seguido qi pasa al estado siguiente que es ‘10000’.
En el intervalo [T1, T2] la señal rst está a ‘0’, la señal e está a ‘1’, habilitando el contador,
además la señal clk está a ‘0’ desde los 340 ns hasta los 350 ns. Después, desde los 350
ns hasta los 360 ns pasa a estar a ‘1’. La señal ud sigue valiendo ‘1’ y la señal carry
sigue estando a ‘0’, ya que no hemos llegado al estado ‘10110’. Por último, la salida qi
está en el estado ‘10000’ hasta los 350 ns, y cuando la señal clk está a ‘1’, que es a los
350 ns, qi pasa al estado siguiente que es ‘10001’. Si seguimos analizando la imagen,
vemos que la señal qi sigue aumentando de estado cada vez que se da un impulso de
reloj.
141
5.2.3.2. Prueba contador plazas normales para ud = 0 (Modo descendente)
Como puede verificarse en la figura 111, en el intervalo de tiempo [T0, T1] la señal
rst está a ‘0’, si estuviera a ‘1’ el contador se reiniciaría y cargaría el estado ‘0’. La señal e
(enable) está a ‘1’, lo que nos indica que el contador está habilitado. En caso de que
estuviera a ‘0’ el contador estaría deshabilitado. La señal clk hasta los 30 ns está a ‘0’ y,
142
̅̅̅̅̅̅̅̅) está a ‘1’,
cuando llega a los 30 ns se activa en flanco de subida. La señal ud (Up/𝐷𝑜𝑤𝑛
lo que nos indica que el contador está en modo ascendente. La salida carry está a ‘0’
siempre que el estado sea distinto de ‘10’, y cuando llegue al estado ‘10’ se pondrá a ‘1’.
La señal de salida qi está en el estado ‘0’ hasta los 30 ns, momento en el que la señal clk
se pone a ‘1’. Acto seguido qi pasa al estado siguiente que es ‘1’. En el intervalo [T1, T2]
la señal rst está a ‘0’, la señal e está a ‘1’, habilitando el contador, además la señal clk
está a ‘0’ desde los 40 ns hasta los 50 ns. Después, desde los 50 ns hasta los 60 ns pasa
a estar a ‘1’. La señal ud sigue valiendo ‘1’ y la señal carry está a ‘0’ hasta los 50 ns, pero
de 50 ns a 60 ns se pone a ‘1’ ya que se alcanza el estado en qi de ‘10’. Por último, la
salida qi está en el estado ‘1’ hasta los 50 ns, y cuando la señal clk está a ‘1’, que es a
los 50 ns, qi pasa al estado siguiente que es ‘10’.
Como se observa en la figura 112, en el intervalo de tiempo [T2, T3] la señal rst
está a ‘0’, si estuviera a ‘1’ el contador se reiniciaría y cargaría el estado ‘0’. La señal e
(enable) está a ‘1’, lo que nos indica que el contador está habilitado. En caso de que
estuviera a ‘0’ el contador estaría deshabilitado. La señal clk hasta los 70 ns está a ‘0’ y,
̅̅̅̅̅̅̅̅) está
cuando llega a los 70 ns el clk se activa en flanco de subida. La señal ud (Up/𝐷𝑜𝑤𝑛
a ‘1’, lo que nos indica que el contador está en modo ascendente. La salida carry está a
‘1’ ya que el estado en el que estamos es el ‘10’. En el intervalo [T3, T4] la señal rst está
a ‘0’, la señal e está a ‘1’, habilitando el contador, además la señal clk está a ‘0’ desde los
80 ns hasta los 90 ns. Después, desde los 90 ns hasta los 100 ns pasa a estar a ‘1’. La
señal ud vale ‘0’, lo que quiere decir que el contador es descendente y la señal carry está
a ‘1’ hasta los 90 ns, pero luego de los 90 ns a 100 ns pasa a estar a ‘0’ ya que no esté en
el estado ‘10’ el contador. Por último, la salida qi está en el estado ‘10’ hasta los 90 ns, y
143
cuando la señal clk está a ‘1’, que es a los 90 ns, qi pasa al estado siguiente que es ‘1’. Al
principio de la captura el contador es ascendente, y a partir de los 80 ns el contador pasa
a ser descendente.
144
Figura 113. Contador ascendente para vehículos eléctricos.
145
Figura 114. Contador descendente para vehículos eléctricos.
146
contador. Las señales ledvn y ledrn, están a ‘1 y ‘0’ respectivamente, estas señales
sirven para indicar si es up o down el countnormal, en este caso está el contador en
modo ascendente. Las señales ledvm y ledrm, están a ‘1’ y ‘0’ respectivamente, estas
señales sirven para indicar si es up o down el countminus, en este caso está el contador
en modo ascendente. Las señales ledve y ledre, están a ‘1’ y ‘0’ respectivamente, estas
señales sirven para indicar si es up o down el countnelect, en este caso está el contador
en modo ascendente. Las señales ledazul y ledamarillo están a ‘1’ ya que están
asociadas a las salidas ledazuls y ledamarillos, esto sirve para poner un led en el panel
indicando el tipo de plaza que es. La señal ledocupadon está a ‘0’ puesto que todavía
pueden ocupar más vehículos las plazas normales. Sin embargo, las señales
ledocupadom y ledocupadoe, están a ‘1’ debido a que están ocupadas las plazas de
minusválidos y de vehículos eléctricos. La señal countnormal está en el estado ‘11’ hasta
la mitad del intervalo, y cuando el clk en la mitad se pone a ‘1’ pasa al estado ‘100’. El
countminus está en el estado ‘10’ y el countelect está en el estado ‘1’. La señal
ledlibren está a ‘1’ ya que todavía pueden aparcar más coches en las plazas normales.
Las señales ledlibrem y ledlibree están a ‘0’ porque está ocupadas todas las plazas de
minusválidos y vehículos eléctricos. Si seguimos analizando la imagen, vemos que
countud, sigue aumentando de estado cada vez que se da un impulso de reloj, ya que es
el contador en el cual todavía pueden aparcar más coches. Cuando llegue al estado
‘10110’ las señales ledocupadon y ledlibren se pondrán a ‘1’ y ‘0’ respectivamente.
147
En la figura 116 puede verificarse que los resultados de las salidas se
corresponden con los valores de la tabla 22 (véase Capítulo 4, Apartado 2.2). En el
intervalo [T1, T2], la señal clk está a ‘0’ hasta la mitad del intervalo, cuando llega a la
mitad del intervalo se pone a ‘1’. La señal rst está a ‘0’, si estuviera a ‘1’ se reiniciaría y
cargaría el estado ‘0’ para cada contador. Las señales ledvn y ledrn, están a ‘1 y ‘0’
respectivamente, estas señales sirven para indicar si es up o down el countnormal, en
este caso está el contador en modo ascendente hasta la mitad del intervalo. En la mitad
del intervalo cuando hay un impulso de reloj, ledvn y ledrn, están a ‘0 y ‘1’
respectivamente, lo que quiere decir que le countnormal, está en modo descendente.
Las señales ledvm y ledrm, están a ‘1 y ‘0’ respectivamente, estas señales sirven para
indicar si es up o down el countnormal, en este caso está el contador en modo
ascendente hasta la mitad del intervalo. En la mitad del intervalo ledvm y ledrm, están a
‘0 y ‘1’ respectivamente, lo que quiere decir que le countminus, está en modo
descendente. Las señales ledve y ledre, están a ‘1 y ‘0’ respectivamente, estas señales
sirven para indicar si es up o down el countelect, en este caso está el contador en modo
ascendente hasta la mitad del intervalo. En la mitad del intervalo ledve y ledre, están a ‘0
y ‘1’ respectivamente, lo que quiere decir que le countelect, está en modo descendente.
Las señales ledazul y ledamarillo están a ‘1’ ya que están asociadas a las salidas
ledazuls y ledamarillos, esto sirve para poner un led en el panel indicando el tipo de
plaza que es. La señal ledocupadon está a ‘0’ puesto que todavía pueden ocupar más
vehículos las plazas normales. Las señales ledocupadom y ledocupadoe que están a ‘1’
hasta la mitad del intervalo, cuando se registra un pulso de reloj, disminuyen countminus
y countelect, lo que quiere decir que hay plazas libres para esos tipos de vehículos y las
señales anteriores mencionadas se ponen a ‘0’. El countnormal está en el estado ‘111’
hasta la mitad del intervalo, y cuando el clk en la mitad se pone a ‘1’ pasa al estado ‘110’.
El countminus está en el estado ‘10’ hasta la mitad del intervalo, y cuando el clk en la
mitad se pone a ‘1’ pasa al estado ‘1’. El countelect está en el estado ‘1’ hasta la mitad
del intervalo, y cuando el clk en la mitad se pone a ‘1’ pasa al estado ‘0’. La señal
ledlibren está a ‘1’ ya que todavía pueden aparcar mas coches en las plazas normales.
Las señales ledlibrem y ledlibree están a ‘0’ hasta la mitad del intervalo, ya que están
todas las plazas ocupadas. Pero cuando se produce el pulso de reloj, y disminuyen los
contadores, las señales ledlibrem y ledlibree se ponen a ‘1’, queriendo decir que hay
plazas libres de minusválidos y de vehículos eléctricos. En el intervalo [T2, T3] la señal
clk está a ‘0’ hasta la mitad del intervalo, cuando llega a la mitad del intervalo se pone a
‘1’. La señal rst está a ‘0’, si estuviera a ‘1’ se reiniciaría y cargaría el estado ‘0’ para cada
contador. Las señales ledvn y ledrn, están a ‘0 y ‘1’ respectivamente, estas señales
148
sirven para indicar si es up o down el countnormal, en este caso está el contador en
modo descendente. Las señales ledvm y ledrm, están a ‘0’ y ‘1’ respectivamente, estas
señales sirven para indicar si es up o down el countminus, en este caso está el contador
en modo descendente. Las señales ledve y ledre, están a ‘0’ y ‘1’ respectivamente, estas
señales sirven para indicar si es up o down el countnelect, en este caso está el contador
en modo descendente. Las señales ledazul y ledamarillo están a ‘1’ ya que están
asociadas a las salidas ledazuls y ledamarillos, esto sirve para poner un led en el panel
indicando el tipo de plaza que es. La señal ledocupadon está a ‘0’ puesto que todavía
pueden ocupar más vehículos las plazas normales. Las señales ledocupadom y
ledocupadoe, están a ‘0’ puesto que todavía pueden ocupar más vehículos las plazas de
minusválidos y plazas de vehículos eléctricos. La señal countnormal está en el estado
‘110’ hasta la mitad del intervalo, y cuando el clk en la mitad se pone a ‘1’ pasa al estado
‘101’. El countminus está en el estado ‘1’ hasta la mitad del intervalo, y cuando el clk en
la mitad se pone a ‘1’ pasa al estado ‘0’. El countelect está en el estado ‘0’ en todo el
intervalo. Las señales ledlibren, ledlibrem y ledlibree están a ‘1’ porque hay plazas
libres. Si seguimos analizando la imagen, vemos que countud, sigue disminuyendo de
estado cada vez que se da un impulso de reloj, sin embargo, el countminus y countelect
ya no pueden disminuir más, porque es el último estado de cada contador.
149
Tal como puede comprobarse en las dos figuras anteriores, la tabla de verdad se
cumple y, consiguientemente, podemos asegurar al 100% que el código implementado se
ejecuta correctamente, tal y como hemos definido en las especificaciones.
Como puede apreciarse en la figura 117, en el intervalo de tiempo [T0, T1] la señal
rst está a ‘0’, si estuviera a ‘1’ el contador se reiniciaría y cargaría el estado ‘00000’. La
señal e (enable) está a ‘0’ hasta los 13 ns aproximadamente, después se pone a ‘1’
habilitando el contador. La señal clk desde los 10 ns está a ‘1’ y, cuando llega a los 20 ns
̅̅̅̅̅̅̅̅) está a ‘0’ hasta los 13 ns aproximadamente,
se pone a ‘0’. La señal ud (Up/𝐷𝑜𝑤𝑛
después se pone a ‘1’, lo que nos indica que el contador está en modo ascendente. La
salida carry está a ‘0’ siempre que el estado sea distinto de ‘10110’, y cuando llegue al
estado ‘10110’ se pondrá a ‘1’. La señal de salida qi está en el estado ‘00000’. En el
intervalo [T1, T2] la señal rst está a ‘0’, la señal e está a ‘1’, habilitando el contador,
además la señal clk está a ‘1’ desde los 30 ns hasta los 40 ns. Después, desde los 40 ns
hasta los 50 ns pasa a estar a ‘0’. La señal ud sigue valiendo ‘1’ y la señal carry sigue
estando a ‘0’, ya que no hemos llegado al estado ‘10110’. Por último, la salida qi está en
el estado ‘00000’. Como puede observarse, la señal qi sigue estando en el estado ‘00000’
hasta aproximadamente los 118 ns, y acto seguido pasa al estado ‘0001’.
La diferencia con la figura 109 es que, en este caso, hemos ejecutado el código de
prueba del contador de plazas normales de forma temporal. El retardo que hay en la
salida qi desde el primer flanco de subida del clk es de 108,716 ns, eso se debe a los
retardos que hay en los bloques que utilizamos y sus interconexionados. Se pueden
150
observar en la figura 117 las “marcas” en las cuales están relacionadas, es decir, ese
flanco de subida a los 10 ns está relacionado con el aumento del estado a ‘00001’. Aún
habiendo retardos, se constata que el contador sigue cumpliendo la misma función
correctamente.
Como se desprende de la figura 118, en el intervalo de tiempo [T0, T1] la señal rst
está a ‘0’, si estuviera a ‘1’ el contador se reiniciaría y cargaría el estado ‘00000’. La señal
e (enable) está a ‘1’, lo que nos indica que el contador está habilitado. En caso de que
estuviera a ‘0’ el contador estaría deshabilitado. La señal clk desde los 350 ns está a ‘1’ y,
̅̅̅̅̅̅̅̅) está a ‘1’ hasta los 360 ns
cuando llega a los 360 ns se pone a ‘0’. La señal ud (Up/𝐷𝑜𝑤𝑛
aproximadamente, después se pone a ‘0’, lo que nos indica que el contador está en modo
descendente. La salida carry está a ‘0’ siempre que el estado sea distinto de ‘10110’, y
cuando llegue al estado ‘10110’ se pondrá a ‘1’. La señal de salida qi está en el estado
‘01100’ hasta los 360 ns, después se pone en el estado ‘01101’. Como vemos ha
aumentado el número de estado en vez de disminuir, eso se debe al retardo que tenemos
debido a la simulación temporal. En el intervalo [T1, T2] la señal rst está a ‘0’, la señal e
está a ‘1’, habilitando el contador, además la señal clk está a ‘1’ desde los 370 ns hasta
los 380 ns. Después, desde los 380 ns hasta los 390 ns pasa a estar a ‘0’. La señal ud
sigue valiendo ‘0’ y la señal carry sigue estando a ‘0’, ya que no hemos llegado al estado
‘10110’. Por último, la señal de salida qi está en el estado ‘01101’ hasta los 380 ns, y
después se pone en el estado ‘01100’. Si nos fijamos en la imagen, observaremos que el
contador va disminuyendo de estados.
151
La diferencia con la figura 110 es que, en este caso, hemos ejecutado el código de
prueba del contador de plazas normales de forma temporal. El retardo que hay en la
salida qi es de 108,716 ns, eso se debe a los retardos que hay en los bloques que
utilizamos y sus interconexionados. Se pueden observar en la figura 118 las “marcas” en
las cuales están relacionadas, es decir, ese flanco de subida a los 350 ns está
relacionado con la disminución del estado a ‘01000’. Aún habiendo retardos, se constata
que el contador sigue cumpliendo la misma función correctamente.
Como constatamos en la figura 119, en el intervalo de tiempo [T0, T1] la señal rst
está a ‘0’, si estuviera a ‘1’ el contador se reiniciaría y cargaría el estado ‘00’. La señal e
(enable) está a ‘0’ hasta los 13 ns aproximadamente, después se pone a ‘1’ habilitando el
contador. La señal clk desde los 10 ns está a ‘1’ y, cuando llega a los 20 ns se pone a ‘0’.
̅̅̅̅̅̅̅̅) está a ‘0’ hasta los 13 ns aproximadamente, después se pone a
La señal ud (Up/𝐷𝑜𝑤𝑛
‘1’, lo que nos indica que el contador está en modo ascendente. La salida carry está a ‘0’
siempre que el estado sea distinto de ‘10’, y cuando llegue al estado ‘10’ se pondrá a ‘1’.
La señal de salida qi está en el estado ‘00’. En el intervalo [T1, T2] la señal rst está a ‘0’,
la señal e está a ‘1’, habilitando el contador, además la señal clk está a ‘1’ desde los 30
ns hasta los 40 ns. Después, desde los 40 ns hasta los 50 ns pasa a estar a ‘0’. La señal
ud sigue valiendo ‘1’ y la señal carry sigue estando a ‘0’, ya que no hemos llegado al
estado ‘10’. Por último, la salida qi está en el estado ‘00’. Se constata que la señal qi
sigue estando en el estado ‘00’ hasta aproximadamente los 118 ns, y acto seguido pasa al
estado ‘01’.
152
La diferencia con la figura 111 es que, en este caso, hemos ejecutado el código de
prueba del contador de plazas de minusválidos de forma temporal. El retardo que hay en
la salida qi desde el primer flanco de subida del clk es de 108,493 ns, eso se debe a los
retardos que hay en los bloques que utilizamos y sus interconexionados. Se pueden
observar en la figura 119 las “marcas” en las cuales están relacionadas, es decir, ese
flanco de subida a los 10 ns está relacionado con el aumento del estado a ‘01’. Aún
habiendo retardos, se constata que el contador sigue cumpliendo la misma función
correctamente.
Como se desprende de la figura 120, en el intervalo de tiempo [T4, T5] la señal rst
está a ‘0’, si estuviera a ‘1’ el contador se reiniciaría y cargaría el estado ‘00’. La señal e
(enable) está a ‘1’, lo que nos indica que el contador está habilitado. En caso de que
estuviera a ‘0’ el contador estaría deshabilitado. La señal clk desde los 130 ns está a ‘1’ y,
̅̅̅̅̅̅̅̅) está a ‘1’ hasta los 140 ns
cuando llega a los 140 ns se pone a ‘0’. La señal ud (Up/𝐷𝑜𝑤𝑛
aproximadamente, después se pone a ‘0’, lo que nos indica que el contador está en modo
descendente. La salida carry está a ‘0’ hasta los 140 ns aproximadamente, después se
pone a ‘1’ porque el estado qi es ‘10’. La señal de salida qi está en el estado ‘01’ desde
los 130 ns hasta los 140 ns, después se pone en el estado ‘10’. Como vemos ha
aumentado el número de estado en vez de disminuir, eso se debe al retardo que tenemos
debido a la simulación temporal. En el intervalo [T5, T6] la señal rst está a ‘0’, la señal e
está a ‘1’, habilitando el contador, además la señal clk está a ‘1’ desde los 150 ns hasta
los 160 ns. Después, desde los 160 ns hasta los 170 ns pasa a estar a ‘0’. La señal ud
sigue valiendo ‘0’ y la señal carry sigue estando a ’1’ hasta los 160 ns ya que estamos en
el estado ‘10’, pero desde los 360 ns pasa a ‘0’, ya que no nos encontramos en el estado
‘10’. Por último, la señal de salida qi está en el estado ‘10’ hasta los 160 ns, y después de
los 160 ns se pone en el estado ‘01’. Como observamos, hicimos una prueba en la que al
principio el contador aumenta y después disminuye.
153
La diferencia con la figura 112 es que, en este caso, hemos ejecutado el código de
prueba del contador de plazas de minusválidos de forma temporal. El retardo que hay en
la salida qi es de 108,493 ns, eso se debe a los retardos que hay en los bloques que
utilizamos y sus interconexionados. Se pueden observar en la figura 120 las “marcas” en
las cuales están relacionadas, es decir, ese flanco de subida a los 70 ns está relacionado
con la disminución del estado a ‘00’. Aún habiendo retardos, se constata que el contador
sigue cumpliendo la misma función correctamente.
Como constatamos en la figura 121, en el intervalo de tiempo [T0, T1] la señal rst
está a ‘0’, si estuviera a ‘1’ el contador se reiniciaría y cargaría el estado ‘0’. La señal e
(enable) está a ‘0’ hasta los 13 ns aproximadamente, después se pone a ‘1’ habilitando el
contador. La señal clk desde los 10 ns está a ‘1’ y, cuando llega a los 20 ns se pone a ‘0’.
̅̅̅̅̅̅̅̅) está a ‘0’ hasta los 13 ns aproximadamente, después se pone a
La señal ud (Up/𝐷𝑜𝑤𝑛
‘1’, lo que nos indica que el contador está en modo ascendente. La salida carry está a ‘0’
siempre que el estado sea distinto de ‘1’, y cuando llegue al estado ‘1’ se pondrá a ‘1’. La
señal de salida qi está en el estado ‘0’. En el intervalo [T1, T2] la señal rst está a ‘0’, la
señal e está a ‘1’, habilitando el contador, además la señal clk está a ‘1’ desde los 30 ns
hasta los 40 ns. Después, desde los 40 ns hasta los 50 ns pasa a estar a ‘0’. La señal ud
sigue valiendo ‘1’ y la señal carry sigue estando a ‘0’, ya que no hemos llegado al estado
‘1’. Por último, la salida qi está en el estado ‘0’. Se constata que la señal qi sigue estando
en el estado ‘0’ hasta aproximadamente los 117,671 ns, y acto seguido pasa al estado ‘1’.
154
La diferencia con la figura 113 es que, en este caso, hemos ejecutado el código de
prueba del contador de plazas de vehículos electricos de forma temporal. El retardo que
hay en la salida qi desde el primer flanco de subida del clk es de 107,671 ns, eso se debe
a los retardos que hay en los bloques que utilizamos y sus interconexionados. Se pueden
observar en la figura 121 las “marcas” en las cuales están relacionadas, es decir, ese
flanco de subida a los 10 ns está relacionado con el aumento del estado a ‘1’. Aún
habiendo retardos, se constata que el contador sigue cumpliendo la misma función
correctamente.
155
La diferencia con la figura 114 es que, en este caso, hemos ejecutado el código de
prueba del contador de plazas de vehículos eléctricos de forma temporal. El retardo que
hay en la salida qi es de 147,671 ns, eso se debe a los retardos que hay en los bloques
que utilizamos y sus interconexionados. Se pueden observar en la figura 122 las “marcas”
en las cuales están relacionadas, es decir, ese flanco de subida a los 30 ns está
relacionado con la disminución del estado a ‘0’. Aún habiendo retardos, se constata que el
contador sigue cumpliendo la misma función correctamente.
156
sirven para indicar si es up o down el countminus, en este caso está el contador en
modo ascendente. Las señales ledve y ledre, están a ‘1 y ‘0’ respectivamente, estas
señales sirven para indicar si es up o down el countnelect, en este caso está el contador
en modo ascendente. Las señales ledazul y ledamarillo están a ‘1’ ya que están
asociadas a las salidas ledazuls y ledamarillos, esto sirve para poner un led en el panel
indicando el tipo de plaza que es. La señal ledocupadon está a ‘0’ puesto que todavía
pueden ocupar más vehículos las plazas normales, la señal ledocupadom está a ‘0’, ya
que todavía hay plazas libres y ledocupadoe, está a ‘0’ hasta la mitad del intervalo
aproximadamente, después se pone a ‘1’, ya que ha aumentado el countelect. La señal
countnormal está en el estado ‘00000’ hasta la mitad del intervalo aproximadamente,
después aumenta el estado a ‘00001’. El countminus está en el estado ‘00’ hasta la
mitad del intervalo aproximadamente, después aumenta el estado a ‘01’ y el countelect
está en el estado ‘0’ hasta la mitad del intervalo aproximadamente, y después aumenta el
estado a ‘1’. La señal ledlibren y la señal ledlibrem está a ‘1’ ya que todavía pueden
aparcar mas coches en las plazas normales y plazas de minusválidos respectivamente.
Sin embargo, la señal ledlibree está a ‘1’ hasta la mitad del intervalo aproximadamente,
después cuando ha aumentado el contador asociado, esta señal se pone a ‘0’ debido a
que se ha completado las plazas habilitadas para vehículos eléctricos.
157
La diferencia con la figura 115 es que, en este caso, hemos ejecutado el código de
prueba del panel interior de la zona marrón de forma temporal. El retardo que hay en los
contadores desde el primer flanco de subida del clk es de 108,715 ns, eso se debe a los
retardos que hay en los bloques que utilizamos y sus interconexionados. Se puede
observar en la figura 123 la “marca” en la cual está relacionada, es decir, el flanco de
subida a los 10 ns está relacionado con el aumento del estado a ‘00001’ para el contador
de plazas normales, al estado ‘01’ para el contador de plazas de minusválidos y al estado
‘1’ para el contador de vehículos eléctricos. Aún habiendo retardos, se constata que el
contador sigue cumpliendo la misma función correctamente.
158
sirven para indicar si es up o down el countminus, en este caso está el contador en
modo descendente. Las señales ledve y ledre, están a ‘0’ y ‘1’ respectivamente, estas
señales sirven para indicar si es up o down el countnelect, en este caso está el contador
en modo descendente. Las señales ledazul y ledamarillo están a ‘1’ ya que están
asociadas a las salidas ledazuls y ledamarillos, esto sirve para poner un led en el panel
indicando el tipo de plaza que es. La señal ledocupadon está a ‘0’ puesto que todavía
pueden ocupar más vehículos las plazas normales. las señales ledocupadom está a ‘1’
hasta la mitad de intervalo, después se puso a ‘0’ ya que hay plazas libres y
ledocupadoe, está a ‘1’ hasta la mitad de intervalo, después se puso a ‘0’ ya que hay
plazas libres para vehículos eléctricos. La señal countnormal está en el estado ‘00100’
hasta la mitad del intervalo, y despúes de la mitad del intervalo está en el estado ‘00011’.
El countminus está en el estado ‘10’ hasta la mitad del intervalo, y después de la mitad
del intervalo está en el estado ‘01’ y el countelect está en el estado ‘1’ hasta la mitad del
intervalo, y después de la mitad del intervalo el estado a ‘0’. La señal ledlibren está a ‘1’
ya que todavía pueden aparcar mas coches en las plazas normales. Las señales
ledlibrem y ledlibree están a ‘0’ hasta la mitad del intervalo, y después de la mitad del
intervalo se pone a ‘1’ ya que hay plazas libres.
159
La diferencia con la figura 116 es que, en este caso, hemos ejecutado el código de
prueba del panel interior de la zona marrón de forma temporal. El retardo que hay en los
contadores desde el primer flanco de subida del clk es de 108,715 ns, eso se debe a los
retardos que hay en los bloques que utilizamos y sus interconexionados. Se pueden
observar en la figura 124 las “marcas” en las cuales están relacionadas, es decir, ese
flanco de subida a los 90 ns está relacionado con la disminución del estado a ‘00011’ para
el contador de plazas normales, al estado ‘01’ para el contador de plazas de minusválidos
y al estado ‘0’ para el contador de vehículos eléctricos. Aún habiendo retardos, se
constata que el contador sigue cumpliendo la misma función correctamente.
Tal como puede apreciarse en las dos figuras anteriores, la tabla de verdad se
cumple y, consiguientemente, podemos asegurar al 100% que el código implementado se
ejecuta correctamente, tal y como hemos definido en las especificaciones.
Hemos realizado el volcado del código de la planta baja del parking empleado en
uno de los paneles exteriores, utilizando los switches como entradas, y los leds como
salidas para visualizar las señales.
Un dato a tener en cuenta, es que ambas placas tienen una frecuencia de reloj de
100 MHz, lo que equivale a 1 x 10−8 segundos. Ello implica que las señales de salida que
generamos en los leds con esta señal de reloj no son apreciables para el ojo humano, ya
que nuestro ojo tiene una frecuencia de refresco de 25 Hz aproximadamente (González-
Gómez, 2016), lo que equivale a 0,04 segundos. Para solucionar este problema, hemos
procedido a implementar un divisor de frecuencia que reduzca la frecuencia de entrada
del reloj, con lo que conseguimos que la simulación en la FPGA de las señales sea visible
para el ojo humano.
Para realizar el divisor de frecuencia hemos tomado como medida 0,5 segundos,
ya que es una medida perceptible para nuestro ojo, equivalente a 2 Hz. Para establecer la
escala, hemos dividido la frecuencia disponible con la deseada, con lo que hemos
obtenido como resultado el número de ciclos de reloj a los que deseamos que se genere
160
nuestra salida de 1 Hz. En este caso, la frecuencia disponible son 100.000.000 Hz, y la
deseada 2 Hz.
100.000.000 𝐻𝑧
𝐸𝑠𝑐𝑎𝑙𝑎 = = 50.000.000 𝑐𝑖𝑐𝑙𝑜𝑠 𝑑𝑒 𝑟𝑒𝑙𝑜𝑗
2 𝐻𝑧
Este resultado tenemos que dividirlo entre dos, ya que la señal de reloj se
mantiene el mismo tiempo en nivel alto que en bajo, en este caso estará 25.000.000 ciclos
de reloj en alto nivel y 25.000.000 en bajo nivel. Como comenzamos a contar desde 0, el
límite superior es 25.000.000 – 1, es decir, 24.999.999.
Antes de nada, queremos constatar que lo primero que hemos hecho antes de
desarrollar el código en el entorno ISE 14.7, ha sido crear un nuevo proyecto con las
especificaciones de cada placa. En la figura 125 se muestran las empleadas para la
Nexys 3.
161
Figura 125. Especificación del tipo de placa en el ISE 14.7.
162
El siguiente paso, es la implementación del diseño (Implement design), que crea el
hardware del diseño. El código tiene que pasar distintos procesos relacionados con la
implementación del diseño, que son:
- Translate Crea una base de datos interna del diseño. Esto puede incluir una
variedad de formatos como VHDL, netlist, etc. Todos estos son convertidos y
unidos en una netlist con un formato dado por Xilinx.
- Map Mapea y optimiza la lógica generada en el proceso translate en
hardware de la FPGA (CLBs, BRAM, IOBs, etc).
- Place & Route Asigna los CLBs, BRAM, IOBs, específicos de la FPGA y los
ruteos de interconexión lógica.
En la figura 127 puede constatarse que nuestro código pasa correctamente por los
procesos anteriores.
163
Figura 128. Selección del JTAG Clock.
Para la Nexys 3, hemos adjudicado a las señales de entrada los siguientes pines
de la FPGA (Para ver los pines seleccionados, véase la Figura 77 correspondiente al
Capítulo 3, Apartado 1):
- Ep T10
- Sp T9
- clk V10
164
- Led0 U16
- Led1 V16
- Led2 U15
- Led3 V15
- Led4 M11
- Led5 N11
- Led6 R11
- Led7 T11
Para la Genesys, hemos adjudicado a las señales de entrada los siguientes pines
de la FPGA:
- Ep J19
- Sp L18
- clk H19
- Led0 AG8
- Led1 AH8
- Led2 AH9
- Led3 AG10
- Led4 AH10
- Led5 AG11
- Led6 AF11
- Led7 AE11
165
Figura 130. Configuración de los pines de la FPGA Nexys 3.
Una vez hecho esto, hemos guardado y cerrado el programa, con lo que el archivo
con extensión ‘.ucf’ ha sido creado satisfactoriamente. Como observamos en la figura 131,
se puede comprobar que se ha generado este fichero en nuestro proyecto.
Si hacemos doble click con el ratón sobre este archivo, se abre un cuadro de texto
tal y como se muestra en la figura 132. Seleccionamos entonces la opción ‘Yes’.
166
Figura 132. Editor del archivo con extensión .ucf.
167
Figura 134. Configuración de la FPGA.
168
A continuación, hemos seleccionado nuestro archivo .bit (bitstream) generado
anteriormente. Este archivo se cargará en la FPGA para programar el dispositivo [Fig.
137].
169
El siguiente paso es pulsar en el botón derecho del ratón sobre el componente
programable y seleccionar la opción ‘Program’; después de unos segundos, se habrá
programado el dispositivo [Fig. 139].
170
Figura 140. Incremento de plazas en el Parking.
171
Figura 141. Decremento de plazas en el Parking.
Por último, en la Figura 142, se muestra un estado indefinido, formado por la señal
Sp (señal de salida al Parking) y la señal Ep (señal de entrada al Parking), ambas
activadas a ‘1’. En este caso, el contador está en un estado indefinido, por lo que el
contador se queda parado, ni aumentan las plazas ni disminuyen. Se puede verificar en
los leds el estado en que se ha quedado parado el controlador, que es el 10, ya que los
leds están iluminados siguiendo el siguiente patrón: 0001 0000, formando el número 10.
172
Figura 142. Salidas inhibidas.
173
estados, ya que están iluminados siguiendo el siguiente patrón: 1000, formando el número
8.
174
Figura 144. Decremento de plazas en el Parking.
Por último, en la Figura 145, se muestra un estado indefinido, formado por la señal
Sp (señal de salida al Parking) y la señal Ep (señal de entrada al Parking), ambas
activadas a ‘1’. En este caso, el contador está en un estado indefinido, por lo que el
contador se queda parado en el estado en el que se encuentre justo en el momento en
que las señales Ep y Sp se encuentren ambas a ‘1’ o a ‘0’, con lo cuál ni aumentan ni
disminuyen las plazas. Se puede verificar en los leds que el estado en el que se ha
quedado parado el contador es el 7, ya que los leds están iluminados siguiendo el
siguiente patrón: 0111, formando el número 7.
175
Figura 145. Salidas inhibidas.
176
6. Costes
177
También se ha contado con dos Programadores de Software y tester con titulación
de Grado en Ingeniería Informática, los cuales han trasladado las especificaciones de los
analistas a código ejecutable VHDL. Éstos han participado un 60% en la realización del
proyecto, lo que ha supuesto 500 horas de dedicación que, a un coste por hora de 23,16
Euros, ha representado un total de 11.580 Euros entre ambos.
178
Consecuentemente, esta partida ha representado un gasto total de 2.418,84 Euros
de licencias de software para poder ejecutar el proyecto correctamente.
- Nexys 3 Es uno de los dispositivos FPGA que hemos empleado para volcar el
código y realizar el parking. Este dispositivo, como hemos visto en el Tema 2,
Apartado 7, pertenece a la familia Spartan-6 de Xilinx, y ha representado un gasto
de 240 Euros.
- Genesys Es el otro dispositivo FPGA que hemos empleado para volcar el
código de nuestro parking. Este dispositivo pertenece a la familia Virtex-5 de Xilinx,
y ha supuesto un gasto de 797,47Euros.
Por consiguiente, podemos concluir que los gastos del presente proyecto han
ascendido a un total de 36.626,71 Euros.
179
7. Conclusiones y líneas de mejora
Es por ello que nos hemos visto inmersos en las diferentes fases, tanto de estudio
del problema como de manejo de herramientas (tales como Veribest o ISE) y manejo de
la documentación, para poder afrontar el proyecto así como el estudio de dispositivos
lógicos configurables, tales como las FPGAs.
Asimismo se podría crear una aplicación web que permita gestionar la reserva de
plazas y, de este modo, el usuario podría ir directamente al parking con la certeza de que
tiene una plaza reservada para su vehículo.
180
También proponemos el empleo de nuevas metodologías de diseño y desarrollo a
alto nivel (Matlab, Simulink, Xilinx System Generator…)
Continuando con esta misma reflexión, hay que constatar que en el mercado
actual existen seis tipos de conectores para conectar el vehículo eléctrico a la red de
recarga (Ibáñez, 2012). El que haya tanta variedad de conectores es debido a que todavía
no se encuentran estandarizados a nivel mundial. A continuación, relacionamos los seis
tipos de conectores disponibles actualmente:
181
SAE J1772, tipo 1 Se localiza en la figura 147.
182
Conector Scame o tipo 3 Se localiza en la figura 150.
Otra posible mejora sería adaptar el tamaño de las plazas a vehículos más
pequeños, como las motos, bicicletas, etc. ya que, hasta ahora, las plazas de nuestro
parking son de un tamaño estándar, si bien entendemos que este punto podría ser
susceptible de modificación en el caso de que las necesidades de acceso de este tipo de
vehículos al mismo así lo aconsejasen.
183
Finalmente, planteamos la posibilidad de introducir sensores volumétricos de techo
que detecten el tamaño del vehículo, junto con la mejora anterior relativa al tamaño de las
plazas.
184
8. Planificación
185
Tabla 26. Gráfico Gantt inicial.
186
8.2. Gantt final
La tabla 27 muestra el gráfico final con el tiempo total requerido para la ejecución del
proyecto.
187
Tabla 27. Gráfico Gantt final.
188
9. Impactos sociales y ambientales (responsabilidad ética
y profesional)
Además de esto, nuestro proyecto está enfocado a reducir las emisiones de CO2 y,
consecuentemente, la polución atmosférica ya que, al informar mediante paneles de las
plazas libres, se agiliza el aparcado del vehículo y, por tanto, se reduce el consumo de
combustible y sus consiguientes efectos dañinos. Asimismo, estos paneles y la
distribución y diseño escogidos facilitan a los usuarios la elección del lugar y zona donde
desean dejar su vehículo, así como la posterior recogida del mismo, haciendo más eficaz
y rápida esta labor.
Por otra parte, con la adición de plazas para vehículos eléctricos con su
correspondiente zona de recarga gratuita, hemos querido fomentar el uso de este tipo de
vehículos, ya que no producen emisiones dañinas para el medio ambiente, convirtiendo
nuestro entorno en un espacio mucho más saludable. Por esta razón, tal como hemos
señalado en el punto de conclusiones y líneas de mejora, prevemos la creación de nuevas
plazas para este tipo de vehículos en un futuro.
Por último, algo a tener en cuenta son los materiales empleados en la fabricación
de las FPGAs que hemos utilizado para el volcado y la verificación del código. Estas
placas han sido fabricadas sin plomo, material perjudicial para la salud. Hace años, estas
placas eran mucho más simples, y estaban fabricadas con materiales más dañinos, ya
que se desconocía esta información.
189
Bibliografía
Digital.
Altera (2010). En Terasic Technologies (Ed.), DE2-115 user manual. San Jose, California,
USA.
Altera (2012). Stratix IV GX FPGA development board: Reference manual. San Jose,
California, USA.
https://www.altera.com/products/fpga/overview.html
Altera (2016b). Chapter 1: Cyclone IV FPGA device family overview. Cyclone IV device
https://www.altera.com/about/company/history.html
Amos, D., Lesea, A., & Richter, R. (2011). En Happy About (Ed.), FPGA-based
California, USA.
Argüelles Cruz, A. J. (2007). Redes neuronales alfa-beta sin pesos: Teoría y factibilidad
http://tesis.bnct.ipn.mx/bitstream/handle/123456789/7077/2arguellescruz.pdf?sequen
ce=1
XIX
Arroyo Galán, L. (2005). 100 años de informática y telecomunicaciones: España siglo XX.
Autostadt (2016a). Award-winning car towers: The "world's fastest automatic parking
autostadt/car-towers/
Blom, J., & Nilsson, P. (2008). New development within the FPGA area with focus on soft
Brinkman, W. F., Haggan, D. E., & Troutman, W. W. (1997). A history of the invention of
the transistor and where it will lead us. IEEE Journal of Solid-State Circuits, 32(12),
1858-1865.
Brown, S., & Rose, J. (1996). Architecture of FPGAs and CPLDs: A tutorial. IEEE Design
http://www.ccee.edu.uy/jacad/2013/#trabajos
FPGAs.
XX
CIFP Mantenimiento y Servicios a la Producción (s.f.). Análisis de los circuitos de corriente
learning/index.php?id=1&id_sec=7
https://gestiona.madrid.org/wleg/servlet/Servidor?opcion=VerHtml&nmnorma=482&cd
estado=P
https://www.uclm.es/profesorado/vtoledano/_private/Rto%20prevenci%C3%B3n%20d
e%20incendios%20de%20la%20Comunidad%20de%20Madrid%20(D%2031-
2003).pdf
https://reference.digilentinc.com/_media/genesys:genesys_rm.pdf
https://reference.digilentinc.com/nexys/nexys3/refmanual
Ehrenfeld, A. G., & Alarcón, C. R. (2006). Introducción a las FPGA (Manuscrito inédito).
Escamilla Hernández, E., Ponomaryov, V., Ikuo, A., & Endo, H. (2005). Uso de FPGA para
XXI
Farooq, U. (2012). FPGA architectures: An overview. Tree-based heterogeneous FPGA
doi:10.1007/978-1-4614-3594-5_2
French, P. J., & Sarro, P. M. (2012). Integrated MEMS: Opportunities & challenges. En
Mojtaba Kahrizi (Ed.), Micromachining techniques for fabrication of micro and nano
https://www.boe.es/boe/dias/2014/12/31/pdfs/BOE-A-2014-13681.pdf
https://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-5:-
Prescaler-de-N-bits
Hadzic, I., Smith, J. M., & Marcus, W. S. (1998). On-the-fly programmable hardware for
http://tesis.bnct.ipn.mx/handle/123456789/11224
Herrera Lozada, J. C., & González Robles, J. C. (2013). Unidad 5. Arquitectura FPGA. En
XXII
Ibáñez, P. (2012). Tipos de conectores, tipos de recarga y modos de carga. Recuperado
de http://www.motorpasionfuturo.com/coches-electricos/tipos-de-conectores-tipos-de-
recarga-y-modos-de-carga
http://isa.umh.es/asignaturas/fi/Tema7%20Arquitectura.pdf
http://www.apuntesdeelectronica.com/digital/diseno-programable.htm
Karwatka, D. (2015). Nicholas-Joseph Cugnot and his steam carriage. Tech Directions,
74(6), 10-11.
Technology.
http://fpgalapagar.es/carmenluengo/pluginfile.php/147/mod_imscp/content/1/index.ht
ml
http://www.parking-net.com/parking-industry-blog/a-short-description-of-the-history-of-
parking-garages
Molina Martínez, J. M., & Soto Valles, F. (2010). 14. Lógica secuencial. Registros de
XXIII
Región de Murcia (Ed.), Automatización y telecontrol de sistemas de riego (pp. 221-
Nokia Bell Labs (2016). History of Bell Labs: From AT&T to Nokia, a continuous focus on
labs.com/about/history-bell-labs/
Parnell, K., & Mehta, N. (2003). Programmable logic design quick start hand book (4ª ed.)
Xilinx.
Conciencia Eco.
Santarini, M. (2014). Xilinx's new SDNet environment enables 'softly' definet networks.
http://ri.uaq.mx/handle/123456789/2245
Sisterna, C. (2011). En Universidad Nacional de San Juan (Ed.), Field programmable gate
Smerdon, M. (2016). En Xilinx (Ed.), Spartan-6 FPGAs: Performance, power, and I/O
XXIV
Stankovich, G. (2008). Tipos de memoria. Recuperado de
https://sites.google.com/site/inginformaticajhgf/tipos-de-memoria
http://meteo.ieec.uned.es/www_Usumeteog/comp_sec_registros.html
noticies/2010/la-upc-desarrolla-un-detector-inteligente-para-buscar-aparcamiento
(166), 3-11.
Xilinx (2011). Spartan-6 family overview: DS160 (v2.0) product specification. San Jose,
California, USA.
Xilinx (2012). ML605 hardware user guide. San Jose, California, USA.
Xilinx (2015). Virtex-6 family overview: DS150 (v2.5) product specification. San Jose,
California, USA.
http://www.xilinx.com/products/intellectual-property/dcm_module.html
XXV
Xilinx (2016b). Environment, health & safety. Recuperado de
http://www.xilinx.com/about/environment-health-safety.html
http://www.xilinx.com/products/intellectual-property/mmcm_module.html
http://www.xilinx.com/products/boards-and-kits/1-27b7nm.html
http://www.xilinx.com/products/silicon-devices/fpga.html
XXVI
Anexos
a. Figuras
XXVII
Figura 10. Primera planta.
XXVIII
Figura 36. Arquitectura general de un FPGA de la serie 4000 de Xilinx.
XXIX
Figura 31. Bloques de entrada salida.
Figura 49. Porcentajes de ventas de FPGAs por sectores industriales y valoración de mercado de las
principales empresas en 2013.
XXX
Figura 50. Arquitectura de un dispositivo FPGA de Xilinx Spartan 3.
XXXI
Figura 68. Arquitectura de un dispositivo FPGA de Altera.
XXXII
Figura 79. Composición de la placa DE2-115.
XXXIII
Figura 84. Circuito lógico ampliado de los contadores de unidades y decenas.
XXXIV
Figura 86. Diseño de la caja negra para el panel exterior del parking.
XXXV
Figura 88. Circuito lógico de la interconexión entre los componentes lógicos de los paneles exteriores.
XXXVI
Figura 93. Circuito lógico ampliado del contador de plazas normales.
Figura 95. Circuito lógico ampliado del contador de plazas para minusválidos.
XXXVII
Figura 97. Circuito lógico ampliado del contador de plazas para vehículos eléctricos.
XXXVIII
Figura 98. Diseño de la caja negra para el panel de la zona marrón.
XXXIX
Figura 100. Circuito lógico de la interconexión entre los componentes lógicos del panel de la zona marrón.
XL
b. Código
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity PuertaNot is
Port ( a : in STD_LOGIC;
f : out STD_LOGIC);
end PuertaNot;
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity PuertaAnd is
Port ( a : in STD_LOGIC;
b : in STD_LOGIC;
f : out STD_LOGIC);
end PuertaAnd;
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity PuertaXor is
Port ( a : in STD_LOGIC;
b : in STD_LOGIC;
f : out STD_LOGIC);
end PuertaXor;
XLI
b1.4. Senial
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity Senial is
Port ( a : in STD_LOGIC;
f : out STD_LOGIC);
end Senial;
--Lista de sensibilidad
process(clk,rst)
begin
--Si llega una señal 1 al Reset el contador se reiniciará.
if rst = '1' then qi <=0;
--Condición de reloj activo por flanco de subida
elsif (clk= '1' and clk 'EVENT) then
--Enable es la señal que habilita el contador, si llega un 0, el contador
permanecerá en el mismo estado.
if e = '0' then
qi <= qi;
--ud cuando está activado a 1 quiere decir que el contador es ascendente
(0a9).
elsif (ud = '1') then
--La condición va aumentando más 1 al contador.
qi <= qi+1;
--Cuando el contador llega a 9, vuelve a 0
if (qi=9) then
XLII
qi<=0;
end if;
--ud cuando está activado a 0 quiere decir que el contador es descendente
(9a0).
elsif (ud = '0') then
-- La condición va disminuyendo en menos 1 al contador.
qi <= qi-1;
-- Cuando el contador llega a 0, vuelve a 9
if (qi=0) then
qi<=9;
end if;
end if;
end if;
end process;
--La salida asociada carry se pone a 1 cuando el contador llega 9, en
caso contrario estará a 0.
carry <= '1' WHEN qi =9 ELSE '0';
end funcional;
--Lista de sensibilidad
process(clk,rst)
begin
--Si llega una señal 1 al Reset el contador se reiniciará.
if rst = '1' then qi <=0;
--Condición de reloj activo por flanco de subida
elsif (clk= '1' and clk 'EVENT) then
--Enable es la señal que habilita el contador, si llega un 0, el contador
permanecerá en el mismo estado.
if e = '0' then
qi <= qi;
--ud cuando está activado a 1 quiere decir que el contador es ascendente
(0a9).
elsif (ud = '1') then
--La condición va aumentando más 1 al contador.
qi <= qi+1;
XLIII
--Cuando el contador llega a 9, vuelve a 0
if (qi=9) then
qi<=0;
end if;
--ud cuando está activado a 0 quiere decir que el contador es descendente
(9a0).
elsif (ud = '0') then
-- La condición va disminuyendo en menos 1 al contador.
qi <= qi-1;
-- Cuando el contador llega a 0, vuelve a 9
if (qi=0) then
qi<=9;
end if;
end if;
end if;
end process;
--La salida asociada carry se pone a 1 cuando el contador llega 9, en
caso contrario estará a 0.
carry <= '1' WHEN qi =9 ELSE '0';
end funcional;
--Lista de sensibilidad
process(clk,rst)
begin
--Si llega una señal 1 al reset el contador se reiniciará.
if rst = '1' then qi <=0;
--Condición de reloj activo por flanco de subida
elsif (clk= '1' and clk 'EVENT) then
--Enable es la señal que habilita el contador, si llega un 0, el contador
permanecerá en el mismo estado.
if e = '0' then
qi <= qi;
--ud cuando está activado a 1 quiere decir que el contador es ascendente
(0a1).
elsif (ud = '1') then
XLIV
--La condición va aumentando más 1 al contador.
qi <= qi+1;
--Cuando el contador llega a 1, vuelve a 0
if (qi=1) then
qi<=0;
end if;
--ud cuando está activado a 1 quiere decir que el contador es ascendente
(1a0).
elsif (ud = '0') then
--La condición va disminuyendo en menos 1 al contador.
qi <= qi-1;
--Cuando el contador llega a 0, vuelve a 1
if (qi=0) then
qi<=1;
end if;
end if;
end if;
end process;
--La salida asociada carry se pone a 1 cuando el contador llega 1, en
caso contrario estará a 0.
carry <= '1' WHEN qi =1 ELSE '0';
end funcional;
XLV
a : IN STD_LOGIC;
f : OUT STD_LOGIC
);
END COMPONENT;
COMPONENT PuertaAnd
PORT(
a,b : IN STD_LOGIC;
f : OUT STD_LOGIC
);
END COMPONENT;
COMPONENT PuertaXor
PORT(
a,b : IN STD_LOGIC;
f : OUT STD_LOGIC
);
END COMPONENT;
COMPONENT PuertaAndTres
PORT(
a,b,c : IN STD_LOGIC;
f : OUT STD_LOGIC
);
END COMPONENT;
COMPONENT senial
PORT(
a : IN STD_LOGIC;
f : OUT STD_LOGIC
);
END COMPONENT;
COMPONENT ContadorUnid
PORT(
rst,e,clk,ud : IN STD_LOGIC;
carry : INOUT STD_LOGIC;
qi : INOUT INTEGER RANGE 0 TO 9
);
END COMPONENT;
COMPONENT ContadorDec
PORT(
rst,e,clk,ud : IN STD_LOGIC;
carry : INOUT STD_LOGIC;
qi : INOUT INTEGER RANGE 0 TO 9
);
END COMPONENT;
COMPONENT ContadorCent
PORT(
rst,e,clk,ud : IN STD_LOGIC;
carry : INOUT STD_LOGIC;
qi : INOUT INTEGER RANGE 0 TO 1
);
END COMPONENT;
XLVI
--Declaraciones del uso de las arquitecturas de las entidades que
necesitamos.
FOR ALL: PuertaNot USE ENTITY WORK.PuertaNot(flujo);
FOR ALL: PuertaAnd USE ENTITY WORK.PuertaAnd(flujo);
FOR ALL: Senial USE ENTITY WORK.Senial(flujo);
FOR ALL: PuertaXor USE ENTITY WORK.PuertaXor(flujo);
FOR ALL: PuertaAndTres USE ENTITY WORK.PuertaAndTres(flujo);
FOR ALL: ContadorUnid USE ENTITY WORK.ContadorUnid(funcional);
FOR ALL: ContadorDec USE ENTITY WORK.ContadorDec(funcional);
FOR ALL: ContadorCent USE ENTITY WORK.ContadorCent(funcional);
Begin
XLVII
end ContadorNormalMorado;
--Lista de sensibilidad
process(clk, rst)
begin
--Si llega una señal 1 al reset el contador se reiniciará.
if rst = '1' then qi <=0;
--Condición de reloj activo por flanco de subida
elsif (clk= '1' and clk 'EVENT) then
--Enable es la señal que habilita el contador, si llega un 0, el contador
permanecerá en el mismo estado.
if e = '0' then
qi <= qi;
--ud cuando está activado a 1 quiere decir que el contador es ascendente.
elsif (ud = '1') then
--La condición va aumentando más 1 al contador.
qi <= qi+1;
--Cuando el contador llega a 23, ha llegado al máximo
if (qi=23) then
qi<=23;
end if;
--ud cuando está activado a 0 quiere decir que el contador es
descendente.
elsif (ud = '0') then
-- La condición va disminuyendo en menos 1 al contador.
qi <= qi-1;
-- Cuando el contador llega a 0, se queda en el mínimo
if (qi=0) then
qi<=0;
end if;
end if;
end if;
end process;
--La salida asociada carry se pone a 1 cuando el contador llega 23, en
caso contrario estará a 0.
carry <= '1' WHEN qi =23 ELSE '0';
end funcional;
XLVIII
qi : inout INTEGER RANGE 0 TO 2);
end ContadorMinusMorado;
--Lista de sensibilidad
process(clk, rst)
begin
--Si llega una señal 1 al reset el contador se reiniciará.
if rst = '1' then qi <=0;
--Condición de reloj activo por flanco de subida
elsif (clk= '1' and clk 'EVENT) then
--Enable es la señal que habilita el contador, si llega un 0, el contador
permanecerá en el mismo estado.
if e = '0' then
qi <= qi;
--ud cuando está activado a 1 quiere decir que el contador es ascendente.
elsif (ud = '1') then
--La condición va aumentando más 1 al contador.
qi <= qi+1;
--Cuando el contador llega a 2, se queda en el máximo
if (qi=2) then
qi<=2;
end if;
--ud cuando está activado a 0 quiere decir que el contador es
descendente.
elsif (ud = '0') then
-- La condición va disminuyendo en menos 1 al contador.
qi <= qi-1;
-- Cuando el contador llega a 0, se queda en el mínimo
if (qi=0) then
qi<=0;
end if;
end if;
end if;
end process;
--La salida asociada carry se pone a 1 cuando el contador llega 2, en
caso contrario estára a 0.
carry <= '1' WHEN qi =2 ELSE '0';
end funcional;
XLIX
rst : in STD_LOGIC;
LEDVN : in STD_LOGIC;
LEDRN : in STD_LOGIC;
LEDVM : in STD_LOGIC;
LEDRM : in STD_LOGIC;
LEDAZUL : in STD_LOGIC;
LEDAZULS : OUT STD_LOGIC;
LedLibreN : out STD_LOGIC;
LedOcupadoN: inout STD_LOGIC;
LedLibreM : out STD_LOGIC;
LedOcupadoM: inout STD_LOGIC;
CountNormal : inout INTEGER RANGE 0 TO 23;
CountMinus : inout INTEGER RANGE 0 TO 2);
end PanelZonaMorada;
COMPONENT PuertaNot
PORT(
a : IN STD_LOGIC;
f : OUT STD_LOGIC
);
END COMPONENT;
COMPONENT PuertaAnd
PORT(
a,b : IN STD_LOGIC;
f : OUT STD_LOGIC
);
END COMPONENT;
COMPONENT PuertaXor
PORT(
a,b : IN STD_LOGIC;
f : OUT STD_LOGIC
);
END COMPONENT;
COMPONENT ContadorNormalMorado
PORT(
rst,e,clk,ud : IN STD_LOGIC;
carry : INOUT STD_LOGIC;
qi : INOUT INTEGER RANGE 0 TO 22
);
END COMPONENT;
COMPONENT ContadorMinusMorado
PORT(
rst,e,clk,ud : IN STD_LOGIC;
carry : INOUT STD_LOGIC;
qi : INOUT INTEGER RANGE 0 TO 2
);
END COMPONENT;
L
--Variables intermedias para guardar el valor de las operaciones lógicas
SIGNAL LEDRnot0, UpDown0, LEDRnot1, UpDown1, enable0, enable1,
carry0, carry1: STD_LOGIC;
LI
--Lista de sensibilidad
process(clk, rst)
begin
LII
architecture funcional of ContadorMinusMarron is
begin
--Lista de sensibilidad
process(clk, rst)
begin
--Si llega una señal 1 al reset el contador se reiniciará.
if rst = '1' then qi <=0;
--Condición de reloj activo por flanco de subida
elsif (clk= '1' and clk 'EVENT) then
--enable es la señal que habilita el contador, si llega un 0, el contador
permanecerá en el mismo estado.
if e = '0' then
qi <= qi;
--ud cuando está activado a 1 quiere decir que el contador es ascendente.
elsif (ud = '1') then
--La condición va aumentando más 1 al contador.
qi <= qi+1;
--Cuando el contador llega a 2, se queda en el máximo
if (qi=2) then
qi<=2;
end if;
--ud cuando está activado a 0 quiere decir que el contador es
descendente.
elsif (ud = '0') then
-- La condición va disminuyendo en menos 1 al contador.
qi <= qi-1;
-- Cuando el contador llega a 0, se queda en el mínimo
if (qi=0) then
qi<=0;
end if;
end if;
end if;
end process;
--La salida asociada carry se pone a 1 cuando el contador llega 2, en
caso contrario estará a 0.
carry <= '1' WHEN qi =2 ELSE '0';
end funcional;
LIII
end ContadorElectMarron;
--Lista de sensibilidad
process(clk, rst)
begin
--Si llega una señal 1 al reset el contador se reiniciará.
if rst = '1' then qi <=0;
--Condición de reloj activo por flanco de subida
elsif (clk= '1' and clk 'EVENT) then
--Enable es la señal que habilita el contador, si llega un 0, el contador
permanecerá en el mismo estado.
if e = '0' then
qi <= qi;
--ud cuando está activado a 1 quiere decir que el contador es ascendente.
elsif (ud = '1') then
--La condición va aumentando más 1 al contador.
qi <= qi+1;
--Cuando el contador llega a 1, se queda en el máximo
if (qi=1) then
qi<=1;
end if;
--ud cuando está activado a 0 quiere decir que el contador es
descendente.
elsif (ud = '0') then
-- La condición va disminuyendo en menos 1 al contador.
qi <= qi-1;
--Cuando el contador llega a 0, se queda en el minimo
if (qi=0) then
qi<=0;
end if;
end if;
end if;
end process;
--La salida asociada carry se pone a 1 cuando el contador llega 1, en
caso contrario estará a 0.
carry <= '1' WHEN qi =1 ELSE '0';
end funcional;
LIV
LEDVN : in STD_LOGIC;
LEDRN : in STD_LOGIC;
LEDVM : in STD_LOGIC;
LEDRM : in STD_LOGIC;
LEDVE : in STD_LOGIC;
LEDRE : in STD_LOGIC;
LEDAZUL : in STD_LOGIC;
LEDAMARILLO : in STD_LOGIC;
LEDAZULS : out STD_LOGIC;
LEDAMARILLOS : out STD_LOGIC;
LedLibreN : out STD_LOGIC;
LedOcupadoN: inout STD_LOGIC;
LedLibreM : out STD_LOGIC;
LedOcupadoM: inout STD_LOGIC;
LedLibreE : out STD_LOGIC;
LedOcupadoE: inout STD_LOGIC;
CountNormal : inout INTEGER RANGE 0 TO 22;
CountMinus : inout INTEGER RANGE 0 TO 2;
CountElect : inout INTEGER RANGE 0 TO 1);
end PanelZonaMarron;
COMPONENT PuertaNot
PORT(
a : IN STD_LOGIC;
f : OUT STD_LOGIC
);
END COMPONENT;
COMPONENT PuertaAnd
PORT(
a,b : IN STD_LOGIC;
f : OUT STD_LOGIC
);
END COMPONENT;
COMPONENT PuertaXor
PORT(
a,b : IN STD_LOGIC;
f : OUT STD_LOGIC
);
END COMPONENT;
COMPONENT ContadorNormalMarron
PORT(
rst,e,clk,ud : IN STD_LOGIC;
carry : INOUT STD_LOGIC;
qi : INOUT INTEGER RANGE 0 TO 22
);
END COMPONENT;
COMPONENT ContadorMinusMarron
LV
PORT(
rst,e,clk,ud : IN STD_LOGIC;
carry : INOUT STD_LOGIC;
qi : INOUT INTEGER RANGE 0 TO 2
);
END COMPONENT;
COMPONENT ContadorElectMarron
PORT(
rst,e,clk,ud : IN STD_LOGIC;
carry : INOUT STD_LOGIC;
qi : INOUT INTEGER RANGE 0 TO 1
);
END COMPONENT;
begin
LVI
b2.8. Contador plazas normales. Zona gris
--Lista de sensibilidad
process(clk, rst)
begin
--Si llega una señal 1 al reset el contador se reiniciará.
if rst = '1' then qi <=0;
--Condición de reloj activo por flanco de subida
elsif (clk= '1' and clk 'EVENT) then
--Enable es la señal que habilita el contador, si llega un 0, el contador
permanecerá en el mismo estado.
if e = '0' then
qi <= qi;
--ud cuando está activado a 1 quiere decir que el contador es ascendente.
elsif (ud = '1') then
--La condición va aumentando más 1 al contador.
qi <= qi+1;
--Cuando el contador llega a 24, ha llegado al máximo
if (qi=24) then
qi<=24;
end if;
--ud cuando está activado a 0 quiere decir que el contador es
descendente.
elsif (ud = '0') then
-- La condición va disminuyendo en menos 1 al contador.
qi <= qi-1;
-- Cuando el contador llega a 0, se queda en el mínimo
if (qi=0) then
qi<=0;
end if;
end if;
end if;
end process;
--La salida asociada carry se pone a 1 cuando el contador llega 24, en
caso contrario estará a 0.
carry <= '1' WHEN qi =24 ELSE '0';
end funcional;
LVII
b2.9. Contador plazas eléctricos. Zona gris
--Lista de sensibilidad
process(clk, rst)
begin
--Si llega una señal 1 al Reset el contador se reiniciará.
if rst = '1' then qi <=0;
--Condición de reloj activo por flanco de subida
elsif (clk= '1' and clk 'EVENT) then
--Enable es la señal que habilita el contador, si llega un 0, el contador
permanecerá en el mismo estado.
if e = '0' then
qi <= qi;
--ud cuando está activado a 1 quiere decir que el contador es ascendente.
elsif (ud = '1') then
--La condición va aumentando más 1 al contador.
qi <= qi+1;
--Cuando el contador llega a 1, se queda en el máximo
if (qi=1) then
qi<=1;
end if;
--ud cuando está activado a 0 quiere decir que el contador es
descendente.
elsif (ud = '0') then
-- La condición va disminuyendo en menos 1 al contador.
qi <= qi-1;
-- Cuando el contador llega a 0, se queda en el mínimo
if (qi=0) then
qi<=0;
end if;
end if;
end if;
end process;
--La salida asociada carry se pone a 1 cuando el contador llega 1, en
caso contrario estará a 0.
carry <= '1' WHEN qi =1 ELSE '0';
end funcional;
LVIII
b2.10. Panel completo. Zona gris
end PanelZonaGris;
COMPONENT PuertaNot
PORT(
a : IN STD_LOGIC;
f : OUT STD_LOGIC
);
END COMPONENT;
COMPONENT PuertaAnd
PORT(
a,b : IN STD_LOGIC;
f : OUT STD_LOGIC
);
END COMPONENT;
COMPONENT PuertaXor
PORT(
a,b : IN STD_LOGIC;
f : OUT STD_LOGIC
LIX
);
END COMPONENT;
COMPONENT ContadorNormalGris
PORT(
rst,e,clk,ud : IN STD_LOGIC;
carry : INOUT STD_LOGIC;
qi : INOUT INTEGER RANGE 0 TO 24
);
END COMPONENT;
COMPONENT ContadorElectGris
PORT(
rst,e,clk,ud : IN STD_LOGIC;
carry : INOUT STD_LOGIC;
qi : INOUT INTEGER RANGE 0 TO 1
);
END COMPONENT;
LX
--Paquete para usar funciones aritmeticas
use IEEE.NUMERIC_STD.ALL;
--Paquete para usar funciones aritmeticas
use IEEE.STD_LOGIC_UNSIGNED.ALL;
--Lista de sensibilidad
process(clk, rst)
begin
--Si llega una señal 1 al Reset el contador se reiniciará.
if rst = '1' then qi <=0;
--Condición de reloj activo por flanco de subida
elsif (clk= '1' and clk 'EVENT) then
--Enable es la señal que habilita el contador, si llega un 0, el contador
permanecerá en el mismo estado.
if e = '0' then
qi <= qi;
--ud cuando está activado a 1 quiere decir que el contador es ascendente.
elsif (ud = '1') then
--La condición va aumentando más 1 al contador.
qi <= qi+1;
--Cuando el contador llega a 24, ha llegado al máximo
if (qi=24) then
qi<=24;
end if;
--ud cuando está activado a 0 quiere decir que el contador es
descendente.
elsif (ud = '0') then
-- La condición va disminuyendo en menos 1 al contador.
qi <= qi-1;
-- Cuando el contador llega a 0, se queda en el mínimo
if (qi=0) then
qi<=0;
end if;
end if;
end if;
end process;
--La salida asociada carry se pone a 1 cuando el contador llega 24, en
caso contrario estará a 0.
carry <= '1' WHEN qi =24 ELSE '0';
end funcional;
LXI
b2.12. Contador plazas eléctricos. Zona azul
--Lista de sensibilidad
process(clk, rst)
begin
--Si llega una señal 1 al Reset el contador se reiniciará.
if rst = '1' then qi <=0;
--Condición de reloj activo por flanco de subida
elsif (clk= '1' and clk 'EVENT) then
--Enable es la señal que habilita el contador, si llega un 0, el contador
permanecerá en el mismo estado.
if e = '0' then
qi <= qi;
--ud cuando está activado a 1 quiere decir que el contador es ascendente
elsif (ud = '1') then
--La condición va aumentando más 1 al contador.
qi <= qi+1;
--Cuando el contador llega a 1, se queda en el máximo
if (qi=1) then
qi<=1;
end if;
--ud cuando está activado a 0 quiere decir que el contador es
descendente.
elsif (ud = '0') then
-- La condición va disminuyendo en menos 1 al contador.
qi <= qi-1;
-- Cuando el contador llega a 0, se queda en el mínimo
if (qi=0) then
qi<=0;
end if;
end if;
end if;
end process;
--La salida asociada carry se pone a 1 cuando el contador llega 1, en
caso contrario estará a 0.
carry <= '1' WHEN qi =1 ELSE '0';
end funcional;
LXII
b2.13. Panel completo. Zona azul
COMPONENT Senial
PORT(
a : IN STD_LOGIC;
f : OUT STD_LOGIC
);
END COMPONENT;
COMPONENT PuertaNot
PORT(
a : IN STD_LOGIC;
f : OUT STD_LOGIC
);
END COMPONENT;
COMPONENT PuertaAnd
PORT(
a,b : IN STD_LOGIC;
f : OUT STD_LOGIC
);
END COMPONENT;
COMPONENT PuertaXor
PORT(
a,b : IN STD_LOGIC;
f : OUT STD_LOGIC
);
LXIII
END COMPONENT;
COMPONENT ContadorNormalAzul
PORT(
rst,e,clk,ud : IN STD_LOGIC;
carry : INOUT STD_LOGIC;
qi : INOUT INTEGER RANGE 0 TO 24
);
END COMPONENT;
COMPONENT ContadorElectAzul
PORT(
rst,e,clk,ud : IN STD_LOGIC;
carry : INOUT STD_LOGIC;
qi : INOUT INTEGER RANGE 0 TO 1
);
END COMPONENT;
LXIV
b3. Divisor de frecuencia
begin
process (clk)
begin
--Condición de reloj activo por flanco de subida
if (clk' EVENT AND clk='1') then
--La condición va aumentando más 1 al contador.
count <= count +1;
--Si el contador llega al valor maximo, entonces vuelve a reiniciarse.
if( count = 24999999) then
count <= 0;
end if;
end if;
end process;
--La salida asociada output se pone a 1 cuando el contador llega
24.999.999, en caso contrario estára a 0.
output <= '1' WHEN count= 24999999 ELSE '0';
end funcional;
LXV
c. Test bench
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY TestUd IS
END TestUd;
LXVI
c1.2. Test Contador decenas
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY TestDec IS
END TestDec;
BEGIN
-- Instantiate the Unit Under Test (UUT)
uut: ContadorDec PORT MAP (
rst => rst,
e => e,
clk => clk,
ud => ud,
carry => carry,
qi => qi
);
rst <= '1', '0' AFTER 5 ns;
e <='0', '1' AFTER 13 ns, '0' AFTER 32 ns, '1' AFTER 53 ns;
ud <= '1' AFTER 13 ns;
reloj: PROCESS
begin
wait for 10 ns; clk<='1'; wait for 10 ns;
clk<='0';
end process;
END;
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY TestCent IS
END TestCent;
LXVII
ARCHITECTURE behavior OF TestCent IS
-- Component Declaration for the Unit Under Test (UUT)
COMPONENT ContadorCent
PORT(
rst : IN std_logic;
e : IN std_logic;
clk : IN std_logic;
ud : IN std_logic;
carry : INOUT std_logic;
qi : INOUT INTEGER RANGE 0 TO 1
);
END COMPONENT;
FOR ALL: ContadorCent USE ENTITY WORK.ContadorCent(funcional);
--Inputs
signal rst : std_logic := '0';
signal e : std_logic := '0';
signal clk : std_logic := '0';
signal ud : std_logic := '0';
--BiDirs
signal carry : std_logic;
signal qi : INTEGER RANGE 0 TO 1;
BEGIN
-- Instantiate the Unit Under Test (UUT)
uut: ContadorCent PORT MAP (
rst => rst,
e => e,
clk => clk,
ud => ud,
carry => carry,
qi => qi
);
rst <= '1', '0' AFTER 5 ns;
e <='0', '1' AFTER 13 ns, '0' AFTER 32 ns, '1' AFTER 53 ns;
ud <= '0' AFTER 13 ns;
reloj: PROCESS
begin
wait for 10 ns; clk<='1'; wait for 10 ns;
clk<='0';
end process;
END;
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY TestExt IS
END TestExt;
LXVIII
Bs : OUT std_logic;
Sev : OUT std_logic;
Ser : OUT std_logic;
Ssv : OUT std_logic;
Ssr : OUT std_logic;
LEDR: INOUT std_logic;
LEDV: OUT std_logic;
CountUd : INOUT INTEGER RANGE 0 TO 9;
CountDec : INOUT INTEGER RANGE 0 TO 9;
CountCent : INOUT INTEGER RANGE 0 TO 1
);
END COMPONENT;
--FOR ALL: PanelExt USE ENTITY WORK.PanelExt(estructural);
--Inputs
signal clk : std_logic := '0';
signal rst : std_logic := '0';
signal Ep : std_logic := '0';
signal Sp : std_logic := '0';
--BiDirs
signal LEDR : std_logic;
signal CountUd : INTEGER RANGE 0 TO 9;
signal CountDec : INTEGER RANGE 0 TO 9;
signal CountCent : INTEGER RANGE 0 TO 1;
--Outputs
signal Be : std_logic;
signal Bs : std_logic;
signal Sev : std_logic;
signal Ser : std_logic;
signal Ssv : std_logic;
signal Ssr : std_logic;
signal LEDV : std_logic;
BEGIN
-- Instantiate the Unit Under Test (UUT)
uut: PanelExt PORT MAP (
clk => clk,
rst => rst,
Ep => Ep,
Sp => Sp,
Be => Be,
Bs => Bs,
Sev => Sev,
Ser => Ser,
Ssv => Ssv,
Ssr => Ssr,
LEDR => LEDR,
LEDV => LEDV,
CountUd => CountUd,
CountDec => CountDec,
CountCent => CountCent
);
rst<='1', '0' AFTER 5 ns, '1' AFTER 50 ns, '0' AFTER 90 ns;
Ep <='0' AFTER 13 ns;
Sp <= '1' AFTER 13 ns;
reloj: PROCESS
begin
wait for 10 ns; clk<='1'; wait for 10 ns;
clk<='0';
end process;
END;
LXIX
c1.5. Test panel exterior post-place & root
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY TestExt IS
END TestExt;
BEGIN
-- Instantiate the Unit Under Test (UUT)
uut: PanelExt PORT MAP (
clk => clk,
rst => rst,
Ep => Ep,
Sp => Sp,
Be => Be,
LXX
Bs => Bs,
Sev => Sev,
Ser => Ser,
Ssv => Ssv,
Ssr => Ssr,
LEDR => LEDR,
LEDV => LEDV,
CountUd => CountUd,
CountDec => CountDec,
CountCent => CountCent
);
rst<='1', '0' AFTER 5 ns, '1' AFTER 50 ns, '0' AFTER 90 ns;
Ep <='0' AFTER 13 ns;
Sp <= '1' AFTER 13 ns;
reloj: PROCESS
begin
wait for 10 ns; clk<='1'; wait for 10 ns;
clk<='0';
end process;
END;
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY TestContNormalMarron IS
END TestContNormalMarron;
BEGIN
-- Instantiate the Unit Under Test (UUT)
uut: ContadorNormalMarron PORT MAP (
rst => rst,
e => e,
clk => clk,
LXXI
ud => ud,
carry => carry,
qi => qi
);
rst <= '1', '0' AFTER 5 ns;
e <='0', '1' AFTER 13 ns, '0' AFTER 32 ns, '1' AFTER 53 ns;
ud <= '1' AFTER 13 ns;
reloj: PROCESS
begin
wait for 10 ns; clk<='1'; wait for 10 ns;
clk<='0';
end process;
END;
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY TestContMinusMarron IS
END TestContMinusMarron;
LXXII
end process;
END;
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY TestContElectMarron IS
END TestContElectMarron;
END;
LXXIII
c2.4. Test panel marrón
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY TestPanelMArron IS
END TestPanelMArron;
LXXIV
BEGIN
-- Instantiate the Unit Under Test (UUT)
uut: PanelZonaMarron PORT MAP (
clk => clk,
rst => rst,
LEDVN => LEDVN,
LEDRN => LEDRN,
LEDVM => LEDVM,
LEDRM => LEDRM,
LEDVE => LEDVE,
LEDRE => LEDRE,
LEDAZUL => LEDAZUL,
LEDAMARILLO => LEDAMARILLO,
LEDAZULS => LEDAZULS,
LEDAMARILLOS => LEDAMARILLOS,
LedLibreN => LedLibreN,
LedOcupadoN => LedOcupadoN,
LedLibreM => LedLibreM,
LedOcupadoM => LedOcupadoM,
LedLibreE => LedLibreE,
LedOcupadoE => LedOcupadoE,
CountNormal => CountNormal,
CountMinus => CountMinus,
CountElect => CountElect
);
rst<='1', '0' AFTER 5 ns, '1' AFTER 50 ns, '0' AFTER 90 ns;
LEDVN<='0', '1' AFTER 13 ns, '0' AFTER 32 ns, '1' AFTER 53
ns;
LEDRN <= '0' AFTER 13 ns;
LEDVM <= '0', '1' AFTER 20 ns;
LEDRM <= '0' AFTER 20 ns;
reloj: PROCESS
begin
wait for 10 ns; clk<='1'; wait for 10 ns;
clk<='0';
end process;
END;
ENTITY ZonaMoradaTest IS
END ZonaMoradaTest;
LXXV
LedLibreN : OUT std_logic;
LedOcupadoN : INOUT std_logic;
LedLibreM : OUT std_logic;
LedOcupadoM : INOUT std_logic;
CountNormal : INOUT INTEGER RANGE 0 TO 23;
CountMinus : INOUT INTEGER RANGE 0 TO 2
);
END COMPONENT;
BEGIN
-- Instantiate the Unit Under Test (UUT)
uut: PanelZonaMorada PORT MAP (
clk => clk,
rst => rst,
LEDVN => LEDVN,
LEDRN => LEDRN,
LEDVM => LEDVM,
LEDRM => LEDRM,
LEDAZUL => LEDAZUL,
LEDAZULS => LEDAZULS,
LedLibreN => LedLibreN,
LedOcupadoN => LedOcupadoN,
LedLibreM => LedLibreM,
LedOcupadoM => LedOcupadoM,
CountNormal => CountNormal,
CountMinus => CountMinus
);
LXXVI
c2.6. Test panel gris
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY ZonaGrisTest IS
END ZonaGrisTest;
BEGIN
-- Instantiate the Unit Under Test (UUT)
uut: PanelZonaGris PORT MAP (
clk => clk,
rst => rst,
LEDVN => LEDVN,
LEDRN => LEDRN,
LEDVE => LEDVE,
LEDRE => LEDRE,
LEDAMARILLO => LEDAMARILLO,
LEDAMARILLOS => LEDAMARILLOS,
LedLibreN => LedLibreN,
LedOcupadoN => LedOcupadoN,
LXXVII
LedLibreE => LedLibreE,
LedOcupadoE => LedOcupadoE,
CountNormal => CountNormal,
CountElec => CountElec
);
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY ZonaAzulTest IS
END ZonaAzulTest;
LXXVIII
signal CountElec : INTEGER RANGE 0 TO 1;
--Outputs
signal LedLibreN : std_logic;
signal LedLibreE : std_logic;
signal LEDAMARILLOS : std_logic;
BEGIN
-- Instantiate the Unit Under Test (UUT)
uut: PanelZonaAzul PORT MAP (
clk => clk,
rst => rst,
LEDVN => LEDVN,
LEDRN => LEDRN,
LEDVE => LEDVE,
LEDRE => LEDRE,
LEDAMARILLO => LEDAMARILLO,
LEDAMARILLOS => LEDAMARILLOS,
LedLibreN => LedLibreN,
LedOcupadoN => LedOcupadoN,
LedLibreE => LedLibreE,
LedOcupadoE => LedOcupadoE,
CountNormal => CountNormal,
CountElec => CountElec
);
rst <= '1', '0' AFTER 5 ns;
LEDVN<='0', '1' AFTER 13 ns, '0' AFTER 32 ns, '1' AFTER 53
ns;
LEDRN <= '0' AFTER 13 ns;
LEDVE <= '0', '1' AFTER 20 ns;
LEDRE <= '0' AFTER 20 ns;
reloj: PROCESS
begin
wait for 10 ns; clk<='1'; wait for 10 ns;
clk<='0';
end process;
END;
LXXIX