Está en la página 1de 166

DiseodecircuitosdigitalesconVHDL

FelipeMachado,SusanaBorromeo
Versin1.01creadael20dejuliode2010

EstaversindigitaldeDiseodecircuitosdigitalesconVHDLhasidocreadaylicenciada
porFelipeMachadoSnchezySusanaBorromeoLpezconunalicenciadeCreative
Commons.Estalicenciapermitelosusosnocomercialesdeestaobraentantoencuantose
atribuyaautoraoriginal.Estalicencianopermitealterar,transformarogenerarunaobra
derivadaapartirdeestaobra

Conestalicenciaereslibredecopiar,distribuirycomunicarpblicamente
estaobrabajolascondicionessiguientes:
Reconocimiento:debesreconocerycitaralosautoresdeestaobra
Nocomercial:nopuedesutilizarestaobraparafinescomerciales
Sinobrasderivadas:Nosepuedealterar,transformarogeneraruna
obraderivadaapartirdeestaobra

Paramsinformacinsobrelalicencia,visitaelsiguienteenlace:
http://creativecommons.org/licenses/byncnd/3.0/

EstaobraestdisponibleenelarchivoabiertodelaUniversidadReyJuanCarlos:
http://eciencia.urjc.es/dspace/handle/10115/4045
http://hdl.handle.net/10115/4045

Paramsinformacinsobrelosautores:
http://gtebim.es/~fmachado
http://gtebim.es/

ISBN:9788469346525









Diseo de circuitos digitales con VHDL
Versin1.01creadael20dejuliode2010

FelipeMachadoSnchez
SusanaBorromeoLpez
DepartamentodeTecnologaElectrnica
UniversidadReyJuanCarlos
Mstoles,Madrid,Espaa
http://gtebim.es/
http://gtebim.es/~fmachado

AmihermanoAle
FMS
DiseodecircuitosdigitalesconVHDL
Agradecimientos

QueremosagradeceralDepartamentodeTecnologaElectrnicadelaUniversidadReyJuanCarlos
porfomentarladocenciadecalidadysuapoyoconstanteennuestraslaboresdocentes.
Tambin queremos agradecer a los alumnos de Ingeniera de Telecomunicacin por su inters
generalizadoenaprenderysuscomentariossobrenuestradocenciayprcticas

LosAutores

DiseodecircuitosdigitalesconVHDL



ndice
ndice............................................................................................................................................................ 1
Lista de acrnimos ....................................................................................................................................... 5
ndice de figuras ........................................................................................................................................... 6
ndice de cdigo VHDL................................................................................................................................. 9
ndice de tablas .......................................................................................................................................... 11
1. Introduccin............................................................................................................................................ 13
2. Encender un LED................................................................................................................................... 15
2.1. Tarjetas Pegasus y Basys..................................................................................................................................... 15
2.1.1. La tarjeta Pegasus....................................................................................................................................... 15
2.1.2. La tarjeta Basys ........................................................................................................................................... 16
2.2. Cmo encender un LED........................................................................................................................................ 17
2.3. Diseo del circuito................................................................................................................................................. 18
2.4. Sntesis e implementacin del circuito.................................................................................................................. 24
2.5. Programacin de la FPGA .................................................................................................................................... 26
2.5.1. Programacin de la tarjeta Pegasus............................................................................................................ 26
2.5.2. Programacin de la tarjeta Basys................................................................................................................ 29
2.6. Cambiar el tipo de FPGA de un proyecto.............................................................................................................. 31
2.7. Trabajar desde varios ordenadores con un mismo proyecto................................................................................ 32
2.8. Conclusin............................................................................................................................................................. 33
3. Sentencias concurrentes........................................................................................................................ 34
3.1. Diseo de un multiplexor....................................................................................................................................... 35
3.1.1. Diseo usando puertas lgicas.................................................................................................................... 35
3.1.2. Diseo usando varias sentencias concurrentes .......................................................................................... 36
3.1.3. Uso de sentencias condicionales................................................................................................................. 37
3.1.4. Uso de procesos.......................................................................................................................................... 37
3.2. Diseo de un multiplexor de 4 alternativas ........................................................................................................... 38
3.3. Diseo de un multiplexor de 4 bits de dato y dos alternativas.............................................................................. 39
3.4. Conclusiones......................................................................................................................................................... 40
4. Codificadores, decodificadores, convertidores de cdigo....................................................................... 41
4.1. Convertidor de binario a 7 segmentos .................................................................................................................. 41
4.2. Decodificador de 2 a 4.......................................................................................................................................... 43
4.3. Codificador de 8 a 3.............................................................................................................................................. 45
4.4. Conclusiones......................................................................................................................................................... 48
5. Elementos de memoria........................................................................................................................... 50
5.1. Biestable J -K ......................................................................................................................................................... 50
5.2. Descripcin de biestables en VHDL para sntesis ................................................................................................ 51
5.3. Encendido y apagado de LED con un pulsador.................................................................................................... 54
5.3.1. Primera solucin.......................................................................................................................................... 55
5.3.2. Detector de flanco........................................................................................................................................ 55
5.4. Conclusiones......................................................................................................................................................... 59
6. Contadores............................................................................................................................................. 61
6.1. Segundero............................................................................................................................................................. 61
6.2. Contador de 10 segundos..................................................................................................................................... 63
6.3. Cronmetro ........................................................................................................................................................... 65
6.3.1. Mostrar los dgitos. Solucin manual........................................................................................................... 67
6.3.2. Mostrar los dgitos. Solucin automtica..................................................................................................... 68
6.3.3. Mejoras del circuito...................................................................................................................................... 70
6.3.4. Optimizacin................................................................................................................................................ 70
6.4. Contador manual................................................................................................................................................... 71
6.5. Conclusiones......................................................................................................................................................... 72
7. Registros de desplazamiento................................................................................................................. 73
7.1. Registro de desplazamiento con carga paralelo................................................................................................... 73
7.2. Rotacin a la derecha y a la izquierda.................................................................................................................. 75
7.3. Rotacin automtica.............................................................................................................................................. 76
7.3.1. Variantes del circuito.................................................................................................................................... 76
7.4. Conclusiones......................................................................................................................................................... 76
8. Simulacin.............................................................................................................................................. 77
8.1. Ejemplo sencillo .................................................................................................................................................... 78
8.2. Ampliacin............................................................................................................................................................. 86
8.3. Conclusiones......................................................................................................................................................... 86
9. Mquinas de estados finitos................................................................................................................... 87
9.1. Mquina de estados para encender y apagar un LED con pulsador.................................................................... 87
Departamento de Tecnologa Electrnica 1
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
9.1.1. Proceso combinacional que obtiene el estado siguiente............................................................................. 89
9.1.2. Proceso secuencial...................................................................................................................................... 89
9.1.3. Proceso combinacional que proporciona las salidas................................................................................... 89
9.2. Detector de flanco con mquinas de estados....................................................................................................... 90
9.2.1. Variante........................................................................................................................................................ 91
9.3. Desplazamiento alternativo de los LED................................................................................................................ 91
9.4. Conclusiones......................................................................................................................................................... 93
10. Clave electrnica.................................................................................................................................. 95
10.1. Variantes ............................................................................................................................................................. 96
11. Circuito antirrebotes ............................................................................................................................. 97
12. Mquina expendedora.......................................................................................................................... 99
12.1. Versin sencilla................................................................................................................................................... 99
12.2. Versin decimal................................................................................................................................................. 100
13. Control con PWM............................................................................................................................... 101
13.1. Funcionamiento del PWM................................................................................................................................. 101
13.2. Control de la intensidad de un LED................................................................................................................... 101
13.3. Ampliacin a control de motores....................................................................................................................... 102
Circuitos digitales y analgicos................................................................................................................. 103
14. Control de motor paso a paso ............................................................................................................ 105
14.1. Motores paso a paso......................................................................................................................................... 105
14.1.1. Identificacin de terminales ..................................................................................................................... 105
14.1.2. Secuencia del motor paso a paso............................................................................................................ 107
14.2. Generacin de la secuencia de control con la FPGA........................................................................................ 108
14.3. Circuito de potencia para gobernar el motor..................................................................................................... 109
14.4. Conclusiones..................................................................................................................................................... 111
15. Piano electrnico................................................................................................................................ 113
15.1. Ampliaciones..................................................................................................................................................... 114
Problemas tericos................................................................................................................................... 115
16. Reproductor MP3............................................................................................................................... 117
16.1. Enunciado ......................................................................................................................................................... 117
16.2. Solucin............................................................................................................................................................. 118
16.2.1. Bloques internos del circuito.................................................................................................................... 118
16.2.2. Diagrama de transicin de estados ......................................................................................................... 118
16.2.3. Tabla de estados siguientes y salidas ..................................................................................................... 121
16.2.4. Tabla de excitacin de los biestables para biestables J -K ...................................................................... 122
16.2.5. Ecuacin simplificada para la salida Play................................................................................................ 123
16.2.6. Modelo VHDL........................................................................................................................................... 123
16.3. Solucin alternativa........................................................................................................................................... 125
17. Visualizacin del reproductor MP3..................................................................................................... 129
17.1. Enunciado ......................................................................................................................................................... 129
17.2. Solucin............................................................................................................................................................. 130
17.2.1. Esquema interno del circuito.................................................................................................................... 130
17.2.2. Modelo en VHDL...................................................................................................................................... 130
18. Robot rastreador................................................................................................................................. 133
18.1. Enunciado ......................................................................................................................................................... 133
18.2. Solucin............................................................................................................................................................. 135
18.2.1. Entradas, salidas y estados. Diagrama de estados................................................................................. 135
18.2.2. Tabla de estados siguientes y salidas ..................................................................................................... 137
18.2.3. Tabla de excitacin de biestables para biestables J -K............................................................................ 138
18.2.4. Ecuaciones simplificadas......................................................................................................................... 139
19. Teclado de telfono mvil................................................................................................................... 141
19.1. Enunciado ......................................................................................................................................................... 141
19.2. Solucin............................................................................................................................................................. 143
19.2.1. Bloques internos del circuito.................................................................................................................... 143
19.2.2. Diagrama de estados............................................................................................................................... 143
20. Clculo de temporizacin de un circuito 1.......................................................................................... 149
20.1. Enunciado ......................................................................................................................................................... 149
20.2. Solucin............................................................................................................................................................. 149
20.2.1. Metaestabilidad........................................................................................................................................ 149
20.2.2. Frecuencia mxima.................................................................................................................................. 149
21. Anlisis de un circuito 1...................................................................................................................... 151
21.1. Enunciado ......................................................................................................................................................... 151
21.2. Solucin............................................................................................................................................................. 151
21.2.1. Tabla de excitacin del autmata............................................................................................................ 151
21.2.2. Diagrama de transicin de estados ......................................................................................................... 152
22. Clculo de temporizacin de un circuito 2.......................................................................................... 153
22.1. Enunciado ......................................................................................................................................................... 153
22.2. Solucin............................................................................................................................................................. 153
2 Universidad Rey J uan Carlos

23. 24. Anlisis de un circuito 2................................................................................................................ 155
24.1. Enunciado ......................................................................................................................................................... 155
24.2. Solucin............................................................................................................................................................. 155
24.2.1. Tabla de excitacin del autmata............................................................................................................ 155
24.2.2. Diagrama de transicin de estados ......................................................................................................... 156
Referencias .............................................................................................................................................. 157

Departamento de Tecnologa Electrnica 3
Departamento de Tecnologa Electrnica


Lista de acrnimos
ALU ArithmeticLogicUnit
UnidadAritmticoLgica
CAD ComputerAidedDesgin
Diseoasistidoporordenador
CPLD ComplexProgrammableLogicDevice
Dispositivodelgicaprogramablecomplejo
DTE DepartamentodeTecnologaElectrnica
ED1 ElectrnicaDigitalI
AsignaturadelatitulacindeIngenieradeTelecomunicacindelaURJC
ED2 ElectrnicaDigitalII
AsignaturadelatitulacindeIngenieradeTelecomunicacindelaURJC
ETSIT EscuelaTcnicaSuperiordeIngenieradeTelecomunicacin
EscueladelaUniversidadReyJuanCarlos
FPGA FieldProgramableGateArray
Dispositivodelgicaprogramable,demayoresprestacionesquelosCPLD
FSM FiniteStateMachine
Mquinadeestadosfinitos
IEEE InstituteofElectricalandElectronicsEngineers
InstitutodeIngenierosElctricosyElectrnicos
LED LightEmittingDiode
Diodoemisordeluz
LSB LeastSignificantBit
Bitmenossignificativo
MSB MostSignificantBit
Bitmssignificativo
PWM PulseWidthModulation
Modulacinporanchodepulso
URJC UniversidadReyJuanCarlos
UniversidadpblicadeMadrid,Espaa
UUT UnitUnderTest
Unidadbajoprueba
VHDL VHSICHardwareDescriptionLanguage
Untipodelenguajededescripcindehardware
VHSIC VeryHighSpeedIntegratedCircuit
Circuitointegradodemuyaltavelocidad

Departamento de Tecnologa Electrnica 5


Departamento de Tecnologa Electrnica


ndice de figuras
Figura2.1:PlacaPegasusdeDigilent ................................................................................................................................................... 16
Figura2.2:PlacaBasysdeDigilent ....................................................................................................................................................... 17
Figura2.3:ConexindelosLEDdelaplacaPegasus(izquierda)ylaBasys(derecha) .............................................................. 17
Figura2.4:Ventanaparalacreacindenuevoproyecto .................................................................................................................. 19
Figura2.5:InterpretacindeltextodelencapsuladodelaFPGAdelaPegasus .......................................................................... 19
Figura2.6:InterpretacindeltextodelencapsuladodelaFPGAdelaBasys............................................................................... 19
Figura2.7:Ventanaparalaseleccindeldispositivodelnuevoproyecto..................................................................................... 20
Figura2.8:Seleccindeltipodelanuevafuentequevamosacrear .............................................................................................. 20
Figura2.9:Definicindelospuertos .................................................................................................................................................... 21
Figura2.10:Aparienciadelaherramientaalaadirlanuevafuenteled0.vhd............................................................................. 21
Figura2.11:AparienciadelaherramientaparaempezararealizarladescripcinVHDL......................................................... 22
Figura2.12:Cajanegraquedefinelaentidaddenuestrocircuito................................................................................................ 23
Figura2.13:Seleccinparalaasignacindepines............................................................................................................................. 24
Figura2.14:HerramientaPACEparalaasignacindepines........................................................................................................... 25
Figura2.15:Aspectodelasubventanadeprocesosunavezquesehasintetizadoeimplementadoeldiseo
correctamente.Enlaventanadeladerecha,enelprocesodesntesishahabidoadvertencias(warnings)
quenosiempresonimportantes,yporesotieneunsmbolotriangulardecoloramarillo .................................. 26
Figura2.16:Jumpersysuconexin ...................................................................................................................................................... 26
Figura2.17:iMPACT:componentesdetectadosyasignacindeunficherodeconfiguracin.................................................. 27
Figura2.18:OrdenparaprogramarlaFPGA...................................................................................................................................... 28
Figura2.19:Programacinrealizadaconxito................................................................................................................................... 29
Figura2.20:PantallainicialdelAdept,sindispositivosconectados............................................................................................... 30
Figura2.21:PantalladelAdeptquehadetectadoalgndispositivosconectado......................................................................... 30
Figura2.22:PantalladelAdeptquehadetectadolacadenaJTAGdedispositivos(FPGAyPROM) ...................................... 31
Figura2.23:ProcedimientoparacambiarlascaractersticasdelaFPGA....................................................................................... 32
Figura3.1:EsquemaelctricodelasconexionesdelosinterruptoresypulsadoresenlaplacaPegasus................................. 34
Figura3.2:EsquemaelctricodelasconexionesdelosinterruptoresypulsadoresenlaplacaBasys ..................................... 34
Figura3.3:ListadepalabrasreservadasdelVHDL........................................................................................................................... 35
Figura3.4:Esquemadelmultiplexor(izquierda)ydiseoenpuertas(derecha) ......................................................................... 35
Figura3.5:Esquemaenpuertasdelmultiplexorconsealesintermedias..................................................................................... 36
Figura3.6:Multiplexorde4alternativas ............................................................................................................................................. 38
Figura3.7:Definicindelospuertosdeentradaysuancho............................................................................................................ 38
Figura3.8:Multiplexorde4bitsdedato ............................................................................................................................................. 39
Figura4.1:Multiplexorysalidaa7segmentos................................................................................................................................... 41
Figura4.2:Los16nmerosrepresentablescon4bits........................................................................................................................ 42
Figura4.3:Valoresdelvectordelossegmentos(SEG)paralosnmeros0,1y2......................................................................... 42
Figura4.4:Sentenciasconcurrentesdelaarquitectura...................................................................................................................... 43
Figura4.5:Puertosdeldecodificadorytabladeverdad................................................................................................................... 44
Figura4.6:Esquemadelcircuitodeldecodificadorcompleto.......................................................................................................... 44
Figura4.7:Esquemaytabladeverdaddelcodificadorde8a3...................................................................................................... 46
Figura4.8:Esquemadebloquesdelcodificador ................................................................................................................................ 46
Figura4.9:SentenciasVHDLdelesquemadelafigura4.8 .............................................................................................................. 47
Figura5.1:TabladeverdaddelbiestableJK(izquierda)ycircuitoquequeremosimplementar(derecha) ........................... 50
Figura5.2:EditorderestriccionesdelISE(XilinxConstraintsEditor) ........................................................................................... 51
Figura5.3:TabladeverdaddelbiestableTysuesquema................................................................................................................ 55
Figura5.4:Cronogramaresultantedepulsarelbotndeencendido/apagado ............................................................................ 56
Figura5.5:Circuitodetectordeflancosinregistrarlaentrada(Mealy:norecomendadoparaestecaso) ............................... 56
Figura5.6:CronogramadeldetectordeflancorealizadoporMealy(norecomendadoparaestecaso) .................................. 57
Figura5.7:Circuitodetectordeflancoregistrandolaentrada(Moore:recomendadoparaestecaso) ..................................... 57
Figura5.8:CronogramadeldetectordeflancorealizadoporMoore(recomendadoparaestecaso) ....................................... 57
Figura5.9:CircuitoqueenciendeyapagaunLEDconelmismopulsador .................................................................................. 58
Figura5.10:CdigoVHDLdelcircuitocompleto.............................................................................................................................. 58
Figura6.1:Cronogramadelasealquequeremosobtener.............................................................................................................. 61
Figura6.2:Esquemadelcircuitoquequeremosrealizar................................................................................................................... 61
Figura6.3:Esquemadelcontadorde10segundos ............................................................................................................................ 63
Figura6.4:Entradasysalidasdelcircuito ........................................................................................................................................... 65
Figura6.5:Cronogramadelasealdeunadcimadesegundoquequeremosobtener............................................................. 65
Figura6.6:Esquemadelcronmetro.................................................................................................................................................... 66
Departamento de Tecnologa Electrnica 6
ndice de figuras
Figura6.7:Esquemadelprocesocontadordedcimas..................................................................................................................... 66
Figura6.8:Codificadorparacontrolarlosnodosdelosdisplays.................................................................................................. 67
Figura6.9:MultiplexorqueseleccionalacifraBCDsegnlaconfiguracindeosinterruptores.............................................. 67
Figura6.10:Esquemacompletodelcronmetroconvisualizacinmanual ................................................................................... 68
Figura6.11:Cronogramadelasealdeunamilsimadesegundoquequeremosobtener ...................................................... 68
Figura6.12:Multiplexadoeneltiempoparamostrarlosdisplays .................................................................................................. 69
Figura6.13:Esquemacompletodelcronmetroconvisualizacinautomtica............................................................................. 70
Figura6.14:Otraalternativaalesquemadelafigura6.9................................................................................................................... 71
Figura6.15:Diagramadeestadosdelcontadorascendente/descendentequevamosarealizar ............................................... 71
Figura6.16:Esquemadelcontadorqueimplementaremos.............................................................................................................. 72
Figura7.1:Esquemadelregistrodedesplazamientoalaizquierdaconcargaparalelo ............................................................. 73
Figura7.2:Desplazamientoalaizquierda........................................................................................................................................... 74
Figura7.3:Rotacinalaizquierda........................................................................................................................................................ 75
Figura7.4:Esquemadelcircuitoderotacinautomtica ................................................................................................................. 76
Figura8.1:Esquemageneraldeunbancodepruebas....................................................................................................................... 78
Figura8.2:Puertosdeentradaysalidadelcontadorquevamosaprobar .................................................................................... 78
Figura8.3:SeleccindenuevafuentedetipoVHDLTestBench.................................................................................................... 79
Figura8.4:CdigocreadoautomticamenteporelISEparaelbancodepruebas....................................................................... 80
Figura8.5:Distintaspartesdelareferencia(instanciacin)auncomponente........................................................................... 81
Figura8.6:Periododelasealdereloj................................................................................................................................................. 81
Figura8.7:Seleccindelentronoparasimulacin............................................................................................................................. 82
Figura8.8:Entronoparasimulacin..................................................................................................................................................... 83
Figura8.9:Cambiodelaspropiedadesdelproyecto......................................................................................................................... 84
Figura8.10:SeleccindelISESimulator .............................................................................................................................................. 84
Figura8.11:Arranquedelasimulacin ............................................................................................................................................... 85
Figura8.12:Resultadodelasimulacin............................................................................................................................................... 85
Figura8.13:Visualizacindecuent acomodecimalsinsigno....................................................................................................... 86
Figura9.1:Esquemageneraldelosprocesosdeunamquinadeestados .................................................................................... 87
Figura9.2:BloquesdelcircuitoparaencenderyapagarunLED.................................................................................................... 88
Figura9.3:DiagramadetransicindeestadosparaencenderunLEDconunpulsador............................................................ 88
Figura9.4:Diagramadeestadosdeldetectordeflancos(Moore)................................................................................................... 90
Figura9.5:Cronogramadecuandollegalasecuencia0101.............................................................................................................. 91
Figura9.6:Diagramadeestadosmodificado...................................................................................................................................... 91
Figura9.7:EsquemadelcircuitodelmovimientoalternativodelosLED..................................................................................... 92
Figura9.8:Diagramadetransicindeestados ................................................................................................................................... 93
Figura10.1:Esquemadelcircuitodelaclaveelectrnica ................................................................................................................. 96
Figura11.1:EsquemadelospulsadoresenlaplacaPegasusyenlaplacaBasys ........................................................................ 97
Figura11.2:Cronogramadelasalidadeldetectordeflancos(PULSO_BTN)cuandohayrebotesenlaentrada(BTN) ........ 97
Figura11.3:Cronogramadelasalidadelfiltroantirrebotes(FI LTRO_BTN)cuandohayrebotesenlaentrada(BTN) ........ 98
Figura11.4:Esquemadelcircuitoquefiltralosrebotesdelaentrada............................................................................................ 98
Figura11.5:Diagramadeestadosdelcircuitoquefiltralospulsos ................................................................................................ 98
Figura12.1:Esquemadepuertosdeentradaysalidadelcontroldelamquinaexpendedora ................................................ 99
Figura12.2:Esquemainternodelcircuitodecontroldelamquinaexpendedorasimple ...................................................... 100
Figura12.3:Indicacionesdelosdisplayssegnelestado............................................................................................................... 100
Figura13.1:SealPWMqueselehacambiadoelciclodetrabajo................................................................................................ 101
Figura13.2:ControldevelocidadconelPWM ................................................................................................................................ 101
Figura13.3:Los8ciclosdetrabajoposiblesconunPWMde3bitsderesolucin..................................................................... 102
Figura13.4:CircuitodepotenciaparacontrolarelmotordesdelaFPGA................................................................................... 102
Figura14.1:Conexininternadeunmotorunipolar ...................................................................................................................... 106
Figura14.2:ElterminalAatierra ....................................................................................................................................................... 106
Figura14.3:Resultadodeponeratierracadaunodelosotrostresterminales,cuandoelmotorpierdeparindicaque
eselcorrespondiente ....................................................................................................................................................... 106
Figura14.4:IdentificacindelosterminalesennuestromotorPM55L048deMinebea .......................................................... 107
Figura14.5:Secuenciadeterminalesqueseponenatierraparaobtenerelgirodelmotor ..................................................... 107
Figura14.6:Secuenciadeterminalesqueseponenatierraparaobtenerelgirodelmotorenambossentidos ................... 107
Figura14.7:BloquedecontroldemotordelaFPGA ...................................................................................................................... 108
Figura14.8:EsquemadelamquinadeestadosparaelbloquedecontroldemotordelaFPGA.......................................... 109
Figura14.9:Posibleesquemadelaelectrnicadepotenciaparamanejarelmotor ................................................................... 110
Figura14.10:Esquemadelcircuitoconoptoacopladores ............................................................................................................... 110
Figura14.11:EsquemadelcircuitousandoelcircuitointegradoSN754410.............................................................................. 111
Figura15.1:Esquemadelcircuitodepianoelectrnicobsico...................................................................................................... 113
Figura15.2:Esquemageneraldelcircuitodeamplificacin .......................................................................................................... 114
Figura16.1:Bloquesinternosdelcircuito.......................................................................................................................................... 118
Figura16.2:Ordendeentradasysalidasenlarepresentacindelamquinadeestados........................................................ 119
Departamento de Tecnologa Electrnica 7
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
Figura16.3:Estadoinicial..................................................................................................................................................................... 119
Figura16.4:Transicinaunestadodeespera .................................................................................................................................. 119
Figura16.5:Transicinaestadodereproduccinoavance ........................................................................................................... 120
Figura16.6:Estadodereproduccinyavance.................................................................................................................................. 120
Figura16.7:Transicindesdeelestadodeavancealestadodereproduccin........................................................................... 120
Figura16.8:Diagramafinaldelamquinadeestados.................................................................................................................... 121
Figura16.9:DiagramadeKarnaughyecuacindelasalidaPlay................................................................................................. 123
Figura16.10:Diagramadebloquesdelasolucinalternativa....................................................................................................... 125
Figura16.11:Diagramadebloquesmsdetalladodelasolucinalternativa............................................................................. 126
Figura16.12:Ordendeentradasysalidasenlarepresentacindelaprimeramquinadeestados ..................................... 126
Figura16.13:Diagramadelaprimeramquinadeestadosdelasolucinalternativa............................................................. 126
Figura16.14:Ordendeentradasysalidasenlarepresentacindelasegundamquinadeestados..................................... 127
Figura16.15:Diagramadelasegundamquinadeestadosdelasolucinalternativa............................................................ 127
Figura17.1:Textoquedebendemostrarlosdisplaysdesietesegmentos .................................................................................. 129
Figura17.2:Segmentosdeldisplay..................................................................................................................................................... 129
Figura17.3:Esquemadelcircuito ....................................................................................................................................................... 129
Figura17.4:Esquemadelcircuitodevisualizacin ......................................................................................................................... 130
Figura18.1:Cochevistodesdearriba................................................................................................................................................. 133
Figura18.2:Esquemadeentradasysalidasdelsistemadecontrol .............................................................................................. 133
Figura18.3:Distintasposicionesdelcocherespectoalalnea....................................................................................................... 134
Figura18.4:Posicindelosreceptoresrespectoalalneaygiro .................................................................................................. 135
Figura18.5:Ordendeentradasysalidaseneldiagramadeestados............................................................................................ 136
Figura18.6:Estadoinicialysustransiciones .................................................................................................................................... 136
Figura18.7:Estadosconundetectorsobrelalneayotrofuera.................................................................................................... 136
Figura18.8:Diagramadeestadosfinalsinreducir .......................................................................................................................... 137
Figura18.9:Diagramadeestadosfinalreducido............................................................................................................................ 137
Figura18.10:MapasdeKarnaughyecuacionesdelasentradasdelosbiestables ..................................................................... 139
Figura19.1:Esquemadeentradasysalidasdelsistemadecontrol .............................................................................................. 141
Figura19.2:Bloquesinternosdelcircuito.......................................................................................................................................... 143
Figura19.3:Ordendeentradasysalidaseneldiagramadeestados............................................................................................ 143
Figura19.4:Ordendeentradasysalidaseneldiagramadeestados.Salidasconinicialesparasimplificar......................... 143
Figura19.5:Estadoinicial..................................................................................................................................................................... 143
Figura19.6:Estadodeespera............................................................................................................................................................... 144
Figura19.7:Estadodeesperaaquesueltelatecla........................................................................................................................... 144
Figura19.8:Sefijaeldosenelcasoimprobablequesueltelateclaalavezqueterminalatemporizacin .......................... 145
Figura19.9:Sesueltalateclaantesdequepaseunsegundo:nuevaespera ............................................................................... 145
Figura19.10:NuevaesperaaquesesuelteB.................................................................................................................................... 146
Figura19.11:SehasoltadoPantesdequepaseunsegundo ......................................................................................................... 146
Figura19.12:EnlaesperaaversisevuelveapulsarPmostrandolaB....................................................................................... 147
Figura19.13:Diagramadeestadosfinal ............................................................................................................................................ 148
Figura20.1:Circuitoparaanalizar...................................................................................................................................................... 149
Figura21.1:Diagramadetransicindeestados ............................................................................................................................... 152
Figura22.1:Circuitoparaanalizar...................................................................................................................................................... 153
Figura24.1:Circuitoparaanalizar...................................................................................................................................................... 155
Figura24.2:Diagramadetransicindeestados ............................................................................................................................... 156

8 Universidad Rey J uan Carlos





ndice de cdigo VHDL
Cdigo21:ArquitecturaqueenciendeunLEDyapagaotro ......................................................................................................... 23
Cdigo31:Sentenciaconcurrentequedefineelmultiplexorenpuertas...................................................................................... 36
Cdigo32:Sentenciasconcurrentesquedefinenelmultiplexorenpuertas(equivalentealcdigo31) ................................ 36
Cdigo33:Otraversindelassentenciasconcurrentesquedefinenelmultiplexorenpuertas(equivalentealos
cdigos31y32) ................................................................................................................................................................ 37
Cdigo34:Sentenciaconcurrentecondicionadaquedefineelmultiplexor................................................................................. 37
Cdigo35:Sentenciaconcurrentecondicionadaquedefineelmultiplexor................................................................................. 37
Cdigo36:Entidaddelmultiplexorde4alternativas....................................................................................................................... 38
Cdigo37:Sentenciaconcurrentecondicionadaquedefineelmultiplexordecuatroalternativas......................................... 39
Cdigo38:ProcesoconsentenciaI F ................................................................................................................................................... 39
Cdigo39:ProcesoconsentenciaCASE............................................................................................................................................... 39
Cdigo310:Entidaddelmultiplexorde4alternativas..................................................................................................................... 39
Cdigo41:Decodificadorconsentenciaconcurrente........................................................................................................................ 45
Cdigo42:Decodificadorconproceso................................................................................................................................................. 45
Cdigo43:Unaformadeasignarelmismovaloratodoslosbitsdeunvector........................................................................... 45
Cdigo44:Habilitacinconsealauxiliar......................................................................................................................................... 47
Cdigo45:Habilitacindentrodelasentencia................................................................................................................................. 48
Cdigo46:Otraalternativaalcircuitodelafigura4.8,todoenunmismoproceso................................................................... 48
Cdigo51:ProcesoqueimplementaunbiestableJK...................................................................................................................... 50
Cdigo52:OtraalternativaparaelbiestableJK.............................................................................................................................. 50
Cdigo53:SentenciaderelojCORRECTA ........................................................................................................................................ 52
Cdigo54:sentenciaderelojINCORRECTA.................................................................................................................................... 52
Cdigo55:Inicializacinsncrona....................................................................................................................................................... 52
Cdigo56:Asignacinantesdelainicializacin.INCORRECTA................................................................................................. 52
Cdigo57:Asignacinfueradelreloj.INCORRECTA.................................................................................................................... 52
Cdigo58:Asignacindespusdelasentenciadereloj.INCORRECTA..................................................................................... 53
Cdigo59:Listadesensibilidadconelrelojylassealesasncronas ........................................................................................... 53
Cdigo510:Procesoequivalentealdelcdigo511......................................................................................................................... 53
Cdigo511:Procesoequivalentealdelcdigo510......................................................................................................................... 53
Cdigo512:Procesocombinacional(nogeneralatch).Correcto.................................................................................................... 54
Cdigo513:Procesoquegeneralatch.Posiblementenoloquierasgenerar............................................................................... 54
Cdigo514:Procesocombinacional(nogeneralatch) ..................................................................................................................... 54
Cdigo515:Procesoqueesposiblequegenerelatch.Norecomendado...................................................................................... 54
Cdigo516:Procesocombinacionalequivalentealcdigo512(nogeneralatch)...................................................................... 54
Cdigo517:Procesocombinacionalequivalentealcdigo514(nogeneralatch)...................................................................... 54
Cdigo518:ProcesoqueimplementaunbiestableT....................................................................................................................... 55
Cdigo519:AlternativaquedescribeelbiestableT......................................................................................................................... 55
Cdigo520:Procesoqueimplementalos2biestablesD ................................................................................................................. 59
Cdigo521:Procesoequivalenteal520............................................................................................................................................. 59
Cdigo61:Arquitecturadelcontador................................................................................................................................................. 62
Cdigo62:Procesoequivalentealosdosprocesosdelcdigo61 ................................................................................................ 63
Cdigo63:Declaracindesealunsi gned...................................................................................................................................... 64
Cdigo64:BibliotecaspordefectoqueponeelISE.......................................................................................................................... 64
Cdigo65:Bibliotecasrecomendadas................................................................................................................................................. 64
Cdigo66:Procesoquecuenta10segundos...................................................................................................................................... 65
Cdigo67:Procesocontadordedcimas ........................................................................................................................................... 66
Cdigo68:Cdigodelcontadorascendente/descendentequenosedesborda........................................................................... 72
Cdigo71:Cdigodelprocesoderegistrodedesplazamiento...................................................................................................... 74
Cdigo72:Cdigoequivalentealcdigo71 .................................................................................................................................... 74
Cdigo73:Cdigoequivalentealcdigo71 .................................................................................................................................... 74
Cdigo74:Cdigodelprocesoquerotaaizquierdayderecha ..................................................................................................... 75
Cdigo75:Cdigoequivalentealcdigo74 .................................................................................................................................... 75
Cdigo81:CdigoquesimulaelfuncionamientodelrelojdelaplacaPegasus(50MHz)....................................................... 81
Cdigo82:Cdigoquesimulaelfuncionamientodelreset............................................................................................................ 82
Cdigo91:Declaracindeuntipoenumeradoparalamquinadeestados ............................................................................... 88
Cdigo92:Declaracindelassealesdeestadodetipoest ados_l ed anteriormentedeclarado....................................... 88
Cdigo93:Procesoqueobtieneelestadosiguiente ......................................................................................................................... 89
Cdigo94:Procesoqueactualizayguardaelestado....................................................................................................................... 89
Departamento de Tecnologa Electrnica 9
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
Cdigo95:Procesoqueproporcionalasalida................................................................................................................................... 90
Cdigo96:Declaracindetiposenumeradosdistintosparacadamquinadeestados............................................................ 90
Cdigo97:Cdigodelprocesocombinacionalqueobtieneelestadosiguiente ......................................................................... 93
Cdigo161:EntidaddelcircuitoMP3 .............................................................................................................................................. 123
Cdigo162:ArquitecturadelcircuitoMP3...................................................................................................................................... 125
Cdigo171:ArquitecturadelcircuitodevisualizacindelMP3 ................................................................................................. 131

10 Universidad Rey J uan Carlos



ndice de tablas
Tabla61:Displaysquesemuestransegnlaconfiguracindelosinterruptores....................................................................... 67
Tabla151:Frecuenciasdelasnotasendistintasoctavas ................................................................................................................ 113
Tabla16.1:Codificacindeestados .................................................................................................................................................... 121
Tabla16.2:Tabladeestadossiguientesysalidas ............................................................................................................................. 122
Tabla16.3:TabladeentradasnecesariasparaobtenerunatransicinenbiestablesJK........................................................... 122
Tabla16.4:TabladeexcitacindelosnecesariasparaobtenerunatransicinenbiestablesJK............................................ 123
Tabla18.1:Codificacindeestados .................................................................................................................................................... 137
Tabla18.2:Tabladeestadossiguientesysalidas ............................................................................................................................. 138
Tabla18.3:TabladeentradasnecesariasparaobtenerunatransicinenbiestablesJK........................................................... 138
Tabla18.4:TabladeexcitacindelosnecesariasparaobtenerunatransicinenbiestablesJK............................................ 139
Tabla20.1:Caractersticasdeloscomponentesdelcircuito ........................................................................................................... 149
Tabla20.2:Tiemposdepropagacinmximos................................................................................................................................. 150
Tabla21.1:Tabladelestadosiguiente ................................................................................................................................................ 151
Tabla21.2:Tabladeexcitacindelautmata.................................................................................................................................... 151
Tabla22.1:Caractersticasdeloscomponentesdelcircuito ........................................................................................................... 153
Tabla22.2:Tiemposdepropagacinmximos................................................................................................................................. 153
Tabla24.1:Tablasdeverdaddelasentradasdelosbiestables ...................................................................................................... 155
Tabla24.2:Tabladelestadosiguiente ................................................................................................................................................ 156
Tabla24.3:Tabladeexcitacindelautmata.................................................................................................................................... 156
Departamento de Tecnologa Electrnica 11



1. Introduccin
Este manual es una gua prctica para aprender a disear circuitos digitales mediante el
uso de VHDL y dispositivos lgicos programables (CPLD o FPGA). Este manual se ha
desarrollado en el Departamento de Tecnologa Electrnica [5] de la Universidad Rey
Juan Carlos para las prcticas de la asignatura Electrnica Digital II (ED2 [8]) de la
titulacin de Ingeniera de Telecomunicacin
1
. Previamente, los alumnos de esta carrera
hancursadolaasignaturaElectrnicaDigitalI(ED1).EnED1losalumnosadquirieronlos
conceptos bsicos de la electrnica digital y realizaron diseos tanto con componentes
discretoscomocondispositivoslgicosprogramables.LasprcticasrealizadasconFPGA
de ED1 estn guiadas en el manual de la referencia [12]. En dichas prcticas se ensea a
disearcircuitoselectrnicosdigitalesconesquemticosyFPGA.
Por tanto para seguir este manual con una mayor comprensin se recomienda tener
conceptosbsicosdelossistemasdenumeracinyelectrnicadigital:diseoconpuertas
lgicas,bloquescombinacionales,elementosdememoria,registrosycontadores.Realizar
lasprcticasdeED1[12]esunabuenabaseparaseguirestemanual.
Adems de las prcticas de clase, en este manual se han incluido dos secciones
adicionales.Porunlado,apartirdelapgina103sehaaadidounaseccindecircuitos
digitalesyanalgicosenlaqueseincluyendos captulos conalgunasindicacionessobre
cmo realizar la parte analgica de los circuitos. Por otro lado, a partir de la 115 se ha
incluidolaresolucindeproblemastericos.Estosproblemasfueronejerciciosdeexamen
duranteelcurso20082009.
Aspues,comoyasehadicho,enestemanualaprenderemosadisearcircuitosdigitales
medianteVHDLyelusodedispositivoslgicosprogramables.ElVHDLesunlenguaje
de descripcin de hardware que permite modelar y disear circuitos electrnicos
digitales. Se pueden disear circuitos electrnicos digitales sin utilizar lenguajes de
descripcindehardware.Porejemplo,usandoesquemticospodemosdisearuncircuito
electrnico digital [12]. Disear mediante esquemticos es una manera ms intuitiva y
menos abstracta de disear, y por esto creemos que es la forma ms recomendable para
aprender a disear. Si no tenemos unas bases slidas en el diseo con esquemticos, al
disear con VHDL podemos perder la nocin de lo que estamos haciendo y pensar que
estamos usando un lenguaje de programacin habitual (C, Pascal, ...). No tener una idea
aproximada del hardware (esquemtico) que se genera a partir del cdigo VHDL es una
delaslimitacionesmsgrandesquepodemostenercomodiseadores.
Sinembargo,unavezquesabemosdisearconesquemticos,loslenguajesdedescripcin
dehardwarenosfacilitaneldiseoyaque,entreotrosbeneficios,nosproporcionan:
Unniveldeabstraccinmayor,ahorrndonosmuchosdetallesdelaimplementacin
Unamayorfacilidadparalareutilizacinyhacermodificaciones
Unamayorcapacidadparamanejarparamanejarcircuitosgrandes

1
Esteplandeestudiosempezaextinguirseapartirdelcurso20092010conlaimplantacindelosgradosde
Boloniaenelprimercurso
Departamento de Tecnologa Electrnica 13
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
Posibilidadderealizarbancosdepruebasmscomplejosparasimularlafuncionalidad
denuestrodiseo.
Estos beneficios los podremos apreciar si comparamos el cdigo VHDL de los diseos
propuestosconsudiseoenesquemticos.Porejemplo,podremoscompararelcontador
realizado con VHDL (captulo 6) con el contador realizado en esquemticos (captulo 19
delareferencia[12]).
ElVHDLesunestndardelInstitutodeIngenierosElctricosyElectrnicos
2
(IEEE[13]).
Existen otros lenguajes de descripcin de hardware como el Verilog o el SystemC.
Histricamente,elusodeVHDLoVeriloghadivididoalacomunidaddediseadores,lo
quehaprovocadodificultadesenelintercambiodediseosyalasempresasquefabrican
herramientasinformticasdeayudaaldiseo(CAD).
ElVHDLesunlenguajemuyamplioquefuecreadoparamodelarcircuitos.Mstardese
empez a utilizar para disear circuitos, utilizando para ello slo un conjunto reducido
del VHDL, lo que se llama VHDL para sntesis [14]. La transformacin de un circuito
descrito en VHDL a su esquema en puertas lgicas y biestables se llama sntesis. Esta
sntesislarealizanautomticamentelasherramientasCAD,graciasaestolosdiseadores
ahorranmuchotiempodediseo.Enestemanualnoaprenderemosautilizarlatotalidad
del VHDL, sino que usaremos un conjunto restringido del lenguaje orientado a sntesis.
Lo que es ms, tampoco usaremos todo el conjunto de VHDL para sntesis, sino que
utilizaremosloquevayamosnecesitando.Porsuerteopordesgracia,enVHDLunacosa
se puede describir de muchas maneras distintas. Por lo general, en este manual
aprenderemosslounadeellas.

Por ltimo, con el fin de que este manual pueda llegar al mayor nmero de personas y
con el objetivo de generar material educativo abierto, hemos publicado este manual bajo
licenciaCreativeCommons[3]quepermitecopiarloydistribuirlo.Esperamosquedisfrutes
de su lectura y que te ayude a aprender a disear circuitos electrnicos digitales. Para ir
mejorando el manual, agradeceremos la comunicacin de comentarios, sugerencias y
correccionesalasdireccionesdecorreoelectrnicodelosautores.
felipe.machado@urjc.esysusana.borromeo@urjc.es.


2
InstituteofElectricalandElectronicsEngineers
14 Universidad Rey J uan Carlos



2. Encender un LED
Enlasprcticasdeestemanualrealizaremosdiseosbastantemscomplejosquelosque
hicimosenElectrnicaDigitalI[12].Porunladoporqueyasabemosmsdeelectrnicay
porotroladoporquedisearemosconVHDL.ElVHDLesunlenguajededescripcinde
hardwarequenospermitirrealizardiseosavanzadosdemaneramsrpidayeficiente
quecuandousbamoslosesquemticos.
Como ya vimos en las prcticas de Electrnica Digital I, siempre que se introduzca una
novedadeneldiseodebemosrealizarundiseodepruebalomssencilloposiblepara
ver si todo funciona bien. En nuestro caso, en esta primera prctica queremos probar el
proceso de diseo en VHDL, as que vamos a realizar un diseo VHDL que sea muy
sencilloparaprobarquetodoloprocesovabien.Portanto,nuestrodiseodepruebaser
encenderunLEDdescribiendoelcircuitoenVHDLenvezdeenesquemticos.
EstaprcticanosservirpararepasarelentornodediseodeXilinx[25]:elISEWebPack
3

[15].Enelrestodelasprcticasnoseharreferenciaalentornodedesarrollo.Asquesi
tienesdudasdecmoimplementarelcircuitoenlaFPGA,vuelveaestaprcticaorepasa
lasprcticasdelaopasado[12].
2.1. Tarjetas Pegasus y Basys
La tarjeta que utilizaremos en prcticas es la Pegasus [19] de la empresa Digilent [6]. Esta
tarjetayanoseproduce,perosepodrutilizarsinmuchadificultadcualquierotrotipode
placasquetengancaractersticassimilares,comolaBasys[2]olaNexys,...
Como hay algunas diferencias en la programacin de la Pegasus y la Basys, en los
siguientessubapartadosseexplicarncadaunadeellas.
2.1.1. La tarjeta Pegasus
La tarjeta Pegasus contiene una FPGA de Xilinx de modelo SpartanII XC2S50 XC2S200
con encapsulado PQ208. Estas FPGA tienen respectivamente 50000 200000 puertas
lgicasequivalentesy140pinesdisponiblesparaelusuario.Conestacapacidadpodemos
hacerdiseosdigitalesbastantegrandes.
LaplacaPegasuscontienedistintosperifricosquenosfacilitarnlatareadeldiseo,como
porejemplo:8LED,4displaysde7segmentos,4botones,8interruptores,unpuertoPS/2
(para ratn o teclado), un puerto VGA (para conectar un monitor), y varios puertos de
expansin.Enlafigura2.1semuestralaplacaPegasus,yenlaquesesealanvariosdesus
componentes. La foto de la placa no coincide exactamentecon la versin de la placa que
tenemos en el laboratorio y hay algunos componentes que no estn en el mismo lugar,
aunquestodoslosquesehansealado.

3
Herramientagratuitaquesepuededescargaren:
http://www.xilinx.com/webpack/classics/wpclassic/index.htm
Departamento de Tecnologa Electrnica 15
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
FPGA Memoria
Flash
Display
7 segmentos
Puerto
accesorio
Pulsadores Interruptores
Conector J TAG
J umpers de
configuracin
Alimentacin
VGA
PS/2
Conector
de expansin
LEDs
FPGA Memoria
Flash
Display
7 segmentos
Puerto
accesorio
Pulsadores Interruptores
Conector J TAG
J umpers de
configuracin
Alimentacin
VGA
PS/2
Conector
de expansin
LEDs

Figura 2.1: Placa Pegasus de Digilent
A medida que vayamos avanzando con la prctica iremos aprendiendo la funcionalidad
delaplaca.Anas,sitienescuriosidad,enlapginawebdeDigilentpuedesconsultarel
manualdelaplacaeningls[19].
2.1.2. La tarjeta Basys
La tarjeta Basys contiene una FPGA de Xilinx de modelo Spartan3E XC3S100E
XC3S250E con encapsulado TQ144. Estas FPGA tienen respectivamente 100000 250000
puertaslgicasequivalentesy108pinesdisponiblesparaelusuario.
La placa Basys tiene muchos perifricos similares a la Pegasus, por ejemplo: 8 LED, 4
displaysde7segmentos,4pulsadores,8interruptores,unpuertoPS/2yunpuertoVGA.
Los puertos de expansin son diferentes a la Pegasus, la tarjeta Basys tiene 4 puertos de
expansindetipoPMOD,conlosquepodemosconectarunagranvariedaddeperifricos
disponibles
4
o incluso podemos hacrnoslos nosotros mismos. La Pegasus slo tiene un
puertoPMOD.Enlafigura2.2semuestralarevisinEdelaplacaBasys,enellasesealan
variosdesuscomponentes.

4
LosconectoresPMODsonmuyvariados:pantallasdecristallquido,circuitoscontroldemotores,antenas,
joysticks,amplificadoresdeaudio,micrfonos,etc.Sepuedenveren
http://www.digilentinc.com/Products/Catalog.cfm?NavPath=2,401&Cat=9
16 Universidad Rey J uan Carlos
2. Encender un LED
FPGA
Displays
7 segmentos
Interruptor
para encender
la tarjeta
Pulsadores
Interruptores
J umpers de
configuracin
USB
VGA
PS/2
Conectores PMOD
LEDs
J umpers para
la frecuencia
del reloj
FPGA
Displays
7 segmentos
Interruptor
para encender
la tarjeta
Pulsadores
Interruptores
J umpers de
configuracin
USB
VGA VGA
PS/2 PS/2
Conectores PMOD
LEDs
J umpers para
la frecuencia
del reloj

Figura 2.2: Placa Basys de Digilent


2.2. Cmo encender un LED
Del ao pasado ya sabemos encender un LED. Ya hemos visto que las placas Pegasus y
Basys tienen 8 LED disponibles para utilizar, cada uno de estos LED van conectados a
distintospinesdelaFPGA.LaconexindelosLEDsemuestraenlafigura2.3.Enellase
indicanqupinesdelaFPGAestnconectadosalosLED.PorejemploelLEDnmero0
de la Pegasus est conectado al pin 46. Para facilitar esta identificacin, la placa Pegasus
lleva impresos la identificacin del LED y el pin asociado de la FPGA (en la Basys no
5
).
As, podemos ver cmo al lado del LED 0 (LD0) de la Pegasus est el nmero 46 entre
parntesis. Podemos apreciar que esto se cumple para casi todos los componentes:
pulsadores,interruptores,....EstonoocurreenlaBasysyparaellatenemosqueconsultar
sumanualdereferencia.
390
PI N LED
46 LD0
45 LD1
44 LD2
43 LD3
42 LD4
41 LD5
37 LD6
36 LD7
'1' Encendido
'0' Apagado
Spartan-II
PEGASUS
390
PI N LED
15 LD0
14 LD1
08 LD2
07 LD3
05 LD4
04 LD5
03 LD6
02 LD7
'1' Encendido
'0' Apagado
Spartan-3E
BASYS
390
PI N LED
46 LD0
45 LD1
44 LD2
43 LD3
42 LD4
41 LD5
37 LD6
36 LD7
'1' Encendido
'0' Apagado
Spartan-II
PEGASUS
390
PI N LED
46 LD0
45 LD1
44 LD2
43 LD3
42 LD4
41 LD5
37 LD6
36 LD7
'1' Encendido
'0' Apagado
Spartan-II
390
PI N LED
46 LD0
45 LD1
44 LD2
43 LD3
42 LD4
41 LD5
37 LD6
36 LD7
'1' Encendido
'0' Apagado
Spartan-II
PEGASUS
390
PI N LED
15 LD0
14 LD1
08 LD2
07 LD3
05 LD4
04 LD5
03 LD6
02 LD7
'1' Encendido
'0' Apagado
Spartan-3E
BASYS
390
PI N LED
15 LD0
14 LD1
08 LD2
07 LD3
05 LD4
04 LD5
03 LD6
02 LD7
'1' Encendido
'0' Apagado
Spartan-3E
390
PI N LED
15 LD0
14 LD1
08 LD2
07 LD3
05 LD4
04 LD5
03 LD6
02 LD7
'1' Encendido
'0' Apagado
Spartan-3E
BASYS

Figura 2.3: Conexin de los LED de la placa Pegasus (izquierda) y la Basys (derecha)
Viendoelesquemaelctricodelafigura2.3podemosdeducirquesiponemosun1lgico
en el pin 46 de la FPGA de la Pegasus encenderemos el LED, ya que con un 1 lgico la
FPGApondrunatensinde3,3voltiosenesepin(queeselniveldetensindeesepin
de la FPGA). Por el contrario, si ponemos un 0 lgico en el pin 45, mantendremos
apagadoelLED1(LD1),puestoquenocircularcorrienteporl.

5
TencuidadoporquelaBasysvieneconundibujoconlacorrespondenciaconlospines,yalgunosdeellos
estnmal.Esmsseguroconsultarlosenelmanualdereferencia.
Departamento de Tecnologa Electrnica 17
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
As pues, ste ser el objetivo del primer ejercicio, poner un1 enel pin46 y un 0 en el
pin45(paralaBasyslospondremosenlospines15y14respectivamente).Sidespusde
programar la FPGA el LED 0 se enciende y el LED 1 se apaga habremos cumplido el
objetivo. Con el resto de pines que van a los otros LED no haremos nada, en teora,
hacindolo as no deberan lucir, ya que por defecto la FPGA pone resistencias de pull
downenlospinesnoconfigurados,yunaresistenciadepulldownponelasalidaatierra.
2.3. Diseo del circuito
EldiseodelcircuitoloharemosconlaherramientaISEFoundationoconISEWebPackde
Xilinx, esta ltima es la versin gratuita que se puede descargar en la pgina web de
Xilinx.Estaprcticaestreferidaalaversin9.2,debidoaqueexistennuevasversiones,
puedesdescargarestaversinen:http://www.xilinx.com/ise/logic_design_prod/classics.htm
ParaarrancarelprogramapincharemoseneliconodeXilinxobien,desde:
InicioTodos los programasXilinx ISE 9.2iProject Navigator
Nos puede aparecer una ventana con el Tip of the day que son indicaciones que hace la
herramientas cada vez que la arrancamos. Si las leemos habitualmente podemos ir
aprendiendopocoapoco.PinchamosenOk,conloquesecierradichaventana.
Normalmente la herramienta abre el ltimo proyecto que se ha realizado. As que lo
cerramospinchandoen:FileClose Project.
Para empezar a crear nuestro nuevo proyecto, pinchamos en FileNew Project... y nos
saldr la ventana New Project Wizard Create New Project como la mostrada en la figura
2.4.Enellapondremoselnombredelproyecto,quelollamaremosled0,indicamoslaruta
donde guardaremos el proyecto, que ser C: / pr act i cas/ ed2/ tunombre. Respecto al
nombreyalaruta,esconveniente:
NotrabajardesdeundispositivodememoriaUSB
6
.
Noincluirespaciosenlaruta,portanto,estoincluyenotrabajarenel"Escritorio"ni
en"Mis documentos"
Noincluirenlarutaoenelnombreacentosniees,nicaracteresextraos,ninombres
muylargos,lomsconvenienteeslimitarseacaracteresalfanumricos,yusarelguin
bajoenvezdelespacio.
Paraelltimorecuadrodelaventana,dondeponeTopLevelSourceTypeseleccionaremos
HDL,yaquenuestrodiseoloharemosmediantelenguajesdedescripcindehardware
7
.

6
Sieststrabajandoenellaboratorio,alterminarlasesinnoolvidescopiarlosficherosconextensin. vhdy
. ucf entumemoriaUSBoentucorreoelectrnico(ocupanmuypoco).Delocontrario,elprximoda
puedeserquelosficheroshayandesaparecido.
7
HDL:delingls:HardwareDescriptionLanguage
18 Universidad Rey J uan Carlos
2. Encender un LED

Figura 2.4: Ventana para la creacin de nuevo proyecto


UnavezquehemosrellenadolostresrecuadrospinchamosenNext.Ahoranosaparecela
ventana de seleccin del dispositivo (figura 2.7). En Product Category ponemos All. En la
familiaponemos:
Spartan2sitenemoslaPegasus
Spartan3EsiusamoslaBasys
Los siguientes datos los podemos obtener a partir de la observacin del texto del
encapsulado de la FPGA, que se muestran en la figura 2.5 para la Pegasus y la figura 2.6
para la Basys. Hay que observar los valores que tiene la FPGA de nuestra placa, ya que
por ejemplo, en la Pegasys en algunas el tipo es XC2S200 y en otras es XC2S50. Lo mismo
sucedeconlavelocidad,enalgunases5yotras6.

XC2S200
PQ208
5C
tipo de dispositivo
encapsulado
velocidad
rango de operacin
C: comercial
cdigo de lote
cdigo de fecha XC2S200
PQ208
5C
tipo de dispositivo
encapsulado
velocidad
rango de operacin
C: comercial
cdigo de lote
cdigo de fecha
Figura 2.5: Interpretacin del texto del encapsulado de
la FPGA de la Pegasus
XC3S100E
TQG144
4C
tipo de dispositivo
encapsulado
velocidad
rango de operacin
C: comercial
cdigo
cdigo XC3S100E
TQG144
4C
tipo de dispositivo
encapsulado
velocidad
rango de operacin
C: comercial
cdigo
cdigo

Figura 2.6: Interpretacin del texto del


encapsulado de la FPGA de la Basys
Paralaseleccindelaherramientadesntesisnotenemosalternativa,yparaelsimulador
en esta prctica no es importante y lo dejamos en ISE Simulator (VHDL/Verilog). En el
lenguajededescripcindehardwarepreferido(PreferredLanguage)sedejaelVHDL,quees
elqueusaremos.AlterminarpinchamosenNext.
Departamento de Tecnologa Electrnica 19
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
Mirar en la FPGA
Mirar en la FPGA
Pegasus Basys
Spartan2 Spartan3E
PQ208 TQ144
Family
Device
Package
Speed
Mirar en la FPGA
Mirar en la FPGA
Pegasus Basys
Spartan2 Spartan3E
PQ208 TQ144
Family
Device
Package
Speed
Mirar en la FPGA
Mirar en la FPGA
Pegasus Basys
Spartan2 Spartan3E
PQ208 TQ144
Family
Device
Package
Speed

Figura 2.7: Ventana para la seleccin del dispositivo del nuevo proyecto
En las dos siguientes ventanas pinchamos en Next sin rellenar nada y en la ltima
pinchamosenFinish.
Ya tenemosel proyecto creado y ahora nos disponemosa crear nuestrodiseo. Para ello
creamosunanuevafuente(fichero)paraelproyectopinchandoenProjectNew Source.
Estoharaparecerunanuevaventanaquenospedirqueseleccionemoseltipodefuente
que queremos crear. Como estamos trabajando en VHDL, seleccionamos VHDL Module, y
nombramos al fichero led0. Este paso se muestra en la figura 2.8. Posteriormente
pinchamosenNext..

Figura 2.8: Seleccin del tipo de la nueva fuente que vamos a crear
20 Universidad Rey J uan Carlos
2. Encender un LED
Ahora nos saldr una ventana como la mostrada en la figura 2.9. Por defecto, el nombre
de la arquitectura (Architecture Name) es Behavioral (comportamental). ste se puede
cambiar,peroporahora,lodejamosas.Enestaventanapodemosindicarlospuertosde
nuestra entidad. En la figura 2.9 se han creado dos puertos de salida: l ed0 y l ed1. Otra
alternativa es crearlos nosotros directamente en VHDL. Para terminar pinchamos Next y
luegoenFinish.

Figura 2.9: Definicin de los puertos


Si al terminar el proceso la herramienta nos muestra la siguiente imagen (figura 2.10),
debemos seleccionar el fichero que hemos creado (led0.vhd), ya sea pinchando en su
pestaa,oyaseapinchandoenWindowled0.vhd

Figura 2.10: Apariencia de la herramienta al aadir la nueva fuente led0.vhd


Departamento de Tecnologa Electrnica 21
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
Como podemos ver en la figura 2.11, el fichero VHDL contiene una cabecera aadida
automticamente por la herramienta. Esta cabecera consiste en comentarios que el
diseador debera de rellenar para identificar y ayudar a entender el diseo. Para este
ejemplo no es necesario, pero es interesante para diseos complejos. Observa que cada
lnea de la cabecera comienza por dos guiones - - que es la manera de comentar en
VHDL. Esto es, la herramienta no analiza las lneas que contienen dos guiones y puedes
ponercualquiercomentario.
Cabecera
Bibliotecas
Entidad
Arqui tectura
Cabecera Cabecera
Bibliotecas Bibliotecas
Entidad Entidad
Arqui tectura Arqui tectura

Figura 2.11: Apariencia de la herramienta para empezar a realizar la descripcin VHDL


DespusdelacabeceraestnlasreferenciasalasbibliotecasdelIEEE
8
,quesonnecesarias
parapoderutilizarlostiposdedatosqueemplearemos.Paranuestrocaso,nosbastacon
utilizar la biblioteca I EEE. STD_LOGI C_1164. Las otras bibliotecas no son necesarias por
ahora.
Luegotenemosunoscomentariosquepodemoseliminar.Despusdestos,yatenemosla
entidad, que ha sido creada por el ISE con la informacin de los puertos que le hemos
dado,quesondospuertosdesalida:l ed0yl ed1.
En VHDL, la entidad define las entradas y salidas del circuito. Y no hace referencia a la
estructuraofuncionalidadinterna.Escomodefinirunacajanegra.Ennuestroejemplo,la
entidadsepuederepresentarcomomuestralafigura2.12.

8
ElIEEE(InstituteofElectricalandElectronicsEngineers)eslaasociacinquehaestandarizadoelVHDL.
22 Universidad Rey J uan Carlos
2. Encender un LED
LED0
LED1
LED0
LED0
LED1
LED0

Figura 2.12: "Caja negra" que define la entidad de nuestro circuito


El ISE ha creado los puertos de tipo STD_LOGI C, que es un tipo de dato parecido al BI T,
pero que no slo tiene los valores binarios 0 y 1, sino que puede tomar otros valores
como:
U:Unasigned.Lasealnoharecibidovalor
X:Lasealharecibidovaloresdistintos
Z:Altaimpedancia
- :Noimporta(dontcare)
Hay ms valores posibles que no se han incluido para no complicar innecesariamente la
explicacin.
Ahoraquedadescribirlaarquitectura.EnVHDL,laarquitecturadescribelaestructura,el
funcionamientooelcomportamientodeuncircuito.
En nuestro ejemplo, nosotros queremos asignar a un puerto el valor 1 y al otro el valor
0. Esto se realiza con una sentencia concurrente para cada LED. El cdigo 21 muestra
cmoserealizaenVHDL.ElVHDLnodistingueentremaysculasyminsculas.
ar chi t ect ur e BEHAVI ORAL of LED0 i s
begi n
l ed0 <= ' 1' ; - - Encendemos el LED0
l ed1 <= ' 0' ; - - Apagamos el LED0
end BEHAVI ORAL;
Cdigo 2-1: Arquitectura que enciende un LED y apaga otro
Si nos fijamos en el cdigo 21, vemos que el nombre de la arquitectura (BEHAVI ORAL)
indica el tipo de descripcin: en este caso la arquitectura explica el comportamiento del
circuito. En realidad, aqu se puede poner el nombre que uno quiera, aunque existe una
convencindeindicareltipodedescripcin:
BEHAVI ORAL (oCOMPORTAMENTAL)
STRUCTURAL(oESTRUCTURAL)
FUNCTI ONAL (oFUNCI ONAL)
DATAFLOW(oFLUJ O_DE_DATOS)
Yairemosviendoqusignificanestosdescriptores.
Despus del nombre de la arquitectura se indica a qu entidad pertenece dicha
arquitectura. En nuestro ejemplo: of LED0" . Indica que pertenece a la entidad LED0.
Aunque no es obligatorio, la entidad y arquitectura se pueden describir en el mismo
fichero.
Porltimo,apartirdelBEGI Nseincluyenlassentenciasconcurrentesdenuestrocircuito.
En este caso, son dos asignaciones a dos valores constantes. La asignacin de seales se
realizaconeloperador<=.
Departamento de Tecnologa Electrnica 23
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
Ahora incluye las sentencias del cdigo 21. Para mayor claridad de cdigo, indenta
9
las
sentenciasconcurrentescondosespaciosaladerecha.Unavezquehemosterminadocon
eldiseodeejemplo,lograbamos(FileSave).
2.4. Sntesis e implementacin del circuito
Ahoraseleccionalaventanadeprocesosylaventanadefuentes(Sources).Enlaventanade
fuentes verifica que el componentey el fichero que hemoscreado estseleccionado: led0-
Behavioral(led0.vhd).Pinchaenlunavezsinoestuvieseseleccionado.
AunquealospuertosdesalidaleshayamosdadounosnombresreferidosalosLEDque
vamos a utilizar, la herramienta no sabe qu pines queremos utilizar. Para indicarle a la
FPGA qu pines vamos a utilizar y con qu puertos de nuestro diseo los vamos a
conectar deberemos lanzar la herramienta PACE. Esto lo hacemos desde la ventana de
procesos,enelladespliegalaseccinquediceUser Constraints,pinchadosvecesenAssign
Package Pins(figura2.13).Posteriormentenossaldrunaventanadeavisoquenosindica
que para este proceso se requiere aadir al proyecto un fichero del tipo UCF. Este tipo de
ficheros son los que se usan para definir las conexiones de los pines de la FPGA con los
puertosdenuestrodiseo,yportantopinchamosenYes.

Figura 2.13: Seleccin para la asignacin de pines


Ahora nos aparecer la herramienta Xilinx PACE. En ella podemos distinguir tres
subventanas, la de la derecha, tiene 2 pestaas en su parte inferior, en una se muestra la
arquitecturadelaFPGAyenlaotralaasignacindelospines(verfigura2.14).
Enlasubventanadelaparteinferiorizquierdahayunatablaconlosnombresdenuestros
puertos: l ed0 y l ed1. En una columna se indica la direccin de los puertos (ambos de

9
Indentaresinsertarespaciosotabuladoresparamoverunbloquedecdigoaladerechayfacilitarla
comprensindelcdigo.EltrminoindentarnoestreconocidoenlaRAEyparasercorrectoshabraque
utilizareltrminosangrado
24 Universidad Rey J uan Carlos
2. Encender un LED
salida:output).Yenlasiguientecolumna(Loc)debemosindicarelpindelaFPGAconel
que queremos unir nuestros puertos. Ten cuidado porque aqu hay un fallo de la
herramienta, ya que si pinchas en las celdas de dicha columna aparece un men
desplegable con los bancos de la FPGA (los pines se organizan en bancos), pero en estas
celdas hay que indicar los pines y no los bancos. As que pinchamos en dichas celdas y
ponemosnosotrosmismoselpinquequeremosconectar.As,siusamoslaPegasus,parael
puertol ed0conectamoselpin46,paraelloescribimosP46(elmismonmeroqueindicala
placaaadindoleunaP).ParaelpuertoLED1leasignamoselpinP45.Siusamoslaplaca
Basys,tendramosqueponerlospinesP15yP14,respectivamente.
P46
P45
P46
P45

Figura 2.14: Herramienta PACE para la asignacin de pines


Ledamosaguardarynossaldrunaventanaquenospreguntaporelformatodelfichero
que guardar esta informacin. Aunque nos es indiferente, seleccionamos la primera
opcin "XST Default <>", pinchamos en OK, cerramos la herramienta PACE y volvemos al
I SE.
Enlaventanadeprocesos,tenemosordenadoslospasosquedebemostomar:"Synthesize-
XST","Implement Design"y"Generate Programming File".Asqueconesteorden,vamosair
pinchandodosvecesencadaunodeelloshastaqueveamosqueseponeunasignoverde
decorrectoenellos.Cuandosepongaenverde,pinchamosenelsiguiente(puedesaliren
amarillosiindicandoquehayadvertenciaswarningsqueavecesnosonimportantes).En
realidad, si se ejecuta el ltimo paso sin haber ejecutado los anteriores, la herramienta
realizatodoelproceso.
Cuando tengamos todos los pasos correctamente ejecutados, la subventana de procesos
debera mostrar el aspecto de la figura 2.15. Si es as, ya estamos en disposicin de
programar la FPGA. Puede ser que aparezca algn warning y que el proceso de sntesis
tengaunsmboloamarillotriangular.Loswarningssepuedenverenlaventanadedesign
summary.Detodosmodos,enmuchasocasionesestasadvertenciasnosonrelevantes.
Departamento de Tecnologa Electrnica 25
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10

Figura 2.15: Aspecto de la subventana de procesos una vez que se ha sintetizado e implementado el diseo
correctamente. En la ventana de la derecha, en el proceso de sntesis ha habido advertencias (warnings) que
no siempre son importantes, y por eso tiene un smbolo triangular de color amarillo
2.5. Programacin de la FPGA
El procedimiento para la programacin de la FPGA es diferente segn la tarjeta que
usamos.Enlossiguientesapartadosseexplicanambosprocedimientos.
2.5.1. Programacin de la tarjeta Pegasus
Si hemos llegado hasta aqu, ya habremos generado el fichero de programacin de la
FPGA (que tiene extensin . bi t ). Ahora veremos los pasos que hay que dar para
programarlaplacaPegasus(laBasysrequiereunospasosdiferentes).
Loprimeroquetenemosquehaceresquitarlostresjumpersdeconfiguracin:M0, M1yM2
delconectorJ 4,(versituacinenlafigura2.1).Paranoperderlascaperuzasconctalosa
unsloconectordejandoelotroalairecomosemuestraaladerechadelafigura2.16.
Representacin:
jumper
desconectado
jumper
conectado
jumper desconectado
sin perder su caperuza
su caperuza
est perdida y
pisoteada por el
suelo del labo
Representacin:
jumper
desconectado
jumper
conectado
jumper
conectado
jumper desconectado
sin perder su caperuza
su caperuza
est perdida y
pisoteada por el
suelo del labo

Figura 2.16: Jumpers y su conexin


Cuandoestosjumpersestnconectados,laFPGAseprogramadesdelamemoriaflashdela
placa,enlaqueseguardaunficherodeconfiguracinparalaFPGA.LasSpartansonun
tipo de FPGA voltil, esto es, requiere estar alimentada a una fuente de tensin para
mantener su configuracin. Por tanto, cuando la apagamos se borra lo que hayamos
programado.ParaevitartenerqueprogramarlaFPGAdesdeelordenadorcadavezque
encendamos nuestro sistema electrnico, se utiliza una memoria flash que la programa
automticamente. Si esto no fuese posible, este tipo de FPGA perdera casi toda su
utilidad,yaquenoseranautnomasyprcticamenteslovaldranparahacerpruebasen
ellaboratorio.
26 Universidad Rey J uan Carlos
2. Encender un LED
Como nosotros estamos haciendo pruebas, queremos programar la FPGA desde el
ordenadorynodesdelamemoriaflash,asquedesconectamoslostresjumpers.
AhorahayqueconectarelcableJTAGalpuertoparalelodelordenadoryconectarelotro
extremo del cable al conector JTAG de la placa (conector J2, ver figura 2.1). No debes
conectarlodecualquiermanera,delasdosposibilidadesquehay,hazlodeformaquelos
nombresdelassealesdelaplacacoincidanconlosnombresdelassealesdelcable.Esto
es: TMS con TMS, TDI con TDI , ... , y VDD con VDD o con VCC (ste es el nico caso en que
puedennocoincidirexactamente,dependedelconector).
Acontinuacinconectamoselcabledealimentacindelaplacayloenchufamosalared
elctrica
10
.AlenchufarlaplacaversqueseenciendeelLEDLD8.
YatenemostodopreparadoparaprogramarlaFPGAyprobarnuestrodiseo.Volvemos
al ordenador, al programa ISE. Dentro de " Generate Programming File" desplegamos el
men pinchando el cuadradito con el signo + dentro: + . Y pinchamos dos veces en
" Configure Device (iMPACT)" .
EstoarrancarlaherramientaiMPACT,quenosmostrarunventanaenlaqueseofrecen
varias opciones, dejamos la opcin que hay por defecto configure devices using Boundary-
Scan (JTAG)"y"Automatically connect to a cable and identify Boudary-Scan chain". Aceptamos
pinchandoenFinish.
Loquehemoshechoesdecirlealaherramientaqueidentifiqueloscomponentesquehay
en la placa por medio del protocolo BoundaryScan (JTAG). Despus de esto la
herramienta procede a identificar a la placa y debera encontrar dos componentes: la
FPGA y la memoria flash. La FPGA la identifica como xc2s200 xc2s50 y la memoria
como xcf 02s. A continuacin nos pedir los ficheros de programacin para cada uno de
loscomponentes(figura2.17).

Figura 2.17: iMPACT: componentes detectados y asignacin de un fichero de configuracin



10
Cuandoestsenellaboratorioylodesenchufes,fjateenquenosequedeenchufadoeladaptadordela
clavijaplanaamericanaaclavijaredondaeuropea
Departamento de Tecnologa Electrnica 27
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
ParalaFPGAhayqueasignarelficherol ed0. bi t ,sabremosqueestasignandoelfichero
alaFPGAporquestatendrcolorverdeyademslaextensindelficheroes. bi t (para
lasmemoriasesotro).SeleccionamoselficheroypinchamosenOpen.Inmediatamentenos
saldr una advertencia (Warning) que habla sobre el Startup Clock, esto no nos afecta y
pulsamosenOk.
Ahora nos pide el fichero de configuracin de la memoria. Como no vamos a
programarla,pulsamosenCancel.
EnlaventanacentraldeliMPACTtenemoslosdoscomponentes.Pinchandoencualquiera
de ellos, los seleccionamos y se pondrn de color verde. Si pinchamos en la FPGA
(xc2s200 xc2s50) conelbotnderechodelratn,nossaldrunmen.Puedepasarque
alpincharnosalgayqueaparezcadenuevolaventanadelafigura2.17,esoesqueseha
quedadoelpunterodelratnenganchado;paraevitarlo,pinchaconelbotnizquierdoen
cualquier parte de la ventana fuera de los smbolos de los chips y vuelve a intentarlo.
Ahora,enelmenqueaparecepodemosasignarunficherodeconfiguracindiferenteo
programarlaFPGA(figura2.18).Yestoesloquevamoshacer,pinchamosenProgram,y
ledamosaOkalasiguienteventanasincambiarnada(sidisemosaVerifydaraunerror
deprogramacin).

Figura 2.18: Orden para programar la FPGA


DespusdelaordendeprogramarlaFPGA,apareceuncuadroquemuestralaevolucin
y, si todo ha salido bien, la herramienta nos avisar de que hemos tenido xito en la
programacinmostrandounavisocomoeldelafigura2.19.
28 Universidad Rey J uan Carlos
2. Encender un LED

Figura 2.19: Programacin realizada con xito


AhoramiramoslaplacaydeberahabertresLEDencendidos:
LD8:queindicaquelaplacaestencendida
LD9:queindicaquesehaprogramadolaFPGA
LD0:queeselLEDquehacemosencendernosotrosconeldiseodelaFPGA
ElLEDLD1deberestarapagado,pueslohemospuestoaun0lgico.YelrestodeLED
tambinestarnapagadosdebidoalasresistenciasdepulldownquelaFPGAponeenlos
puertossinconectar.
2.5.2. Programacin de la tarjeta Basys
Aunque la tarjeta Basys se puede programar con el conector JTAG, viene con un puerto
USBquepermiteprogramarlademaneramscmoda.Elnicoinconvenienteesquehay
queinstalarelprogramagratuitoAdept[1].
Antes de conectar nada, lo primero que tenemos que hacer es situar el jumper de
configuracin en la posicin JTAG (en la parte derecha). El jumper de configuracin lo
puedes localizar en la figura 2.2. Pon la caperuza azul en los dos pines de la derecha,
dondediceJTAG.EstoesparaquelaFPGAseprogramedesdeelJTAGynoseprograme
a partir de lo que haya grabado en la memoria ROM (en realidad es una memoria flash).
Comoseexplicenelapartado2.5.1,debidoaqueestasFPGAsonvoltiles,siqueremos
que se guarde un circuito de manera permanente en la tarjeta, lo guardaremos en la
memoria flash (no voltil). Si al encender la tarjeta el jumper est en la posicin ROM, la
FPGA se programar con el circuito que se haya grabado en dicha memoria flash. Como
nosotrosvamosaprobarcircuitosdemaneracontinua,ynoqueremosgrabardemanera
permanenteningncircuito,loponemosenlaotraposicin.
A continuacin se explica cmo se programa la tarjeta Basys con la versin 2 del Adept.
Ejecuta el programa Adept: Inicio Todos los Programas Digilent Adept. En la figura
2.20 se muestra la pantalla inicial cuando no hay ningn dispositivo conectado. Esto se
puedeverenlapartederechadelaventana.
Departamento de Tecnologa Electrnica 29
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10

Figura 2.20: Pantalla inicial del Adept, sin dispositivos conectados


SiconectamoslatarjetaBasysalordenadormedianteelcableUSByelinterruptoresten
la posicin VUSB, transcurrido un tiempo aparecer que est conectada una tarjeta, en la
partederechapondrOnboardUSB(verfigura2.21).Sinosaliesenada,pruebaapinchar
enelmenqueponeNoDevicesConnectedaversicambia.Sinocambiase,pruebaacerrar
el Adept y volverlo a arrancar. La primera vez que conectemos la tarjeta puede ser que
Windows haya detectado un nuevo hardware y tengamos que dar permiso para la
instalacindelosdriversquevienenconlatarjeta(notenemosqueintroducirundisco,la
propialeproporcionatienelosdrivers).

Figura 2.21: Pantalla del Adept que ha detectado algn dispositivos conectado
30 Universidad Rey J uan Carlos
2. Encender un LED
Ahora pinchamos en Initialize Chain y, como se ve en la figura 2.22, aparecern dos
componentes: uno es la FPGA y otro la memoria (PROM). Indicar tambin el modelo,
queennuestrocasolaFPGAeslaXC3S100E.

Figura 2.22: Pantalla del Adept que ha detectado la cadena JTAG de dispositivos (FPGA y PROM)
AcontinuacinpinchamosenelbotnbrowsecorrespondientealaFPGA,ybuscamosel
fichero l ed0. bi t que hemos generado en nuestro proyecto. Aparecer un warning
indicando el mensaje : Startup clock for this file is CCLK instead of JTAG CLK. Problems
willlikelyoccur.Associateconfigfilewithdeviceanyway?.AestemensajecontestamosS.
Otra cosa es que salga un mensaje de error indicando: Unable to associate file with device
duetoIDCODEconflict.EstoesunerrorqueindicaquelaFPGAquehemosescogidono
es la misma que la que est en la placa. En este caso, tendremos que verificar que el
modelo de FPGA sea el mismo. Si no fuese as, lo tendremos que cambiar. Consulta el
apartado2.6sinosabescmosehace.
Sitodohasalidobien,slotenemosquepincharenProgramyseprogramarlaFPGA.El
resultadoserqueseencenderelLEDLD0,ytambinseencenderotroLEDqueindica
quesehaprogramadolaFPGA(LD- D).
2.6. Cambiar el tipo de FPGA de un proyecto
SienunproyectoqueremosmodificareltipodeFPGA,yaseaporquevamosacambiarde
placa o porque nos hemos equivocado al principio poniendo las caractersticas (figura
2.7), en cualquier momento podemos realizar el cambio. Para ello, tenemos que
seleccionarlaFPGAenlasubventanaSources,ypincharconelbotnizquierdodelratn.
En el men desplegable que aparece tendremos que pinchar en Properties (figura 2.23).
Tras esta operacin aparecer la ventana de la figura 2.7 que nos permitir cambiar el
modeloylascaractersticasdelaFPGA.Tenencuentaquesegnelcambioquehagamos,
quiz tambin tengamos que cambiar el fichero . ucf , pues en l se indican los pines, y
Departamento de Tecnologa Electrnica 31
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
stospuedenserdistintosconelmodelodelaFPGA(inclusopuedenhabercambiadode
nombre).

Figura 2.23: Procedimiento para cambiar las caractersticas de la FPGA


2.7. Trabajar desde varios ordenadores con un mismo proyecto
Cuando estamos trabajando en un ordenador y queremos seguir trabajando en otro,
tenemos que hacer una copia de nuestro trabajo. Por ejemplo, esto es necesario cuando
trabajas en los ordenadores de la universidad, si no haces copia de tu proyecto puede
pasarqueelprximodaalguienhayaborradotodotutrabajo.Estoinclusoesimportante
aunque trabajes siempre en el mismo ordenador, ya que es importante que hagas copias
deseguridadyquetengasuncontroldeversionesdelosdiseosquevanfuncionando.
Cuando quieras hacer una copia de tu trabajo no tienes que copiar todo el directorio del
proyecto. El directorio puede ocupar varios megabytes y realmente no es muy til
pasarlo de un ordenador a otro, pues muchas veces al intentarlo abrir el ISE da
problemas. Lo mejor es que slo copiemos los ficheros con extensin . vhd y . ucf . Estos
ficherossondetextoyocupanmuypoco.Sihasllegadoaimplementarelcircuito,puedes
32 Universidad Rey J uan Carlos
2. Encender un LED
copiarelfichero. bi t .QueeselficheroqueseusaparaprogramarlaFPGA,asnotienes
quevolverloagenerar.
Estos ficheros . vhd y . ucf son los que vamos a copiar en nuestra memoria USB o nos lo
enviamosporcorreoelectrnico.
Cuandoqueramosimportarnuestroproyectoaunnuevoordenador,loquetenemosque
haceres:
Crearunnuevoproyecto:File New Project(recuerdaelapartado2.3)
Incluimoselnombreyelcamino(path)delproyecto(recuerdalafigura2.4)
SeleccionamoslascaractersticasdelaFPGA(figura2.7)
Enlaventana:NewProjectWizardCreateNewSource,pinchamosenNext
Enlaventana:NewProjectWizardAddExistingSources,pinchamosenAdd,ybuscamos
todos los ficheros . vhd y . ucf . Nos aseguramos que est marcado la casilla Copy to
ProjectypinchamosenNextyluegoenFinish.
Con esto ya podemos seguir trabajando con nuestro proyecto. Si posteriormente
quisiramos aadir nuevos ficheros . vhd al proyecto slo tendramos que pinchar en
Source Add Sourceybuscarelficheroquequeremosaadir.
2.8. Conclusin
Conestohemosterminadoelprimerejercicio.Hemosrepasadoconceptosdelaopasado.
Hemoscomprobadoquelaplacaylaherramientafuncionan,yyapodemosprobarotros
diseosmscomplejos.
Resumiendo,losconceptosprincipalesdeestaprctica:
LoscomentariosenVHDLempiezancondosguiones:- -
ElVHDLnodistingueentremaysculasyminsculas
ParalassealesbinariasnormalmenteseutilizaeltipoSTD_LOGI C
UndiseoVHDLconstacomomnimodeunaentidadyunaarquitectura
Laentidaddefinelasentradasysalidasdeldiseo
Laarquitecturadefineeldiseointernamente
NormalmenteesnecesariohacerreferenciaalabibliotecadelIEEE:STD_LOGI C_1164.
Esimportantehacercopiasdeseguridaddenuestrotrabajo.Paraesto,bastaconcopiar
losficherosconextensin. vhdy. ucf .Aadirestosficherosaunproyectoesunatarea
sencilla.
Departamento de Tecnologa Electrnica 33



3. Sentencias concurrentes
El diseo anterior era muy bsico, simplemente encenda un LED y no tenamos
posibilidad de interactuar con el circuito, por ejemplo, mediante los pulsadores e
interruptores.Ahora,enestaprcticatendremoslaposibilidaddecrearfuncioneslgicas
ybloquesqueestudiamoselaopasado.
A partir de ahora no se va a realizar explicaciones tan detallada como la del anterior
ejercicio, si durante la ejecucin de este ejercicio has olvidado algn paso, repasa lo
explicadoenelejercicioanterior.
Analizando las conexiones de los interruptores de la Pegasus (figura 3.1) vemos que
cuandoelinterruptoresthaciaarribatransmiteun1lgicoalaentradadelaFPGA.En
laplaca,aladerechadelinterruptorSW0seindicaquehaciaarribason3,3Vyhaciaabajo
son0V.
4,7k
PI N interruptor
89 SW0
88 SW1
87 SW2
86 SW3
84 SW4
83 SW5
82 SW6
81 SW7
Spartan-II
3,3V
4,7k
PI N pul sador
59 BTN0
58 BTN1
57 BTN2
154 BTN3
Spartan-II
3,3V
4,7k
0,1F
4,7k
PI N interruptor
89 SW0
88 SW1
87 SW2
86 SW3
84 SW4
83 SW5
82 SW6
81 SW7
Spartan-II
3,3V
4,7k
PI N pul sador
59 BTN0
58 BTN1
57 BTN2
154 BTN3
Spartan-II
3,3V
4,7k
0,1F

Figura 3.1: Esquema elctrico de las conexiones de los interruptores y pulsadores en la placa Pegasus
Paralospulsadores,cuandoestnpulsadostransmitenun1lgicoalaentradaycuando
no estn pulsados ponen 0 voltios a la entrada. Observa que los pulsadores tienen un
pequeocircuitoconresistenciasyuncondensador,estoesparaeliminarlosrebotesque
seproducenalpulsaryasenviarunasealsinruido.Estecircuitoqueeliminarebotesno
lo tiene la Basys, y por lo tanto, la seal de entrada de los pulsadores no es tan limpia, y
puedeparecerquesehapulsadovariasveces(rebote).Elesquemaelctricosemuestraen
lafigura3.2,endondesepuedeobservarquelospulsadoresnotienenelcondensadorque
stienelatarjetaPegasus.
4,7k
PI N interruptor
38 SW0
36 SW1
29 SW2
24 SW3
18 SW4
12 SW5
10 SW6
6 SW7
Spartan3E
3,3V
4,7k
PI N pul sador
69 BTN0
48 BTN1
47 BTN2
41 BTN3
Spartan3E
3,3V
4,7k
4,7k
PI N interruptor
38 SW0
36 SW1
29 SW2
24 SW3
18 SW4
12 SW5
10 SW6
6 SW7
Spartan3E
3,3V
4,7k
PI N interruptor
38 SW0
36 SW1
29 SW2
24 SW3
18 SW4
12 SW5
10 SW6
6 SW7
Spartan3E
3,3V
4,7k
PI N pul sador
69 BTN0
48 BTN1
47 BTN2
41 BTN3
Spartan3E
3,3V
4,7k
4,7k
PI N pul sador
69 BTN0
48 BTN1
47 BTN2
41 BTN3
Spartan3E
3,3V
4,7k

Figura 3.2: Esquema elctrico de las conexiones de los interruptores y pulsadores en la placa Basys
En la prctica de hoy utilizaremos los interruptores y pulsadores como entradas de los
circuitosquerealicemos.
Departamento de Tecnologa Electrnica 34
3. Sentencias concurrentes
Antesdeempezarconlaprctica,semuestranacontinuacinlaspalabrasreservadasdel
VHDL(figura3.3).Estaspalabrasnosepuedenusarparanombrarelementosdenuestro
circuito:seales,entidades,arquitecturas,....

Figura 3.3: Lista de palabras reservadas del VHDL


3.1. Diseo de un multiplexor
El primer ejercicio consistir en crear el diseo de un multiplexor de dos entradas de
datosdeunbit.Portanto,estemultiplexortendrunasealdeseleccin(unbit).
Si S='1', por la salida Z tendremos A
Si S='0', por la salida Z tendremos B
1
0
MUX
A
B
Z
S
A
B
S
Z
Si S='1', por la salida Z tendremos A
Si S='0', por la salida Z tendremos B
1
0
MUX
A
B
Z
S
1
0
MUX
A
B
Z
S
A
B
S
Z
A
B
S
Z

Figura 3.4: Esquema del multiplexor (izquierda) y diseo en puertas (derecha)


3.1.1. Diseo usando puertas lgicas
Si recordamos del ao pasado, un multiplexor en puertas lgicas se describe como se
muestraenladerechadelafigura3.4.
As que creamos un nuevo proyecto llamado gat e_mux (recuerda ponerlo en:
C: \ pr act i cas\ ed2\ tunombre). Crea un nuevo mdulo VHDL llamado tambin GATE_MUX
conlospuertosllamadosigualquelosdelafigura3.4.Laarquitectura,envezdellamarla
BEHAVI ORALllmalaGATE,paraindicarqueestenelniveldepuertas.
Dentrodelaarquitectura,incluyelasentenciaconcurrentequedefineelesquemticoenel
niveldepuertasdelmultiplexor(derechaenlafigura3.4).Estasentenciasemuestraenel
cdigo31.
Departamento de Tecnologa Electrnica 35
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10

Z <= ( A and S) or ( B and ( not S) ) ;

Cdigo 3-1: Sentencia concurrente que define el multiplexor en puertas
A partir del cdigo 31 podemos observar que para un diseo en el nivel de puertas, la
sintaxis es muy similar a la sintaxis utilizada en el lgebra de Boole (que estudiamos el
ao pasado). El uso de parntesis es muy importante para determinar que operador
booleanoseaplicaencadacaso.
Prueba a implementar el circuito en la placa haciendo que el puerto A sea el interruptor
SW0,elpuertoBseaelinterruptorSW1,yquelasealdeseleccinseaelpulsadorBTN0.Por
ltimo,asocialasalidaZconelLEDLD0.
Unavezimplementado,compruebaquefuncionacorrectamente,estoes,quesegnestel
pulsadorpresionado,lasalidatomaelvalordelprimerinterruptorodelsegundo.
3.1.2. Diseo usando varias sentencias concurrentes
Elcdigo31esperfectamentevlido.Sinembargo,cuandoelnmerodepuertaslgicas
eselevado,nospuedeinteresardividirlasentenciadeasignacinenvariassentenciasms
sencillas. Esto se hace creando seales intermedias. La figura 3.5 muestra el diseo en
puertasdelmultiplexorincluyendolassealesintermediasDyE.
A
B
S
Z
D
E
A
B
S
Z
D
E

Figura 3.5: Esquema en puertas del multiplexor con seales intermedias


Antes de ser usadas, estas seales intermedias deben ser primero declaradas en la
arquitectura.Lassealessedeclaranantesdelbegi ndelaarquitectura.Portanto,nuestro
diseoquedacomomuestraelcdigo32:

ar chi t ect ur e GATE of GATE_MUX i s
si gnal D, E : STD_LOGI C;
begi n

D <= A and S;
E <= ( not S) and B;
Z <= D or E;

end GATE;

Cdigo 3-2: Sentencias concurrentes que definen el multiplexor en puertas (equivalente al cdigo 3-1)
Ahora hemos usado tres sentencias concurrentes que son equivalentes a la sentencia del
cdigo31.Puedesprobar,siquieres,quefuncionaigual.
Una caracterstica fundamental de las sentencias concurrentes es que, como su nombre
indica, son concurrentes. Esto es, que se ejecutan todas a la vez. Que es como funcionan
loscircuitos(elhardware):todoestejecutndosesimultneamente.Porlotanto,daigual
el orden en que se escriban, pues no hay unas que vayan antes o despus. As, las
sentenciasdelcdigo32sepodranponerencualquierotroorden.Porejemplo,elcdigo
33estotalmenteequivalentealdelcdigo32.
36 Universidad Rey J uan Carlos
3. Sentencias concurrentes

ar chi t ect ur e GATE of GATE_MUX i s


si gnal D, E : STD_LOGI C;
begi n
Z <= D or E;
D <= A and S;
E <= ( not S) and B;
end GATE;
Cdigo 3-3: Otra versin de las sentencias concurrentes que definen el multiplexor en puertas (equivalente a
los cdigos 3-1 y 3-2)
Si quieres, puedes implementar en la placa el cdigo 33 para comprobar que funciona
igual.
3.1.3. Uso de sentencias condicionales
Usar el VHDL solamente con expresiones booleanas nos limita las capacidad de diseo.
Ahora vamos a realizar el mismo diseo usando sentencias condicionales, lo que a los
humanosnosresultarmuchomsentendiblequelasexpresionesbooleanas.
Podemosutilizarunasentenciaconcurrentecondicionadacomolamostradaenelcdigo
34.Queesbastantemsentendiblequeelcdigoenelniveldepuertas.Yaquecomodice
elcdigo,aZseleasignaA cuandoS=' 1' ysino,seleasignaB.

Z <= A when S=' 1' el se B;

Cdigo 3-4: Sentencia concurrente condicionada que define el multiplexor
Pruebaaimplementarestediseoycompruebaquefuncionaigual.
3.1.4. Uso de procesos
Otra alternativa es usar procesos, que los veremos con ms detalle ms adelante. Dentro
del proceso, las sentencias se tratan secuencialmente y no de manera concurrente como
vimosqueocurreconlassentenciasconcurrentespuestasdirectamenteenlaarquitectura.
Asqueelordendelassentenciasdentrodeunprocesosesimportante.
El proceso empieza consu nombre, a lo que le siguen dos puntos y la palabra reservada
PROCESS.Despusdestaseponelalistadesensibilidad,dondesedebenponertodaslas
sealesqueseleenenelproceso.Lassealesqueseleenson:lassealesqueestndentro
de las condiciones (por ejemplo dentro de la sentencia i f ) y las seales que estn en la
partederechadelasasignaciones.
Elprocesoqueimplementanuestromultiplexorsemuestraenelcdigo35.
P_MUX: Pr ocess ( A, B, S) - - l i st a de sensi bi l i dad: A, B, S
begi n
i f S=' 1' t hen - - S se l ee
Z <= A; - - A se l ee
el se
Z <= B; - - B se l ee
end i f ;
end pr ocess;
Cdigo 3-5: Sentencia concurrente condicionada que define el multiplexor
ElVHDLesunlenguajemuyamplio,yhayotrasmanerasconlasquesepuededescribir
el multiplexor. Sin embargo, por ahora no las veremos y pasaremos a describir otros
diseos.
Departamento de Tecnologa Electrnica 37
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
3.2. Diseo de un multiplexor de 4 alternativas
El multiplexor anterior era demasiado sencillo. Ahora
queremos realizar un multiplexor con cuatro
alternativas. La figura 3.6 muestra el esquema de este
multiplexor.
Elaopasadovimoscmoserealizabaenpuertaseste
multiplexor y tambin cmo se realizaba con
multiplexores de dos alternativas. Ahora simplemente
veremoscmosedescribeenVHDL.
Para poder seleccionar 4 alternativas la seal de
seleccin (S) debe de ser de 2 bits. Por tanto
necesitamos definir un vector. Para esto se utiliza el
tipoSTD_LOGI C_VECTOR.
00
01
10
11
MUX4ALT
A
B
Z
S( 1: 0)
C
D
2
00
01
10
11
MUX4ALT
A
B
Z
S( 1: 0)
C
D
2

Figura 3.6: Multiplexor de 4


alternativas
Para realizar el diseo, creamos un nuevo proyecto llamado mux4al t y al definir los
puertos debemos crear la entrada S como un vector. Para ello, al definir los puertos,
activamoselcampoBusdelpuertoS,eindicamosqueelMSB(bitmssignificativo
11
)esel
bit nmero 1, y el LSB (bit menos significativo
12
) es el 0. Por tanto, tendr dos bits de
anchodebus.Observalafigura3.7parasabercmodebescrearlo.

Figura 3.7: Definicin de los puertos de entrada y su ancho


Elresultadoeslaentidadmostradaenelcdigo36.
ent i t y mux4al t i s
Por t ( A : i n STD_LOGI C;
B : i n STD_LOGI C;
C : i n STD_LOGI C;
D : i n STD_LOGI C;
S : i n STD_LOGI C_VECTOR ( 1 downt o 0) ;
Z : out STD_LOGI C) ;
end mux4al t ;
Cdigo 3-6:Entidad del multiplexor de 4 alternativas
EltipoSTD_LOGI C_VECTOResunvectordeSTD_LOGI Cynormalmentesedefinenconrango
descendenteterminadoencero.Elrangodescendenteseespecificaconlapalabradownt o.

11
MSB:delinglsMostSignificantBit
12
LSB:delinglsLeastSignificantBit
38 Universidad Rey J uan Carlos
3. Sentencias concurrentes
La sentencia concurrente que describe este multiplexor se muestra en el cdigo 37. Esta
sentencia es una extensin para 4 alternativas del cdigo 34. Fjate que la comparacin
delvalordelasealSsehaceconcomillasdoblesporserunvector.
Z <= A when S=" 00" el se
B when S=" 01" el se
C when S=" 10" el se
D;
Cdigo 3-7: Sentencia concurrente condicionada que define el multiplexor de cuatro alternativas
Si lo quisisemos realizar con un proceso tenemos dos maneras de hacerlo, mediante i f
(cdigo 38) o mediante case (cdigo 39). Es muy importante que la ltima alternativa
siemprecierretodaslasposibilidades.EnelcasodelI FsedebeterminarconunELSE.Yen
elcasodelCASEsedebedeterminarconunwhen ot her s" ,quesignificaparaelrestode
posibilidades. Se deben cerrar todas las posibilidades porque, en otro caso, la seal
asignada no recibira valor y por lo tanto, se creara un elemento de memoria (un latch
probablemente) para guardar el valor que tena anteriormente. Esto ya lo veremos en el
captulo5,cuandotrabajemosconloselementosdememoria.
P_MUX: Pr ocess ( A, B, C, D, S)
begi n
i f S=" 00" t hen
Z <= A;
el si f S=" 01" t hen
Z <= B;
el si f S=" 10" t hen
Z <= C;
el se
Z <= D;
end i f ;
end pr ocess;
Cdigo 3-8:Proceso con sentencia IF
P_MUX: Pr ocess ( A, B, C, D, S)
begi n
case S i s
when " 00" =>
Z <= A;
when " 01" =>
Z <= B;
when " 10" =>
Z <= C;
when ot her s =>
Z <= D;
end case;
end pr ocess;
Cdigo 3-9:Proceso con sentencia CASE
Ahora implementa en la FPGA este multiplexor de 4 alternativas empleando las tres
formas que hemos visto (cdigo 37, 38 y 39). Asocia la seal S a los dos primeros
pulsadores, las cuatro alternativas (A, B, C, D) a los cuatro primeros interruptores, y la
salidaZalprimerLED(LD0).
3.3. Diseo de un multiplexor de 4 bits de dato y dos alternativas

Ahora haremos un multiplexor de dos


alternativas, pero cada alternativa tendr cuatro
bits.Portanto,lasalidatambintendr4bits.
El esquema de este multiplexor se muestra en la
figura3.8
1
0
MUX4BI TS
A( 3: 0)
B( 3: 0)
Z( 3: 0)
S
4
4
4
1
0
MUX4BI TS
A( 3: 0)
B( 3: 0)
Z( 3: 0)
S
44
44
44

Figura 3.8: Multiplexor de 4 bits de dato

Laentidadsercomolamostradaenelcdigo310.
ent i t y mux4bi t s i s
Por t ( A : i n STD_LOGI C_VECTOR ( 3 downt o 0) ;
B : i n STD_LOGI C_VECTOR ( 3 downt o 0) ;
S : i n STD_LOGI C;
Z : out STD_LOGI C_VECTOR ( 3 downt o 0) ;
end mux4bi t s;
Cdigo 3-10:Entidad del multiplexor de 4 alternativas
Departamento de Tecnologa Electrnica 39
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
Laarquitecturaserigualquelausadaparaelmultiplexor dedosalternativascondatos
deunbit,yaquelaasignacindesealesutilizalamismaexpresinindependientemente
dequelassealesseanvectoresobits.Loquessedebecumpliresquelasealasignada
tengaelmismonmerodebitsquelaasignaelvalor.
Portanto,sepodrutilizarlamismasentenciaqueseutilizenelcdigo34oelproceso
delcdigo35.Esos,sabiendoqueahoralassealesA,ByZsonde4bitsynodeunbit.
Implementa este multiplexor asociando el puerto A a los cuatro primeros interruptores
(SW3,SW2,SW1ySW0),elpuertoBalrestodeinterruptores(SW7,SW6,SW5ySW4).Lasealde
seleccinalprimerpulsador(BTN0),ylasalidaZaloscuatroprimerosLED.
Se deja como ejercicio implementar un multiplexor de cuatro alternativas, con datos de
cuatrobits.
3.4. Conclusiones
Resumiendo,losconceptosprincipalesdeestaprctica:
Existe un grupo de palabras reservadas en VHDL que no se pueden utilizar para
nombrarelementosdelcircuito:seales,entidades,arquitecturas,componentes,
Lassentenciasconcurrentes,dentrodelaarquitectura,seejecutanalavez.Porlotanto,
noimportaelordenenqueaparezcan.
Dentro de los procesos, el orden de las sentencias s importa. Por lo tanto, se tratan
secuencialmente.
ElVHDLesunlenguajemuyamplioyexistenmuchasmanerasdedescribirlamisma
cosa
EnVHDLlosvaloresvectorialesvanencomillasdobles,porejemploS=00.
Al implementar un multiplexor es importante que la ltima condicin sea una
condicin por defecto que cubra el resto de los casos, como lo son "when ot her s" o
"el se".Conestoevitamosgenerarunelementodememoria(severenelcaptulo5)

40 Universidad Rey J uan Carlos





4. Codificadores, decodificadores, convertidores de cdigo
Enestaprcticavamosacomplicardiseosdelasprcticasanteriores
4.1. Convertidor de binario a 7 segmentos
En este ejercicio vamos a modificar el diseo del multiplexor de 4 bits de datos (seccin
3.3)paraqueademsdemostrareldatoseleccionadoporloscuatroLED,muestreeldato
porundisplaydesietesegmentos.
El esquema del circuito se muestra en la figura 4.1. En ella se puede observar el
multiplexor que hicimos en el apartado 3.3. La salida de este multiplexor la queremos
convertir a siete segmentos. En la derecha de la figura se han incluido los puertos.
Adems de los que aparecen en el esquema, se han aadido los nodos de los displays
(puertoAN).Quizsrecuerdesdelaopasadoqueconlosnodossecontrolaqudisplays
vanalucir.Tantolosnodoscomolossegmentosdelosdisplayssonactivosanivelbajo.
Esto es, para que luzca un segmento hay que poner un cerolgico. Y para activar un
displaytengoqueponeruncerolgicoenelnodocorrespondiente.
Puertos
In Out
A( 3: 0) LED( 3: 0)
B( 3: 0) SEG( 6: 0)
S AN( 3: 0)
CONV_7SEG
1
0
MUX4BI TS
A( 3: 0)
B( 3: 0)
LED( 3: 0)
S
4
4
4
6
SEG( 6: 0)
Z( 3: 0)
Puertos
In Out
A( 3: 0) LED( 3: 0)
B( 3: 0) SEG( 6: 0)
S AN( 3: 0)
Puertos
In Out
A( 3: 0) LED( 3: 0)
B( 3: 0) SEG( 6: 0)
S AN( 3: 0)
CONV_7SEG
1
0
MUX4BI TS
A( 3: 0)
B( 3: 0)
LED( 3: 0)
S
4
4
4
6
SEG( 6: 0)
Z( 3: 0)
CONV_7SEG
1
0
MUX4BI TS
A( 3: 0)
B( 3: 0)
LED( 3: 0)
S
44
44
44
66
SEG( 6: 0)
Z( 3: 0)

Figura 4.1: Multiplexor y salida a 7 segmentos


As que crea un nuevo proyecto llamado mux7seg, y dentro de l crea un nuevo mdulo
VHDLquetengalospuertosmostradosenlatabladeladerechadelafigura4.1.
DentrodelaarquitecturadebersdeclararlasealZ,quelaasignarsalpuertodesalida
LEDyque usarsparaconvertirlaenlossietesegmentos.NopodrsusarZ comopuerto:
estoesunconceptoimportanteenVHDLyaquelospuertosdesalidanosepuedenleer.
Por tanto, es necesario usar una variable intermedia Z distinta del puerto de salida LED.
ComolasealZlavamosautilizarenelconvertidordebinarioasietesegmentos,laseal
Z no podr ser un puerto de salida al contrario de como lo hicimos en el ejercicio del
apartado3.3.
Para hacer el convertidor de binario a siete segmentos tenemos que recordar la
visualizacindecadanmero.Enlafigura4.2semuestranlos16nmerosquepodemos
representarcon4bits(de0a15).
Departamento de Tecnologa Electrnica 41
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
A
G
D
B
C
F
E
0
A
G
D
B
C
F
E
1
A
G
D
B
C
F
E
2
A
G
D
B
C
F
E
3
A
G
D
B
C
F
E
4
A
G
D
B
C
F
E
5
A
G
D
B
C
F
E
6
A
G
D
B
C
F
E
7
A
G
D
B
C
F
E
8
A
G
D
B
C
F
E
9
A
G
D
B
C
F
E
A
A
G
D
B
C
F
E
B
A
G
D
B
C
F
E
C
A
G
D
B
C
F
E
D
A
G
D
B
C
F
E
E
A
G
D
B
C
F
E
F
A
G
D
B
C
F
E
0
A
G
D
B
C
F
E
1
A
G
D
B
C
F
E
2
A
G
D
B
C
F
E
3
A
G
D
B
C
F
E
4
A
G
D
B
C
F
E
5
A
G
D
B
C
F
E
6
A
G
D
B
C
F
E
7
A
G
D
B
C
F
E
8
A
G
D
B
C
F
E
9
A
G
D
B
C
F
E
A
A
G
D
B
C
F
E
B
A
G
D
B
C
F
E
C
A
G
D
B
C
F
E
D
A
G
D
B
C
F
E
E
A
G
D
B
C
F
E
F

Figura 4.2: Los 16 nmeros representables con 4 bits


As que para realizar el convertidor tenemos que examinar qu numero tenemos que
mostrar y encender los segmentos correspondientes a dicho nmero. En la figura 4.3 se
muestran los ejemplos para tres casos: los nmeros 0, 1 y 2. Como se puede ver,
arbitrariamente se ha asignado el bit ms significativo de SEG al segmento A y el menos
significativo (el bit 0) al segmento G. Otro orden se poda haber escogido, pero lo
importanteesquesecorrespondanadecuadamentealaasignacindepinesdelaFPGA.
En la figura se han mostrado tres ejemplos, ahora tienes t que deducir el resto (de
maneraparecidaacomolohicisteenlaprcticadelaopasado).
A
G
D
B
C
F
E
2
A
G
D
B
C
F
E
0
A
G
D
B
C
F
E
1
Si Z="0000" mostramos el cero
Usamos un vector SEG( 6: 0) que contendrel valor delos segmento s
SEG( 6) segment o A
SEG( 5) segment o B
SEG( 4) segment o C
SEG( 3) segment o D
SEG( 2) segment o E
SEG( 1) segment o F
SEG( 0) segment o G
Como para el cero (Z="0000") se encienden todos
los segmentos menos el G, la asignacin ser:
SEG <= "0000001"
Un cero enciende el segmento
por ser lgica negada
Si Z="0001" mostramos el uno
Como para el uno (Z="0001") se encienden los
segmentos B y C, la asignacin ser:
SEG <= "1001111"
Bits correspondientes
con los segmentos B y C
queestarn luciendo
Si Z="0010" mostramos el dos
Como para el dos (Z="0010") se encienden todos
los segmentos menos el C y el F, la asignacin ser:
SEG <= "0010010"
Bits correspondientes
con los segmentos C y F
queestarn apagados
Bit 0 correspondiente
con los segmentos F que
estarapagado
A
G
D
B
C
F
E
2
A
G
D
B
C
F
E
2
A
G
D
B
C
F
E
0
A
G
D
B
C
F
E
0
A
G
D
B
C
F
E
1
A
G
D
B
C
F
E
1
Si Z="0000" mostramos el cero
Usamos un vector SEG( 6: 0) que contendrel valor delos segmento s
SEG( 6) segment o A
SEG( 5) segment o B
SEG( 4) segment o C
SEG( 3) segment o D
SEG( 2) segment o E
SEG( 1) segment o F
SEG( 0) segment o G
Como para el cero (Z="0000") se encienden todos
los segmentos menos el G, la asignacin ser:
SEG <= "0000001"
Si Z="0001" mostramos el uno
Como para el uno (Z="0001") se encienden los
segmentos B y C, la asignacin ser:
SEG <= "1001111"
Un cero enciende el segmento
por ser lgica negada
Bits correspondientes
con los segmentos B y C
queestarn luciendo
Si Z="0010" mostramos el dos
Como para el dos (Z="0010") se encienden todos
los segmentos menos el C y el F, la asignacin ser:
SEG <= "0010010"
Bits correspondientes
con los segmentos C y F
queestarn apagados
Bit 0 correspondiente
con los segmentos F que
estarapagado

Figura 4.3: Valores del vector de los segmentos (SEG) para los nmeros 0, 1 y 2
Las sentencias concurrentes VHDL de la arquitectura deben tener el aspecto de la figura
4.4.Sepuedeapreciarquehaycuatrosentenciasconcurrentes.Comoyahemosdicho,por
la concurrencia del hardware, el orden de estas sentencias es indiferentes. La ltima
sentencia,correspondientealconvertidorasietesegmentos,sehadejadoincompletapara
que la termines t. Puedes observar que en la sentencia del convertidor se han incluido
comentarios para facilitar la comprensin del cdigo. Esto es muy importante para
42 Universidad Rey J uan Carlos
4. Codificadores, decodificadores, convertidores de cdigo
facilitarlacomprensindelcdigo,tantoparaotraspersonasquelolean,oparatimismo
cuando lo vuelvas a ver dentro de unas semanas y no te acuerdes de nada de lo que
hicisteensuda.
Fjate que se han incluido las dos ltimas alternativas. En la ltima no se ha incluido la
condicin (el when se ha comentado), por lo tanto, en cualquier otro caso, se asigna el
ltimovalor
13

Z <= A when S=' 1' el se B;


LED <= Z;
AN <= "1110";
SEG <= "0000001" when Z="0000" el se - - 0: A, B, C, D, E, F
- - 1: B, C
- - 2: A, B, D, E, G
- - 3: A, B, C, D, G
- - E( 14) : A, D, E, F, G
- - when Z="1111"; - - F( 15) : A, E, F, G
"1001111" when Z="0001" el se
"0010010" when Z="0010" el se
"0000110" when Z="0011" el se
"0110000" when Z="1110" el se
"0111000";
multiplexor
Asignacin de las seal Z a los LED
(no se puede usar Z como puerto de salida)
Encendemos el nodo 0
.....
..... contina t con el resto de casos
.....
Primeros 4 nmeros
del convertidor a
siete segmentos
comentarios para ayudar a identificar
el nmero y los segmentos que lucen
Dos ltimos nmeros
del convertidor
En la ltima alternativa no se pone
condicin para evitar generar un latch
Z <= A when S=' 1' el se B;
LED <= Z;
AN <= "1110";
SEG <= "0000001" when Z="0000" el se
"1001111" when Z="0001" el se
"0010010" when Z="0010" el se
"0000110" when Z="0011" el se
"0110000" when Z="1110" el se
"0111000";
- - 0: A, B, C, D, E, F
- - 1: B, C
- - 2: A, B, D, E, G
- - 3: A, B, C, D, G
- - E( 14) : A, D, E, F, G
- - when Z="1111"; - - F( 15) : A, E, F, G
multiplexor
Asignacin de las seal Z a los LED
(no se puede usar Z como puerto de salida)
Encendemos el nodo 0
.....
..... contina t con el resto de casos
.....
Primeros 4 nmeros
del convertidor a
siete segmentos
comentarios para ayudar a identificar
el nmero y los segmentos que lucen
Dos ltimos nmeros
del convertidor
En la ltima alternativa no se pone
condicin para evitar generar un latch

Figura 4.4: Sentencias concurrentes de la arquitectura
Ahora, termina de hacer el convertidor a siete segmentos e implementa el diseo en la
FPGA.Tenespecialcuidadodeasignarlospinesadecuadamente.Puedeserquetesalgan
al revs por haber asignado los pines en sentido contrario, esto es, el segmento A donde
iraelsegmentoG,elBdondeelF...
Cuandolohayashecho,compruebaquetodoslosnmerossemuestrancorrectamente.
Date cuenta lo sencillo que resulta hacer el convertidor con VHDL frente a hacerlo con
esquemticos. Ahora es el sintetizador (ISEWebpack) quien se encarga de optimizar el
circuito,asquenotenemosquepreocuparnosdehacerlosmapasdeKarnaugh.
4.2. Decodificador de 2 a 4
Ahora haremos un decodificador de 2 a 4. Este ejercicio lo hicimos el ao pasado con
esquemticos. El bloque del circuito y su tabla de verdad se muestra en la figura 4.5.
Recuerda que un decodificador activa la salida correspondiente al nmero codificado en
las entradas. Por ejemplo, si en la entrada hay un 2 codificado en binario, se activa la
salida nmero 2. Slo una salida puede estar activa en un decodificador. Adems, el
decodificadortieneunasealdehabilitacinEquehacequenoseactiveningunasealde
salidaencasodequevalgacero(suponiendoquelasealEseactivaanivelalto).

13
Aunquenohayningncasoms,esmejorponerlacondicinpordefecto.Tantoporsisenoshaolvidado
incluiralgunaotro,comoporsielsintetizadornosedacuentadequenohaymscondiciones,yentales
casos,nosgeneraraunelementodememoria(enestoscasosunlatch).
Departamento de Tecnologa Electrnica 43
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
I 0
I 1
S0
S1
S2
S3
E
DECOD 2a4
E I 1 I 0 S3 S2 S1 S0
0 X X 0 0 0 0
1 0 0 0 0 0 1
1 0 1 0 0 1 0
1 1 0 0 1 0 0
1 1 1 1 0 0 0
I 0
I 1
S0
S1
S2
S3
E
DECOD 2a4
E I 1 I 0 S3 S2 S1 S0
0 X X 0 0 0 0
1 0 0 0 0 0 1
1 0 1 0 0 1 0
1 1 0 0 1 0 0
1 1 1 1 0 0 0
E I 1 I 0 S3 S2 S1 S0
0 X X 0 0 0 0
1 0 0 0 0 0 1
1 0 1 0 0 1 0
1 1 0 0 1 0 0
1 1 1 1 0 0 0

Figura 4.5: Puertos del decodificador y tabla de verdad


Eldecodificadorsehacedemanerasimilaralconvertidordesietesegmentosdelejercicio
anterior, slo que cambian las salidas que se activan segn el nmero que se tengaen la
entrada.LamayornovedadeslasealdehabilitacinE.
Loquevamosahacerenestediseoesmostrareneldisplayelnmerocodificadoenlos
cuatro primeros interruptores (SW3, SW2, SW1, SW0). El nmero tambin se mostrar en los
cuatroprimerosLED(deLD3aLD0).Sinembargo,envezdemostrarloenelprimerdisplay,
los interruptores SW7 y SW6 indicarn el display por el que se mostrar. Para ello
necesitamos un decodificador, que decodifique el nmero representado por estos
interruptores active el nodo correspondiente. El esquema del circuito que queremos
realizarsemuestraenlafigura4.6.
I 0
I 1
AN( 0)
AN( 1)
AN( 2)
AN( 3)
E
DECOD_2a4
CONV_7SEG
D_I N( 3: 0)
LED( 3: 0)
4
6
SEG( 6: 0)
S0
S1
S2
S3
Controlamos qu
display se va a
encender
Negamos porque los displays se
controlan con lgica inversa
SW3- SW0
SEG_A- SEG_G
SW7- SW6
BTN0
AN3- AN0
LD3- LD0
I 0
I 1
AN( 0)
AN( 1)
AN( 2)
AN( 3)
E
DECOD_2a4
CONV_7SEG
D_I N( 3: 0)
LED( 3: 0)
4
6
SEG( 6: 0)
CONV_7SEG
D_I N( 3: 0)
LED( 3: 0)
44
66
SEG( 6: 0)
S0
S1
S2
S3
LD3- LD0
Controlamos qu
display se va a
encender
Negamos porque los displays se
controlan con lgica inversa
SW3- SW0
SEG_A- SEG_G
SW7- SW6
BTN0
AN3- AN0
Queremos que se habilite
cuando no est presionado
el pulsador BTN0
Queremos que se habilite
cuando no est presionado
el pulsador BTN0

Figura 4.6: Esquema del circuito del decodificador completo
Eneldibujopodemosverqueelcircuitotienedospartesdiferenciadas.Lapartedearriba
(en la figura) realiza la conversin de siete segmentos, esta parte ya la sabes hacer del
apartadoanterior.Lapartedeabajoseencargadecontrolarqudisplayvaalucir.Cuando
I =" 00" sedebeactivarelprimerdisplay,cuandoI =" 01" sedebeactivarelsegundodisplay,
el tercero cuando I =" 10" y el cuarto cuando I =" 11" . Todo esto siempre cuando no est
presionadoelpulsadorBTN0,yaquevaafuncionarcomohabilitacin.
Eldecodificadorconhabilitacinlopodemoshacerconsentenciasconcurrentes(cdigo4
1)oconun proceso(cdigo42).Ambasformasproducencircuitosequivalentes,incluso
haymsformasdehacerlo.
44 Universidad Rey J uan Carlos
4. Codificadores, decodificadores, convertidores de cdigo
Eneldecodificadorrealizadoconlasentenciaconcurrente(cdigo41)sehautilizadouna
seal auxiliar S_DECOD que luego se va a invertir debido a que los nodos funcionan con
lgica negada. En el cdigo del proceso las salidas se han codificado directamente con
lgicanegada.Algosimilarsehahechoconlasealdehabilitacin,enelcdigo41seha
negado y luego se ha comprobado si vale 0. Mientras que en el proceso directamente se
compruebasivaleuno.ElVHDLpermiteelegirlamaneraquemsteguste.Elcdigo41
usa inversores y se parece ms al esquema de la figura 4.6. El cdigo 42 quizs sea ms
fcildeentender.

E_NEG <= NOT E;



S_DECOD <= " 0000" when E_NEG=' 0' el se
" 0001" when I =" 00" el se
" 0010" when I =" 01" el se
" 0100" when I =" 10" el se
" 1000" ; - - when I =" 11"

- - i nver t i mos par a t ener l ogi ca negada
AN <= NOT ( S_DECOD) ;

Cdigo 4-1:Decodificador con sentencia
concurrente
P_DECOD: Pr ocess ( E, I )
begi n
i f E=' 1' t hen
AN <= ( ot her s =>' 1' ) ;
- - AN <= " 1111" ;
el se
case I i s
when " 00" =>
AN <= " 1110" ;
when " 01" =>
AN <= " 1101" ;
when " 10" =>
AN <= " 1011" ;
when ot her s => - - " 11"
AN <= " 0111" ;
end case;
end i f ;
end pr ocess;
Cdigo 4-2:Decodificador con proceso
Porltimo,fjateenlaprimeraasignacindelcdigo42:
AN <= ( ot her s => ' 1' ) ;
Cdigo 4-3:Una forma de asignar el mismo valor a todos los bits de un vector
Esta expresin asigna un uno a todos los bits de la seal AN. Con ello nos ahorramos
contarelnmerodebitsquetenemosqueasignar.
Ya es hora de implementar el circuito propuesto: Crea un nuevo proyecto llamado
decod2a4ycreaunnuevomduloVHDLconlospuertosmostradosenlafigura4.6.Los
puertosquetenganmsdeunbit,craloscomovectores.Enlafigura4.6seindicaaqu
elementosdelaplacadebesasignarlospuertos.Porejemplo,laentradaI ( 1: 0) laasocias
alosinterruptoresSW7ySW6.LaentradaD_I N( 3: 0) laasociasalosinterruptoresSW3,SW2,
SW1ySW0.Yastodoslosdems.
Unavezquelotengasimplementadocomprueba:
Que el display muestra correctamente el nmero codificado en los 4 primeros
interruptores(SW3- SW0)
QuealcambiarlosinterruptoresSW7ySW6secambiaeldisplayqueluce.
Quealpresionarelpulsadordelahabilitacin(BTN0)ningndisplayluce
Queelnmerocodificadoenlos4primerosinterruptorestambinsemuestraporlos4
primerosLED.
4.3. Codificador de 8 a 3
Ahoravamosarealizarlaoperacininversaaladecodificacin.Tendremos8entradassin
codificar (los 8 interruptores) y mostraremos en el primer display de siete segmentos el
nmerodeinterruptorqueestactivo.Hayciertascondiciones:
Departamento de Tecnologa Electrnica 45
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
En caso de que haya ms de un interruptor activo, se mostrar el mayor (el ms
significativoesprioritario).
En caso de que no haya ningn interruptor encendido, no mostraremos nada por el
display.
Elnmerobinariotambinsemostrarporlos3primerosLED.
ElcodificadortendrunasealdehabilitacinEI ,sistaestdeshabilitadasemostrar
unsignomenos(segmentoG)enloscuatrodisplays.
LasealdehabilitacinEI serelpulsadorBTN0.Cuandoestpulsado,sedeshabilitar
elcodificador.
Pararecordardelaopasado,elesquemaylatabladeverdaddelcodificadorsemuestra
enlafigura4.7.Unposibleesquemadelcircuitosemuestraenlafigura4.8,yenlafigura
4.9hayunadescripcinVHDL.
EI I 7 I 6 I 5 I 4 I 3 I 2 I 1 I 0 S2 S1 S0 A EO
0 X X X X X X X X 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 1 0 0 0 1 0
1 0 0 0 0 0 0 1 X 0 0 1 1 0
1 0 0 0 0 0 1 X X 0 1 0 1 0
1 0 0 0 0 1 X X X 0 1 1 1 0
1 0 0 0 1 X X X X 1 0 0 1 0
1 0 0 1 X X X X X 1 0 1 1 0
1 0 1 X X X X X X 1 1 0 1 0
1 1 X X X X X X X 1 1 1 1 0
CODI F
I 3
I 2
I 1
I 0
S0
S1
A
EI
EO
S2
I 7
I 6
I 5
I 4
EI I 7 I 6 I 5 I 4 I 3 I 2 I 1 I 0 S2 S1 S0 A EO
0 X X X X X X X X 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 1 0 0 0 1 0
1 0 0 0 0 0 0 1 X 0 0 1 1 0
1 0 0 0 0 0 1 X X 0 1 0 1 0
1 0 0 0 0 1 X X X 0 1 1 1 0
1 0 0 0 1 X X X X 1 0 0 1 0
1 0 0 1 X X X X X 1 0 1 1 0
1 0 1 X X X X X X 1 1 0 1 0
1 1 X X X X X X X 1 1 1 1 0
EI I 7 I 6 I 5 I 4 I 3 I 2 I 1 I 0 S2 S1 S0 A EO
0 X X X X X X X X 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 1 0 0 0 1 0
1 0 0 0 0 0 0 1 X 0 0 1 1 0
1 0 0 0 0 0 1 X X 0 1 0 1 0
1 0 0 0 0 1 X X X 0 1 1 1 0
1 0 0 0 1 X X X X 1 0 0 1 0
1 0 0 1 X X X X X 1 0 1 1 0
1 0 1 X X X X X X 1 1 0 1 0
1 1 X X X X X X X 1 1 1 1 0
CODI F
I 3
I 2
I 1
I 0
S0
S1
A
EI
EO
S2
I 7
I 6
I 5
I 4

Figura 4.7: Esquema y tabla de verdad del codificador de 8 a 3


CODI F
SW3 I 3
SW2 I 2
SW1 I 1
SW0 I 0
S0
S1
A
EI
EO
BTN0
S2
SW7 I 7
SW6 I 6
SW5 I 5
SW4 I 4
CONV_7SEG
6
SEG( 6: 0)
D0
D1
D2
D3
Como slo hay 3 bits, el cuarto
va a cero (nmero entre 0 y 7)
6
SEG_AUX( 6: 0)
0
1
MUX6BI TS
6
" 1111110"
Si est deshabilitado (EI='0')
muestro un "-" (segmento G)
4
AN( 3: 0)
1
0
4
4
"0000"
0
1
4
4
"1110"
"1111"
Si no hay ninguna entrada
activa se apagan todos los
display (todos los nodos a 1)
Si hay alguna entrada activa
se enciende el primer display
Si no est habilitado se encienden todos
los displays (todos los nodos a 0)
numer o( 0)
numer o( 1)
numer o( 2)
act i vo
LED0
LED1
LED2
CODI F
SW3 I 3
SW2 I 2
SW1 I 1
SW0 I 0
S0
S1
A
EI
EO
BTN0
S2
SW7 I 7
SW6 I 6
SW5 I 5
SW4 I 4
CONV_7SEG
66
SEG( 6: 0)
D0
D1
D2
D3
Como slo hay 3 bits, el cuarto
va a cero (nmero entre 0 y 7)
66
SEG_AUX( 6: 0)
0
1
MUX6BI TS
66
" 1111110"
Si est deshabilitado (EI='0')
muestro un "-" (segmento G)
44
AN( 3: 0)
1
0
44
44
"0000"
0
1
44
44
"1110"
"1111"
Si no hay ninguna entrada
activa se apagan todos los
display (todos los nodos a 1)
Si hay alguna entrada activa
se enciende el primer display
Si no est habilitado se encienden todos
los displays (todos los nodos a 0)
numer o( 0)
numer o( 1)
numer o( 2)
act i vo
LED0
LED1
LED2

Figura 4.8: Esquema de bloques del codificador


46 Universidad Rey J uan Carlos
4. Codificadores, decodificadores, convertidores de cdigo
P_CODI F: Pr ocess ( BTN0, SW)
begi n
i f BTN0 = ' 1' t hen
numer o <= "000";
act i vo <= ' 0' ;
el se
act i vo <= ' 1' ;
i f SW( 7) = ' 1' t hen
numer o <= "111";
el si f SW( 6) = ' 1' t hen
numer o <= "110";
el si f SW( 5) = ' 1' t hen
numer o <= "101";
el si f SW( 4) = ' 1' t hen
numer o <= "100";
el si f SW( 3) = ' 1' t hen
numer o <= "011";
el si f SW( 2) = ' 1' t hen
numer o <= "010";
el si f SW( 1) = ' 1' t hen
numer o <= "001";
el si f SW( 0) = ' 1' t hen
numer o <= "000";
el se
numer o <= "000";
act i vo <= ' 0' ;
end i f ;
end i f ;
end pr ocess;
LED <= numer o;
seg_aux <= "0001111" when numer o="111" el se - - 7
- - 6
- - 5
- - 4
- - 3
- - 2
- - 1
- - when numer o="000" - - 0
- - BTN0 =' 1' AND act i vo = ' 1'
"0100000" when numer o="110" el se
"0100100" when numer o="101" el se
"1001100" when numer o="100" el se
"0000110" when numer o="011" el se
"0010010" when numer o="010" el se
"1001111" when numer o="001" el se
"0000001";
SEG <= seg_aux when BTN0=' 0' el se "1111110";
AN <= "0000" when BTN0=' 1' el se
"1111" when act i vo = ' 0' el se
"1110";
Codifica los
interruptores
en un nmero
binario
Convierte el
nmero a siete
segmentos
Lleva el nmero codificado a los LED
Inhabilita los segmentos si se
pulsa BTN0 (pone un signo "-")
Controla qu
displays lucen
Y cuando haya
que asignar otro
valor se incluye
en esa condicin
Para no ponerla en
todas las
condiciones, se
puede poner la
asignacin por
defecto al
principio
P_CODI F: Pr ocess ( BTN0, SW)
begi n
i f BTN0 = ' 1' t hen
numer o <= "000";
act i vo <= ' 0' ;
el se
act i vo <= ' 1' ;
i f SW( 7) = ' 1' t hen
numer o <= "111";
el si f SW( 6) = ' 1' t hen
numer o <= "110";
el si f SW( 5) = ' 1' t hen
numer o <= "101";
el si f SW( 4) = ' 1' t hen
numer o <= "100";
el si f SW( 3) = ' 1' t hen
numer o <= "011";
el si f SW( 2) = ' 1' t hen
numer o <= "010";
el si f SW( 1) = ' 1' t hen
numer o <= "001";
el si f SW( 0) = ' 1' t hen
numer o <= "000";
el se
numer o <= "000";
act i vo <= ' 0' ;
end i f ;
end i f ;
end pr ocess;
LED <= numer o;
seg_aux <= "0001111" when numer o="111" el se
"0100000" when numer o="110" el se
"0100100" when numer o="101" el se
"1001100" when numer o="100" el se
"0000110" when numer o="011" el se
"0010010" when numer o="010" el se
"1001111" when numer o="001" el se
"0000001";
SEG <= seg_aux when BTN0=' 0' el se "1111110";
AN <= "0000" when BTN0=' 1' el se
"1111" when act i vo = ' 0' el se
"1110";
- - 7
- - 6
- - 5
- - 4
- - 3
- - 2
- - 1
- - when numer o="000" - - 0
- - BTN0 =' 1' AND act i vo = ' 1'
Codifica los
interruptores
en un nmero
binario
Convierte el
nmero a siete
segmentos
Lleva el nmero codificado a los LED
Inhabilita los segmentos si se
pulsa BTN0 (pone un signo "-")
Controla qu
displays lucen
Y cuando haya
que asignar otro
valor se incluye
en esa condicin
Para no ponerla en
todas las
condiciones, se
puede poner la
asignacin por
defecto al
principio

Figura 4.9: Sentencias VHDL del esquema de la figura 4.8


No existe una nica manera para describir el circuito. Por ejemplo, la sentencia que
convierte el nmero a siete segmentos y la de habilitacin de los segmentos se pueden
agrupar en una sola. Con esto nos ahorramos la seal intermedia seg_aux. Compara los
cdigos44y45,sonequivalentes.


seg_aux <= " 0001111" when numer o=" 111" el se
" 0100000" when numer o=" 110" el se
" 0100100" when numer o=" 101" el se
" 1001100" when numer o=" 100" el se
" 0000110" when numer o=" 011" el se
" 0010010" when numer o=" 010" el se
" 1001111" when numer o=" 001" el se
" 0000001" ; - - when numer o=" 000"

SEG <= seg_aux when BTN0=' 0' el se " 1111110" ;

Cdigo 4-4: Habilitacin con seal auxiliar

Departamento de Tecnologa Electrnica 47


Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
SEG <= " 1111110" when BTN0=' 1' el se
" 0001111" when numer o=" 111" el se
" 0100000" when numer o=" 110" el se
" 0100100" when numer o=" 101" el se
" 1001100" when numer o=" 100" el se
" 0000110" when numer o=" 011" el se
" 0010010" when numer o=" 010" el se
" 1001111" when numer o=" 001" el se
" 0000001" ; - - when numer o=" 000"
Cdigo 4-5: Habilitacin dentro de la sentencia
Otraalternativaesusarunsloprocesoparatodo.Estaformapuedequeseamsfcilde
entender, aunque puede hacer que nos olvidemos del circuito que se va a generar (del
esquema). ste quizs es uno de los problemas ms importantes del los lenguajes de
descripcin de hardware: distancian al diseador del circuito que se va a generar,
pudiendohacerlecreerqueesthaciendounprogramasoftware.
LED <= numer o;

P_CODI F: Pr ocess ( BTN0, SW)
begi n
i f BTN0 = ' 1' t hen - - est a deshabi l i t ado
AN <= " 0000" ; - - se enci enden t odos l os di spl ays
numer o <= " 000" ;
SEG <= " 1111110" ; - - most r amos un gui on
el se
AN <= " 1110" ; - - se enci ende el di spl ay de l a der echa
i f SW( 7) = ' 1' t hen
numer o <= " 111" ;
SEG <= " 0001111" ; - - 7
el si f SW( 6) = ' 1' t hen
numer o <= " 110" ;
SEG <= " 0100000" ; - - 6
el si f SW( 5) = ' 1' t hen
numer o <= " 101" ;
SEG <= " 0100100" ; - - 5
el si f SW( 4) = ' 1' t hen
numer o <= " 100" ;
SEG <= " 1001100" ; - - 4
el si f SW( 3) = ' 1' t hen
numer o <= " 011" ;
SEG <= " 0000110" ; - - 3
el si f SW( 2) = ' 1' t hen
numer o <= " 010" ;
SEG <= " 0010010" ; - - 2
el si f SW( 1) = ' 1' t hen
numer o <= " 001" ;
SEG <= " 1001111" ; - - 1
el si f SW( 0) = ' 1' t hen
numer o <= " 000" ;
SEG <= " 0000001" ; - - 0
el se - - no hay ni nguno act i vo
numer o <= " 000" ;
SEG <= " XXXXXXX" ; - - da i gual , no se muest r a ni ngun numer o
AN <= " 1111" ; - - se apagan t odos l os di spl ays
end i f ;
end i f ;
end pr ocess;
Cdigo 4-6: Otra alternativa al circuito de la figura 4.8, todo en un mismo proceso
4.4. Conclusiones
Resumiendo,losconceptosprincipalesdeestaprctica:
Los puertos de salida no se pueden leer, si lo quisisemos leer tendramos que crear
unasealauxiliarqueluegolaasignaremosalpuerto.
Sepuedeninicializartodoslosbitsdeunvectoraunmismovalorusandolaexpresin
ot her s => ' 1' "
48 Universidad Rey J uan Carlos
4. Codificadores, decodificadores, convertidores de cdigo
Eldecodificadoractivaunanicasalida
ElVHDLyelsintetizadornosahorrarealizarlassimplificacioneslgicasquehacamos
porKarnaugh
Unasealslosedebeescribir(asignar)enunasentenciaconcurrenteoproceso.Sise
asigna en ms de una, estaremos creando un cortocircuito. Podramos estar diciendo
que un cable est a 0 y 1 a la vez (en sintetizador ISE te dir un error indicando
multisource).
Loslenguajesdedescripcindehardware(HDL)juntoconlasntesisautomticanos
facilitan mucho la tarea del diseo. Sin embargo, pueden hacer que nos perdamos la
referenciasobreelcircuitohardwarequeestamosdiseando,haciendoquediseemos
deformasimilaraunprogramasoftware.
Departamento de Tecnologa Electrnica 49



5. Elementos de memoria
Un elemento de memoria es un componente que es capaz de guardar (memorizar) un
valor. Existen muchas maneras de modelar un elemento de memoria en VHDL, sin
embargo,dentrodelsubconjuntodeVHDLsintetizableslohayunaspocasmaneras.El
subconjuntodeVHDLsintetizableesunestndardelVHDL[14]querestringeellenguaje
a un mnimo construcciones VHDL que los sintetizadores deben aceptar. Por tanto, no
todo el VHDL es aceptado para sintetizarlo e implementarlo en la FPGA. Esto se debe a
queelVHDLsurgiparamodelarysimularcircuitos,ynoparasintetizarlos.Porello,el
VHDL es mucho ms amplio que lo que se puede sintetizar. En la prctica, cada
sintetizadoraceptaunconjuntodeterminadoparasntesis,yporellosedebeconsultarel
manualantesdeempezarausarunsintetizadornuevo[27].
Acontinuacin,medianteejemplos,veremoscmoserealizanelementosdememoria.
5.1. Biestable J-K
Empezaremosconunodelosejemplosmssencillosque podemosprobar:elbiestableJ
K. Para recordar del ao pasado, en la figura 5.1 se muestra la tabla de verdad del
biestableJK.Aladerechasemuestraelesquemadelcircuitoquesequiereimplementar,
en donde se indican a qu elementos de la placa van conectados los puertos: Entradas a
lospulsadoresBTN1yBTN0ysalidaalLEDLD0.
J Q
CLK
BTN1 LD0
K BTN0
J K Q( t +1)
0 0 Q( t )
0 1 0
1 0 1
1 1 Q( t )
J Q
CLK
BTN1 LD0
K BTN0
J Q
CLK
BTN1 LD0
K BTN0
J K Q( t +1)
0 0 Q( t )
0 1 0
1 0 1
1 1 Q( t )
J K Q( t +1)
0 0 Q( t )
0 1 0
1 0 1
1 1 Q( t )

Figura 5.1: Tabla de verdad del biestable J-K (izquierda) y circuito que queremos implementar (derecha)
El cdigo 51 muestra el proceso que implementa un biestable JK activo por flanco de
subida.
P_J K1: Pr ocess ( Cl k)
begi n
i f Clk'event and Clk='1' t hen
i f J =' 1' and K=' 1' t hen
Q <= not Q;
el si f J =' 1' and K=' 0' t hen
Q <= ' 1' ;
el si f J =' 0' and K=' 1' t hen
Q <= ' 0' ;
el se
Q <= Q;
end i f ;
end i f ;
end pr ocess;
Cdigo 5-1: Proceso que implementa un biestable J-K

P_J K2: Pr ocess ( Cl k)
begi n
i f Clk'event and Clk='1' t hen
i f J =' 1' and K=' 1' t hen
Q <= not Q;
el si f J =' 1' and K=' 0' t hen
Q <= ' 1' ;
el si f J =' 0' and K=' 1' t hen
Q <= ' 0' ;
end i f ;
end i f ;
end pr ocess;

Cdigo 5-2: Otra alternativa para el biestable J-K
Ahoracreaunproyectollamadobi est _j kyunanuevafuenteVHDLdelmismonombre.
Pon los puertos sealados en la figura 5.1, asignndole los pines que se muestran en la
figura.Usacualquieradelosprocesosdeloscdigos5152.ImplemntaloenlaFPGA
ycompruebaquefuncionacorrectamente.
Departamento de Tecnologa Electrnica 50
5. Elementos de memoria
Al implementarlo, no te olvides de indicar la frecuencia de reloj: En la ventana de
Processes,dentrodeUserConstraints,pinchaenCreateTimingConstraints.Yallsaldrla
ventanadeXilinxConstraintsEditor,pinchaenlapestaadeGlobal.
SiestsusandolatarjetaPegasusalrelojpon20enelperiodo,queson20ns(50MHz).El
textonsseaadeautomticamente.
Si usas la tarjeta Basys el reloj se puede configurar a 100, 50 y 25 MHz segn cmo
coloqueseljumperJ4,eldeconfiguracindelreloj(figura2.2).
GuardaycierraelXilinxConstraintsEditor.Lafigura5.2muestralaventanadelEditorde
Restricciones de Xilinx (Xilinx Constraints Editor), donde tenemos que indicar el periodo
derelojdelaplaca.
Una vez que lo tengas implementado, comprueba que funciona correctamente.
CompruebaademsqusucedecuandomantienespresionadoslosdospulsadoresPB0 y
PB1simultneamente.Quocurre?sabesporqu?

Figura 5.2: Editor de restricciones del ISE (Xilinx Constraints Editor)


5.2. Descripcin de biestables en VHDL para sntesis
En este apartado analizaremos cmo se debe realiza la descripcin de los biestables en
VHDL para sntesis. La forma de describir biestables que se va a explicar no es la nica
admitidaporelestndardesntesis[14].Sinembargoseterecomiendaqueseaestaforma
laqueutilicesyaqueesadmitidaporprcticamentetodoslossintetizadores(pornodecir
todos).Nosiemprequesedigaqueesincorrectosignificaqueseaunaformaincorrecta
de describirlo, pero al menos, no se recomienda en esta asignatura, por claridad y
uniformidaddecdigo.Lasreglasson:
Departamento de Tecnologa Electrnica 51
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
El proceso debe tener una sentencia que indica si es un elemento de memoria activo
pornivel(latch)oporflanco(flipflop).Enelcdigo51,resaltadoennegrita,indicaque
esunflipflopactivoporflancodesubida.loscuatroposiblescasosson:
Siesunflipflopactivoporflancodesubidalasentenciaderelojdebeser:
i f cl k' event and cl k=' 1' t hen
Siesunflipflopactivoporflancodebajadalasentenciaderelojdebeser:
i f cl k' event and cl k=' 0' t hen
Siesunlatchactivopornivelaltolasentenciaderelojdebeser:
i f enabl e=' 1' t hen
Siesunlatchactivopornivelbajolasentenciaderelojdebeser:
i f enabl e=' 0' t hen
La sentencia de reloj no debe de tener ninguna condicin ms a parte de la del reloj.
Otras condiciones se deben de poner en otras sentencias if de menor jerarqua. El
cdigo 53 muestra la sentencia de reloj correcta, mientras que el cdigo 54 es
incorrectoporquelacondicindeJ =' 1' estenlamismacondicindelreloj.
i f clk'event and clk='1' t hen
i f J =' 1' t hen
. . . . . .
Cdigo 5-3: Sentencia de reloj CORRECTA
i f clk'event and clk='1' and J='1' t hen
. . . .
Cdigo 5-4: sentencia de reloj INCORRECTA
Elbiestablepuedetenerinicializacionesasncronas(reset,clear,set,preset,...odiversos
nombres).Estainicializacinsedebeponerantesdelasentenciadereloj.Lasentencia
derelojseponeconunel si f quesiguealasentenciadeinicializacin(cdigo55).
Bi est _pr oc: Pr ocess ( Reset , Cl k)
begi n
i f r eset = ' 0' t hen
Q <= ' 0' ;
el si f cl k' event and cl k=' 1' t hen
- - ahor a van sent enci as si ncr onas
. . . . . .
Cdigo 5-5: Inicializacin sncrona

Fuera de lasentencia de reloj no debe de haber ninguna sentencia ms. Solamente se
admiteantesdelasentenciaderelojunainicializacinasncrona(comoenelcdigo5
5), pero despus no debera de haber sentencias, ni tampoco sentencias fuera de la
inicializacin. En los cdigos 56 y 57 se muestran dos ejemplos en los que hay una
sentencia de asignacin antes de la inicializacin sncrona (cdigo 56), y una
asignacinfueradelasentenciadereloj(cdigo57).Lassentenciasincorrectasestnen
negrita.
Bi est _pr oc: Pr ocess ( Reset , Cl k)
begi n
H <= P; - - I NCORRECTO
i f Reset = ' 0' t hen
Q <= ' 0' ;
el si f Cl k' event and Cl k=' 1' t hen
- - aqu van sent enci as si ncr onas
. . . . . .
Cdigo 5-6: Asignacin antes de la
inicializacin. INCORRECTA
Bi est _pr oc: Pr ocess ( Reset , Cl k)
begi n
i f Reset = ' 0' t hen
Q <= ' 0' ;
el si f Cl k' event and Cl k=' 1' t hen
Q <= Dat o;
end i f ;
H <= P; - - I NCORRECTO
end pr ocess;
Cdigo 5-7: Asignacin fuera del reloj. INCORRECTA
La sentencia de reloj debe de terminar con un end i f y no debe de haber un el se o
el si f a continuacin (en el mismonivel del i f ). Puede haber sentenciasi f anidadas
dentrodelasentenciadereloj(comoenelcdigo51ycdigo53),peronoalmismo
nivel.
52 Universidad Rey J uan Carlos
5. Elementos de memoria
Bi est _pr oc: Pr ocess ( Reset , Cl k)
begi n
i f Reset = ' 0' t hen
Q <= ' 0' ;
el si f Cl k' event and Cl k=' 1' t hen
Q <= Dat o;
else
Q <= P;
end i f ;
end pr ocess;
Cdigo 5-8: Asignacin despus de la sentencia de reloj. INCORRECTA

Enlalistadesensibilidaddelprocesodebeaparecerlasealderelojytodaslasseales
asncronasqueseleen(lasqueestnantesdelasealdereloj).Noesincorrectoincluir
las seales sncronas (las que estn despus de la sentencia de reloj), pero incluirlas
hace que la simulacin vaya ms lenta. El cdigo 59 muestra un ejemplo,. En l, la
sealDat onoseincluyeporserunasealsncrona:estdentrodelacondicindereloj.
Incluirlanoesincorrecto,perohacelasimulacinmslenta.
Bi est _pr oc: Pr ocess ( Reset , Val or I ni ci al , Cl k)
begi n
i f Reset = ' 0' t hen
Q <= ValorInicial; - - dat o asi ncr ono
el si f Clk' event and Clk=' 1' t hen
- - Aqui van l as senal es si ncr onas y no se ponen en l a l i st a de sensi bi l i dad
Q <= Dat o;
end i f ;
end pr ocess;
Cdigo 5-9: Lista de sensibilidad con el reloj y las seales asncronas
Dentrodelacondicindelrelojpuedenirtodotipodesentencias.Estassentenciasson
secuencialesysimportaelordendeaparicin.Siseasignavaloraunasealmsde
una vez, la ltima asignacin es la que le dar valor. As, los cdigos 510 y 511 son
equivalentes.Elcdigo510asignaQ<=' 0' cuandoI ni c=' 1' .Mientrasqueelcdigo5
11asignaQ<=' 0' siempre,peroessobrescritoporQ<=Dat ocuandoI ni c=' 0' ,portanto,
asignaQ<=' 0' cuandoI ni c=' 1' .
Bi est _pr oc: Pr ocess ( Reset , Cl k)
begi n
i f Reset = ' 0' t hen
Q <= ' 0' ;
el si f Cl k' event and Cl k=' 1' t hen
i f I ni c = ' 0' t hen
Q <= Dat o;
el se
Q <= '0';
end i f ;
end i f ;
end pr ocess;
Cdigo 5-10: Proceso equivalente al del cdigo 5-11
Bi est _pr oc: Pr ocess ( Reset , Cl k)
begi n
i f Reset = ' 0' t hen
Q <= ' 0' ;
el si f Cl k' event and Cl k=' 1' t hen
Q <= '0';
i f I ni c = ' 0' t hen
Q <= Dat o;
end i f ;
end i f ;
end pr ocess;
Cdigo 5-11: Proceso equivalente al del cdigo 5-10
Cuandoenuncaminonoseasignaningnvaloralbiestable,steguardaelvalorque
tena antes. Por ejemplo, en el cdigo 52, la seal Q no recibe valor cuando J =' 0' y
K=' 0' , por tanto, la seal Qguarda su valor anterior. En consecuencia, el proceso del
cdigo 52 es equivalente al proceso del cdigo 51. Puesto que en el cdigo 51 se
asignaQ <= Q cuandoJ =' 0' yK=' 0' .
Estoltimoesmuyimportanteparaevitarcrearunelementodememoriacuandono
queremoscrearlo.Siqueremoscrearunprocesocombinacionaldebemosincluirtodas
las posibilidades, o terminar el proceso con un el se o un when ot her s". Otra
alternativaesincluirunaasignacinpordefectoalprincipio.
Departamento de Tecnologa Electrnica 53
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
Por ejemplo, el cdigo 512 no genera latch, porque con el el se se cubren todas las
posibilidades. Sin embargo, el proceso 513 s genera latch. Aunque la seal Sel ect
nuncapudieravaler" 11" sedebedeponersegnelcdigo512.
CombPr oc: Pr ocess( Sel ect , Dat o1, Dat o2)
begi n
i f Sel ect = " 00" t hen
Q <= ' 0' ;
el si f Sel ect = " 01" t hen
Q <= Dat o1;
else
Q <= Dat o2;
end i f ;
end pr ocess;
Cdigo 5-12: Proceso combinacional (no genera
latch). Correcto
Lat chPr oc: Pr ocess( Sel ect , Dat o1, Dat o2)
begi n
i f Sel ect = " 00" t hen
Q <= ' 0' ;
el si f Sel ect = " 01" t hen
Q <= Dat o1;
elsif Select = "10" then
Q <= Dat o2;
end i f ;
end pr ocess;
Cdigo 5-13: Proceso que genera latch.
Posiblemente no lo quieras generar
Incluso,aunquesecubrantodaslasposibilidadessedebeterminarconunel seporque
los tipos st d_l ogi c tienen ms valores posibles aparte de 0 y 1. El cdigo 514 esel
recomendadofrentealcdigo515.
CombPr oc: Pr ocess( Sel ect , Dat o1, Dat o2)
begi n
i f Sel ect = " 00" t hen
Q <= ' 0' ;
el si f Sel ect = " 01" t hen
Q <= Dat o1;
el si f Sel ect = " 10" t hen
Q <= Dat o2;
else
Q <= ' 1' ;
end i f ;
end pr ocess;
Cdigo 5-14: Proceso combinacional (no genera
latch)
Lat chPr oc: Pr ocess( Sel ect , Dat o1, Dat o2)
begi n
i f Sel ect = " 00" t hen
Q <= ' 0' ;
el si f Sel ect = " 01" t hen
Q <= Dat o1;
el si f Sel ect = " 10" t hen
Q <= Dat o2;
elsif Select ="11" then
Q <= ' 1' ;
end i f ;
end pr ocess;
Cdigo 5-15: Proceso que es posible que genere
latch. No recomendado
Otra manera de asegurarse de que no se genera latch es incluir una asignacin por
defecto al principio. Esto vendra a ser equivalente a un el se. El cdigo 516 es
equivalentealcdigo512,yelcdigo517esequivalenteal514.
CombPr oc: Pr ocess( Sel ect , Dat o1, Dat o2)
begi n
Q <= Dato2;
i f Sel ect = " 00" t hen
Q <= ' 0' ;
el si f Sel ect = " 01" t hen
Q <= Dat o1;
end i f ;
end pr ocess;
Cdigo 5-16: Proceso combinacional equivalente al
cdigo 5-12 (no genera latch)
CombPr oc: Pr ocess( Sel ect , Dat o1, Dat o2)
begi n
Q <= '1';
i f Sel ect = " 00" t hen
Q <= ' 0' ;
el si f Sel ect = " 01" t hen
Q <= Dat o1;
el si f Sel ect = " 10" t hen
Q <= Dat o2;
end i f ;
end pr ocess;
Cdigo 5-17: Proceso combinacional equivalente al
cdigo 5-14 (no genera latch)
Por ltimo, se recomienda indentar (incluir espacios o tabuladores) con cada sentencia
anidada.Estofacilitamucholacomprensindelcdigo.Serecomiendaindentarcondos
espacios.ParadeterminarlaindentacinconelISEWebPack,veteaEditPreferences,yall
buscalacategoraISETextEditor.EnellaponTabWidth=2.Yponquecuandoinserteun
tabulador(WhenYouPresstheTabKey)seponganespacios:Insertspaces.
5.3. Encendido y apagado de LED con un pulsador
Enlaseccin5.1vimoscmoseenciendeyapagaunLEDcondospulsadores:unopara
encender (J ) y otro para apagar (K). Ahora queremos hacerlo con un slo pulsador, de
54 Universidad Rey J uan Carlos
5. Elementos de memoria
modoquesiestapagado,cuandopulsemosseencienda;ysiestencendido,alpulsarse
apague.
Sin mirar la solucin que se da a continuacin, intenta realizar el circuito t slo con la
informacindelaseccin5.1.
5.3.1. Primera solucin
LaprimeraaproximacinalproblemaserarealizarunbiestableT,igualquecomosehizo
enlaprctica17deED1[12].Pararecordar,enlafigura5.3semuestralatabladeverdad
delbiestableTysuesquema.
T Q( t +1)
0 Q( t )
1 Q( t )
T Q
CLK
BTN0 LD0
Reset
BTN3
T Q( t +1)
0 Q( t )
1 Q( t )
T Q( t +1)
0 Q( t )
1 Q( t )
T Q
CLK
BTN0 LD0
Reset
BTN3
T Q
CLK
BTN0 LD0
Reset
BTN3

Figura 5.3: Tabla de verdad del biestable T y su esquema
Loscdigos518y519muestranprocesosequivalentesparaimplementarunbiestableT
activoporflancodesubida.
P_T: Pr ocess ( Reset , Cl k)
begi n
i f Reset = ' 1' t hen
Q <= ' 0' ;
el si f Cl k' event and Cl k = ' 1' t hen
i f T = ' 1' t hen
Q <= not Q;
end i f ;
end i f ;
end pr ocess;
Cdigo 5-18: Proceso que implementa un biestable T
P_T: Pr ocess ( Reset , Cl k)
begi n
i f Reset = ' 1' t hen
Q <= ' 0' ;
el si f Cl k' event and Cl k = ' 1' t hen
i f T = ' 1' t hen
Q <= not Q;
el se
Q <= Q;
end i f ;
end i f ;
end pr ocess;
Cdigo 5-19: Alternativa que describe el biestable T
Ahora implementa este diseo en la FPGA, asociando el botn de encendido/apagado al
pulsadorBTN0,elReset alpulsadorBTN3,ylasalidaalLEDLD0.
Comprueba varias veces si funciona bien y comprueba que sucede si mantienes
presionadoelbotndeencendido/apagado.Qusucede?funcionacorrectamente?por
qu?
5.3.2. Detector de flanco
Qusucede?Porqu avecesfuncionaelbotndeencendido/apagadoyotrasvecesse
quedaenelmismoestadoenelqueestaba?Qupasasidejoelbotnpulsadodemanera
continuada?
En la figura 5.4 se muestra el cronograma de lo que sucede al pulsar el botn. Como la
frecuencia del reloj es muy alta respecto a la velocidad humana, por muy rpido que
pulsemosysoltemoselpulsador,eltiempodepulsacindurarmuchosciclosdereloj.Y
portanto,elestadodelbiestable(Q)cambiarentodoslosciclosderelojmientrasestel
pulsador presionado. Al soltar el pulsador, el estado final ser aleatorio, segn se haya
mantenidopulsadoduranteunnmeroparoimpardeciclos.
Departamento de Tecnologa Electrnica 55
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
' 1' cambio en Q
Oscilar hasta que soltemos el pulsador
T=' 0' Q
guarda valor
Valor final depende del
estado al soltar el pulsador
50 MHz
CLK
LED0-Q
BTN0-T
' 1' cambio en Q
Oscilar hasta que soltemos el pulsador
T=' 0' Q
guarda valor
Valor final depende del
estado al soltar el pulsador
50 MHz
CLK
LED0-Q
BTN0-T

Figura 5.4: Cronograma resultante de pulsar el botn de encendido/apagado


Para evitar este efecto, lo que tenemos que hacer es un circuito detector de flancos, que
transformarnuestropulsohumanoenpulsodelperiodo delreloj.Podramospensaren
utilizarlaexpresinT' event and T=' 1' paradetectarelflancodesubida.Yseguramente
funcione, sin embargo hemos visto que slo debemos utilizar dicha expresin para la
seal de reloj. Porque si no, estaremos usando la seal T como reloj del biestable, y en
diseossncronosnoesrecomendable.Asquetenemosquepensarenotraalternativa.
El detector de flanco se puede realizar con una mquina de estados que detecte la
secuencia01paraflancosdesubidaylasecuencia10paraflancosdebajada.
Lamquinadeestadospodemoshacerlamediantediagramadeestadosobienmediante
registrosdedesplazamiento(usandobiestablesD).Ambosmtodossehanvistoenclase.
Por ser una secuencia pequea, la haremos mediante registros de desplazamiento. No
usaremosdirectamentelaentradadebidoaqueelpulsadoresunaentradaasncrona,sino
que la registraremos (la pasaremos por un biestable) para evitar metaestabilidad y para
evitarqueelpulsoresultanteduremuypoco.Elcircuitodetectordeflancosinregistrarla
entrada se muestra en la figura 5.5 (realizado con registro de desplazamiento). Es una
mquinadeMealyporquelasalidadependedelaentrada(BTN0).
BTN0_RG1
Cl k
BTN0 D Q
PULSO_BTN0
BTN0_RG1
Cl k
BTN0 D Q
PULSO_BTN0

Figura 5.5: Circuito detector de flanco sin registrar la entrada (Mealy: no recomendado para este caso)
Sin embargo, el circuito de la figura 5.5 no es aconsejable porque la entrada BTN0 es
asncrona, pues el pulsador puede ser presionado en cualquier momento. Esto puede
ocasionar metaestabilidad o anchos de pulsos muy pequeo. El cronograma de este
circuito para dos pulsaciones se muestra en la figura 5.6. En ella se puede ver que el
segundopulsoestmuycercadelflancodelreloj,estoproduceunasalidamuyestrecha,y
ademspodraprovocarmetaestabilidad.
56 Universidad Rey J uan Carlos
5. Elementos de memoria
BTN0
BTN0_RG1
PULSO_BTN0
clk
Cl k
BTN0
BTN0_RG1
PULSO_BTN0
clk
Cl k
Si el pulso llega muy cerca del flanco de subida del
reloj el pulso resultante puede ser muy pequeo, o
lo que es peor: puede haber metaestabilidad
Si el pulso llega muy cerca del flanco de subida del
reloj el pulso resultante puede ser muy pequeo, o
lo que es peor: puede haber metaestabilidad

Figura 5.6: Cronograma del detector de flanco realizado por Mealy (no recomendado para este caso)
Para evitar estos inconvenientes se hace el registro de desplazamiento con la entrada
registrada (mquina de Moore). La figura 5.7 muestra la versin Moore del circuito de
detectordeflancorealizadaconregistrosdedesplazamiento.
Cl k
BTN0 D Q D Q
BTN0_RG1 BTN0_RG2
PULSO_BTN0
Cl k
BTN0 D Q D Q
BTN0_RG1 BTN0_RG2
PULSO_BTN0

Figura 5.7: Circuito detector de flanco registrando la entrada (Moore: recomendado para este caso)
Ahora los pulsos resultantes siempre durarn un ciclo de reloj, como puedes ver en el
cronogramadelafigura5.8.
BTN0
BTN0_RG1
PULSO_BTN0
clk
Cl k
Ahora los pulsos siempre duran de un ciclo de reloj
BTN0_RG2
BTN0
BTN0_RG1
PULSO_BTN0
clk
Cl k
Ahora los pulsos siempre duran de un ciclo de reloj
BTN0_RG2

Figura 5.8: Cronograma del detector de flanco realizado por Moore (recomendado para este caso)
Aspues,elcircuitoquetenemosquehacercontendrelbiestableTdelafigura5.3,pero
envezderecibirelpulsodirectamentedelpulsador,lorecibirfiltradoporeldetectorde
flancodelafigura5.7.Elcircuitofinalserelmostradoenlafigura5.9.
Departamento de Tecnologa Electrnica 57
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
detector de flanco detector de flanco
Cl k
BTN0 D Q D Q
BTN0_RG1 BTN0_RG2
T Q LD0
Reset
BTN3
Reset Reset
PULSO_BTN0
biestable T
Cl k
BTN0 D Q D Q
BTN0_RG1 BTN0_RG2
T Q LD0
Reset
BTN3
Reset Reset
PULSO_BTN0
biestable T

Figura 5.9: Circuito que enciende y apaga un LED con el mismo pulsador
EstecircuitosepuededescribirconelcdigoVHDLmostradoenlafigura5.10.
bi est _D1: Pr ocess ( Reset , Cl k)
begi n
i f Reset = ' 1' t hen
BTN0_REG1 <= ' 0' ;
el si f Cl k' event and Cl k=' 1' t hen
BTN0_REG1 <= BTN0;
end i f ;
end pr ocess;
bi est _D2: Pr ocess ( Reset , Cl k)
begi n
i f Reset = ' 1' t hen
BTN0_REG2 <= ' 0' ;
el si f Cl k' event and Cl k=' 1' t hen
BTN0_REG2 <= BTN0_REG1;
end i f ;
end pr ocess;
PULSO_BTN0 <= ' 1' when ( BTN0_REG1 = ' 1' and BTN0_REG2=' 0' ) el se ' 0' ;
bi est _T: Pr ocess ( Reset , Cl k)
begi n
i f Reset = ' 1' t hen
Q_T <= ' 0' ;
el si f Cl k' event and Cl k=' 1' t hen
i f PULSO_BTN0 = ' 1' t hen
Q_T <= NOT Q_T;
end i f ;
end i f ;
end pr ocess;
LD0 <= Q_T;
Primer
biestable D
Asignacin al puerto de salida Q_T es necesario
porque los puertos de salida no se pueden leer
Segundo
biestable D
biestable T cuya
entrada
PULSO_BTN0 se ha
transformado en
un pulso de un
ciclo de reloj
Deteccin de
flanco de subida
Cl k
BTN0 D Q
BTN0_RG1
Reset
Cl k
D Q
BTN0_RG2
Reset
BTN0_RG1
Cl k
T Q
Q_T
Reset
PULSO_BTN0
bi est _D1: Pr ocess ( Reset , Cl k)
begi n
i f Reset = ' 1' t hen
BTN0_REG1 <= ' 0' ;
el si f Cl k' event and Cl k=' 1' t hen
BTN0_REG1 <= BTN0;
end i f ;
end pr ocess;
bi est _D2: Pr ocess ( Reset , Cl k)
begi n
i f Reset = ' 1' t hen
BTN0_REG2 <= ' 0' ;
el si f Cl k' event and Cl k=' 1' t hen
BTN0_REG2 <= BTN0_REG1;
end i f ;
end pr ocess;
PULSO_BTN0 <= ' 1' when ( BTN0_REG1 = ' 1' and BTN0_REG2=' 0' ) el se ' 0' ;
bi est _T: Pr ocess ( Reset , Cl k)
begi n
i f Reset = ' 1' t hen
Q_T <= ' 0' ;
el si f Cl k' event and Cl k=' 1' t hen
i f PULSO_BTN0 = ' 1' t hen
Q_T <= NOT Q_T;
end i f ;
end i f ;
end pr ocess;
LD0 <= Q_T;
Primer
biestable D
Asignacin al puerto de salida Q_T es necesario
porque los puertos de salida no se pueden leer
Segundo
biestable D
biestable T cuya
entrada
PULSO_BTN0 se ha
transformado en
un pulso de un
ciclo de reloj
Deteccin de
flanco de subida
Cl k
BTN0 D Q
BTN0_RG1
Reset
Cl k
BTN0 D Q
BTN0_RG1
Reset
Cl k
BTN0 D Q
BTN0_RG1
Reset
Cl k
D Q
BTN0_RG2
Reset
BTN0_RG1
Cl k
D Q
BTN0_RG2
Reset
BTN0_RG1
Cl k
T Q
Q_T
Reset
PULSO_BTN0
Cl k
T Q
Q_T
Reset
PULSO_BTN0

Figura 5.10: Cdigo VHDL del circuito completo

Los dos primeros procesos de la figura 5.10 se pueden agrupar en uno, ya que en los
procesos el valor de las seales nose actualiza inmediatamente sinoque se actualizan
al terminar el proceso. As, en el cdigo 520, la seal BTNO_REG1 no toma el valor
inmediatamente de BTN0, y por lo tanto, la seal BTN0_REG2 no recibe el valor que se le
acaba de asignar a BTN0_REG1 (el que le da BTN0) sino el valor que tena BTN0_REG1. En
consecuencia, al salir e proceso, BTN0_REG1 tendr el valor de BTN0 y BTN_REG2 tendr el
antiguo valor de BTN0_REG1 y no el que se le acaba de asignar. Por tanto, BTN0_REG2 est
retrasadauncicloderelojrespectodeBTN0_REG1(queesloquequeremoshacer).
58 Universidad Rey J uan Carlos
5. Elementos de memoria
Debido a esto, el proceso 521 es equivalente al proceso 520. Aunque las asignaciones
estncambiadasdeorden.
bi est _Ds: Pr ocess ( Reset , Cl k)
begi n
i f Reset = ' 1' t hen
BTN0_REG1 <= ' 0' ;
BTN0_REG2 <= ' 0' ;
el si f Cl k' event and Cl k=' 1' t hen
BTN0_REG1 <= BTN0;
BTN0_REG2 <= BTN0_REG1;
end i f ;
end pr ocess;
Cdigo 5-20: Proceso que implementa los 2
biestables D
bi est _Ds: Pr ocess ( Reset , Cl k)
begi n
i f Reset = ' 1' t hen
BTN0_REG1 <= ' 0' ;
BTN0_REG2 <= ' 0' ;
el si f Cl k' event and Cl k=' 1' t hen
BTN0_REG2 <= BTN0_REG1;
BTN0_REG1 <= BTN0;
end i f ;
end pr ocess;
Cdigo 5-21: Proceso equivalente al 5-20
Ahora, crea un nuevo proyecto e implementa en la FPGA este circuito y comprueba que
funciona bien. En caso de que ests trabajando con la placa Basys, el diseo funcionar
mejor que el diseo de la figura 5.3, sin embargo, todava no funcionar del todo bien
porque los pulsadores de la Basys no tienen el circuito de eliminacin de rebotes (figura
3.2)quesestpresenteenlaPegasus(figura3.1).Msadelante,enelcaptulo11veremos
cmosolucionaresteproblema.
EncualquiercasoqupasasienestecircuitomantienespresionadoelpulsadorBTN0?se
comportaigualqueantes?
5.4. Conclusiones
Losconceptosmsimportantesdeestaprctica:
No todas las maneras que tiene el VHDL para modelar elementos de memoria son
vlidasparasntesis.
En esta prctica se han establecido unas reglas para describir elementos de memoria
parasntesis.
Cuandodescribimoslgicacombinacional,hayquetenercuidadodenocrearlatches
no deseados, para evitarlo, las seales se deben asignar en todas las condiciones
posibles.LascondicionesdebenterminarenELSEynoELSI F.
Enlosprocesos,lassealesnoseactualizaninmediatamentesinoqueseactualizanal
terminarelproceso.
Lasentradasasncronassedebenregistrarparaevitarmetaestabilidad.
Los detectores de flancos suelen ser necesarios para realiza interfaces humanos con
diseossncronos
Departamento de Tecnologa Electrnica 59



6. Contadores
En esta prctica aprenderemos a describir contadores sintetizables en VHDL.
Afortunadamente veremos que es mucho ms sencillo que los contadores diseados
mediante esquemticos que realizamos el curso pasado en ED1 [12]. En esta prctica
veremosalgunasaplicacionesdeloscontadores.
6.1. Segundero
Elsegunderoquehicimoselaopasadoyquetantonoscost,esteaolopodremoshacer
enmuypocotiempo.
EnestaprcticaqueremosqueunLEDsemantengaencendidoduranteunsegundoyse
apagueduranteelsegundosiguiente,estecomportamientoserepetirperidicamente.
Recordando del ao pasado, lo que tenemos que hacer es un divisor de frecuencia.
Nuestro reloj tiene una frecuencia de 50 MHz y queremos una seal de 1 Hz (que
llamaremos S1seg). El cronograma de estas seales se muestra en la figura 6.1. Como se
puedeapreciar,lasealS1segestara1solamenteduranteunciclode relojduranteun
segundo.
T=1 s (f =1Hz)
T=20 ns
(no est a
escala)
Cl k
S1seg
T=1 s (f =1Hz)
T=20 ns
(no est a
escala)
Cl k
S1seg

Figura 6.1: Cronograma de la seal que queremos obtener


La seal S1seg ser la entrada a un biestable T, y har que cada segundo, el biestable
cambiedevalor.Elesquemageneraldelcircuitosemuestraenlafigura6.2.
P_Conta1seg
S1seg Cl k
Reset
T=1 s
1 Hz 50 MHz
T=20 ns
T=20 ns
Biestable T
Q
Clk
T
LED
Cada segundo le llega un '1' y entonces
cambiarde estado (se encendery apagar)
(no est a escala)
Cl k
S1seg
P_Conta1seg
S1seg Cl k
Reset
T=1 s
1 Hz 50 MHz
T=20 ns
T=20 ns
Biestable T
Q
Clk
T
LED
Cada segundo le llega un '1' y entonces
cambiarde estado (se encendery apagar)
(no est a escala)
Cl k
S1seg

Figura 6.2: Esquema del circuito que queremos realizar


Paraimplementarundivisordefrecuencianecesitamoscontaryparacontardebemosser
capaces de sumar (al menos sumar 1 cada vez). Por otro lado, necesitamos saber qu
rangotienenuestracuenta(hastaqunmerollega)paraquelasealqueutilicemospara
contartengaunnmeroadecuadodebits.
Departamento de Tecnologa Electrnica 61
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
Para pasar de 20 ns a 1 segundo (de 50 MHz a 1 HZ), tenemos que contar hasta 50
millones(5010
6
).Lamenorpotencia
14
dedossuperiora5010
6
es26.Estoes,2
26
>5010
6
>
2
25
. Por tanto, necesitamos 26 bits para poder representar el nmero 5010
6
. As que
nuestrasealdecuentavaatener26bits.
Para llevar la cuenta se puede utilizar una seal de tipo entero o natural (i nt eger o
nat ur al ).Estasealdebedetenerunrangopotenciadedos.Sudeclaracinsera:
si gnal cuent a : nat ur al r ange 0 t o 2**26- 1;
Fjatequeelrangodelosenterosonaturalesesascendente(t oenvezdedownt o comolo
eraenlos st d_l ogi c_vect or ).
La operacin potencia se representa con dos asteriscos en VHDL. Se debe restar uno al
resultado de la potencia porque el rango empieza en cero. Por ejemplo para 8 bits, el
rangosera:
si gnal cuent a256 : nat ur al r ange 0 t o 2**8- 1; - - de 0 a 255
Si a un entero no se le especifica el rango, se genera una seal de 32 bits, lo que en la
mayoradeloscasosesundesperdicioderecursos.
Laarquitecturacompletadelsegunderosemuestraenelcdigo61
ar chi t ect ur e Behavi or al of cont a1seg i s
si gnal cuent a : nat ur al r ange 0 t o 2**26- 1;
const ant cf i ncuent a : nat ur al : = 50000000;
si gnal s1seg : st d_l ogi c;
si gnal l edaux : st d_l ogi c;
begi n

- - Pr oceso que gener a l a senal per i odi ca de 1 segundo
P_cont a1seg: Pr ocess ( r eset , cl k)
begi n
i f r eset = ' 1' t hen
cuent a <= 0;
s1seg <= ' 0' ;
el si f cl k' event and cl k = ' 1' t hen
i f cuent a = cf i ncuent a- 1 t hen - - aqui se pone l a const ant e en vez de 49999999
cuent a <= 0;
s1seg <= ' 1' ;
el se
cuent a <= cuent a + 1;
s1seg <= ' 0' ;
end i f ;
end i f ;
end pr ocess;

- - bi est abl e T que cambi a con l a senal s1seg, cada segundo
P_LED: Pr ocess ( r eset , cl k)
begi n
i f r eset = ' 1' t hen
l edaux <= ' 0' ;
el si f cl k' event and cl k=' 1' t hen
i f s1seg = ' 1' t hen
l edaux <= not l edaux;
end i f ;
end i f ;
end pr ocess;

LD0 <= l edaux;
end Behavi or al ;
Cdigo 6-1: Arquitectura del contador

14
Paracalcularelnmerodebitsquenecesitas,obtnelenterosuperioralresultadodellogaritmoenbase2
delnmero.Porejemplo,l og
2
( 50 10
6
) = 25, 75 26 bits.Paracalcularellogaritmoenbasedosy
notienesenlacalculadora,lopuedescalcularconellogaritmoenbase10:log2(X)=log10(X)/log10(2).Otra
forma(menoselegante)dehacerloesircalculandolaspotenciassucesivasdedoshastaencontrarlaprimera
queseamayorqueelnmero.
62 Universidad Rey J uan Carlos
6. Contadores
Ademsdelrangodelasealcuent a,fjateenlaconstantecf i ncuent a.Envezdeponerel
nmero directamente en la expresin condicional, se pone una constante que hace ms
entendibleelcdigo.
Losdosprocesosdelcdigo61sepuedenunirenunosolo(cdigo62).
P_cont a1seg: Pr ocess ( r eset , cl k)
begi n
i f r eset = ' 1' t hen
cuent a <= 0;
l edaux <= ' 0' ;
el si f cl k' event and cl k = ' 1' t hen
i f cuent a = f i ncuent a- 1 t hen
cuent a <= 0;
l edaux <= not l edaux;
el se
cuent a <= cuent a + 1;
end i f ;
end i f ;
end pr ocess;
Cdigo 6-2: Proceso equivalente a los dos procesos del cdigo 6-1
Asegrate que entiendes porqu son equivalentes. Implementa cualquiera de las dos
alternativas en la FPGA. Tendrs dos puertos de entrada (r eset y cl k) y uno de salida
(LD0).CompruebaqueelLEDluceduranteunsegundoyseapagaenelsiguiente.Yque
sigueassucesivamente.
6.2. Contador de 10 segundos
Ahora vamos a ampliar la prctica anterior y realizar un contador de 10 segundos que
mostraremosenundisplaydesietesegmentos.Lacuentairde0a9(undgitoBCD).
Loqueharemosesutilizarlaseals1segquecreamosenelejercicioanterior(figura6.1y
cdigo61)paracontarcadasegundo.Asqueutilizaremosdoscontadores,unoquenos
pasade50MHza1Hzyquecrealaseals1seg;yelotrocontadorcontardiezcuentas
de un segundo (s1seg). El esquema del circuito se muestra en la figura 6.3. A este
esquema le falta el control de los nodos para que luzca el display (repasa la prctica 4).
Como puedes observar, la cuenta de 10 segundos se mostrar por un display de siete
segmentosyporcuatroLED.
P_Cont a1seg
S1seg Cl k
Reset
50 MHz
T=20 ns
T=1 s
1 Hz
T=20 ns
(no est a escala)
Cl k
Cl k
S1seg
PCont a10segs
cont a10s
Cl k
CONV_7SEG
LED( 3: 0)
4
6
SEG( 6: 0)
Reset
PB3
A
G
D
B
C
F
E
P_Cont a1seg
S1seg Cl k
Reset
50 MHz
T=20 ns
50 MHz
T=20 ns
T=1 s
1 Hz
T=20 ns
(no est a escala)
T=1 s
1 Hz
T=20 ns
(no est a escala)
Cl k
Cl k
S1seg
PCont a10segs
cont a10s
Cl k
CONV_7SEG
LED( 3: 0)
44
66
SEG( 6: 0)
Reset
PB3
A
G
D
B
C
F
E
A
G
D
B
C
F
E

Figura 6.3: Esquema del contador de 10 segundos


Departamento de Tecnologa Electrnica 63
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
En el ejercicio anterior vimos que podamos utilizar nmeros enteros o naturales para
realizar contadores. Sin embargo, en VHDL para sntesis, el uso de nmeros enteros y
naturales no se recomienda cuando queremos mostrarlos por un display (o por cualquier
otro medio). Esto se debe a que en los circuitos los nmeros se representan en binario, y
por tanto mejor es trabajar con vectores de bits. El nmero de bits del vector se
corresponder con los bits necesarios para representar el mayor y menor nmero que
queramosrepresentar.
Yahemosvistovectoresdebits:st d_l ogi c_vect or .Sinembargo,sabemosdelaopasado
que la representacin de un nmero cambia si utilizamos nmeros sin signo (binario
puro)oconsigno(habitualmentecomplementoa2).Porejemplo,elnmerosilasealS
=1001,sereselnmero9siesunnmerosinsigno,oserelnmero7siesconsigno
encomplementoados.
As que para poder comparar, sumar y restar nmeros binarios necesitamos saber si son
nmeros sin signo o si estn en complemento a dos. Para ello se utilizan los tipos:
unsi gned y si gned. Su declaracin y manejo es similar al de los st d_l ogi c_vect or . Por
ejemplo,ladeclaracindelasealcont a10s,quequeremosqueseaunnmeroquecuente
de0a9,ser:


si gnal cont a10seg : unsi gned ( 3 downt o 0) ;

Cdigo 6-3: Declaracin de seal unsigned
Conestadeclaracin,especificamosunnmerobinariodecuatrobitssinsigno.Yaqueel
rango de un nmero de cuatro bits sin signo va de 0 a 15. Con tres bits no nos valdra
porqueslopodramoscontarhastasiete,yportanto,noseraunnmeroBCD.
Para utilizar los tipos unsi gned y si gned es recomendable cambiar de bibliotecas, en vez
de utilizar las predeterminadas por el ISEWebpack (ver cdigo 64), se recomiendan las
delcdigo65.EstoestenlacabeceradetodoslosdiseosquecreaelISEWebpack.As
queapartirdeahora,siemprequecreesunanuevafuente,quitalasqueestnenelcdigo
64(lassealadasennegrita)ycmbialasporladelcdigo65(labibliotecaNUMERI C_STD).


l i br ar y I EEE;
use I EEE. STD_LOGI C_1164. ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
Cdigo 6-4: Bibliotecas por defecto que pone el ISE

l i br ar y I EEE;
use I EEE. STD_LOGI C_1164. ALL;
use IEEE.NUMERIC_STD.ALL;

Cdigo 6-5: Bibliotecas recomendadas

El proceso que se encarga de contar los diez segundos (PCont a10segs) va a contar con la
seal cont a10seg, que es de tipo unsi gned (ver cdigo 63). El proceso se muestra en el
cdigo 66. Fjate en la ltima sentencia: debido a que la seal cont a10seg es de tipo
unsi gned y el puerto de salida LED es de tipo st d_l ogi c_vect or , hay que convertir
cont a10segast d_l ogi c_vect or .Parahaceresto,esnecesarioqueambassealestenganel
mismonmerodebits(enestecaso 4: 3 downt o 0).

64 Universidad Rey J uan Carlos


6. Contadores
P_CONTA10SEG: Pr ocess ( r eset , cl k) - - cont ador de 10 segundos
begi n
i f r eset = ' 1' t hen
cont a10seg <= ( ot her s => ' 0' ) ;
l edaux <= ' 0' ;
el si f cl k' event and cl k=' 1' t hen
i f s1seg = ' 1' t hen - - cont amos al
i f cont a10seg = 9 t hen
cont a10seg <= ( ot her s => ' 0' ) ;
el se
cont a10seg <= cont a10seg + 1;
end i f ;
end i f ;
end i f ;
end pr ocess;

- - hay que hacer un " cast " par a conver t i r de unsi gned a st d_l ogi c_vect or
LED <= st d_l ogi c_vect or ( cont a10seg) ;
Cdigo 6-6: Proceso que cuenta 10 segundos
AhoraimplementaestecircuitoenlaFPGA,lasentradasysalidasdelcircuitosemuestran
enlafigura6.4
4
CONTA_10SEGS
6
SEG( 6: 0)
LED( 3: 0)
4
AN( 3: 0)
Cl k
PB3 Reset
44
CONTA_10SEGS
66
SEG( 6: 0)
LED( 3: 0)
44
AN( 3: 0)
Cl k
PB3 Reset

Figura 6.4: Entradas y salidas del circuito


6.3. Cronmetro
Ahora vamos a realizar un cronmetro digital que muestre dcimas de segundos,
unidadessegundo,decenasdesegundoyminutos.Paraello,haremosprimeroundivisor
defrecuenciaquenosobtengaunasealdedcimasdesegundo:S1deci ma,estedivisorde
frecuencia ser similar al que generaba una de un segundo, pero la cuenta ser 10 veces
menor.Lasealresultante,envezdesercomoladelafigura6.1,sercomolamostrada
en la figura 6.5. Fjate que la seal S1deci ma est a uno en un slo ciclo de reloj durante
todosuperiododeunadcimadesegundo.
T=0,1 s (f =10Hz)
T=20 ns
(no est a
escala)
Cl k
S1deci ma
T=0,1 s (f =10Hz)
T=20 ns
(no est a
escala)
Cl k
S1deci ma

Figura 6.5: Cronograma de la seal de una dcima de segundo que queremos obtener
ElprocesoqueimplementalasealS1deci maessimilaralprocesoP_Cont a1segdelcdigo
61 (mira tambin la figura 6.2), pero la cuenta, en vez de ser de 50 millones ser de
5000000(diezvecesmenor).
Apartirdelasealdeunadcima,realizaremoslacuentade10dcimas,10segundos,60
segundos y 10 minutos. Utilizaremos cuatro procesos similares al PCont a10segs (figura
Departamento de Tecnologa Electrnica 65
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
6.3). De cada proceso obtendremos la cuenta en BCD (4 bits) y una seal que indicar el
findecuentaparahacercontaralsiguientecontador.
Elesquemainicialdelcronmetrosemuestraenlafigura6.6.Lefaltaraincluirlapartede
visualizacinporlosdisplaysqueladiscutiremosmsadelante.
P_Cont a1deci ma
S1deci ma
Cl k
Reset
Cl k
PCont a10deci mas
Cl k
Reset
PB3
PCont a10seg
S1seg
Cl k
Reset
S1seg
deci mas
4
S1seg
segundos
4
S10seg
PCont a60seg
Cl k
Reset
PCont a10mi n
Cl k
Reset
S10seg
dec_segundos
4
S60seg
mi nut os
4
deci mas( 3: 0) segundos( 3: 0) dec_segundos( 3: 0) mi nut os( 3: 0)
S1deci ma
P_Cont a1deci ma
S1deci ma
Cl k
Reset
Cl k
PCont a10deci mas
Cl k
Reset
PB3
PCont a10seg
S1seg
Cl k
Reset
S1seg
deci mas
44
S1seg
segundos
44
S10seg
PCont a60seg
Cl k
Reset
PCont a10mi n
Cl k
Reset
S10seg
dec_segundos
44
S60seg
mi nut os
44
deci mas( 3: 0) segundos( 3: 0) dec_segundos( 3: 0) mi nut os( 3: 0)
S1deci ma

Figura 6.6: Esquema del cronmetro


Cada bloque de la figura 6.6 se puede implementar en un proceso. Ya dijimos que el
primer proceso: P_Cont a1deci ma es igual que el proceso P_cont a1seg del cdigo 61,
nicamentehayquecambiarelrangodelasealcuent ayelvalordelaconstantedefin
decuenta(ahoravaldr5000000).Culseraelrangodelasealcuent a?
El resto de procesos son similares al proceso P_Cont a10seg del cdigo 63, pero hay que
cambiar los nombres de las seales y crear las seales de fin de cuenta: S1seg, S10seg,
S60seg. Por ejemplo, el proceso PCont a10deci mas (ver figura 6.6), sera como el mostrado
enelcdigo67(lafigura6.7muestraelesquemadelcontadordedcimas).Lacuentade
diezdcimasdesegundosproducelasealdeavisodequehatranscurridounsegundo:
s1seg.
P_CONTA10DECI MAS: Pr ocess ( r eset , cl k)
begi n
i f r eset = ' 1' t hen
deci mas <= ( ot her s => ' 0' ) ;
s1seg <= ' 0' ;
el si f cl k' event and cl k=' 1' t hen
s1seg <= ' 0' ;
i f s1deci ma = ' 1' t hen
i f deci mas = 9 t hen
deci mas <= ( ot her s => ' 0' ) ;
s1seg <= ' 1' ;
el se
deci mas <= deci mas + 1;
end i f ;
end i f ;
end i f ;
end pr ocess;
Cdigo 6-7: Proceso contador de dcimas
PCont a10deci mas
Cl k
Reset
S1seg
deci mas
4
S1seg
deci mas( 3: 0)
S1deci ma
Reset
PCont a10deci mas
Cl k
Reset
S1seg
deci mas
44
S1seg
deci mas( 3: 0)
S1deci ma
Reset

Figura 6.7: Esquema del proceso contador de dcimas


As que si has entendido todo lo que se ha explicado hasta aqu, no deberas de tener
muchasdificultadespararealizareldiseomostradoenlafigura6.6.Encasodequenolo
entiendas, repsate todas las prcticas, pregunta al profesor, o pide ayuda. Es
fundamental que entiendas lo que se ha explicado hasta aqu para poder seguir con las
prcticassiguientesquevanaumentandoencomplejidad.
Ahora lo que nos queda es mostrar las cuatro cifras BCD por los cuatro displays. Sin
embargo, hemos visto que en la placa slo tenemos un grupo de siete pines para los
cuatro displays. Tambin tenemos cuatro nodos para controlar qu display se tiene que
encender. Entonces, cmo podremos mostrar las cuatro cifras BCD? Veremos una
primeraaproximacinmanual(solucinmanual)yluegolasolucinautomtica.
66 Universidad Rey J uan Carlos
6. Contadores
6.3.1. Mostrar los dgitos. Solucin manual
Para ver los cuatro dgitos podemos hacer un decodificador como lo hicimos en el
apartado4.2(prctica4).SegnlacodificacindelosinterruptoresSW6ySW7seencender
undisplaydistinto.Estoes,seactivarunnododistinto.Serparecidoalcdigo41pero
sin la habilitacin. La tabla 61 muestra los displays que se encienden yel nmero que se
muestrasegnlosinterruptoresqueestnactivados.
SW7 SW6 nodo DI SPLAY
0 0 AN3 dci mas
0 1 AN2 segundos
1 0 AN1 decenas de segundos
1 1 AN0 mi nut os
SW7 SW6 nodo DI SPLAY
0 0 AN3 dci mas
0 1 AN2 segundos
1 0 AN1 decenas de segundos
1 1 AN0 mi nut os

Tabla 6-1: Displays que se muestran segn la configuracin de los interruptores


La figura 6.8 muestra el decodificador para activar los nodos. Este decodificador es
similaraldelapartado4.2(bloquedeabajodelafigura4.6).
I ( 0)
I ( 1)
AN( 0)
AN( 1)
AN( 2)
AN( 3)
DECOD_2a4
S0
S1
S2
S3
Controlamos
qu display
se enciende
Negamos porque los
displays se controlan
con lgica inversa
SW6
SW7
AN3- AN0
Lo hacemos sin
habilitacin
(siempre habilitado)
I ( 0)
I ( 1)
AN( 0)
AN( 1)
AN( 2)
AN( 3)
DECOD_2a4
S0
S1
S2
S3
Controlamos
qu display
se enciende
Negamos porque los
displays se controlan
con lgica inversa
SW6
SW7
AN3- AN0
Lo hacemos sin
habilitacin
(siempre habilitado)

Figura 6.8: Codificador para controlar los nodos de los displays


Adems habr que seleccionar la cifra que se quiere mostrar (dcimas, unidades de
segundo, decenas de segundo o minutos). La seleccin de la cifra se har conforme a la
tabla 61. Como ya sabemos, para seleccionar necesitamos un multiplexor. Despus del
multiplexor, pondremos un conversor a siete segmentos para mostrarlo por los displays.
Lafigura6.9muestraelesquemadeestapartedeldiseo.
4
most r ar (3:0)
00
01
10
11
4
4
4
4
deci mas( 3: 0)
dec_segundos( 3: 0)
mi nut os( 3: 0)
segundos( 3: 0)
2
I ( 1: 0)
SW6
SW7
CONV_7SEG
6
SEG( 6: 0)
SEG_A- SEG_G
44
most r ar (3:0)
00
01
10
11
44
44
44
44
deci mas( 3: 0)
dec_segundos( 3: 0)
mi nut os( 3: 0)
segundos( 3: 0)
22
I ( 1: 0)
SW6
SW7
CONV_7SEG
66
SEG( 6: 0)
SEG_A- SEG_G

Figura 6.9: Multiplexor que selecciona la cifra BCD segn la configuracin de os interruptores.
Elesquemacompletodeldiseosemuestraenlafigura6.10.
Departamento de Tecnologa Electrnica 67
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
P_Cont a1deci ma
S1deci ma
Cl k
Reset
Cl k
PCont a10deci mas
Cl k
Reset
PB3
PCont a10seg
S1seg
Cl k
Reset
S1seg
deci mas
4
S1seg
segundos
4
S10seg
PCont a60seg
Cl k
Reset
PCont a10mi n
Cl k
Reset
S10seg
dec_segundos
4
S60seg
mi nut os
4
d
e
c
i
m
a
s
(
3
:
0
)
segundos( 3: 0)
dec_segundos( 3: 0)
mi nut os( 3: 0)
S1deci ma
4 4 4 4
00 01 10 11
4
most r ar (3:0)
CONV_7SEG
6
SEG( 6: 0)
SEG_A- SEG_G
El nmero que se
muestra segn estn
los interruptores
I ( 1: 0)
SW6
SW7
I ( 1: 0)
SW6
SW7
AN( 0)
AN( 1)
AN( 2)
AN( 3)
DECOD_2a4
S0
S1
S2
S3
AN3- AN0
P_Cont a1deci ma
S1deci ma
Cl k
Reset
Cl k
PCont a10deci mas
Cl k
Reset
PB3
PCont a10seg
S1seg
Cl k
Reset
S1seg
deci mas
44
S1seg
segundos
44
S10seg
PCont a60seg
Cl k
Reset
PCont a10mi n
Cl k
Reset
S10seg
dec_segundos
44
S60seg
mi nut os
44
d
e
c
i
m
a
s
(
3
:
0
)
segundos( 3: 0)
dec_segundos( 3: 0)
mi nut os( 3: 0)
S1deci ma
44 4 4 4
00 01 10 11
44
most r ar (3:0)
CONV_7SEG
66
SEG( 6: 0)
SEG_A- SEG_G
I ( 1: 0)
SW6
SW7
I ( 1: 0)
SW6
SW7
AN( 0)
AN( 1)
AN( 2)
AN( 3)
DECOD_2a4
S0
S1
S2
S3
AN3- AN0
I ( 1: 0)
SW6
SW7
AN( 0)
AN( 1)
AN( 2)
AN( 3)
DECOD_2a4
S0
S1
S2
S3
AN3- AN0
El nmero que se
muestra segn estn
los interruptores

Figura 6.10:Esquema completo del cronmetro con visualizacin manual
Ahora crea un nuevo proyecto llamado cr ono_manual , implementa el diseo de la figura
6.10 en la FPGA y comprueba que funciona. Evidentemente, es un cronmetro de
prestaciones muy malas, porque no puedes visualizar simultneamente ms de un cifra.
TienesqueseleccionarlaciframanualmenteconlosinterruptoresSW6ySW7.
6.3.2. Mostrar los dgitos. Solucin automtica
Hemos visto las limitaciones de la solucin anterior. Si quisieses ver dos cifras
simultneamente, podras probar a mover el interruptor manualmente lo ms
rpidamente posible. Es obvio que esta solucin no es muy cmoda, as que vamos a
intentarbuscarunaalternativa.
La solucin podra ser que en vez de que nosotros cambiemos la seal I ( 1: 0) moviendo
los interruptores SW6 y SW7, hicisemos un circuito que haga como si los movisemos
peridicamente de manera automtica. La velocidad del cambio debe ser tan rpida que
no sea perceptible por nosotros los humanos. Por ejemplo, si cambiamos el display cada
milisegundo seguramente no nos demos cuenta de que est cambiando, salvo que como
lucemenostiempo,loveremoslucirconmenorintensidad.
As que vamos a probar de esta manera: crearemos otro contador similar al que genera
una seal de peridica de un segundo (proceso P_cont a1seg del cdigo 61) o similar al
que hemos creado en el cronmetro para contar una dcima de segundo (figura 6.6).
Nuestro contador crear una seal peridica de un milisegundo (s1mi l i ) como la
mostradaenlafigura6.11.
T=1ms (f =1kHz)
T=20 ns
(no est a
escala)
cl k
s1mi l i
50MHz
Rel aci n:
50MHz
1kHz
= 50000
1ms
20ns
= = 50000
1000000ns
20ns
frecuencia
periodo
1kHz
T=1ms (f =1kHz)
T=20 ns
(no est a
escala)
cl k
s1mi l i
T=1ms (f =1kHz)
T=20 ns
(no est a
escala)
cl k
s1mi l i
50MHz
Rel aci n:
50MHz
1kHz
= 50000
1ms
20ns
= = 50000
1000000ns
20ns
frecuencia
periodo
Rel aci n:
50MHz
1kHz
= 50000
50MHz
1kHz
= 50000
50MHz
1kHz
= 50000
1ms
20ns
= = 50000
1000000ns
20ns
1ms
20ns
= = 50000
1000000ns
20ns
1000000ns
20ns
frecuencia
periodo
1kHz

Figura 6.11 : Cronograma de la seal de una milsima de segundo que queremos obtener
68 Universidad Rey J uan Carlos
6. Contadores
A partir de la seal de un milisegundo (s1mi l i ) realizaremos una cuenta de cuatro (de
ceroatres)paraseleccionareldisplayquevaaluciryelnmeroquesevaamostrar.Esta
seal (cuent a4ms) tendr una funcionalidad equivalente a la seal I que antes era
gobernadaporlosinterruptores(verfiguras6.8,6.9y6.10).
Enlafigura6.12semuestraelmultiplexadoeneltiempo.Encadamilisegundosemuestra
un display distinto (slo hay un nodo activo). La frecuencia de refresco del display es de
250Hz(T=4ms).Esmuyimportanteseleccionarelnmerocorrespondientealnodoque
sevaaseleccionar.
4 x 1 ms
0 1 3 0 1 2 3
s1mi l i
CUENTA4MS
AN_0
T=1 ms
2
AN_1
AN_2
AN_3
dec US M most r ar DS US DS DM UM
M DS US dec
minutos decenas
Segundos
unidades dcimas
Segn el valor de CUENTA4MS
se selecciona las dcimas, las
unidades o decenas de segundos
o los minutos
AN_3 AN_2 AN_1 AN_0
4 x 1 ms
0 1 3 0 1 2 3
s1mi l i
CUENTA4MS
AN_0
T=1 ms
2
AN_1
AN_2
AN_3
dec US M most r ar DS US DS DM UM
M DS US dec
minutos decenas
Segundos
unidades dcimas
Segn el valor de CUENTA4MS
se selecciona las dcimas, las
unidades o decenas de segundos
o los minutos
AN_3 AN_2 AN_1 AN_0

Figura 6.12:Multiplexado en el tiempo para mostrar los displays


Elesquemadelcircuitofinalsemuestraenlafigura6.13.Creaunnuevoproyectollamado
cr ono_aut oeimplemntaloenlaFPGA.Compruebaquetesalebien.
Comoconclusin,hemosaprendidoahacerunrelojdigital.Hemosvistocmopodemos
multiplexareneltiempounavariasseales.Conestoreducimoselnmerodepinesdela
FPGA para manejar los displays. Con esta solucin tenemos los siete segmentos ms el
punto decimal (8 pines) ms los cuatro nodos, en total 12 pines. De la otra forma, si
necesitsemos los 8 pines por cada display sera 8x4=32 pines ms los cuatro nodos: 36
pines.
Departamento de Tecnologa Electrnica 69
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
P_Cont a1deci ma
S1deci ma
Cl k
Reset
Cl k
PCont a10deci mas
Cl k
Reset
BTN3
PCont a10seg
S1seg
Cl k
Reset
S1seg
deci mas
4
S1seg
segundos
4
S10seg
PCont a60seg
Cl k
Reset
PCont a10mi n
Cl k
Reset
S10seg
dec_segundos
4
S60seg
mi nut os
4
d
e
c
i
m
a
s
(
3
:
0
)
segundos( 3: 0)
dec_segundos( 3: 0)
mi nut os( 3: 0)
S1deci ma
4 4 4 4
00 01 10 11
4
most r ar (3:0)
CONV_7SEG
6
SEG( 6: 0)
SEG_A- SEG_G
Lo que antes era I
I ( 1: 0) SW6
SW7
AN( 0)
AN( 1)
AN( 2)
AN( 3)
DECOD_2a4
S0
S1
S2
S3
AN3- AN0
P_Cont a1mi l i
S1mi l i
Cl k
Reset
Cl k
BTN3
S1deci ma
PCont a4mi l i s
Cl k
Reset
cuent a4ms
2
cuent a4ms
I
2
P_Cont a1deci ma
S1deci ma
Cl k
Reset
Cl k
PCont a10deci mas
Cl k
Reset
BTN3
PCont a10seg
S1seg
Cl k
Reset
S1seg
deci mas
44
S1seg
segundos
44
S10seg
PCont a60seg
Cl k
Reset
PCont a10mi n
Cl k
Reset
S10seg
dec_segundos
44
S60seg
mi nut os
44
d
e
c
i
m
a
s
(
3
:
0
)
segundos( 3: 0)
dec_segundos( 3: 0)
mi nut os( 3: 0)
S1deci ma
44 4 4 4
00 01 10 11
44
most r ar (3:0)
CONV_7SEG
66
SEG( 6: 0)
SEG_A- SEG_G
Lo que antes era I
I ( 1: 0) SW6
SW7
Lo que antes era I
I ( 1: 0) SW6
SW7
AN( 0)
AN( 1)
AN( 2)
AN( 3)
DECOD_2a4
S0
S1
S2
S3
AN3- AN0
P_Cont a1mi l i
S1mi l i
Cl k
Reset
Cl k
BTN3
S1deci ma
PCont a4mi l i s
Cl k
Reset
cuent a4ms
22
cuent a4ms
I
22

Figura 6.13:Esquema completo del cronmetro con visualizacin automtica


6.3.3. Mejoras del circuito
Siteapetecepuedesprobaraintroducirlassiguientesmejoras:
Muestraelpuntodecimalenelsegundoycuartodisplayparasepararlossegundosde
lasdcimasdesegundoylosminutos.
Hazqueelcircuitosepuedapararconuninterruptor.Elcronmetrosedebemantener
paradoeneltiempoenqueestaba.
Haz que el circuito se pueda parar con un pulsador. Si pulsamos, el cronmetro se
mantiene parado en el tiempo en que estaba, y si volvemos a pulsar, el cronmetro
contina.
Hazunrelojdeminutosyhoras,haciendoqueelpuntodecimaldelmedioparpadee
cadasegundo.
6.3.4. Optimizacin
Sabemos que hay muchas formas posibles de realizar un circuito. En concreto para este
circuitonospodemosplantearponerelmultiplexorantesodespusdehaberconvertido
elnmeroasietesegmentos.Qumaneracreesqueesmsptimaencuantoaahorrode
recursosdelafpga?
En la figura 6.14 se muestra cmosera este circuito. Este circuito es una alternativa ms
costosaentrminosderecursosrespectoalcircuitodelafigura6.9.Tantoporqueusams
convertidores, como porque el multiplexor tiene un ancho de bus de los datos mayor (7
bits frente a 4). Al disear en VHDL debes tener muy presente qu circuito ests
generandoparaevitardesperdiciarrecursos.
70 Universidad Rey J uan Carlos
6. Contadores
deci mas( 3: 0)
dec_segundos( 3: 0)
mi nut os( 3: 0)
segundos( 3: 0)
7
00
01
10
11
6
6
6
2
I ( 1: 0)
CONV_7SEG
6
SEG( 6: 0)
4
CONV_7SEG
6
4
CONV_7SEG
6
4
CONV_7SEG
6
4
deci mas( 3: 0)
dec_segundos( 3: 0)
mi nut os( 3: 0)
segundos( 3: 0)
77
00
01
10
11
66
66
66
22
I ( 1: 0)
CONV_7SEG
66
SEG( 6: 0)
44
CONV_7SEG
66
44
CONV_7SEG
66
44
CONV_7SEG
66
44

Figura 6.14:Otra alternativa al esquema de la figura 6.9


6.4. Contador manual
Ahora vamos a realizar un contador ascendente/descendente que aumentar su cuenta
cuando presionemos el pulsador BTN0 (UP) y que disminuir su cuenta cuando
presionemos el pulsador BTN1 (DOWN). Cuando no se presionen estos pulsadores el
contador permanecer quieto (no aumentar con el reloj de la placa como los de las
prcticasanteriores).
La cuenta ir de 0 a 7 (3 bits), y no se desbordar, esto es, si pulsamos el UP estando en
sietesequedarfijo(nopasaacero),ysiledamosalDOWNestandoencero,sequedaren
cero(nopasaasiete).
ElresetdelcircuitoiralpulsadorBTN4.
Eldiagramadeestadosdelcontadorsemuestraenlafigura6.15.
0 1 2 3 4 5 6 7
P_UP P_UP P_UP P_UP P_UP P_UP P_UP
P_UP
P_DOWN P_DOWN P_DOWN P_DOWN P_DOWN P_DOWN P_DOWN
P_DOWN
00 11 22 33 44 55 66 77
P_UP P_UP P_UP P_UP P_UP P_UP P_UP
P_UP
P_DOWN P_DOWN P_DOWN P_DOWN P_DOWN P_DOWN P_DOWN
P_DOWN

Figura 6.15: Diagrama de estados del contador ascendente/descendente que vamos a realizar
Para que cada vez que presionemos los pulsadores slo aumente una cifra la cuenta,
debemos realizar un detector de flanco para cada pulsador. Por eso, en la figura 6.15 las
sealesnosonUPyDOWNsinoP_UPyP_DOWN,paraindicarquesehaconvertidolaentrada
enunpulsoysloestactivaduranteunciclodereloj.Sitehasolvidadodecmosehace
eldetectordeflanco,consultaelapartado5.3.2.
La cuenta la vamos a mostrar por el display de la derecha. El esquema del circuito se
muestraenlafigura6.16.Elbloquedelaizquierda,podrestarformadoporunprocesoy
varias sentencias concurrentes, para simplificar, como ya sabemos cmo se hace, se ha
puestoenunslobloque.
Departamento de Tecnologa Electrnica 71
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
Det ect a_f l anco
P_DOWN
Cl k
Reset
Cl k
BTN3
BTN0
BTN1
UP
DOWN
P_UP
Cl k
Reset
P_UP
P_DOWN
CUENTA
PCont a
3
CONV_7SEG
6
SEG( 6: 0)
Det ect a_f l anco
P_DOWN
Cl k
Reset
Cl k
BTN3
BTN0
BTN1
UP
DOWN
P_UP
Cl k
Reset
P_UP
P_DOWN
CUENTA
PCont a
33
CONV_7SEG
66
SEG( 6: 0)

Figura 6.16: Esquema del contador que implementaremos


Intenta realizar el contador t slo (proceso PCont a de la figura 6.16). Si no te sale,
consultaelcdigo68
P_cont a: Pr ocess ( r eset , cl k)
begi n
i f r eset = ' 1' t hen
cont a <= ( ot her s => ' 0' ) ;
el si f cl k' event and cl k=' 1' t hen
i f pul so_up = ' 1' t hen
i f cont a / = 7 t hen
cont a <= cont a + 1;
end i f ;
el si f pul so_down = ' 1' t hen
i f cont a / = 0 t hen
cont a <= cont a - 1;
end i f ;
end i f ;
end i f ;
end pr ocess;
Cdigo 6-8: Cdigo del contador ascendente/descendente que no se desborda
AhoraimplementaelcircuitoenlaFPGA.ycompruebaquefuncionacorrectamente.
6.5. Conclusiones
Ahoraresaltaremoslosconceptosdeestaprctica:
Losdivisoresdefrecuenciaseimplementanconcontadores
Las seales de tipo entero o natural (i nt eger o nat ur al ) deben de tener un rango
potenciadedos.Porejemplo:si ngal cont a : i nt eger r ange 0 t o 2**8- 1.Elrangode
esta seal es de 0 a 255, usando por tanto 8 bits (los dos asteriscos es la operacin
potenciaenVHDL).
Siaunenteroonaturalnoseleespecificaelrango,segeneraunasealde32bits,lo
queenlamayoradeloscasosesundesperdicioderecursos.
Lostiposi nt eger ynat ur al sepuedenutilizarpararealizarcuentasinternas,peropara
realizar cuentas que van a ser utilizadas por otros procesos o bloques, se recomienda
utilizarlostiposvectoriales:unsi gnedysi gned.Pararepresentarnmerosesimportante
utilizarestostiposenvezdeltipost d_l ogi c_vect or ,paradistinguirsilarepresentacin
delnmeroesenbinariopuro(sinsigno)oencomplementoados(consigno).
Alusarlostiposunsi gned ysi gnedserecomiendautilizarlabibliotecaNUMERI C_STD(el
cdigo65envezdelcdigo64).
Multiplexareneltiemponospuedehacerahorrarenormementeelnmerodepuertos
desalida(pines)necesarios.
Distintas maneras de describir un circuito pueden hacer que consuma ms o menos
recursosdelaFPGA.Laoptimizacindelcircuitopretendereducirelusoderecursos.
Existendiversosobjetivosenlaoptimizacin,laoptimizacinpuedeestarorientadaal
rea,consumo,tiempos,...
72 Universidad Rey J uan Carlos



7. Registros de desplazamiento
En esta prctica aprenderemos a disear registros de desplazamiento en VHDL. Hay
variostiposderegistrosdedesplazamiento,segnsealaentradaenserieoparalelo,yla
salida en serie o paralelo. Tambin se pueden desplazar a la izquierda o a la derecha, o
tambinhacerrotaciones(elbitquesaleentraporelotroextremo).Vamosairlosviendo
conejemplos.
7.1. Registro de desplazamiento con carga paralelo
Enesteprimerejemplovamosarealizarunregistrodedesplazamientoconlassiguientes
caractersticas:
Elregistrotendr8bits
Desplazamientoalaizquierda.LaordendedesplazamientoladarelpulsadorBTN2.
Habrquerealizarundetectordeflancoparaestepulsador.
Aldesplazaralaizquierda,loquehayaenelbit7delregistroseperder,yloquehaya
enelbitcerosemantendr(noseleasignaningnvalornuevo).
Con carga paralelo. La orden de cargar dato la dar el pulsador BTN0. Habr que
realizarundetectordeflancoparaestepulsador.
Con la orden de carga, el registro se cargar con los datos proporcionados por los
interruptores.Estoes,siSW0estauno,secargarun1enelbit0delregistro.
ElresetserelpulsadorBTN3.
ElvalordelosbitsdelregistrosemostrarnporlosLED.
Enlafigura7.1semuestraelesquemadelregistroquequeremosrealizar.
4 5 6 7 0 1 2 3
LD7 LD6 LD5 LD4 LD3 LD2 LD1 LD0
SW7 SW6 SW5 SW4 SW3 SW2 SW1 SW0
BTN0
BTN2
CARGA
DESPL_I ZQ
Cl k Cl k
Reset
BTN3
Lo que haya en los interruptores se
carga en el registro cuando CARGA='1'
Lo que haya en el
registro se mueve a la
izquierda cuando
DESPL_IZQ='1'
4 5 6 7 0 1 2 3
LD7 LD6 LD5 LD4 LD3 LD2 LD1 LD0
SW7 SW6 SW5 SW4 SW3 SW2 SW1 SW0
BTN0
BTN2
CARGA
DESPL_I ZQ
Cl k Cl k
Reset
BTN3
Lo que haya en los interruptores se
carga en el registro cuando CARGA='1'
Lo que haya en el
registro se mueve a la
izquierda cuando
DESPL_IZQ='1'

Figura 7.1: Esquema del registro de desplazamiento a la izquierda con carga paralelo

ElprocesoVHDLdelregistrodedesplazamientosemuestraenelcdigo71.
Departamento de Tecnologa Electrnica 73
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
P_r egi st r o: Pr ocess ( r eset , cl k)
begi n
i f r eset = ' 1' t hen
r egi st r o <= ( ot her s => ' 0' ) ;
el si f cl k' event and cl k=' 1' t hen
i f pul so_car ga = ' 1' t hen
r egi st r o <= dat o;
el si f pul so_despl z_i zq = ' 1' t hen
registro (7 downto 1) <= registro (6 downto 0); - - despl azami ent o a i zqui er da
end i f ;
end i f ;
end pr ocess;
Cdigo 7-1: Cdigo del proceso de registro de desplazamiento
Sihasentendidolasprcticasanteriores,nodeberasdetenerproblemasparaentenderel
cdigo71,salvoparalasentenciaresaltadaennegrita.
Estasentenciaseraequivalentealassealadasennegritaenloscdigos72y73
P_r egi st r o: Pr ocess ( r eset , cl k)
begi n
i f r eset = ' 1' t hen
r egi st r o <= ( ot her s => ' 0' ) ;
el si f cl k' event and cl k=' 1' t hen
i f pul so_car ga = ' 1' t hen
r egi st r o <= dat o;
el si f pul so_despl z_i zq = ' 1' t hen
registro (7) <= registro (6);
registro (6) <= registro (5);
registro (5) <= registro (4);
registro (4) <= registro (3);
registro (3) <= registro (2);
registro (2) <= registro (1);
registro (1) <= registro (0);
end i f ;
end i f ;
end pr ocess;
Cdigo 7-2: Cdigo equivalente al cdigo 7-1
P_r egi st r o: Pr ocess ( r eset , cl k)
begi n
i f Reset = ' 1' t hen
r egi st r o <= ( ot her s => ' 0' ) ;
el si f cl k' event and cl k=' 1' t hen
i f pul so_car ga = ' 1' t hen
r egi st r o <= dat o;
el si f pul so_despl z_i zq = ' 1' t hen
registro (1) <= registro (0);
registro (2) <= registro (1);
registro (3) <= registro (2);
registro (4) <= registro (3);
registro (5) <= registro (4);
registro (6) <= registro (5);
registro (7) <= registro (6);
end i f ;
end i f ;
end pr ocess;
Cdigo 7-3: Cdigo equivalente al cdigo 7-1
Esmuyimportanterecordarquelassealesdentrodeunprocesonoseactualizanhastael
final del proceso, as que, a pesar de que en el cdigo 73 se podra pensar que el
r egi st r o( 0) se propagara inmediatamente a todos los dems bits, no ocurre porque el
r egi st r o( 1) notomaelvalorder egi st r o( 0) hastaquesesaledelproceso.
Loqueocurrealdesplazaralaizquierdasemuestraenlafigura7.2.
4 5 6 7 0 1 2 3
4 5 6 7 0 1 2 3
Antes de
desplazar
despus de
desplazar
bit 7 se
pierde
bit 0 se
mantiene
y se
duplica
4 5 6 7 0 1 2 3
4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3
Antes de
desplazar
despus de
desplazar
bit 7 se
pierde
bit 0 se
mantiene
y se
duplica

Figura 7.2: Desplazamiento a la izquierda


Ahoraimplementaelcircuitoycompruebaquefuncionacorrectamente.Realizalacargay
luego el desplazamiento. Realiza varias cargas en las que unas veces el bit 0 valga 0 y
otras1.Analizaloqueocurreyasegratedequeloentiendes.
74 Universidad Rey J uan Carlos
7. Registros de desplazamiento
7.2. Rotacin a la derecha y a la izquierda
Ahora en vez de perder el bit de un extremo y repetir el del otro (figura 7.2). Vamos a
introducirelbitsalienteenelotroextremo.Estoesunarotacin.Adems,realizaremosla
rotacinenambossentidos.BT2rotaralaizquierdayBTNrotaraladerecha.Lacargase
realizarigualqueenlaprcticaanterior.
Elfuncionamientodelarotacinalaizquierdasemuestraenlafigura7.3
4 5 6 7 0 1 2 3
4 5 6 7 0 1 2 3
Antes de
desplazar
despus de
desplazar
bit 7 va
al bit 0
4 5 6 7 0 1 2 3
4 5 6 7 0 1 2 3
Antes de
desplazar
despus de
desplazar
bit 7 va
al bit 0

Figura 7.3: Rotacin a la izquierda


Esteprocesosemuestraenelcdigo74.
P_r egi st r o: Pr ocess ( r eset , cl k)
begi n
i f r eset = ' 1' t hen
r egi st r o <= ( ot her s => ' 0' ) ;
el si f cl k' event and cl k=' 1' t hen
i f pul so_car ga = ' 1' t hen
r egi st r o <= dat o;
el si f pul so_despl z_i zq = ' 1' t hen
registro <= registro (6 downto 0) & registro(7); -- rotacion izquierda
el si f pul so_despl z_dcha = ' 1' t hen
registro <= registro(0) & registro (7 downto 1); -- rotacin derecha
end i f ;
end i f ;
end pr ocess;
Cdigo 7-4: Cdigo del proceso que rota a izquierda y derecha
En negrita estn sealadas las sentencias de rotacin. En ella aparece el operador
concatenacin:&.Conesteoperadorseunenbitsovectores,envectoresdemayortamao.
Porejemplo,elcdigo74esequivalentealcdigo75:
P_r egi st r o: Pr ocess ( Reset , Cl k)
begi n
i f Reset = ' 1' t hen
r egi st r o <= ( ot her s => ' 0' ) ;
el si f Cl k' event and Cl k=' 1' t hen
i f pul so_car ga = ' 1' t hen
r egi st r o <= dat o;
el si f pul so_despl z_i zq = ' 1' t hen
registro (7 downto 1) <= registro (6 downto 0) -- rotacion izquierda
registro (0) <= registro(7);
el si f pul so_despl z_dcha = ' 1' t hen
registro (7) <= registro(0); -- rotacin derecha
registro (6 downto 0) <= registro (7 downto 1);
end i f ;
end i f ;
end pr ocess;
Cdigo 7-5: Cdigo equivalente al cdigo 7-4
AhoraimplementaestediseoenlaFPGAycompruebaquerotaaizquierdayderechael
datoquecargasenparalelo.
Departamento de Tecnologa Electrnica 75
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
7.3. Rotacin automtica
Vamosacombinarelejerciciodeloscontadoresconlosregistros.Ahora,envezdeindicar
nosotroscuandoserealizalarotacin,vamosahacerqueselleveacaboperidicamente
deformaautomtica.
Para ello vamos a realizar un divisor de frecuencia que d una seal (s1deci ma) con una
frecuencia de una dcima de segundo. Una seal igual que la que generamos en el
cronmetro(apartado6.3,figura6.5).Estasealvaaordenarlarotacin,ynocomoantes,
quelohacamosconelpulsador.Larotacinseharalaizquierda.
Enesteejercicionorealizaremoslacarga,sinoquealresetearcargaremoselregistroconel
valor "00000001", de modo que haya un slo LED encendido. El esquema del circuito se
muestraenlafigura7.4.
P_Cont a1deci ma
S1deci ma
Cl k
Reset
Cl k
P_Rot aReg
Cl k
Reset
PB3
r egi st r o
8
LED( 7: 0)
S1deci ma
r ot a_i zq
P_Cont a1deci ma
S1deci ma
Cl k
Reset
Cl k
P_Rot aReg
Cl k
Reset
PB3
r egi st r o
88
LED( 7: 0)
S1deci ma
r ot a_i zq

Figura 7.4: Esquema del circuito de rotacin automtica


Implementaestecircuitoycompruebaquefuncionacorrectamente.
7.3.1. Variantes del circuito
Puedesrealizarvariantesdeestecircuito:
El sentido de la rotacin (izquierda o derecha) se haga segn como est el primer
interruptor,SW0
Elsegundointerruptorhacequehayarotacinosequedeelregistroquieto.
7.4. Conclusiones
Lo principal de este captulo es que hemos aprendido a implementar registros de
desplazamiento en VHDL, repasando el concepto de que el valor de las seales se
actualizaalsalirdelproceso.
76 Universidad Rey J uan Carlos



8. Simulacin
Una aspecto fundamental en el diseo de circuitos es tener la capacidad de simularlos
para detectar errores en la descripcin del comportamiento. Rara vez diseamos un
circuito bien a la primera. En muchas ocasiones es fcil detectar, pero no siempre es as
(recuerdalasvecesquehasvistoqueeldiseonohaceloqueesperabasquehicieseyno
has sabido por qu lo hace mal). Para solucionar los errores en la descripcin, la
simulacindelcircuitoresultadeinestimableayuda.
En la simulacin se inserta el circuito a probar
15
en un banco de pruebas. El banco de
pruebasesunmodeloenVHDLqueproporcionalosestmulosalcircuitoparaaspoder
ver si funciona como queremos. El modelo simula el funcionamiento real, y de ah su
nombre(simulacin).Ladescripcindelbancodepruebassueleincluir:
Unareferencia
16
(instanciacin)alcircuitoaprobar
Uno o varios procesos que generan los estmulos de entrada al circuito (tambin
conocidos como vectores de test). Estos procesos simulan las entradas del circuito en
funcionamientoreal.
Se puede incluir adems procesos que comprueben automticamente el correcto
funcionamientodelcircuito.
Por ltimo, la entidad del banco de pruebas no tiene entradas y salidas, ya que se
generantodaslosestmulosenprocesosdentrodelaarquitectura.
Los procesos del banco de pruebas no se van a implementar en hardware, son slo para
simulacin. Por tanto, no se necesita que sean descripciones sintetizables, y en
consecuencia,eltipodedescripcinpuedesermuchomslibre.
Elesquemageneraldeunbancodepruebassemuestraenlafigura8.1.

15
SesueleabreviarconUUT(Unidadbajopruebas:UnitUnderTest)
16
Eninglssediceinstantiation,quealgunostraducencomoinstanciacin(quenoexisteenespaol)yotros
comoreferencia(quesexiste)
Departamento de Tecnologa Electrnica 77
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
4
Cl k
Reset
Out 1
UUT
Cl k
TB_UUT
P_Cl k
I n1
I n2
Out 2
P_I nput s
P_Reset
Observamos si las salidas
son las que tiene que ser.
Proceso que simula el Reset
Proceso que
simula el reloj
Proceso que simula
las entradas al
circuito
Unidad que se quiere
comprobar su correcto
funcionamiento
banco de
pruebas
44
Cl k
Reset
Out 1
UUT
Cl k
TB_UUT
P_Cl k
I n1
I n2
Out 2
P_I nput s
P_Reset
Observamos si las salidas
son las que tiene que ser.
Proceso que simula el Reset
Proceso que
simula el reloj
Proceso que simula
las entradas al
circuito
Unidad que se quiere
comprobar su correcto
funcionamiento
banco de
pruebas

Figura 8.1: Esquema general de un banco de pruebas


Acontinuacinvamosaverlosbancosdepruebasylasimulacinconunejemplosencillo
8.1. Ejemplo sencillo
Vamosarealizaruncontadormuybsicoquecuentede0a15.Estecontadorvaacontar
ciclos de reloj, por tanto, si lo implementsemos en la placa no seramos capaz de ver la
cuentaporsurapidez.
Los puertos de entrada y salida del circuito se muestran en la figura 8.2. La salida del
circuito(CUENTA)serununsi gnedquecontarde0a15.Acurdatedeincluirlabiblioteca
I EEE. NUMERI C_STD. ALL,yquitarlasdosltimasqueseincluyenpordefecto.
4
Cl k
Reset
CUENTA
Cont a
Cl k
Definiremos CUENTA como unsi gned
44
Cl k
Reset
CUENTA
Cont a
Cl k
Definiremos CUENTA como unsi gned

Figura 8.2: Puertos de entrada y salida del contador que vamos a probar
Asquecreaunproyectonuevollamadosi mul _cont aycreaelcomponenteVHDLcont a.
Esteseruncontadorde0a15ascendente.Contarciclosdereloj.Sinoteacuerdascmo
sehacenloscontadores,repasaelcaptulo6.
Unavezquelotengashechoyhayascomprobadoquelasintaxisestbien,procederemos
asimularlo.Paraellocrearemosunbancodepruebas:
CreamosunanuevafuenteProject New Source
IndicamosquelafuentevaaserdeltipobancodepruebasdeVHDL: seleccionaVHDL
Test BenchynmbralaTB_CONTA (verfigura8.3).
78 Universidad Rey J uan Carlos
8. Simulacin

Figura 8.3: Seleccin de nueva fuente de tipo VHDL Test Bench


En la siguiente ventana se selecciona la entidad que el banco de pruebas va a probar
(testear). Como slo hay una (cont a), no hay ms opcin que seleccionar, por tanto
pinchamosenNext.YluegoenFinish.
Como resultado nos aparecer la entidad y la arquitectura VHDL del banco de pruebas.
Estecdigosemuestraenlafigura8.4.Estecdigotendremosquemodificarlo,yaqueel
ISE crea un patrn general de banco de pruebas que tendremos que adaptar a nuestro
circuitoparticular.
Parafacilitarlaidentificacindelasdistintaspartesdelcdigo,stassehansealadocon
letrasdelaAalaG(figura8.4):
Lo primero que tienes que hacer es poner la biblioteca numer i c_st d igual que hiciste
conlaentidad(figura8.4A).Recuerdaelcdigo65.
La entidad del banco de pruebas est la figura 8.4B. Fjate que esta entidad no tiene
puertos.
Dentro de la parte declarativa de la arquitectura (antes del BEGI N de la arquitectura)
debesincluir:
La declaracin del componente que vas a probar (figura 8.4C). El nombre de los
componentesylospuertosdebendecoincidirconladeclaracindelaentidad(decont a,
en este caso). Aqu tendrs que cambiar el tipo de la seal cuent a, pues si seguiste las
instrucciones,debeserununsi gned.
Lassealesdeentradadelcomponente,queirnasuspuertos:r eset ycl k(figura8.4D)
Las seales de salida del componentes, que irn a sus puertos: cuent a, que tendrs que
cambiaratipounsi gned.(figura8.4E)
Yaenlapartedesentenciasdelaarquitectura(despusdelbegi n),vienelareferencia
(instanciacin)delcomponente(figura8.4F).Aquserealizaelmapeo(portmap)delos
puertosdelcomponenteconlassealesdelbancodepruebas.
Porltimo,elISEhacreadounprocesovacoquetenemosquerellenarparaincluirlos
estmulosquelevamosaintroduciranuestrocomponentecont a10(figura8.4G)
Departamento de Tecnologa Electrnica 79
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
LI BRARY i eee;
USE i eee. st d_l ogi c_1164. ALL;
USE i eee. st d_l ogi c_unsi gned. al l ;
USE i eee. numer i c_st d. ALL;
ENTI TY t b_cont a_vhd I S
END t b_cont a_vhd;
ARCHI TECTURE behavi or OF t b_cont a_vhd I S
- - Component Decl ar at i on f or t he Uni t Under Test ( UUT)
COMPONENT cont a10
PORT(
Reset : I N st d_l ogi c;
Cl k : I N st d_l ogi c;
cuent a : OUT st d_l ogi c_vect or ( 3 downt o 0)
) ;
END COMPONENT;
- - I nput s
SI GNAL Reset : st d_l ogi c : = ' 0' ;
SI GNAL Cl k : st d_l ogi c : = ' 0' ;
- - Out put s
SI GNAL cuent a : st d_l ogi c_vect or ( 3 downt o 0) ;
BEGI N
- - I nst ant i at e t he Uni t Under Test ( UUT)
uut : cont a10 PORT MAP(
Reset => Reset ,
Cl k => Cl k,
cuent a => cuent a
) ;
t b : PROCESS
BEGI N
- - Wai t 100 ns f or gl obal r eset t o f i ni sh
wai t f or 100 ns;
- - Pl ace st i mul us her e
wai t ; - - wi l l wai t f or ever
END PROCESS;
END;
Bibliotecas utilizadas
Quitamos la
st d_l ogi c_unsi gned
La entidad del banco de pruebas
no tiene puertas de entada/salida
Declaracin del
componente que vamos
a probar (UUT)
Seales que vamos a generar
(estmulos): entradas a cont a,
Seales que vamos a observar
si estn bien. Salidas del
componente cont a
Referencia (instanc acin) del
componente cont a (a probar)
i
Patrn de ejemplo para generar
los estmulos: Generar los
valores de las seales de
entrada,
En este caso de Reset y Cl k
A
B
C
D
E
F
G
cambiar a unsi gned
cambiar a unsi gned
LI BRARY i eee;
USE i eee. st d_l ogi c_1164. ALL;
USE i eee. st d_l ogi c_unsi gned. al l ;
USE i eee. numer i c_st d. ALL;
ENTI TY t b_cont a_vhd I S
END t b_cont a_vhd;
ARCHI TECTURE behavi or OF t b_cont a_vhd I S
- - Component Decl ar at i on f or t he Uni t Under Test ( UUT)
COMPONENT cont a10
PORT(
Reset : I N st d_l ogi c;
Cl k : I N st d_l ogi c;
cuent a : OUT st d_l ogi c_vect or ( 3 downt o 0)
) ;
END COMPONENT;
- - I nput s
SI GNAL Reset : st d_l ogi c : = ' 0' ;
SI GNAL Cl k : st d_l ogi c : = ' 0' ;
- - Out put s
SI GNAL cuent a : st d_l ogi c_vect or ( 3 downt o 0) ;
BEGI N
- - I nst ant i at e t he Uni t Under Test ( UUT)
uut : cont a10 PORT MAP(
Reset => Reset ,
Cl k => Cl k,
cuent a => cuent a
) ;
t b : PROCESS
BEGI N
- - Wai t 100 ns f or gl obal r eset t o f i ni sh
wai t f or 100 ns;
- - Pl ace st i mul us her e
wai t ; - - wi l l wai t f or ever
END PROCESS;
END;
Bibliotecas utilizadas
Quitamos la
st d_l ogi c_unsi gned
La entidad del banco de pruebas
no tiene puertas de entada/salida
Declaracin del
componente que vamos
a probar (UUT)
Seales que vamos a generar
(estmulos): entradas a cont a,
Seales que vamos a observar
si estn bien. Salidas del
componente cont a
Referencia (instanc acin) del
componente cont a (a probar)
i
Patrn de ejemplo para generar
los estmulos: Generar los
valores de las seales de
entrada,
En este caso de Reset y Cl k
AA
BB
CC
DD
EE
FF
GG
cambiar a unsi gned
cambiar a unsi gned

Figura 8.4: Cdigo creado automticamente por el ISE para el banco de pruebas
Ahrarealizamosloscambiosindicadosenlafigura8.4.
Antes de seguir con los cambios que tenemos que realizar, explicaremos la referencia al
componente(figura8.4F).Enlafigura8.5semuestralasdistintaspartesdelarefrenciaa
uncomponente.Lareferenciaauncomponenteesequivalenteainsertaruncomponente
ennuestraarquitectura.Alinsertarelcomponentetenemosqueindicarcmoseconectan
los puertos (port map). Como un mismo componente se puede insertar varias veces
(puede haber varias referencias a un componente), la referencia empieza con un nombre
que la identifica de manera nica. A continuacin se incluye el nombre del componente
que se referencia. Este nombre debe de coincidir con el nombre de la entidad de dicho
componente.
Porltimo,enelmapeodelospuertos(portmap)alaizquierdaseponenlosnombresde
los puertos del componente, y a la derecha los nombres de las seales de la arquitectura
delbancodepruebas.Estosnombres,aunqueloshemospuestoiguales,notienenporqu
coincidir.Lafigura8.5muestrademaneramsgrficaestaexplicacin.
80 Universidad Rey J uan Carlos
8. Simulacin
uut : cont a
PORT MAP(
Reset => Reset ,
Cl k => Cl k,
cuent a => cuent a
) ;
nombre de la
referencia
("instanc acin").
Debe ser nico
i
nombre del componente que
estamos " nstanciando".
Debe ser el mismo que el
nombre que le dimos a la
entidad
i
mapeo de puertos
puertos del
componente
seales de la
arquitectura
del banco de
pruebas
ent i t y cont a i s
Por t (
Reset : i n STD_LOGI C;
Cl k : i n STD_LOGI C;
cuent a : out UNSI GNED ( 3 downt o 0)
) ;
end cont a;
Entidad del componente que estamos testeando
uut : cont a
PORT MAP(
Reset => Reset ,
Cl k => Cl k,
cuent a => cuent a
) ;
nombre de la
referencia
("instanc acin").
Debe ser nico
i
nombre del componente que
estamos " nstanciando".
Debe ser el mismo que el
nombre que le dimos a la
entidad
i
mapeo de puertos
puertos del
componente
seales de la
arquitectura
del banco de
pruebas
ent i t y cont a i s
Por t (
Reset : i n STD_LOGI C;
Cl k : i n STD_LOGI C;
cuent a : out UNSI GNED ( 3 downt o 0)
) ;
end cont a;
Entidad del componente que estamos testeando

Figura 8.5: Distintas partes de la referencia ("instanciacin") a un componente


Ahoraslonosquedaexplicarcmosegeneranlosestmulos:elbloqueGdelafigura8.4.
En esta figura, el ISE incluye un proceso genrico que tenemos que rellenar con los
estmulos que consideremos adecuados para comprobar nuestro circuito. Nosotros
borraremoseseprocesoparaincluirlosnuestros.
TenemosdosentradasanuestrocircuitoCont a:elrelojyelreset.Generaremosunproceso
independienteparacadaunadeellas:
Elprocesodelrelojdebedegenerarunasealderelojperidicade20ns(50MHz).Dicha
sealderelojestarlamitaddeltiempoaceroylaotramitadauno(figura8.6).
10 ns
20 ns
CLK
10 ns
20 ns
CLK

Figura 8.6: Periodo de la seal de reloj


Los procesos del VHDL son tiles para generar seales peridicas para simulacin. Para
ello se utilizan procesos sin lista de sensibilidad pero con sentencias " wai t f or " . Al
terminar un proceso, si no tiene lista de sensibilidad, el simulador vuelve a entrar
inmediatamenteenelprocesohastaencontrarunasentenciawai t .Lasentenciadetienela
ejecucin del proceso hasta que termine el tiempo indicado por la sentencia " wai t f or " .
Vemosloconunejemplo.Queremosrealizarelprocesoquegeneralasentenciadereloj.
Recuerdaqueestamoshablandoparasimulacin,estasentencianosepodrimplementar
en la FPGA. El cdigo 81 muestra cmo se genera una seal de reloj para simulacin.
Copiaesteprocesoenelbancodepruebas.
P_Cl k: Pr ocess
begi n
cl k <= ' 1' ;
wai t f or 10 ns;
cl k <= ' 0' ;
wai t f or 10 ns; - - al t er mi nar aqui , vuel e al pr i nci po
end pr ocess;
Cdigo 8-1: Cdigo que simula el funcionamiento del reloj de la placa Pegasus (50 MHz)
Departamento de Tecnologa Electrnica 81
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
Ahoraincluiremoslasentenciaquesimulalasealdereset.Estasealnoserperidica.
En nuestro caso vamos a pulsar el reset una vez. La espera del wai t la hacemos con un
tiempo que no sea mltiplo del reloj para evitar que sean seales simultneas, pues es
algoimprobableypuedellevarnosaalgunaconfusinenlasimulacin.
Para el reset no queremos que el proceso se vuelva a ejecutar una vez terminado, por lo
tantoterminaremoselprocesoconunwai t quenotengatiempo.Estoharqueelproceso
semantengaesperandoeternamente(seacabaelprocesoconesewai t ).
P_Reset : Pr ocess
begi n
r eset <= ' 0' ;
wai t f or 45 ns; - - esper amos un t i empo no mul t i pl o del r el oj
r eset <= ' 1' ; - - pul samos el r eset
wai t f or 40 ns;
r eset <= ' 0' ; - - sol t amos el r eset pasados 85 ns desde el pr i nci pi o
wai t ; - - esper amos et er nament e - > se par a el pr oceso
end pr ocess;
Cdigo 8-2: Cdigo que simula el funcionamiento del reset
Incluyeelprocesodelcdigo82enelbancodepruebas.Yahorapasaremosasimularlo.
ElprimerpasoesseleccionarelentornodelISEparasimulacin(figura8.7).
Seleccionamos
Behavioural
Simulation
Seleccionamos
Behavioural
Simulation

Figura 8.7: Seleccin del entrono para simulacin


Acontinuacin,enlaventanadeprocesos,tedeberaparecerXilinxISE Simulator(figura
8.8)
82 Universidad Rey J uan Carlos
8. Simulacin
Debe aparecer
Xilinx ISE
Simulator
El banco de
pruebas tiene
que estar
seleccionado
Debe aparecer
Xilinx ISE
Simulator
El banco de
pruebas tiene
que estar
seleccionado

Figura 8.8: Entrono para simulacin


Si en vez del Xilinx ISE Simulator te aparece Modelsim o cualquier otro, debes cambiar las
propiedadesdelproyecto.Paraello,enlaventanadeSources,pinchaconelbotnderecho
en el proyecto (donde pone algo parecido a xc2s505pq208 si usas la Pegasus o xc3s100e-
4tq144sieslaBasys)yseleccionaProperties....(figura8.9).
Departamento de Tecnologa Electrnica 83
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
Si no tienes el
Xilinx ISE
Simulator
Pincha aqu, y con
el botn derecho y
selecciona
Properties...
Si no tienes el
Xilinx ISE
Simulator
Pincha aqu, y con
el botn derecho y
selecciona
Properties...

Figura 8.9: Cambio de las propiedades del proyecto


AlpincharenProperties,tesaldrunaventanaconlaquepodrsseleccionarelXilinxISE
Simulator(figura8.10).LuegopinchaenOk.
Seleccionamos
ISE Simulator
Seleccionamos
ISE Simulator

Figura 8.10: Seleccin del ISE Simulator


Ahora,enlaventanadeSourcesvuelveaseleccionarelbancodepruebas:t b_cont a_vhd.Y
dentro de la ventana de Processes, pincha dos veces en Simulate Behavioral Model (figura
8.11).
84 Universidad Rey J uan Carlos
8. Simulacin
Selecciona el
banco de
pruebas
Pincha dos
veces para
simular
1
2
Selecciona el
banco de
pruebas
Pincha dos
veces para
simular
1 1
2 2

Figura 8.11: Arranque de la simulacin


Acontinuacinversunaventanaconelcronogramadelasimulacin(figura8.12).

Figura 8.12: Resultado de la simulacin


La seal cuent a no est en nmero decimal, para verlo ms claro, pincha en ella con el
botnderechoyseleccionaDecimal (unsigned).Miralafigura8.13.
Departamento de Tecnologa Electrnica 85
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
Seleccionamos
Decimal (Unsigned)
para la seal cuent a
Seleccionamos
Decimal (Unsigned)
para la seal cuent a

Figura 8.13: Visualizacin de cuenta como decimal sin signo


Ahora observa la simulacin y comprueba que el contador realiza la cuenta
correctamente.Fjatequeocurreantesdedarelreset.
8.2. Ampliacin
Ahorarealizalasimulacindecircuitosmscomplicados,quetenganmsentradasqueel
reloj y el reset. Por ejemplo el contador manual del apartado 6.4 y los registros de
desplazamiento.Paraello,tendrsquecrearlosprocesosquegenerandichasentradas.
8.3. Conclusiones
Enestecaptulohemosvistocmopodemoscomprobarquenuestrodiseofuncionabien.
Aunque a veces se pueden averiguar los errores con a partir de las salidas del circuitos,
normalmenteesresultainmediato.
La comprobacin de los diseos es una tarea que en muchos casos supera en tiempo de
desarrollo a la propia tarea del diseo, por tanto, no se debe desestimar su importancia.
Enesoscasos,lacomplejidaddelosbancosdepruebapuedesermuyelevada.
As que en este captulo slo hemos hecho una primera aproximacin a la simulacin y
comprobacin de circuitos. En cursos posteriores veremos mtodos ms avanzados para
ladeteccindeerrores[11].
86 Universidad Rey J uan Carlos



9. Mquinas de estados finitos
Las mquinas de estados finitos las hemos estudiado en teora, en esta prctica veremos
cmoimplementarlasenVHDL.
AunquehayvariasformasdeimplementarunamquinadeestadosenVHDL,demanera
general,nosotroslaimplementaremosmediantetresprocesos:
Procesosecuencialqueguardaelestado
Procesocombinacionalqueobtieneelestadosiguienteapartirdelestadoactualydelas
entradas
Procesocombinacionalqueobtienelasalidasapartirdelestadoactualydelasentradas
encasodequeseadeMealy.
Estostresprocesosesesquematizanenlafigura9.1.Fjatequesloel procesosecuencial
tienerelojyreset.
P_Secuenci al
D
Cl k
Reset
Cl k
P_Comb_est ado
Reset
est ado_si gui ent e
est ado_act ual
Ent r adas
P_Comb_sal i das
Sal i das
Si es de Mealy depende de las entradas
Si es de Moore no depende de las entradas
P_Secuenci al
D
Cl k
Reset
Cl k
P_Comb_est ado
Reset
est ado_si gui ent e
est ado_act ual
Ent r adas
P_Comb_sal i das
Sal i das
Si es de Mealy depende de las entradas
Si es de Moore no depende de las entradas

Figura 9.1: Esquema general de los procesos de una mquina de estados
Muchas veces se unen los procesos combinaciones en un slo proceso. Sin embargo, te
recomendamos que al menos al principio te acostumbres a hacerlo de esta forma ms
ordenada.Tambinsepuedehacertodalamquinadeestadosenunnicoproceso.
Vamosavercmosediseanmquinasdeestadosfinitosconunejemplos.
9.1. Mquina de estados para encender y apagar un LED con pulsador
En realidad, aunque quizs no nos hayamos dado cuenta, ya hemos hecho algunas
mquinas de estado finitos en algunos ejemplos. Sin embargo, como eran sencillas,
pudimosdisearlasdemaneraintuitiva.ElcircuitoqueenciendeyapagaunLEDconun
pulsadorquehicimosenlaprctica5.3sepuedehacerconmquinasdeestadosfinitos.
Nuestro circuito tendr dos bloques: el detector de flanco del pulsador (BTN0) y la
mquina de estados finitos. El esquema de estos dos bloques se muestra en la figura 9.2
(estosbloquespuedentenermsdeunproceso).
Departamento de Tecnologa Electrnica 87
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
Det ect or de f l anco
Cl k
Reset
Cl k
Reset
BTN0
Pul so_BTN0
Mqui na de est ados
Cl k
Reset
Cl k
Reset
LD0
Det ect or de f l anco
Cl k
Reset
Cl k
Reset
BTN0
Pul so_BTN0
Mqui na de est ados
Cl k
Reset
Cl k
Reset
LD0

Figura 9.2: Bloques del circuito para encender y apagar un LED


Como el detector de flanco ya sabemos hacerlo (seccin 5.3.2), slo veremos la mquina
de estados suponiendo que ya tenemos la seal acondicionada (Pul so_BTN0). Al
implementarloenlaFPGAtendrsquecrearelboquededeteccindeflancos.
El diagrama de transicin de estados se muestra en la figura 9.3 (fjate que est hecho
como mquina de Moore). Cuando se presiona el pulsador se pasa de encendido a
apagado, o de apagado a encendido. Recuerda de la seccin 5.3.2 que necesitamos
acondicionarlasealdelpulsadorparaqueseconviertaenunpulsodeunnicociclode
reloj. Por eso, en la leyenda del diagrama de la figura 9.3, la entrada es Pul so_BTN0 y no
directamenteelpulsador:BTN0.
OFF
0
ON
1
1
0
estado
LD0
Pul so_BTN0
0
1
Leyenda entrada
salida
OFF
0
ON
1
1
0
estado
LD0
Pul so_BTN0
0
1
Leyenda
OFF
0
ON
1
1
0
estado
LD0
Pul so_BTN0
0
1
Leyenda entrada
salida

Figura 9.3: Diagrama de transicin de estados para encender un LED con un pulsador
En las clases tericas hemos aprendido a implementar el diagrama de la figura 9.3 con
biestablesypuertaslgicas.AhoraloharemosenVHDL.
Loprimeroqueharemosesdeclararuntipoenumeradoquetendrlosestadosdenuestra
mquina. En nuestro caso sern LED_ON y LED_OFF (no pueden ser ON y OFF porque ON es
unapalabrareservadaenVHDL).
t ype est ados_l ed i s ( LED_OFF, LED_ON) ;
Cdigo 9-1: Declaracin de un tipo enumerado para la mquina de estados
La declaracin del enumerado la pondremos en la parte declarativa de la arquitectura
(antes del BEGI N). El tipo enumerado que hemos declarado en el cdigo 91 nos permite
asignarlosvaloresLED_OFFyLED_ONalassealesquesedeclarendeltipoest ados_l ed.
A continuacin declararemos dos seales que indican el estado actual y el estado
siguiente al que iremos segn el estado actual y las entradas (mira la figura 9.1). Lo
haremosas:
si gnal est ado_act ual , est ado_si gui ent e : est ados_l ed;
Cdigo 9-2: Declaracin de las seales de estado de tipo estados_led anteriormente declarado
Y ahora, en la parte de sentencias de la arquitectura, describiremos el diagrama de
transicin de estados en VHDL (figura 9.3). Segn vimos en la figura 9.1 la mquina de
estadossepuededescribir contres procesos.Estosprocesosseexplicanenlossiguientes
apartados.
88 Universidad Rey J uan Carlos
9. Mquinas de estados finitos
9.1.1. Proceso combinacional que obtiene el estado siguiente
Este proceso obtiene el estado siguiente (el destino de la flecha en el diagrama de
transicin de estados) a partir del estado actual y las entradas. Este proceso es
combinacional, por lo tanto no tiene reloj ni reset. As que en la lista de sensibilidad
tendremos todas las seales que se leen, que sern el estado actual y las entradas. En
nuestro caso, observando el diagrama de transicin de estados tendremos el siguiente
proceso(figura9.3):
P_COMB_ESTADO: Pr ocess ( est ado_act ual , Pul so_BTN0)
begi n
case est ado_act ual i s
when LED_OFF =>
i f Pul so_BTN0 = ' 1' t hen
est ado_si gui ent e <= LED_ON;
el se
est ado_si gui ent e <= LED_OFF;
end i f ;
when LED_ON =>
i f Pul so_BTN0 = ' 1' t hen
est ado_si gui ent e <= LED_OFF;
el se
est ado_si gui ent e <= LED_ON;
end i f ;
end case;
end pr ocess;
Cdigo 9-3: Proceso que obtiene el estado siguiente
Como vemos en el cdigo 93, el proceso empieza con una sentencia CASE. Con esta
sentencia seleccionamos el estado actual (est ado_act ual ) y segn las entradas,
obtendremoselestadosiguiente(est ado_si gui ent e).Silocomparasconeldiagramadela
figura9.3,ambosdicenlomismo,unoencdigoyotrodeformagrfica.
Es muy importante poner todos losestados en el CASE. Y que en todas las alternativas se
asigne el est ado_si gui ent e, porque de lo contrario, se generara un latch para la seal
est ado_si gui ent e. Y esta seal debe ser combinacional, ya que es en la seal
est ado_act ual dondesecreaunelementodememoriaparaguardarelvalor.
9.1.2. Proceso secuencial
Elprocesosecuencialactualizaelestadoactualencadaciclodereloj,yloguardaenunoo
varioselementosdememoria(flipflops).Encadaciclodereloj,elestadosiguientepasaa
ser el estado actual. Para ello, simplemente usa biestables D. Por lo tanto es un proceso
muysencillo.Elprocesoincluyeunasentenciaderesetqueindicaelestadodepartida.
P_SEQ_FSM: Pr ocess ( r eset , cl k)
begi n
i f r eset = ' 1' t hen
est ado_act ual <= LED_OFF;
el si f cl k' event and cl k=' 1' t hen
est ado_act ual <= est ado_si gui ent e;
end i f ;
end pr ocess;
Cdigo 9-4: Proceso que actualiza y guarda el estado
9.1.3. Proceso combinacional que proporciona las salidas
Esteprocesocombinacionalproporcionalassalidasenfuncindelestadoactualy,encaso
de que sea una mquina de Mealy, tambin en funcin de las entradas. En nuestro caso,
comoesunamquinadeMoore,solodependerdelestadoactual.Elprocesosemuestra
enelcdigo95
Departamento de Tecnologa Electrnica 89
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
P_COM_SALI DAS: Pr ocess ( est ado_act ual )
begi n
case est ado_act ual i s
when LED_OFF =>
LD0 <= ' 0' ;
when LED_ON =>
LD0 <= ' 1' ;
end case;
end pr ocess;
Cdigo 9-5: Proceso que proporciona la salida
Recuerda que es muy importante que la salida est asignada en todas las condiciones
posiblesparaevitargenerarlatches.
Yatieneslostresprocesosdelamquinadeestados.Ahora,realizaeldiseoincluyendo
tambin el detector de flanco. Implementa el circuito en la FPGA y comprueba que
funcionabien.
9.2. Detector de flanco con mquinas de estados
Ahora vamosaimplementartambineldetectordeflancocomomquinadeestados.Es
por tanto, una variante al que hicimos en el apartado 5.3.2, que lo hicimos mediante
registrosdedesplazamiento.Eldetectordeflancodesubidadetectaunasecuencia01.Por
tanto, es un ejercicio que sabemos hacer de clase. Como las entradas no estn
sincronizadas con el reloj de la placa (puedo pulsar cuando quiera), para evitar
metaestabilidad,loimplementaremoscomouna mquinadeMoore(recuerdafigura5.6)
que son ms seguras. En la figura 9.4 se muestra el diagrama de estados del detector de
flancodesubida.
estado
pulso_btn0
BTN0
Leyenda entrada
salida
inic
0
s0
0
0
1
0
1
s01
1
1
0
estado
pulso_btn0
BTN0
Leyenda entrada
salida
estado
pulso_btn0
BTN0
Leyenda entrada
salida
inic
0
s0
0
0
1
0
1
s01
1
1
0
inic
0
s0
0
0
1
0
1
s01
1
1
0

Figura 9.4: Diagrama de estados del detector de flancos (Moore)


Ahoracreaunnuevoproyecto,importalosficherosVHDLyUCFdelaprcticaanterior
17

y modifica el detector de flanco describindolo como la mquina de estados de la figura


9.4. Por tanto, creando otros tres procesos nuevos: uno secuencial, otro combinacional
paraelestadoyelltimocombinacionalparalassalidas.
Tienes que tener en cuenta que vas a crear dos mquinas de estado en el mismo diseo,
por lo tanto, tendrs dos tipos enumerados para especificar los estados: uno para el
detector de flanco y otro para encender el LED. Por consiguiente, deben tener nombres
diferentes.Porejemplo,podrasdeclararloscomosemuestraenelcdigo96
- - Est ados par a encender el LED
t ype est ados_l ed i s ( LED_OFF, LED_ON) ;
si gnal est ado_act ual , est ado_si gui ent e : est ados_l ed;

- - Est ados par a det ect ar el f l anco
t ype est ados_f l anco i s ( I NI C, S0, S01) ;
si gnal est _f l _act , est _f l _si g : est ados_f l anco;
Cdigo 9-6: Declaracin de tipos enumerados distintos para cada mquina de estados

17
Recuerda:ProjectAddCopyofSource....
90 Universidad Rey J uan Carlos
9. Mquinas de estados finitos
Implementaelcircuitoycompruebaquefuncionaigualqueantes.
9.2.1. Variante
Sitefijasenlafigura9.4,unavezquesehadetectadoelflanco,sivieneuncerosignifica
quedeBTN0vienelasecuencia0101,yporlotantosegenerarndospulsosseguidos.Sin
embargoesimposiblequepodamospulsardosvecesenunintervalode40ns.Portanto,
elnuevopulsosedebeaunrebotepulsadoryenrealidadesmejornoconsiderarlo.
BTN0
Pul so_BTN0
20ns
clk
Cl k
dos pulsos seguidos
0 0 1 1
dos pulsos seguidos
BTN0
Pul so_BTN0
20ns
clk
Cl k
0 0 1 1

Figura 9.5: Cronograma de cuando llega la secuencia 0101


As que es mejor realizar el diseo con el diagrama de estados de la figura 9.6, donde
siempre que estamos en el estado S01 volvemos al estado inicial. Por eso hay una X: en
todosloscasos,vuelvoaI NI C.
inic
0
s0
0
0
1
0
1
s01
1
X
inic
0
s0
0
0
1
0
1
s01
1
X

Figura 9.6: Diagrama de estados modificado


Realizaestavarianteycompruebaquefuncionaigual.
Comentario:
Los rebotes de los pulsadores es un aspecto muy importante en el diseo de circuitos
electrnicosdigitales.EnlaplacaPegasusestnsolucionadospormediodeuncircuitode
condensadoresyresistencias(figura3.1).Sinembargo,laplacaBasysnotieneestecircuito
(figura3.2)yportantotenemosquesolucionarlomedianteunamquinadeestadosyun
temporizadordemodoquenoseconsiderenlospulsosdeentradasirecientementeyaha
habido un pulso (suele ser durante unos 300 milisegundos). En el captulo 11
aprenderemosaimplementarestecircuito,aunqueestaramuybienquefuesespensando
en cmo lo haras. Mientras tanto, si usas la Basys tendrs que intentar presionar los
pulsadores intentando que no haya rebotes (cogindole el truquillo algo se puede
conseguir).
9.3. Desplazamiento alternativo de los LED
Para hacer esta prctica necesitas haber realizado la prctica 7.1 y las de este captulo.
QueremosiluminarlosLEDdelaplacadelamismamaneraquelohacaKITT(elCoche
Fantstico)demodoqueseempieceencendiendoelLED0,luegoel1,yassucesivamente
hastael7,yalllegaral7vuelvaal6,5,....hastael1yel0.
Departamento de Tecnologa Electrnica 91
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
Haymuchasmanerasposiblesdeplantearesteproblema.Nosotroslosplantearemosdela
siguientemanera:
Usaremosunregistrodedesplazamientoquepuederotaralaizquierdayaladerecha
segnelvalordeunasealdspl za_i zq.Sivale1desplazaralaizquierda,sivale0a
la derecha. Haremos rotacin y no desplazamiento porque si no, en una vuelta, el
registrosellenaradeunos(tambinsepuededesplazar,peroasignandocerosalbitdel
extremo).
Elregistrodedesplazamientotendrunahabilitacin(enabl e).Siestaceronohabr
rotacinenningnsentido.
El habilitacin (enabl e) del registro de desplazamiento vendr dada por un seal
generada en un divisor de frecuencia. La seal tendr una frecuencia de 1 dcima de
segundo.Unasealigualquelaquegeneramosenelcronmetro(apartado6.3,figura
6.5).Siquisisemosquefuesemsrpidoodespacio,cambiaramoslafrecuenciadeesa
seal.
ElvalordelregistropasadirectamentealosLED.
Elregistrodedesplazamientosereseteaconunvaloriguala00000001.Estohaceque
alresetearsiempreseenciendaelprimerLEDdeladerecha:LD0.
Laordenderotacinalaizquierdaoderecha(dspl za_i zq)laproduceunamquinade
estados.Apartedelrelojyelreset,susentradassondossealesqueindicansielLED
que est encendido es uno de los extremos. As, cuando el LED de la derecha est
encendido (r egi st r o( 0) ) se activar la seal t ope_dcha, indicando que LD0 est
encendido.SiseenciendeelLEDdelaizquierda,r egi st r o( 7) valdr1yportantose
activarlasealt ope_i zq.
Portanto,lamquinadeestadosindicarelsentidoderotacindelosLEDhastaque
llegue al tope de ese sentido y dar la orden de ir en sentido contrario hasta llegar al
otrotope.
Elesquemadeestecircuitosemuestraenlafigura9.7,dondeesteldivisordefrecuencia,
elregistrodedesplazamientoylamquinadeestados.
P_Cont a1deci ma
S1deci ma
Cl k
Reset
Cl k
P_Rot a
Cl k
Reset
PB3
r egi st r o
8
LED( 7: 0)
Enabl e
Maqui naEst ados
r ot a_i zq
Cl k
Reset
Cl k
PB3
r ot a_i zq
t ope_i zq
t ope_dcha
r egi st r o( 7)
r egi st r o( 0)
1
1
r egi st r o( 7)
r egi st r o( 0)
P_Cont a1deci ma
S1deci ma
Cl k
Reset
Cl k
P_Rot a
Cl k
Reset
PB3
r egi st r o
88
LED( 7: 0)
Enabl e
Maqui naEst ados
r ot a_i zq
Cl k
Reset
Cl k
PB3
r ot a_i zq
t ope_i zq
t ope_dcha
r egi st r o( 7)
r egi st r o( 0)
1
1
r egi st r o( 7)
r egi st r o( 0)

Figura 9.7: Esquema del circuito del movimiento alternativo de los LED
92 Universidad Rey J uan Carlos
9. Mquinas de estados finitos
De los tres bloques de la figura 9.7, slo la mquina de estados es un diseo totalmente
nuevo. Pues el divisor de frecuencia se ha hecho en el apartado 6.3 (figura 6.5). Y el
registrodedesplazamientoessimilaralosdelaprctica7.
Acontinuacinsemuestraeldiagramadeestadosdelamquinadeestados,sinembargo,
antes de verla, intenta deducirla por ti mismo. Pues en clase se han realizado problemas
similares
18
.
DCHA
0
IZQ
1
01
X0
estado
rota_izq
tope_izq, tope_dcha
0X
10
Leyenda entradas
salida
11: ent r ada i mposi bl e
DCHA
0
IZQ
1
01
X0
estado
rota_izq
tope_izq, tope_dcha
0X
10
Leyenda entradas
salida
11: ent r ada i mposi bl e

Figura 9.8: Diagrama de transicin de estados
PuedesobservarqueseharealizadocomomquinadeMoore.
Fjate que hay entradas imposibles, y entradas que dan igual. En VHDL como la sntesis
en biestables la va a realizar el ISEWebpack y nuestra FPGA tiene tamao de sobra para
nuestro circuito, por ahora no nos vamos a preocupar de la simplificacin. Por tanto,
podemosdisearelprocesocombinacionaldelestadosiguientedelamaneramscmoda
para nosotros. Por ejemplo, como muestra el siguiente cdigo, considerando slo una
sealdetope
19
:
P_COMB_ESTADO: Pr ocess ( est ado_act , t ope_i zq, t ope_dcha)
begi n
case est ado_act i s
when I ZQ =>
i f t ope_i zq = ' 1' t hen
est ado_si g <= DCHA;
el se
est ado_si g <= I ZQ;
end i f ;
when DCHA =>
i f t ope_dcha = ' 1' t hen
est ado_si g <= I ZQ;
el se
est ado_si g <= DCHA;
end i f ;
end case;
end pr ocess;
Cdigo 9-7: Cdigo del proceso combinacional que obtiene el estado siguiente
Paraterminar,implementaelcircuitoenteroenlaFPGAycompruebaquefuncionabien.
9.4. Conclusiones
HemosvistocmoimplementarmquinasdeestadosfinitosenVHDL.Alenfrentartecon
las especificaciones de un diseo, debes pensar cmo se transformarlas en una o varias
mquinas de estados. Esta es una de las funciones ms importantes del ingeniero.
Posteriormente,elpasodelamquinadeestadosalVHDLesmsomenosdirecto.

18
Elproblemadelcarritohechoenclaseessimilar,quizsunpocomscomplicado.
http://laimbio08.escet.urjc.es/assets/files/docencia/EDII/carrito.pdf
19
Sinembargo,silohicieseamano,squetengoqueconsiderarlasentradasimposiblesparapodersimplificar
almximoporKarnaugh
Departamento de Tecnologa Electrnica 93



10. Clave electrnica
En esta prctica vamos a realizar un circuito que compruebe si se ha introducido una
clave correctamente. Despus de introducir la clave correcta, el circuito activar una
salida,queennuestrocasosernlosLED,peropodrasercualquierotracosa,comoabrir
unapuertaodesactivarunaalarma.
En la placa Pegasus disponemos de cuatro pulsadores, que para simplificar los vamos a
llamarA, B, C y D.stossecorrespondernconlospulsadoresBTN3,BTN2,BTN1yBTN0.
Elresetirenelprimerinterruptor(SW0).Lasespecificacionesdelcircuitoson:
LaclavequeactivarlasalidaserACBA(podrasercualquierotra).
Una vez que se ha introducido la clave correcta se encendern los 8 LED durante 3
segundos.Traslocualseapagarn.
Durante el tiempo en que los LED estn encendidos (despus de introducir la clave
correcta),elcircuitoignorarsisepresionanlospulsadores.
DespusdehaberintroducidolaclavecorrectaydequesehayanapagadolosLED,se
aceptarsolapamientoparalasiguienteclave.Estoes,laltimaAdelaclavecorrecta
podrserlaprimeraAdelasiguienteclaveintroducida(estonotienemuchosentidoen
unaclave,perosehaceascomoejercicio).
Se podr tener un nmero infinito de intentos. La secuencia correcta se podr
introducir en cualquier momento excepto durante el tiempo en que los LED estn
encendidos.
Paraesteejercicioslosedarnunasindicaciones:
Hazdetectoresdeflancoparatodoslospulsadores.SiusaslaplacaBasystendrsms
problemasparadetectarunanicapulsacinypodraserconvenienterealizarunfiltro
temporal: no aceptar pulsos durante los 300 ms despus de haber recibido un pulso
(miraelcaptulo11).
Hazeldiagramadeestadosamanoparaelcircuitodetectordelaclave
Un esquema posible del circuito se muestra en la figura 10.1. Aparte del bloque
detectordeflancos,esteesquemaesmuysimilaramuchosproblemasdeexamen,que
tienenunamquinadeestadosyuncircuitotemporizador(vercaptulo16figura16.1)
Comolamquinadeestadosrecibeentradassincronizadasdelmismoreloj:todaslas
entradas de este bloque provienen de bloques con el cl k y no vienen del exterior; el
circuitolopuedeshacermedianteunamquinadeMealyodeMoore.
Lasealhabi l i t a_cuent adelamquinadeestadosestaraunohastaquesellegueal
findelatemporizacin(f i n_cuent a=' 1' ).Lasealf i n_cuent avaldr1duranteunslo
ciclodereloj,alterminarlacuenta.Luegovolveracero.
Todoestosonrecomendaciones,peronotienesquehacerelcircuitoexactamentecomo
sepropone.Sitienesotraideadecmodisearlo,llvalaacabo.
Departamento de Tecnologa Electrnica 95
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
Det ect or de f l anco
Cl k
Reset
Cl k
Reset
BTN0
Pul so_D
Mqui na de est ados
Cl k
Reset
Cl k
Reset
LD( 7: 1)
BTN1
BTN2
BTN3
Pul so_C
Pul so_B
Pul so_A
Tempor i zador
Cl k
Reset
f i n3seg
Enabl e
8
habi l i t a_cuent a
f i n3seg
Det ect or de f l anco
Cl k
Reset
Cl k
Reset
BTN0
Pul so_D
Mqui na de est ados
Cl k
Reset
Cl k
Reset
LD( 7: 1)
BTN1
BTN2
BTN3
Pul so_C
Pul so_B
Pul so_A
Tempor i zador
Cl k
Reset
f i n3seg
Enabl e
8
habi l i t a_cuent a
f i n3seg

Figura 10.1: Esquema del circuito de la clave electrnica


10.1. Variantes
PruebaahacerlamquinadeestadosconMealyyconMoore
HazquelosLEDparpadeendurantelostressegundosquesemantienenactivos
Hazelcircuitosinsolapamientodelaclave
Muestra ordenadamente por los displays las letras que introduce el usuario: el ltimo
carcterintroducidoeneldeladerecha,yelprimercarcter(deloscuatroltimos)en
eldelaizquierda.
96 Universidad Rey J uan Carlos



11. Circuito antirrebotes
Enestaprcticaseplanteaelcircuitoantirrebotesqueevitaqueelpresionarunpulsador
recibamosmsdeunpulso.
Este circuito es interesante para pulsadores que no tienen circuito antirrebotes en la
propia placa. En la figura 11.1 se muestran los circuitos de los pulsadores de las placas
PegasusyBasys.Alaizquierdasemuestraelcircuitoqueconectaelpulsadordela placa
Pegasus. Este circuito tiene un condensador que hace filtrar los pulsos espurios que se
producenporlosrebotesalmecnicosalhacercontactoelpulsador.Sinembargo,laplaca
Basys no tiene estos condensadores, y por tanto, se producen ms transiciones espurias.
Estastransicionespuedenprovocarquealpulsarunavez,elcircuitointerpretequeseha
pulsadovariasveces.AsquetenemosquerealizaruncircuitoantirrebotesenVHDL.
4,7k
PI N pul sador
59 BTN0
58 BTN1
57 BTN2
154 BTN3
Spartan-II
3,3V
4,7k
0,1F
PEGASUS
4,7k
PI N pul sador
69 BTN0
48 BTN1
47 BTN2
41 BTN3
Spartan-3E
3,3V
4,7k
BASYS
4,7k
PI N pul sador
59 BTN0
58 BTN1
57 BTN2
154 BTN3
Spartan-II
3,3V
4,7k
0,1F
PEGASUS
4,7k
PI N pul sador
59 BTN0
58 BTN1
57 BTN2
154 BTN3
Spartan-II
3,3V
4,7k
0,1F
4,7k
PI N pul sador
59 BTN0
58 BTN1
57 BTN2
154 BTN3
Spartan-II
3,3V
4,7k
0,1F
PEGASUS
4,7k
PI N pul sador
69 BTN0
48 BTN1
47 BTN2
41 BTN3
Spartan-3E
3,3V
4,7k
BASYS
4,7k
PI N pul sador
69 BTN0
48 BTN1
47 BTN2
41 BTN3
Spartan-3E
3,3V
4,7k
BASYS

Figura 11.1: Esquema de los pulsadores en la placa Pegasus y en la placa Basys


La figura11.2 muestra el cronograma resultante del detector de flancos (PULSO_BTN)
cuando hay rebotes en la entrada (BTN). Como para este ejemplo existen 4 flancos de
subida,eldetectordeflancosproducircuatropulsos.Sinembargo,sloqueremosquese
produzcauno.
4 flancos de subida
El detector de flancos
producir 4 pulsos
BTN
PULSO_BTN
4 flancos de subida
El detector de flancos
producir 4 pulsos
4 flancos de subida
El detector de flancos
producir 4 pulsos
BTN
PULSO_BTN

Figura 11.2: Cronograma de la salida del detector de flancos (PULSO_BTN) cuando hay rebotes en la
entrada (BTN)
Para evitar los rebotes basta con eliminar todos los pulsos que se generen durante los
siguientes 300 milisegundos despus de haber detectado un flanco de subida. Si
conseguimoshacerestecircuito,lasalidafiltrada(FI LTRO_BTN)seracomolamostradaen
lafigura11.3.
Departamento de Tecnologa Electrnica 97
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
4 flancos de subida
Slo despus de 300 milisegundos podr haber un nuevo pulso
BTN
FI LTRO_BTN
300 ms
4 flancos de subida
Slo despus de 300 milisegundos podr haber un nuevo pulso
BTN
FI LTRO_BTN
300 ms

Figura 11.3: Cronograma de la salida del filtro antirrebotes (FILTRO_BTN) cuando hay rebotes en la
entrada (BTN)
Cmo podramos realizar este circuito? pues con una mquina de estados similar al
detectordeflancosperocontemporizador.Elesquemadelcircuitosemuestraenlafigura
11.4. En este esquema propuesto, el temporizador se habilita cuando se ha detectado un
flancodesubida.Apartirdeentoncesnoseproducirningnpulsodesubidahastaque
eltemporizadordlasealdequehanpasado3milisegundos.Despusdeesto,sepodr
detectarunnuevoflancodesubida.
BTN0
Mqui na de est ados
Cl k
Reset
Cl k
Reset
Tempor i zador
Cl k
Reset
f i n3ms
Enabl e
enabl econt
f i n3ms
Fi l t r o_BTN0
BTN0
Mqui na de est ados
Cl k
Reset
Cl k
Reset
Tempor i zador
Cl k
Reset
f i n3ms
Enabl e
enabl econt
f i n3ms
Fi l t r o_BTN0

Figura 11.4: Esquema del circuito que filtra los rebotes de la entrada
Intenta pensar por ti mismo el diagrama de estados. Si no se te ocurre, puedes mirar la
figura11.5.
estado
filtro_btn0
enablecont
BTN0, f i n3ms
Leyenda entradas
salidas
inic
00
s0
00
0X
1X
0X
1X
s01
10
X1
espera
01
XX
X0
estado
filtro_btn0
enablecont
BTN0, f i n3ms
Leyenda entradas
salidas
inic
00
s0
00
0X
1X
0X
1X
s01
10
X1
espera
01
XX
X0

Figura 11.5: Diagrama de estados del circuito que filtra los pulsos
Paracadapulsadorhabraquerealizaruncircuitosimilar.
Implementaelcontadormanualdelaseccin6.4conestosfiltros.UtilizaunaplacaBasys
paracomprobarquerealmentefuncionabien.

98 Universidad Rey J uan Carlos





12. Mquina expendedora
Enestaprcticarealizaremosdistintasvariantesdeunamquinaexpendedoradebebidas.
Empezaremosporunaversinsencilla.
12.1. Versin sencilla
Laprimeraversindeestamquinaexpendedoraslotieneuntipodebebidaquecuesta
1,5 euros. Slo acepta cuatro tipos de moneda: 1 euro, 50 cntimos, 20 cntimos y 10
cntimos.Ylopeor:nodevuelvecambio!
Lamquinamostrarporundisplayelpreciodelabebidacuandonosehayaintroducido
ninguna moneda y, despus de haber introducido monedas, el display mostrar la
cantidaddedineroquesehaintroducido.Estaprimeraversindelamquinaslopodr
serutilizableporestudiantesdeelectrnicadigital,yaquemostraremoslosvaloresporun
nicodisplaycodificadoenhexadecimal.Estoes,siqueremosindicar1,5mostraremosel
nmero15enhexadecimal:F.Siqueremosmostrar1,4,mostraremos14enhexadecimal:
E.Yassucesivamente,porejemplo,paraindicar1euro:A.Paraindicar50cntimos(0,5)
mostraremos5.Conestoconseguimosunaversinmssencilla,yaqueutilizamosunslo
display.Estaversinsepodrirmejorandoenlassiguientesprcticas.
Despus de haber introducido 1,50 euros (o ms, pero sin dar la vuelta), la mquina
activar la salida para que abra la compuerta que deje salir la lata de bebidas. Nosotros,
comonotenemoscompuerta,encenderemoslosLEDdurante2segundosparaindicaral
usuarioquehaintroducidolacantidadsuficientededinero.Opcionalmenteeneldisplay
semostrarlaletraL(delata).Duranteestetiemponoseaceptanmonedas.
Como tampoco tenemos sensores para la entrada de monedas, utilizaremos los cuatro
pulsadores para indicar que han entrado monedas. BTN3 ser el indicador de que entra
unamonedade1euro,BTN2de50cntimos,BTN1de20cntimosyBTN0de10cntimos.
El esquema de entradas y salidas de nuestro circuito de control de la mquina
expendedora ser como el mostrado en la figura 12.1. A la derecha se muestra el
significadodelospuertosdeentradas.
EXPENDEDORA
LED( 7: 0)
8
BTN3
BTN2
BTN1
BTN0
SW7
RESET
CLK
SEG( 7: 0)
7
AN( 3: 0)
4
BTN3 Moneda de 1 Eur o
BTN2 Moneda de 50 cnt i mos
BTN1 Moneda de 20 cnt i mos
BTN0 Moneda de 10 cnt i mos
SW7 Reset
ent r adas
EXPENDEDORA
LED( 7: 0)
8
BTN3
BTN2
BTN1
BTN0
SW7
RESET
CLK
SEG( 7: 0)
7
AN( 3: 0)
4
EXPENDEDORA
LED( 7: 0)
8
BTN3
BTN2
BTN1
BTN0
SW7
RESET
CLK
SEG( 7: 0)
7
AN( 3: 0)
4
BTN3 Moneda de 1 Eur o
BTN2 Moneda de 50 cnt i mos
BTN1 Moneda de 20 cnt i mos
BTN0 Moneda de 10 cnt i mos
SW7 Reset
BTN3 Moneda de 1 Eur o
BTN2 Moneda de 50 cnt i mos
BTN1 Moneda de 20 cnt i mos
BTN0 Moneda de 10 cnt i mos
SW7 Reset
ent r adas

Figura 12.1: Esquema de puertos de entrada y salida del control de la mquina expendedora
Cmoharamosestecircuitopordentro?delasprcticasanterioresyapuedesteneruna
idea. El esquema es similar al de la clave electrnica (recuerda la figura 10.1). La figura
12.2muestraunesquemadeestecircuito.Comopuedesver,incluye:
Departamento de Tecnologa Electrnica 99
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
Unbloquededeteccindeflancoparalospulsadores,haciendoquesloseconsidere
unamonedacadavezquesepresionaunpulsador.
Elbloquedelamquinadeestados,quedebesabercuntodinerosehaintroducidoy
controlarlassalidas.
Elbloquedetemporizacin,quedebeindicarelpasode2segundosdespusdehaber
introducidoeldinerosuficienteparadarunalata.
El bloque que convierte a siete segmentos la cantidad de dinero (en este caso un
nmero hexadecimal de una cifra: 4 bits) que se quiere mostrar por el display. Si
quisisemosmostrarunaLcuandodurantelatemporizacin,tendramosqueincluirla
sealenabl e_cont comoentradadeltemporizador.
Det ect af l anco
Cl k
Reset
Cl k
Reset
BTN3
m1eur o
Mq_est ados
Cl k
Reset
Cl k
Reset
LED( 7: 0)
BTN2
BTN1
BTN0
m50cent
m20cent
m10cent
Tempor i zador
Cl k
Reset
f i n2seg
Enabl e
8
enabl e_cont
f i n2seg
SEG( 6: 0)
4
conv7seg
s7seg cant i dad
qdi ner o
7
Det ect af l anco
Cl k
Reset
Cl k
Reset
BTN3
m1eur o
Mq_est ados
Cl k
Reset
Cl k
Reset
LED( 7: 0)
BTN2
BTN1
BTN0
m50cent
m20cent
m10cent
Tempor i zador
Cl k
Reset
f i n2seg
Enabl e
8
enabl e_cont
f i n2seg
SEG( 6: 0)
4
conv7seg
s7seg cant i dad
qdi ner o
7

Figura 12.2: Esquema interno del circuito de control de la mquina expendedora simple
Haz el diagrama de estados de la mquina de estados, implementa el circuito y
compruebaquefuncionabien.
12.2. Versin decimal
El circuito que hemos hecho est bien para estudiantes de electrnica digital, pero si lo
quiereutilizaralguienquenosabehexadecimalsevaahacerunlo.
Aspues,vamosasermsexplcitosconlosmensajesquevamosadar.
EL diseo va a ser exactamente igual con la diferencia de la informacin que se muestra
enlosdisplays.Ahorautilizaremosloscuatrodisplays(recuerdalaprctica6.3.2).
Loquesevaamostrarsegnelestadosemuestraenlafigura12.3.
En el inicio indicamos el precio
P150
Mientras no haya introducido el
dinero suficiente, se indica la
cantidad que lleva (en decimal).
Por ejemplo:
C060
Al haber introducido el dinero
suficiente escribiremos LATA
de la manera ms aproximada
En el inicio indicamos el precio
P150
Mientras no haya introducido el
dinero suficiente, se indica la
cantidad que lleva (en decimal).
Por ejemplo:
C060
Al haber introducido el dinero
suficiente escribiremos LATA
de la manera ms aproximada

Figura 12.3: Indicaciones de los displays segn el estado

100 Universidad Rey J uan Carlos





13. Control con PWM
La modulacin por ancho de pulso (pulse width modulation: PWM) es un tipo de control
quesepuedeutilizarparaelcontroldemotoreselctricosdecontinua.Enestaprcticalo
utilizaremos para controlar la intensidad de un LED, pero con un circuito de potencia
adecuadopodrascontrolarunmotordecorrientecontinua.
13.1. Funcionamiento del PWM
ExplicaremosdemanerasimplificadaelfuncionamientodeunPWM,esteseveconms
detalleenlaasignaturadeSistemasElectrnicosDigitales.
Los parmetros fundamentales del PWM son el periodo (T) y el ciclo de trabajo (D). El
ciclo de trabajo indica el tiempo que la funcin vale uno respecto al tiempo total (el
periodo).Lafigura13.1muestratresciclosdetrabajodistintos.Observaqueelperiododel
PWM se mantiene constante, y lo que cambia es el tiempo en que la seal se mantienea
unorespectoalperiodototal.
T
D=50% D=20% D=80%
T T T
D=50% D=20% D=80%
T T

Figura 13.1: Seal PWM que se le ha cambiado el ciclo de trabajo


SielperiododelPWMessuficientementepequeo,eldispositivoqueestgobernado(por
ejemplo, el motor) no notar las variaciones de la tensin y el resultado es que el motor
recibir una corriente promedio dada por el ciclo de trabajo. La figura 13.2 muestra dos
PWMconciclosdetrabajodistintos.
T
D=50%
T
D=50%
T
D=50%
T
D=50%
D=20%
T
D=20%
T
D=20%
T
D=20%
T
Equivale a una tensin
continua del 50% de la
nominal: el motor ir a un
50% de la velocidad mxima
Equivale a una tensin
continua del 20% de la
nominal: el motor ir a un
20% de la velocidad mxima
T
D=50%
T
D=50%
T
D=50%
T
D=50%
T
D=50%
T
D=50%
T
D=50%
T
D=50%
T
D=50%
T
D=50%
T
D=50%
T
D=50%
D=20%
T
D=20%
T
D=20%
T
D=20%
T
D=20%
T
D=20%
T
D=20%
T
D=20%
T
Equivale a una tensin
continua del 50% de la
nominal: el motor ir a un
50% de la velocidad mxima
Equivale a una tensin
continua del 20% de la
nominal: el motor ir a un
20% de la velocidad mxima

Figura 13.2: Control de velocidad con el PWM


13.2. Control de la intensidad de un LED
Sabiendo el funcionamiento bsico del PWM, lo que vamos a hacer es controlar la
intensidad de un LED mediante un PWM. El control lo haremos con dos pulsadores. La
intensidadirdesdecerohasta7.Estoes,cuandovalgacero,losLEDnolucirn,cuando
valga7,losLEDlucirnensumximaamplitud.
Departamento de Tecnologa Electrnica 101
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
En los sistemas digitales los cambios en el ciclo de trabajo son discretos. Es decir, no se
puedeponercualquierciclodetrabajo,dependedelnmerodebitsqueutilice.
Porejemplo,paranuestroenunciado,siutilizo3bitsparaelPWM,puedocontarde0a7,
ypuedoutilizarunPWMconlosciclosdetrabajomostradosenlafigura13.3.
1/ 7 D=14%
2/ 7 D=28%
3/ 7 D=41%
0/ 7 D=0%
5/ 7 D=71%
6/ 7 D=86%
7/ 7 D=100%
4/ 7 D=57%
ciclo de trabajo: 3
1/ 7 D=14%
2/ 7 D=28%
3/ 7 D=41%
0/ 7 D=0%
5/ 7 D=71%
6/ 7 D=86%
7/ 7 D=100%
4/ 7 D=57%
1/ 7 D=14%
2/ 7 D=28%
3/ 7 D=41%
0/ 7 D=0%
5/ 7 D=71%
6/ 7 D=86%
7/ 7 D=100%
4/ 7 D=57%
ciclo de trabajo: 3

Figura 13.3: Los 8 ciclos de trabajo posibles con un PWM de 3 bits de resolucin
Paralarealizacindelaprcticanecesitamos:
Generar el ciclo de trabajo (dut ycycl e): lo haremos con un contador igual al de la
prctica6.4,ydelamismamaneramostraremoselciclodetrabajoporeldisplay.
Generar la seal peridica que produzca una seal con periodo T (cuent aPWM) . En
realidadseruncontador.Decuntoseraestecontador?Noestandirectosaberlo,te
recomiendodibujarelcronogramaosimularlo.
Compararlacuentadelasealperidicaconelvalordelciclodetrabajo,sielciclode
trabajoesmayorquelasealdelPWMseruno,ysino,sercero.
13.3. Ampliacin a control de motores
Mediante un circuito de potencia adecuado podramos controlar un motor.
Habitualmente se usa un puente en H. El puente en H (Hbridge) lo podemos hacer
nosotros, o bien comprar un mdulo PMOD de digilent (PMODHB3
20
o PMODHB5
21
).
Adems,elpuenteenHnospermitiracontrolarelsentidodegiro.
En la prctica 14 se incluye la descripcin detallada
de un circuito para controlar un motor paso a paso,
quesepodraadaptarparaestecaso.
Pero de manera ms sencilla, se puede utilizar un
transistor de potencia, como se hace en las prcticas
de la asignatura Sistemas Electrnicos Digitales del
prximo curso. El esquema bsico del circuito se
muestraenlafigura13.4.Segnelmotor,seescoger
latensin(Vcc),eltransistoryresistenciasadecuadas.

FPGA_PWM
R1
V
CC
M
FPGA_PWM
R1
V
CC
M

Figura 13.4: Circuito de potencia para


controlar el motor desde la FPGA

20
PMODHB3:http://www.digilentinc.com/Products/Detail.cfm?&Prod=PMODHB3
21
PMODHB5:http://www.digilentinc.com/Products/Detail.cfm?&Prod=PMODHB5
102 Universidad Rey J uan Carlos


Circuitos digitales y analgicos


AcontinuacinveremosunasprcticasenlasqueademsdelaparterelativaalaFPGAy
el VHDL, realizaremos los circuitos de potencia y analgicos necesarios para interactuar
conelmundoreal.Losconocimientosdeelectrnicaanalgicanoseexplicarnendetalle,
yaquesecorrespondenconlaasignaturadeElectrnicaAnalgica.
Departamento de Tecnologa Electrnica 103



14. Control de motor paso a paso
En esta prctica realizaremos el circuito de control de un motor paso a paso (stepper
motor). Con lo que ya sabemos, el control digital de este tipo de motores no debera
costarnos mucho. Lo ms importante de esta prctica es que se incluir el diseo de la
electrnicadepotencia,quepermitirmanejarelmotormediantelaFPGA.
Primero veremos cmo funcionan los motores paso a paso, luego cmo podemos
implementar la parte de control digital (el VHDL), por ltimo veremos el circuito de
potenciaqueadaptalassalidasdelaFPGAparamanejarelmotor.
14.1. Motores paso a paso
Hay mucha informacin sobre los motores paso a paso en internet
22
, por ello no nos
extenderemosencmoestnhechosysufuncionamiento.Aqusimplementeseincluirla
informacinnecesariaparapoderrealizarencircuitodecontrol.
Sin entrar en las caractersticas y en cmo estn fabricados los motores (imanes
permanentes, reluctancia variable o hbridos), cuando tenemos un motor paso a paso,
tenemosquedistinguirsiesbipolarounipolar.
Normalmentelosunipolarestienen5cables,ylosbipolares4cables.Algunosunipolares
tienen6cables,habiendodoscablesquesoneldealimentacin.
Aquvamosaexplicarelunipolar,yaquemuchasdelasimpresorasantiguastienenalgn
motor paso a paso unipolar, y as no tendremos que comprar ningn motor para hacer
esta prctica. Hemos desguazado varias impresoras y escneres, y suelen tener algn
motorpasoapaso(sobretodolasantiguas),tambinsuelehabermotoresdecontinua,as
que tendrs que distinguirlos. Muchas veces los motores tienen una etiqueta que indica
queesunmotorpasoapaso(steppingmotor)yenotrostienesquemirarsureferenciaenla
pgina web del fabricante. Nosotros hemos encontrado motores del fabricante Mitsumi
[17] y Minebea [16]. En las pginas web de estos fabricantes se pueden encontrar las
caractersticasdelosmotores.
14.1.1. Identificacin de terminales
Unavezquehemosconseguidounmotorunipolar,tenemosqueencontrarlosdevanados
opuestos y el terminal de alimentacin. El procedimiento para descubrir qu terminal es
cadaunoeselsiguiente
23
:
1. Averiguarculeselterminaldealimentacin
Segnlafigura14.1,detectarelterminaldealimentacinesfcil,puessimedimoslas
resistencias con un polmetro, la resistencia del terminal de alimentacin respecto a
cualquier otro terminal es la mitad que la resistencia que hay entre dos terminales
cualesquiera que no sean el de alimentacin. En caso de que haya 6 terminales,
posiblemente dos de ellos correspondan al de alimentacin y por tanto la resistencia
entreellossercero.

22
Informacindelosmotorespasoapasoenespaol:[7,24]yeningls[4,9,21,22]
23
Informacinobtenidadehttp://www.doc.ic.ac.uk/~ih/doc/stepper/others/
Departamento de Tecnologa Electrnica 105
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
D
L L
L
L
A
B
C
Al i ment aci n
D
L L
L
L
A
B
C
Al i ment aci n

Figura 14.1: Conexin interna de un motor unipolar


2. Identificarlosterminalesopuestos
Primero conectamos el terminal de alimentacin a la
fuente(Vcc)yponemoscualquierotroterminalatierra.A
este terminal que conectamos a tierra le llamaremos
terminal A. En la figura 14.2 se representa esta conexin.
Al hacer esto vemos que el motor se posiciona y que
cuestamsmoverlo.
A continuacin, manteniendo el terminal A a tierra y el
terminal de alimentacin conectado a la fuente, vamos
probando qu sucede al conectar cada uno de los dems
terminales a tierra. Esto lo hacemos por separado, es
decir,encadamomentohaycomomximodosterminales
atierra.
A
C
B D
Motor se
posiciona
A
C
B D
A
C
A
C
B D B D
Motor se
posiciona

Figura 14.2: El terminal A a


tierra
Aquel terminal que no haga girar un paso al motor sino que haga que pierda par
resistivoserelterminalopuestoaA,estoes,serelterminalC(segnlareferenciade
la figura 14.2). En los otros dos casos, habr un pequeo giro del motor en sentidos
opuestos.Enlafigura14.3semuestraesteconceptodemaneragrfica.
A
C
B D
Giro a izquierda
medio paso
A
C
B D
Giro a derecha
medio paso
A
C
B D
Motor
pierde
par
A
C
B D
Giro a izquierda
medio paso
A
C
B D
A
C
A
C
B D B D
Giro a izquierda
medio paso
A
C
B D
Giro a derecha
medio paso
A
C
B D
A
C
A
C
B D B D
Giro a derecha
medio paso
A
C
B D
Motor
pierde
par
A
C
B D
A
C
A
C
B D B D
Motor
pierde
par

Figura 14.3: Resultado de poner a tierra cada uno de los otros tres terminales, cuando el motor pierde par
indica que es el correspondiente
Unavezquetengamoslosterminalesidentificados,yapodemosgenerarlassecuenciasde
giro. En la figura 14.4 se muestra la identificacin de los terminales para el motor que
hemosobtenidodeimpresorasHewlettPackardmodelosDJ560CyDJ690c.Estemotoresel
modelo PM55L048 de Minebea, cuyas hojas de caractersticas se pueden consultar en la
pgina web de Minebea [16]. De todos modos, el funcionamiento con otros motores ser
similar, aunque tendrs que leer las caractersticas del motor que tengas para adaptar el
circuito.
106 Universidad Rey J uan Carlos
14. Control de motor paso a paso
A
B
D
Alimentacin
(comn)
C
AA
BB
D
Alimentacin
(comn)
C

Figura 14.4: Identificacin de los terminales en nuestro motor PM55L-048 de Minebea
14.1.2. Secuencia del motor paso a paso
Para hacer girar al motor tenemos que ir poniendo a tierra algunos terminales en una
secuenciaconcreta.Poneratierraunterminalhacequecirculecorrienteporeldevanado
correspondiente,yestohacequesemuevaelrotordelmotor.Delafigura14.3podemos
intuircmopodemosobtenerlasecuenciaconlaquepodemoshacerqueelmotorgire.La
figura 14.5 aclara cmo obtener esa secuencia. La flecha del centro indica de manera
esquemtica la posicin del rotor. De todos modos, es slo un esquema, no se producen
giros de 90 con cada paso, sino que son giros mucho menores (suelen ser menores de
10).
A
C
B D
A y B a tierra
A
C
B D
B y C a tierra
A
C
B D
C y D a tierra
A
C
B D
D y A a tierra
A
C
B D
A
C
B D
A y B a tierra
A
C
B D
A
C
B D
B y C a tierra
A
C
B D
A
C
B D
C y D a tierra
A
C
B D
A
C
B D
D y A a tierra

Figura 14.5: Secuencia de terminales que se ponen a tierra para obtener el giro del motor
As que para girar el motor tenemos que poner a tierra de manera secuencial los
terminales.Delafigura14.5podemosobtenerlasecuenciadeterminalesqueseponena
tierraparaobtenerelgirodelmotor:ABBCCDDAAB...
Enlafigura14.6semuestralasecuenciadelosterminalesquesetienenqueponeratierra.
Semuestranlosdossentidosdegiro.
1
1 1
1
1
1
1 1
1
1 1
1
1
1
1 1
1
1
1 2 3 4 5 6 7 8 9
A
B
C
D
1 1
1
1
1
1
1 1
1
1 1
1 1
1
1
1
1 2 3 4 5 6 7 8 9
A
B
C
D
1
1
tiempo tiempo
t
e
r
m
i
n
a
l

a

t
i
e
r
r
a
t
e
r
m
i
n
a
l

a

t
i
e
r
r
a1
1 1
1
1
1
1 1
1
1 1
1
1
1
1 1
1
1
1 2 3 4 5 6 7 8 9
A
B
C
D
1 1
1
1
1
1
1 1
1
1 1
1 1
1
1
1
1 2 3 4 5 6 7 8 9
A
B
C
D
1
1
tiempo tiempo
t
e
r
m
i
n
a
l

a

t
i
e
r
r
a
t
e
r
m
i
n
a
l

a

t
i
e
r
r
a

Figura 14.6: Secuencia de terminales que se ponen a tierra para obtener el giro del motor en ambos sentidos
Departamento de Tecnologa Electrnica 107
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
Se pueden generar otras secuencias, poniendo a tierra un nico terminal cada vez, o
mezclando ambas alternativas (estas secuencias las puedes ver en [7]). Lo puedes hacer
comoejercicio,peroparaestaprcticautilizaremoslassecuenciasdelafigura14.6.
Antes de generar las secuencias, tenemos que mirar cul es el tiempo mnimo que
podemos estar en cada paso (o la frecuencia mxima). Esto vara segn el motor y lo
tienesqueverenlashojasdecaractersticas.Ennuestromotor,lashojasdecaractersticas
indican que a partir de 100 Hz empieza a bajar el par del motor
24
. De las pruebas que
hemoshecho,amsde200Hzempiezaafuncionarmal.
14.2. Generacin de la secuencia de control con la FPGA
Ahora tenemos que generar las secuencias de la figura 14.6 con la FPGA. El bloque de
control que haremos se muestra en la figura 14.7. Usaremos los pulsadores BTN0 y BTN3
paraordenarmoverelmotorenunsentidouotro.Enprincipionosedeberandepulsara
lavez,peroencasodequesepulsenalavez,daremospreferenciaaunsentidodegiro.
Cuandonosepulsaningnpulsadorelmotordeberestarparado.
Porserundiseosncronoqueseharconunamquinadeestados,elcircuitotendrun
relojyunreset.
Elcircuitotendrcuatrosalidas(A,B,CyD)quecuandosean1darnlaordendeponerel
terminalcorrespondientedelmotoratierra.Cuandoseancero,sepondrnalatensinde
alimentacin y no circular corriente por el devanado del motor, y por tanto, no se
activar.
CONTROL_MOTOR
A
BTN3
BTN0
I ZQ
DCHA
SW0
RESET
CLK
B
C
D
AC0 ( P49)
AC1 ( P48)
AC2 ( P81)
AC3 ( P47)
J A1 ( P81)
J A2 ( P91)
J A3 ( P82)
J A4 ( P92)
Pegasus Basys
CONTROL_MOTOR
A
BTN3
BTN0
I ZQ
DCHA
SW0
RESET
CLK
B
C
D
CONTROL_MOTOR
AA
BTN3
BTN0
I ZQ
DCHA
SW0
RESET
CLK
BB
CC
DD
AC0 ( P49)
AC1 ( P48)
AC2 ( P81)
AC3 ( P47)
J A1 ( P81)
J A2 ( P91)
J A3 ( P82)
J A4 ( P92)
Pegasus Basys
AC0 ( P49)
AC1 ( P48)
AC2 ( P81)
AC3 ( P47)
J A1 ( P81)
J A2 ( P91)
J A3 ( P82)
J A4 ( P92)
Pegasus Basys

Figura 14.7: Bloque de control de motor de la FPGA


Las salidas las conectaremos a los conectores PMOD. La Pegasus tiene un nico conector
PMOD, que se ha llamado puerto accesorio (accesory port) en la figura 2.1. Los pines se
muestranenlatabladeladerechadelafigura14.7.
La Basys tiene cuatro conectores PMOD. Para esta prctica usaremos el conector de la
izquierda(JA).
Ahoratenemosquedisearelcircuitoylamquinadeestadosquegenerelassecuencias
apartirdelasentradasquesehandescrito.Intentadisearlosinayuda,ysivesquetienes
dudas,consultaeldiseopropuestomostradoenlafigura14.8.

24
Tambinseveinfluenciadoporeltipodeelectrnicadepotencia.Conunaelectrnicaespecficasepuede
aumentarlafrecuencia
108 Universidad Rey J uan Carlos
14. Control de motor paso a paso
estado
ABCD
CTS, BTN0, BTN3
Leyenda
entradas
salidas
11X
0XX
100
BC
0110
AB
1100
11X
CD
0011
DA
1001
11X
0XX
100
0XX
100
0XX
100
101
101
101
101
11X
estado
ABCD
CTS, BTN0, BTN3
Leyenda
entradas
salidas
11X
0XX
100
BC
0110
BC
0110
AB
1100
AB
1100
11X
CD
0011
CD
0011
DA
1001
DA
1001
11X
0XX
100
0XX
100
0XX
100
101
101
101
101
11X

Figura 14.8: Esquema de la mquina de estados para el bloque de control de motor de la FPGA
Observa en la figura 14.8 que hay una seal CTS que no est en las entradas del bloque
mostradoenlafigura14.7.Estaseallatendremosquegenerarnosotrosyserlaquenos
marquelafrecuenciadelmotor.Paraelmotordenuestrocaso,serunasealde100Hz
(una centsima de segundo). Esta seal la tenemos que generar de modo que est activa
duranteunslocicloderelojencadacentsimadesegundo.
Otracosaquetienesquetenerencuentaesqueparaestapropuesta,lassealesdeentrada
delospulsadoresBTN0yBTN3nosetienenquepasarporundetectordeflanco,sinoquese
muestreancontinuamente,yaquequienhacedefiltroeslasealCTS,puesestactivaun
slocicloderelojduranteunacentsimadesegundo.
Enlafigura14.8lasflechasquegeneranlasdossecuenciasdegirosehapuestodedistinto
color.Fjatequeladecolorazul,ladelBTN0tienepreferenciasobreladeBTN3.Enrealidad
esindiferenteculescojas,perotienesqueescogerunasecuenciasobrelaotra.
Ahora tendras que realizar el circuito en VHDL. Es recomendable que para que te sea
ms fcil depurar, las salidas A, B, Cy D tambin las saques por cuatro LED. Incluso para
depurar el circuito podras bajar la frecuencia de giro y comprobar que efectivamente se
generanlassecuenciasdeseadas.
Una vez que tenemos el circuito y vemos que los LED se mueven como pensamos, nos
quedahacerquelassalidasA,B,CyDordenenalosterminalesdelmotorestaratierraoa
latensindealimentacinsegnsuvalor.Estoloveremosenelapartadosiguiente.
14.3. Circuito de potencia para gobernar el motor
PodramospensarquesiponemoslascuatrosalidasdelaFPGAdirectamenteconectadas
a los terminales del motor, haramos que los terminales se pongan a tierra cuando la
FPGA lo mande. Desgraciadamente no es as, digamos que la FPGA no tiene fuerza
suficiente como para obligar al motor a ponerse a cero, por tanto hay que pensar en
hacerlodeotramanera.LaFPGAnopuedesuministrarlapotencianecesariaparamover
un motor. Por otro lado, el motor va alimentado a 24 voltios (aunque puede funcionar a
menos tensin) mientras que la FPGA se alimenta a 3,3 voltios, por tanto, las tensiones
tampocosecorresponden.
En nuestra primera aproximacin podramos usar un transistor bipolar o MOSFET para
cadaterminal,demanerasimilaracomosemostrabaenlafigura13.4.Hacindolodeesta
manera,elesquemanospodraquedarcomosemuestraenlafigura14.9.
Analizando el esquema podemos ver que cuando una salida de la FPGA (por ejemplo,
FPGA_A) tiene un valor lgico de 1 (3,3 V), circular corriente por la base del transistor y
Departamento de Tecnologa Electrnica 109
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
entrar en saturacin. Esto provocar que el terminal del motor TA est a una tensin
cercanaacero(segnlacadadetensinentrecolectoryemisordeltransistor).
Porotrolado,sihayuncerolgicoalasalidadelaFPGA,habrcerovoltiosenlabasedel
transistorynocircularcorrienteporlabase.Porlotantoeltransistorestarencorteyel
terminaldelmotorTAestaraVcc.
FPGA_A
R1
V
CC
TA
FPGA_B
R1
V
CC
TB
FPGA_C
R1
V
CC
TC
FPGA_D
R1
V
CC
TD
V
CC
M
FPGA_A
R1
V
CC
TA
FPGA_A
R1
V
CC
TA
FPGA_B
R1
V
CC
TB
FPGA_B
R1
V
CC
TB
FPGA_C
R1
V
CC
TC
FPGA_C
R1
V
CC
TC
FPGA_D
R1
V
CC
TD
FPGA_D
R1
V
CC
TD
V
CC
M

Figura 14.9: Posible esquema de la electrnica de potencia para manejar el motor


Este circuito podra funcionar bien, sin embargo hay que tener cuidado porque la FPGA
vaalimentadaconunafuentedetensindistintaqueladelmotor(3,3VlaFPGAy24Vel
motor). Para evitar que corrientes o tensiones altas lleguena la FPGA desde el motor, es
recomendable aislar la parte de la FPGA de la del motor. Para aislar ambas partes
podemosusaroptoacopladores.Losoptoacopladoresutilizanfotodiodosyfototransitores
paratransmitirinformacinproporcionandounaislamientoelctricoentreloscircuitosde
entradaysalida.Lafigura14.10muestrauncircuitoquesehaprobadoquefunciona.
FPGA_A
V
CC
=24V
TA
el resto de
terminales
tienen un
circuito igual
STA471
V
CC
=24V
22k
4N35
220
FPGA_GND
las tierras
son distintas
V
CC
=24V
M
optoacoplador
Mximo 24V,
pero puede
funcionar a
partir de 5V
las dos partes del
circuito estn aisladas
PM55L- 48
FPGA_A
V
CC
=24V
TA
el resto de
terminales
tienen un
circuito igual
STA471
V
CC
=24V
22k
4N35
220
FPGA_GND
las tierras
son distintas
V
CC
=24V
M
V
CC
=24V
M
optoacoplador
Mximo 24V,
pero puede
funcionar a
partir de 5V
las dos partes del
circuito estn aisladas
PM55L- 48

Figura 14.10: Esquema del circuito con optoacopladores


110 Universidad Rey J uan Carlos
14. Control de motor paso a paso
Los diodos que hay entre el colector del transistor y la alimentacin V2
CC
son para que la
corrientequecirculaporlosdevanadosdelmotortengauncaminodecirculacincuando
eltransistorentraencorte,evitandoconestosobretensiones.
El esquema muestra los valores concretos en las resistencias. El transistor que se ha
utilizadoeselSTA471deSanken[20].Estetransistoresundarlingtonysehausadoporque,
al igual que el motor, se ha reutilizado de la impresora. Este integrado tiene los cuatro
transistores. Con pocas modificaciones se podra haber utilizado otro similar como un
TI P120(darlington)ounI RL540(MOSFET).
El optoacoplador utilizado es el 4N35, pero se pueden utilizar otros similares como el
ACPL- 847 que tiene como ventaja que tiene cuatro optoacopladores integrados en el
circuito integrado. Fjate que tal como est hecho el circuito con los optoacopladores, la
sealdelaFPGAseinvierte,asquehabraquenegarlassalidasdelaFPGA:invertirlas
salidas de la mquina de estados, o si no, saber que el motor va a girar en sentido
contrarioaloqueharasinoptoacopladores.
ComoeltransistorSTA471nonoshasidofcildeencontrarparacomprar(locogimosdela
propia impresora), hemos realizado una variante del circuito con un integrado SN754410
que incluye dos medios puentes en H. La variante del circuito se muestra en la figura
14.11. El driver del motor del SN754410 tiene una habilitacin que se pone a uno para
dejarlohabilitado.
FPGA_A
V2
CC
=24V
TA
el resto de
terminales
tienen un
circuito igual
V1
CC
=5V
22k
ACPL_847
220
FPGA_GND
las tierras
son distintas
V2
CC
=24V
M
optoacoplador
Esta parte se pone
a 5V para que
consuma menos
las dos partes del
circuito estn aisladas
PM55L- 48
V1
CC
=5V
10k
SN754410
Mximo 24V,
pero puede
funcionar a
partir de 5V
habilitacin del
dr ver a '1' i
FPGA_A
V2
CC
=24V
TA
el resto de
terminales
tienen un
circuito igual
V1
CC
=5V
22k
ACPL_847
220
FPGA_GND
las tierras
son distintas
V2
CC
=24V
M
optoacoplador
Esta parte se pone
a 5V para que
consuma menos
las dos partes del
circuito estn aisladas
PM55L- 48
V1
CC
=5V
10k
SN754410
Mximo 24V,
pero puede
funcionar a
partir de 5V
habilitacin del
dr ver a '1' i

Figura 14.11: Esquema del circuito usando el circuito integrado SN754410


14.4. Conclusiones
En este diseo nos hemos enfrentado no slo al diseo de la parte digital, sino a las
dificultades que aparecen al interactuar con dispositivos externos. Hemos realizado el
diseo de la electrnica de potencia sin adentrarnos en conceptos tericos y sin analizar
alternativas,puesdaraparaunlibroentero.Laalternativaarealizareldiseoescomprar
mdulosconlaelectrnicadepotenciayquesepuedenconectaralaFPGA.
Departamento de Tecnologa Electrnica 111



15. Piano electrnico
25

Enestaprcticarealizaremosunpianoelectrnico.Paraellogeneraremosunconjuntode
sealesdigitalesperidicasdefrecuenciasaudiblesylasamplificaremosparaescucharlas
por un altavoz. La parte analgica de amplificacin se puede adquirir
26
o la podemos
disear nosotros mismos si tenemos conocimientos bsicos de electrnica analgica. La
partedigital,conloqueyasabemos,nodeberaserningnproblema.
En la versin ms bsica (figura 15.1), la seleccin de las notas se har a travs de los
pulsadores o interruptores de la FPGA. Segn que pulsador se haya seleccionado, la
salidadelaFPGAquevaalamplificadordeaudiotendrunafrecuenciadeterminada.
Generador de
frecuencias
do re mi fa sol la si do
interfaz
pulsadores
pul sador es
Amplificador de audio
FPGA
Generador de
frecuencias
do re mi fa sol la si do do re mi fa sol la si do
interfaz
pulsadores
pul sador es
Amplificador de audio
FPGA

Figura 15.1: Esquema del circuito de piano electrnico bsico


Lafrecuenciadelassealesquequeremosgenerardependerdelaoctavaqueescojamos,
lo que har que sean ms o menos graves los sonidos que generemos. La tabla 151
muestradistintasfrecuenciasdelasnotas.
Lafrecuenciadelassealesquequeremosgenerardependerdelaoctavaqueescojamos,
lo que har que sean ms o menos graves los sonidos que generemos. La tabla 151
muestradistintasfrecuenciasdelasnotas.
Nota
Hz
LA SI DO RE MI FA SOL LA
220,00 246,94 261,63 293,67 329,63 349,23 392,00 440,00
440,00 493,88 523,25 587,33 659,26 698,46 783,99 880,00
880,00 987,77 1046,5 1174,7 1318,5 1396,9 1568,0 1760,0
Tabla 15-1:Frecuencias de las notas en distintas octavas
Realizar un circuito que genere una seal peridica lo hemos hecho en la prctica de
contadores(prctica6),asquenodeberamostenermuchoproblema.Lasealgenerada
nodeberaestarlamitaddetiempoaunoylaotramitadacero,estoes,nodeberaestara
unounnicociclodereloj.
FinalmentelasealsalidadelaFPGAservirdeentradaalaetapadeamplificacin,ya
su vez, la salida del amplificador se conectar a una resistencia de carga, que en nuestro

25
EstaprcticahasidodesarrolladaeneldepartamentodeTecnologaElectrnicademaneraconjuntaporlos
profesores:BelnArredondo,SusanaBorromeo,JoaqunVaquero,NorbertoMalpicayFelipeMachado.La
implantacindeestaprcticaenclasessehadetalladoenelartculo[10]
26
PmodAMP1:http://www.digilentinc.com/Products/Detail.cfm?&Prod=PMODAMP1
Departamento de Tecnologa Electrnica 113
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
casounaltavoz.Lafiguramuestraelesquemamsgeneraldelamplificador.Laprimera
etapa del amplificador eleva los niveles de tensin y la segunda etapa amplifica la
corrientequeserentregadaalaltavoz.
FPGA
0 V
3.3 V
+
_
+
_
Av
e
R
o
R
i
+
_
+
_
Av
e
R
o
R
i
+
_
+
_
Av
e
R
o
R
i
Etapa1: Esquema general
amplificador tensin
Ve
Ai
e
R
o
R
i
Ai
e
R
o
R
i
Ai
e
R
o
R
i
Etapa2: Esquema general
amplificador corriente
ie
Amplificador con dos etapas
FPGA
0 V
3.3 V
0 V
3.3 V
+
_
+
_
Av
e
R
o
R
i
+
_
+
_
Av
e
R
o
R
i
+
_
+
_
Av
e
R
o
R
i
Etapa1: Esquema general
amplificador tensin
Ve
Ai
e
R
o
R
i
Ai
e
R
o
R
i
Ai
e
R
o
R
i
Etapa2: Esquema general
amplificador corriente
ie
Amplificador con dos etapas

Figura 15.2: Esquema general del circuito de amplificacin


Esimportantesealarqueeldiseomsbsicodelamplificadorpuedenonecesitaretapa
amplificadora de tensin. Sin embargo, puede ser interesante disear una primera etapa
congananciaentensinvariable(utilizandounsimplepotencimetro)yasconseguirun
niveldevoltajevariablealasalida.
Pararealizareldiseodelamplificadordebemosteneruncuentalasespecificacionesdel
problemadediseo:
Para las caractersticas de entrada del amplificador hay que tener en cuenta que la seal
de entrada al amplificador (la salida de la FPGA) es una seal cuadrada cuya amplitud
varaentre0y3,3V.
Paradisearlascaractersticasdesalidadelamplificador hayquetenerencuentaque la
resistencia de carga (altavoz) es 8 y que los altavoces utilizados pedirn una potencia
entre0,50,25W.
Finalmente, tenemos que disear un ancho de banda adecuado para que el amplificador
funcione correctamente en todas las frecuencias de las notas. En el caso ms general,
podemosdisearunamplificadorqueoperecorrectamenteenelrangodefrecuenciasde
las tres octavas, es decir, que las frecuencias de corte inferior (y superior) se siten una
dcadapordebajo(yporencima)delanotaconfrecuenciamenor,220Hz(ylanotacon
frecuenciamayor,1760Hz).Enelrangodefrecuenciasenquetrabajamos,lafrecuencia
de corte superior no supone ningn problema ya que sta viene determinada por las
capacidades internas del transistor, cuyos valores son muy pequeos, del orden pF,
resultandofrecuenciasdecortesuperiormuchomsaltasdelasrequeridas.Paradisear
la frecuencia de corte inferior necesitamos elegir cuidadosamente los condensadores de
acoplo de la entrada y la salida del amplificador, ya que stos determinara nuestra
frecuenciadecorteabajasfrecuencias.
15.1. Ampliaciones
Hay muchas ampliaciones posibles del circuito, tener una meloda predeterminada,
mostrarporlosdisplaysdesietesegmentoslanotaqueseesttocando,poderseleccionar
distintasoctavas,ymuchasotrasopcionesquesetepuedenocurrirmientraslodiseas.
114 Universidad Rey J uan Carlos


Problemas tericos
En esta seccin se incluye la resolucin de problemas tericos de diseo digital. Te
recomendamosquelosintenteshacersinverlasolucin,yquemireslasolucinunavez
lo hayas intentado para comprobar el resultado. Los problemas de electrnica digital
parecenmuyfcilessitieneslasolucinallado,perolodifcilespensarlos.
Estos problemas han sido problemas de exmenes de la asignatura Electrnica Digital II
de la carrera de Ingeniera de Telecomunicacin de la Universidad Rey Juan Carlos. Por
ser problemas de exmenes, el enunciado est simplificado, para adecuarlos a la
resolucin en un tiempo limitado, por tanto, hay muchas simplificaciones y en muchos
casosseasumencomportamientosideales.

Departamento de Tecnologa Electrnica 115





16. Reproductor MP3
Esteproblemasepusoenelexamendel30deenerode2009
16.1. Enunciado
Disearuncircuitoparacontrolar unreproductordeMP3.Paraelcontrol,eldispositivo
tiene un nico pulsador (P) y tiene dos salidas que gobiernan la reproduccin normal
(PLAY) y el avance rpido (FW). Estas salidas funcionan a nivel alto y cuando estn las
dosaceronosereproduceniseavanza(comosiestuvieseenpausa).
La reproduccin normal (PLAY) se consigue cuando se presiona el pulsador durante
menos de un segundo. Al soltar el pulsador el circuito se mantiene en reproduccin
normal.Siseestenreproduccinnormal(PLAY)ysepulsaPpormenosdeunsegundo
sedetienelareproduccin.
El avance rpido (FW) se consigue cuando se presiona el pulsador durante ms de un
segundo, y se debe mantener presionado para que contine el avance. Al soltarlo, se
vuelvealareproduccinnormal(PLAY).
Concretando,elcircuitodebefuncionardelasiguientemanera:
1. Alcomenzar,elcircuitoseencuentraenestadoinicialenelquenosereproducenise
avanza.PLAY=0yFW=0.
2. Estandoenelestadoinicial,sisepulsaPpuedensucederdoscosasdependiendodel
tiempoquesemantengapulsado:
2.1. SisehamantenidopulsadoPmenosdeunsegundo,alsoltarsedebepasarala
reproduccinnormal(PLAY=1).
2.2. SisemantienepulsadoPmsdeunsegundo,sedebepasaralavancerpido(FW)
y se mantendr este avance rpido hasta soltar el pulsador. Cuando se suelte se
pasaalareproduccinnormal(PLAY).
3. Cuandoelcircuitoestenreproduccinnormal(PLAY)sedebemantenerestemodo
dereproduccinmientrasnosepulseP.SisepulsaP,puedenpasardoscosas:
3.1. SisehamantenidopulsadoPmenosdeunsegundo,alsoltarsedebeiralestado
inicial. (durante el tiempo que se mantiene pulsado se sigue reproduciendo la
msica:PLAY=1)
3.2. SisemantienepulsadoPmsdeunsegundo,sedebepasaralavancerpido(FW)
ysemantendresteavancehastasoltarelpulsador.Cuandosesuelteelpulsador
se vuelve a pasar a la reproduccin normal (PLAY). Nota: antes de que pase el
segundo,sesiguereproduciendolamsica:PLAY=1
Datosadicionalesdelsistema:
Elpulsadornotienerebotes
Elrelojdelcircuito(Clk)vaa10MHz
Existeunpulsadorpararesetearasncronamente(Reset),peronosedebedepresionar
duranteelfuncionamientonormaldelcircuito
Departamento de Tecnologa Electrnica 117
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
Sepide:
a) Dibujarlosbloquesinternosdelcircuito,conentradas,salidasysealesintermedias
b) Dibujareldiagramadetransicindeestadosdelamquinadeestadosquecontrolael
circuito.RealizarlacomomquinadeMoore.
c) Latabladeestadossiguientesysalidas
d) LatabladeexcitacindelosbiestablesusandobiestablesJK
e) EcuacinsimplificadasloparalasalidaPLAY
f) RealizarelmodeloVHDLdelosprocesosdelamquinadeestados
16.2. Solucin
16.2.1. Bloques internos del circuito
Para realizar el circuito necesitamos una mquina de estados y un temporizador de un
segundoconhabilitacin(enabl e).Elesquemadeestecircuitosemuestraenlafigura16.1.
MaqEst ados
Tempor i zador
P
T1s
Enabl e
PLAY
FW
Cl k
Reset
Cl k
Cl k
Reset
Reset
T1s
T1s
P
PLAY
FW
Enabl e
MaqEst ados
Tempor i zador
P
T1s
Enabl e
PLAY
FW
Cl k
Reset
Cl k
Cl k
Reset
Reset
T1s
T1s
P
PLAY
FW
Enabl e

Figura 16.1: Bloques internos del circuito


EltemporizadorlonecesitamosparasabersisepresionaelpulsadorPdurantemsdeun
segundo.Porlotanto,lamquinadeestadostendrunaentradamsqueindicaelfinde
la cuenta (T1s). Tambin necesitamos una salida ms que va a habilitar el temporizador
(Enabl e).Cuandoeltemporizadorestdeshabilitadonopodrestaractivalasealdefin
decuentaT1s.
16.2.2. Diagrama de transicin de estados
NospidenrealizareldiagramadelamquinadeestadosporMoore.
Lamquinadeestadostienedosentradas:
ElpulsadorP
LasealqueindicaquehapasadounsegundoT1S(findelacuenta)
Ytressalidas
Ordendeplay(PLAY)
Ordendeavancerpido(FW).
Habilitacindeltemporizador(Enabl e)
118 Universidad Rey J uan Carlos
16. Reproductor MP3
Elordendelasentradasysalidaseneldiagramaserelsiguiente(figura16.2).
Est ado
Pl ay FWEnabl e
P T1s
entradas
Salidas
Est ado
Pl ay FWEnabl e
Est ado
Pl ay FWEnabl e
P T1s
entradas
Salidas

Figura 16.2: Orden de entradas y salidas en la representacin de la mquina de estados
FjatequeesunamquinadeMoore,porloquelassalidasestnenelpropioestado.
InicialmentepartimosdelestadoI NI CI AL,endondePLAY=' 0' y
FW=' 0' ,escomoestarenpause.Enesteestadoelcontadorest
deshabilitado, y nos mantendremos aqu hasta que se pulse P
(figura16.3).
Comoelcontadorestdeshabilitado,nuncallegarlasealde
quehapasadounsegundo(T1s),porloquesiempresercero.
Imposible
X 1
I NI CI AL
0 0 0
0 0
Imposible
X 1
Imposible
X 1
I NI CI AL
0 0 0
I NI CI AL
0 0 0
0 0

Figura 16.3: Estado inicial


Qu sucede si se pulsa P estando en el estadoI NI CI AL? depende del tiempo en que est
pulsado, as que tendremos que ir a un estado en el que mientras est pulsado P
habilitemos la cuenta y veamos si se mantiene pulsado ms de un segundo o no (figura
16.4).
Imposible
1 0
X 1
I NI CI AL
0 0 0
0 0
ESP1S
0 0 1
Imposible
X 1
Imposible
habilitamos la cuenta
1 0
X 1
I NI CI AL
0 0 0
I NI CI AL
0 0 0
0 0
ESP1S
0 0 1
habilitamos la cuenta

Figura 16.4: Transicin a un estado de espera


Enesteestadodeespera(ESP1S),esperaremosaque(figura16.5):
O bien llegue el final de cuenta sin haber soltado el pulsador (ha pasado ms de un
segundo)yentonceshayqueiralavancerpido(FW).
Obiensesuelteelpulsadorantesdelfindecuenta,yentonceshayqueiralPLAY
Podemos decir que es prcticamente imposible que se suelte el pulsador en el mismo
instante en el que se termina la cuenta. Sin embargo, en tal caso optaremos por darle
prioridadalplay(noestespecificado)
Si no ocurre nada de lo anterior nos mantendremos en dicho estado. Esto es, si no se ha
soltadoelpulsador(P=' 1' )ynosehallegadoalfindecuenta(T1s=' 0' ).
Departamento de Tecnologa Electrnica 119
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
En Inicial:
Imposible
1 0
X 1
I NI CI AL
0 0 0
0 0
ESP1S
0 0 1
prcticamente imposible que
sean 0 1 en ese instante
PLAY
1 0 0
1 0
FW
0 1 0
0 X
1 1
1 0
En Inicial:
Imposible
X 1
I NI CI AL
0 0 0
I NI CI AL
0 0 0
0 0
ESP1S
0 0 1
ESP1S
0 0 1
prcticamente imposible que
sean 0 1 en ese instante
PLAY
1 0 0
PLAY
1 0 0
1 0
FW
0 1 0
FW
0 1 0
0 X
1 1

Figura 16.5: Transicin a estado de reproduccin o avance


EstandoenPLAYnopuedellegarelfindecuentaporqueestdeshabilitadoelcontador.Y
nosmantendremosenesteestadomientrasnosevuelvaapulsarP.
Estando en FWno puede llegar el fin de cuenta porque est deshabilitado el contador. Y
nosmantendremosenesteestadomientrasnosesuelteP.Estasdosposibilidadessehan
aadidoenlafigura16.6.
En INICIAL
imposible
1 0
X 1
I NI CI AL
0 0 0
0 0
ESP1S
0 0 1
PLAY
1 0 0
1 0
FW
0 1 0
0 X
1 1
En INICIAL
imposible
En PLAY y FW:
Imposible
X 1
1 0
0 0
1 0
X 1
I NI CI AL
0 0 0
I NI CI AL
0 0 0
0 0
ESP1S
0 0 1
ESP1S
0 0 1
PLAY
1 0 0
PLAY
1 0 0
1 0
FW
0 1 0
FW
0 1 0
0 X
1 1
En PLAY y FW:
Imposible
X 1
En PLAY y FW:
Imposible
X 1
1 0
0 0

Figura 16.6: Estado de reproduccin y avance


EstandoenFWcuandosesuelteelpulsadorP,elsistemavaalPLAY(figura16.7)
En INICIAL
imposible
1 0
X 1
I NI CI AL
0 0 0
0 0
ESP1S
0 0 1
PLAY
1 0 0
1 0
FW
0 1 0
0 X
1 1
En INICIAL
imposible
En PLAY y FW:
Imposible
X 1
1 0
0 0
0 0
1 0
X 1
I NI CI AL
0 0 0
I NI CI AL
0 0 0
0 0
ESP1S
0 0 1
ESP1S
0 0 1
PLAY
1 0 0
PLAY
1 0 0
1 0
FW
0 1 0
FW
0 1 0
0 X
1 1
En PLAY y FW:
Imposible
X 1
En PLAY y FW:
Imposible
X 1
1 0
0 0
0 0

Figura 16.7: Transicin desde el estado de avance al estado de reproduccin


Estando en PLAY cuando se pulsa P, tenemos que comprobar de nuevo cunto tiempo se
pulsa.SisepulsamsdeunsegundovamosaFWysiesmenos,vamosaI NI CI AL(pause).
Aspues,necesitamosotroestadodeesperaenelquevolveremosahabilitarelcontador.
120 Universidad Rey J uan Carlos
16. Reproductor MP3
A este estado le llamamos ESP1S2 (espera un segundo, 2). Podemos decir tambin que es
prcticamenteimposiblequeenelmismoinstantequesoltemoselpulsador(P=' 0' )haya
justoterminadolacuenta(T1S=' 1' ).EnestehipotticocasodecidimosiralestadoI NI CI AL
(haberidoalestadoFWhubiesesidoigualmentevlido).
Enlafigura16.8semuestraeldiagramafinaldelamquinadeestados.
En INICIAL
imposible
1 0
X 1
I NI CI AL
0 0 0
0 0
ESP1S
0 0 1
PLAY
1 0 0
1 0
FW
0 1 0
0 X
1 1
En INICIAL
imposible
En PLAY y FW:
Imposible
X 1
1 0
0 0
0 0
ESP1S2
1 0 1
se mantiene
el play
1 0
0 X
se suelta P
antes del
segundo
1 1
se mantiene
P pasado el
segundo
1 0
prcticamente imposible que
sean 0 1 en ese instante
1 0
X 1
I NI CI AL
0 0 0
I NI CI AL
0 0 0
0 0
ESP1S
0 0 1
ESP1S
0 0 1
PLAY
1 0 0
PLAY
1 0 0
1 0
FW
0 1 0
FW
0 1 0
0 X
1 1
En PLAY y FW:
Imposible
X 1
En PLAY y FW:
Imposible
X 1
1 0
0 0
0 0
ESP1S2
1 0 1
se mantiene
el play
1 0
0 X
se suelta P
antes del
segundo
1 1
se mantiene
P pasado el
segundo
1 0
prcticamente imposible que
sean 0 1 en ese instante

Figura 16.8: Diagrama final de la mquina de estados
16.2.3. Tabla de estados siguientes y salidas
La tabla de estados siguientes y salidas la obtenemos fijndonos en el diagrama de
transicindeestadosqueacabamosdehacer(figura16.8).
Antesdenada,tenemosqueasignarunacodificacinacadaestado.
Como tenemos 5 estados necesitamos 3 biestables (ya que con dos
biestables slo podemos codificar cuatro estados). Escogemos una
codificacin cualquiera, por ejemplo la resultante de tomar
nmeros consecutivos. Seguramente habr codificaciones ms
ptimasquereduzcanlastransicionesdeunestadoaotro(perono
nosimporta).Lacodificacinescogidasemuestraenlatabla16.1.
Est ado Q2 Q1 Q0
I ni ci al 0 0 0
Esp1s 0 0 1
FW 0 1 0
PLAY 0 1 1
Esp2s 1 0 0
Est ado Q2 Q1 Q0
I ni ci al 0 0 0
Esp1s 0 0 1
FW 0 1 0
PLAY 0 1 1
Esp2s 1 0 0

Tabla 16.1:
Codificacin de estados
Ahorarellenamoslatabladelosestadossiguientesysalidas(tabla16.2):
Departamento de Tecnologa Electrnica 121
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
Q2 Q1 Q0 P T1s Pl FWEn Q2 Q1 Q0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 X X X
0 0 0 1 0 0 0 0 0 0 1
0 0 0 1 1 0 0 0 X X X
0 0 1 0 0 0 0 1 0 1 1
0 0 1 0 1 0 0 1 0 1 1
0 0 1 1 0 0 0 1 0 0 1
0 0 1 1 1 0 0 1 0 1 0
0 1 0 0 0 0 1 0 0 1 1
0 1 0 0 1 0 1 0 X X X
0 1 0 1 0 0 1 0 0 1 0
0 1 0 1 1 0 1 0 X X X
0 1 1 0 0 1 0 0 0 1 1
0 1 1 0 1 1 0 0 X X X
0 1 1 1 0 1 0 0 1 0 0
0 1 1 1 1 1 0 0 X X X
1 0 0 0 0 1 0 1 0 0 0
1 0 0 0 1 1 0 1 0 0 0
1 0 0 1 0 1 0 1 1 0 0
1 0 0 1 1 1 0 1 0 1 0
1 X 1 X X X X X X X X
1 1 0 X X X X X X X X
Estado
actual Entradas Salidas
Estado
siguiente
Inicial
Esp1s
Fw
Estados imposibles
t+1 t+1
Moore: slo
dependen del
estado
Play
Esp1s2
t+1
condiciones imposibles
condiciones imposibles
condiciones imposibles
condiciones imposibles
condiciones imposibles
condiciones imposibles
Q2 Q1 Q0 P T1s Pl FWEn Q2 Q1 Q0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 X X X
0 0 0 1 0 0 0 0 0 0 1
0 0 0 1 1 0 0 0 X X X
0 0 1 0 0 0 0 1 0 1 1
0 0 1 0 1 0 0 1 0 1 1
0 0 1 1 0 0 0 1 0 0 1
0 0 1 1 1 0 0 1 0 1 0
0 1 0 0 0 0 1 0 0 1 1
0 1 0 0 1 0 1 0 X X X
0 1 0 1 0 0 1 0 0 1 0
0 1 0 1 1 0 1 0 X X X
0 1 1 0 0 1 0 0 0 1 1
0 1 1 0 1 1 0 0 X X X
0 1 1 1 0 1 0 0 1 0 0
0 1 1 1 1 1 0 0 X X X
1 0 0 0 0 1 0 1 0 0 0
1 0 0 0 1 1 0 1 0 0 0
1 0 0 1 0 1 0 1 1 0 0
1 0 0 1 1 1 0 1 0 1 0
1 X 1 X X X X X X X X
1 1 0 X X X X X X X X
Estado
actual Entradas Salidas
Estado
siguiente
Inicial
Esp1s
Fw
Estados imposibles
t+1 t+1
Moore: slo
dependen del
estado
Play
Esp1s2
t+1
Q2 Q1 Q0 P T1s Pl FWEn Q2 Q1 Q0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 X X X
0 0 0 1 0 0 0 0 0 0 1
0 0 0 1 1 0 0 0 X X X
0 0 1 0 0 0 0 1 0 1 1
0 0 1 0 1 0 0 1 0 1 1
0 0 1 1 0 0 0 1 0 0 1
0 0 1 1 1 0 0 1 0 1 0
0 1 0 0 0 0 1 0 0 1 1
0 1 0 0 1 0 1 0 X X X
0 1 0 1 0 0 1 0 0 1 0
0 1 0 1 1 0 1 0 X X X
0 1 1 0 0 1 0 0 0 1 1
0 1 1 0 1 1 0 0 X X X
0 1 1 1 0 1 0 0 1 0 0
0 1 1 1 1 1 0 0 X X X
1 0 0 0 0 1 0 1 0 0 0
1 0 0 0 1 1 0 1 0 0 0
1 0 0 1 0 1 0 1 1 0 0
1 0 0 1 1 1 0 1 0 1 0
1 X 1 X X X X X X X X
1 1 0 X X X X X X X X
Estado
actual Entradas Salidas
Estado
siguiente
Inicial
Esp1s
Fw
Estados imposibles
t+1 t+1
Moore: slo
dependen del
estado
Play
Esp1s2
t+1
condiciones imposibles condiciones imposibles
condiciones imposibles condiciones imposibles
condiciones imposibles condiciones imposibles
condiciones imposibles condiciones imposibles
condiciones imposibles condiciones imposibles
condiciones imposibles condiciones imposibles

Tabla 16.2: Tabla de estados siguientes y salidas


16.2.4. Tabla de excitacin de los biestables para biestables J-K
Latabladeexcitacindelosbiestableslapodramoshaberrellenadoenlatablaanterior.
Para saber las ecuaciones de las entradas de los biestables necesitamos saber qu
necesitamos para lograr cada una de las transiciones. Como nos piden hacerlo con
biestables JK, ponemos su tabla, y a partir de ella obtenemos las entradas J y K para las
cuatroposiblestransiciones(tabla16.3)
J K Q( t +1)
0 0 Q( t )
0 1 0
1 0 1
1 1 Q( t )
Q(t) Q(t+1) J K
0 0 0 X
0 1 1 X
1 0 X 1
1 1 X 0
J K Q( t +1)
0 0 Q( t )
0 1 0
1 0 1
1 1 Q( t )
Q(t) Q(t+1) J K
0 0 0 X
0 1 1 X
1 0 X 1
1 1 X 0
Q(t) Q(t+1) J K
0 0 0 X
0 1 1 X
1 0 X 1
1 1 X 0

Tabla 16.3: Tabla de entradas necesarias para obtener una transicin en biestables J-K
Ahora,nosfijamosenlatabladelatabla16.2paraverencadacasoqutransicioneshayy
enconsecuencia,quentradasnecesitamos.Enlatabla16.4tenemosloquenospideeste
apartado.
122 Universidad Rey J uan Carlos
16. Reproductor MP3
Q2 Q1 Q0 P T1s Pl FWEn Q2 Q1 Q0 J 2 K2 J 1 K1 J 0 K0
0 0 0 0 0 0 0 0 0 0 0 0 X 0 X 0 X
0 0 0 0 1 0 0 0 X X X X X X X X X
0 0 0 1 0 0 0 0 0 0 1 0 X 0 X 1 X
0 0 0 1 1 0 0 0 X X X X X X X X X
0 0 1 0 0 0 0 1 0 1 1 0 X 1 X X 0
0 0 1 0 1 0 0 1 0 1 1 0 X 1 X X 0
0 0 1 1 0 0 0 1 0 0 1 0 X 0 X X 0
0 0 1 1 1 0 0 1 0 1 0 0 X 1 X X 1
0 1 0 0 0 0 1 0 0 1 1 0 X X 0 1 X
0 1 0 0 1 0 1 0 X X X X X X X X X
0 1 0 1 0 0 1 0 0 1 0 0 X X 0 0 X
0 1 0 1 1 0 1 0 X X X X X X X X X
0 1 1 0 0 1 0 0 0 1 1 0 X X 0 X 0
0 1 1 0 1 1 0 0 X X X X X X X X X
0 1 1 1 0 1 0 0 1 0 0 1 X X 1 X 1
0 1 1 1 1 1 0 0 X X X X X X X X X
1 0 0 0 0 1 0 1 0 0 0 X 1 0 X 0 X
1 0 0 0 1 1 0 1 0 0 0 X 1 0 X 0 X
1 0 0 1 0 1 0 1 1 0 0 X 0 0 X 0 X
1 0 0 1 1 1 0 1 0 1 0 X 1 1 X 0 X
1 X 1 X X X X X X X X X X X X X X
1 1 0 X X X X X X X X X X X X X X
Estado
actual Entradas Salidas
Estado
siguiente
Inicial
Esp1s
Fw
Estados imposibles
t+1 t+1
Play
Esp1s2
t+1
Entradas en los biestables
para conseguir las
transiciones Qi Qi
t+1
Q2 Q1 Q0 P T1s Pl FWEn Q2 Q1 Q0 J 2 K2 J 1 K1 J 0 K0
0 0 0 0 0 0 0 0 0 0 0 0 X 0 X 0 X
0 0 0 0 1 0 0 0 X X X X X X X X X
0 0 0 1 0 0 0 0 0 0 1 0 X 0 X 1 X
0 0 0 1 1 0 0 0 X X X X X X X X X
0 0 1 0 0 0 0 1 0 1 1 0 X 1 X X 0
0 0 1 0 1 0 0 1 0 1 1 0 X 1 X X 0
0 0 1 1 0 0 0 1 0 0 1 0 X 0 X X 0
0 0 1 1 1 0 0 1 0 1 0 0 X 1 X X 1
0 1 0 0 0 0 1 0 0 1 1 0 X X 0 1 X
0 1 0 0 1 0 1 0 X X X X X X X X X
0 1 0 1 0 0 1 0 0 1 0 0 X X 0 0 X
0 1 0 1 1 0 1 0 X X X X X X X X X
0 1 1 0 0 1 0 0 0 1 1 0 X X 0 X 0
0 1 1 0 1 1 0 0 X X X X X X X X X
0 1 1 1 0 1 0 0 1 0 0 1 X X 1 X 1
0 1 1 1 1 1 0 0 X X X X X X X X X
1 0 0 0 0 1 0 1 0 0 0 X 1 0 X 0 X
1 0 0 0 1 1 0 1 0 0 0 X 1 0 X 0 X
1 0 0 1 0 1 0 1 1 0 0 X 0 0 X 0 X
1 0 0 1 1 1 0 1 0 1 0 X 1 1 X 0 X
1 X 1 X X X X X X X X X X X X X X
1 1 0 X X X X X X X X X X X X X X
Estado
actual Entradas Salidas
Estado
siguiente
Inicial
Esp1s
Fw
Estados imposibles
t+1 t+1
Play
Esp1s2
t+1
Entradas en los biestables
para conseguir las
transiciones Qi Qi
t+1

Tabla 16.4: Tabla de excitacin de los necesarias para obtener una transicin en biestables J-K
16.2.5. Ecuacin simplificada para la salida Play
De toda la tabla 16.4 nos piden la ecuacin simplificada para la salida PLAY. Para ello
realizamosKarnaugh.PorserdeMoore,lasentradasnohacenfalta(sesimplificaran).En
lafigura16.9semuestraeldiagramadeKarnaughylaecuacindelasalidaPLAY.
Q1- Q0
Q2
PLAY
PLAY =Q2 +Q1 Q0
00 01 11 10
0 0 1 0
1 X X X
0
1
Q2
Q1- Q0
Q2
PLAY
PLAY =Q2 +Q1 Q0 PLAY =Q2 +Q1 Q0
00 01 11 10
0 0 1 0
1 X X X
0
1
Q2
Q1 Q0 Q1 Q0

Figura 16.9: Diagrama de Karnaugh y ecuacin de la salida Play
16.2.6. Modelo VHDL
Aunque slo se piden los tres procesos de la mquina de estados, se incluye todo el
diseoVHDL:laentidad(cdigo161)ylaarquitectura(cdigo162).

l i br ar y I EEE;
use I EEE. STD_LOGI C_1164. ALL;
use I EEE. NUMERI C_STD. ALL;

ent i t y mp3 i s
Por t ( Reset : i n STD_LOGI C;
Cl k : i n STD_LOGI C;
P : i n STD_LOGI C;
Pl ay : out STD_LOGI C;
Fw : out STD_LOGI C) ;
end mp3;

Cdigo 16-1: Entidad del circuito MP3
Departamento de Tecnologa Electrnica 123
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
ar chi t ect ur e Behavi or al of mp3 i s
- - el est ado no se puede l l amar PLAY ni FWpar a di f er enci ar l os de l os puer t os
t ype est ados i s ( I NI CI AL, ESP1S, ePLAY, eFW, ESP1S2) ;
si gnal est ado_act ual , est ado_si gui ent e : est ados;
si gnal T1S, enabl e : st d_l ogi c;
si gnal cuent a : unsi gned ( 23 downt o 0) ; - - 24 bi t s mayor que 10 mi l l ones
const ant cf i ncuent a : nat ur al : = 10**7; - - cont ar 10 mi l l ones
begi n

- - - - - - - - - - - - - - - - - - - - - - - - PROCESO COMBI NACI ONAL DEL ESTADO - - - - - - - - - - - - - - - - - - - -
P_COMB_ESTADO: Pr ocess ( est ado_act ual , T1S, P)
begi n
case est ado_act ual i s
when I NI CI AL =>
i f P = ' 1' t hen
est ado_si gui ent e <= ESP1S;
el se
est ado_si gui ent e <= est ado_act ual ;
end i f ;
when ESP1S =>
i f P = ' 0' t hen
est ado_si gui ent e <= ePLAY;
el si f T1S = ' 1' t hen
est ado_si gui ent e <= eFW;
el se
est ado_si gui ent e <= est ado_act ual ;
end i f ;
when ePLAY =>
i f P = ' 1' t hen
est ado_si gui ent e <= ESP1S2;
el se
est ado_si gui ent e <= est ado_act ual ;
end i f ;
when eFW=>
i f P = ' 0' t hen
est ado_si gui ent e <= ePLAY;
el se
est ado_si gui ent e <= est ado_act ual ;
end i f ;
when ESP1S2 =>
i f P = ' 0' t hen
est ado_si gui ent e <= I NI CI AL;
el si f T1S = ' 1' t hen
est ado_si gui ent e <= eFW;
el se
est ado_si gui ent e <= est ado_act ual ;
end i f ;
end case;
end pr ocess;

- - - - - - - - - - - - - - - - - - - - - - - - PROCESO COMBI NACI ONAL DE LAS SALI DAS ( MOORE) - - - - - - - - - - - - - - - -
P_COM_SALI DAS: Pr ocess ( est ado_act ual )
begi n
case est ado_act ual i s
when I NI CI AL =>
Pl ay <= ' 0' ;
Fw <= ' 0' ;
enabl e <= ' 0' ;
when ESP1S =>
Pl ay <= ' 0' ;
Fw <= ' 0' ;
enabl e <= ' 1' ;
when ePLAY =>
Pl ay <= ' 1' ;
Fw <= ' 0' ;
enabl e <= ' 0' ;
when eFW=>
Pl ay <= ' 0' ;
Fw <= ' 1' ;
enabl e <= ' 0' ;
when ESP1S2 =>
Pl ay <= ' 1' ;
Fw <= ' 0' ;
enabl e <= ' 1' ;
end case;
end pr ocess;
124 Universidad Rey J uan Carlos
16. Reproductor MP3

- - - - - - - - - - - - - - - - - - - - - - - - PROCESO SECUENCI AL - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
P_SEQ: Pr ocess ( Reset , Cl k)
begi n
i f Reset = ' 1' t hen
est ado_act ual <= I NI CI AL;
el si f Cl k' event and Cl k=' 1' t hen
est ado_act ual <= est ado_si gui ent e;
end i f ;
end pr ocess;

- - - - - - - - - - - - - - - - - - - - - - - - TEMPORI ZADOR - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
P_Tempo: Pr ocess ( Reset , Cl k)
begi n
i f Reset = ' 1' t hen
cuent a <= ( ot her s => ' 0' ) ;
T1S <= ' 0' ;
el si f Cl k' event and Cl k=' 1' t hen
i f enabl e = ' 1' t hen
i f cuent a < cf i ncuent a t hen
cuent a <= cuent a + 1;
T1S <= ' 0' ;
el se
cuent a <= ( ot her s => ' 0' ) ;
T1S <= ' 1' ;
end i f ;
el se
cuent a <= ( ot her s => ' 0' ) ;
T1S <= ' 0' ;
end i f ;
end i f ;
end pr ocess;
end Behavi or al ;
Cdigo 16-2: Arquitectura del circuito MP3
16.3. Solucin alternativa
Suele haber varias alternativas para disear un circuito digital. En el examen, varios
alumnosplantearonunasolucinsimilaralasiguiente(figura16.10):
MaqEst ados
Tempor i zador
P
PLAY
FW
Cl k
Reset
Cl k
Cl k
Reset
Reset
P+1S
P- 1S
P+1SEG
P- 1SEG
P se ha pulsado ms de 1 segundo
P se ha pulsado menos de 1 segundo
Sin embargo, esto no es un temporizador sino
otro mquina de estados que usa temporizador
MaqEst ados
Tempor i zador
P
PLAY
FW
Cl k
Reset
Cl k
Cl k
Reset
Reset
P+1S
P- 1S
P+1SEG
P- 1SEG
P se ha pulsado ms de 1 segundo
P se ha pulsado menos de 1 segundo
Sin embargo, esto no es un temporizador sino
otro mquina de estados que usa temporizador

Figura 16.10: Diagrama de bloques de la solucin alternativa
Sin embargo, fjate que el primer bloque (el llamado temporizador) es mucho ms que un
temporizador. Es una mquina de estados. Por lo tanto, al hacerlo de esta manera se
debendefinirlasdosmquinasdeestados:
Elesquematendraqueserelmostradoenlafigura16.11(osimilar).
Departamento de Tecnologa Electrnica 125
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
MaqEst ados2
MaqEst ados1
P
PLAY
FW
Cl k
Reset
Cl k
Cl k
Reset
Reset
P+1S
P- 1S
Ha pasado un segundo con el pulsador presionado.
Si mantengo pulsado, cada segundo que pase
volver a activarse, pero me da igual
Tempor i zador
Cl k
Reset
P- 1S
Enabl e F1S
MaqEst ados2
MaqEst ados1
P
PLAY
FW
Cl k
Reset
Cl k
Cl k
Reset
Reset
P+1S
P- 1S
Tempor i zador
Cl k
Reset
P- 1S
Enabl e F1S
Ha pasado un segundo con el pulsador presionado.
Si mantengo pulsado, cada segundo que pase
volver a activarse, pero me da igual

Figura 16.11: Diagrama de bloques ms detallado de la solucin alternativa

Por tanto, habra que definir las dos


mquinasdeestados.
Laprimeramquinadeestadossemuestra
en la figura 16.13. La interpretacin de las
entradas y salidas la tenemos en la figura
16.12.

Est ado
P+1S P- 1S
P F1s
entradas
Salidas
Est ado
P+1S P- 1S
P F1s
entradas
Salidas

Figura 16.12: Orden de entradas y salidas en la
representacin de la primera mquina de estados
1 0
Imposible
X 1
REPOSO
0 0
0 0
ESP1S
0 0
Nos mantenemos aqu
hasta que suelte el
pulsador o pase un
segundo
1 0
MENOS1S
0 1
0 X
Ha soltado el pulsador. Si
lo suelta a la vez que ha
llegado el segundo,
tambin consideramos que
lo ha soltado, por eso 0 X
X X
Slo estamos un ciclo de
reloj en MENOS1S (P-
1S='1'), nos vamos
directamente a reposo.
Podramos considerar que:
- F1S no puede ser 1
- P no puede ser 1 (no hay
rebotes y no es posibles
presionar tan rpido el
pulsador)
MAS1S
1 0
1 1
Nos quedamos aqu hasta
que suelte el pulsador. Nos
da igual recibir F1S
1 X
0 X
1 0
Imposible
X 1
Imposible
X 1
REPOSO
0 0
0 0
ESP1S
0 0
ESP1S
0 0
Nos mantenemos aqu
hasta que suelte el
pulsador o pase un
segundo
1 0
MENOS1S
0 1
MENOS1S
0 1
0 X
Ha soltado el pulsador. Si
lo suelta a la vez que ha
llegado el segundo,
tambin consideramos que
lo ha soltado, por eso 0 X
X X
MAS1S
1 0
MAS1S
1 0
1 1
Slo estamos un ciclo de
reloj en MENOS1S (P-
1S='1'), nos vamos
directamente a reposo.
Podramos considerar que:
- F1S no puede ser 1
- P no puede ser 1 (no hay
rebotes y no es posibles
presionar tan rpido el
pulsador)
Nos quedamos aqu hasta
que suelte el pulsador. Nos
da igual recibir F1S
1 X
0 X

Figura 16.13: Diagrama de la primera mquina de estados de la solucin alternativa


EsimportantenotarquelasealP- 1Sesactivaduranteunslociclodereloj,mientrasque
la seal P+1S est activa todo el tiempo que est pulsado P a partir de que ha pasado un
segundo.
126 Universidad Rey J uan Carlos
16. Reproductor MP3
Lasegundamquinadeestadossemuestraenla
figura 16.15. En la figura 16.14 tenemos la
interpretacin de las entradas y salidas. Esta
mquina de estados fue propuesta por muchos
alumnos, pero es necesario haber incluido la
primera,puescomopuedeapreciarse,laprimera
es algo ms complicada y no la segunda sola no
funcionaracomoindicaelenunciado.
Est ado2
PLAY FF
P+1S P- 1s
entradas
Salidas
Est ado2
PLAY FF
P+1S P- 1s
entradas
Salidas

Figura 16.14: Orden de entradas y salidas en la
representacin de la segunda mquina de estados
0 1
I NI C
0 0
0 0
PLAY
1 0
0 0
FF
0 1
1 0
1 0
La entrada
1 1
es imposible
para todos
los estados
0 1
1 0
0 0
0 1
I NI C
0 0
0 0
PLAY
1 0
PLAY
1 0
0 0
FF
0 1
1 0
1 0
0 1
1 0
0 0
La entrada
1 1
es imposible
para todos
los estados
La entrada
1 1
es imposible
para todos
los estados

Figura16.15:Diagramadelasegundamquinadeestadosdelasolucinalternativa

Departamento de Tecnologa Electrnica 127





17. Visualizacin del reproductor MP3
Esteproblemasepusoenelexamendel30deenerode2009yhacereferenciaalproblema
delcaptulo16.
17.1. Enunciado
Paraelejerciciodelcaptulo16,ahoraqueremosmostrarpor4displaysdesietesegmentos
el estado en que estamos. Para simplificar, para este ejercicio suponemos que slo
tenemostresestados:PAUSA,PLAY,FW(avancerpido).Yqueremosmostrarlossiguientes
caracteresporlos4displayssegnelestadoenqueestemos.
En Pausa
PAUS
En Play
PLAY
En avance rpido
FF
En Pausa
PAUS
En Play
PLAY
En avance rpido
FF

Figura 17.1: Texto que deben de mostrar los displays de siete segmentos
El funcionamiento de los displays es igual que el de la placa de
prcticas. Esto es, tenemos 4 nodos que controlan el encendido de
cadaunodelosdisplays:AN3,AN2,AN1,AN0.Recuerdaquefuncionana
nivel bajo. Y tenemos 7 puertos para los siete segmentos (SA, SB, SC,
SD,SE,SF,SG),yquetambinfuncionananivelbajo.
A
G
D
B
C
F
E
A
G
D
B
C
F
E

Figura 17.2:
Segmentos del display
Recuerda que slo tenemos 7 puertos para todos los segmentos y no 7x4=28 segmentos.
Por lo tanto, debes usar el mismo segmento para los cuatro displays (tal como lo hemos
hechoenprcticas).
Lasentradasysalidasdelcircuitosemuestranenlafigura17.3.Elrelojdelcircuito(Cl k)
vaa10MHz.
Di spl ay
est ado_act ual
( PAUSA, PLAY, FF)
AN( 3. . 0)
SEG( 6. . 0)
Cl k
( 10MHz)
Reset
Reset
4
7
Di spl ay
est ado_act ual
( PAUSA, PLAY, FF)
AN( 3. . 0)
SEG( 6. . 0)
Cl k
( 10MHz)
Reset
Reset
4
7

Figura 17.3: Esquema del circuito


Sepide:
a) Realizar el esquema interno del circuito, indicando los bloques y explicando su
funcionamiento.
b) RealizarelmodeloVHDLdelaarquitecturacircuito
Departamento de Tecnologa Electrnica 129
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
17.2. Solucin
Laprcticadelcontadorautomticoylaexpendedora(apartado12.2)sonsimilaresaeste
circuito.Laexplicacindetalladadecmohacerestecircuito(multiplexareneltiempo)se
encuentraenlaprcticadelcontadorautomtico(apartado6.3.2).
17.2.1. Esquema interno del circuito
Elesquemadelcircuitosemuestraenlafigura17.4
Cont a1ms
4
Cl k
( 10MHz)
Reset
Reset
T1ms
Cont a4ms
Reset
Reset
Cuent a4ms( 1. . 0)
Codi f i caci n de est ados:
Pausa 00
Pl ay 01
FF 10
00
01
10
11
est ado_act ual
SEG3
"P"
"P"
" "
7
no se usa
00
01
10
11
SEG2
"A"
"L"
" "
7
no se usa
00
01
10
11
SEG1
"U"
"A"
"F"
7
no se usa
00
01
10
11
SEG0
"S"
"Y"
"F"
7
no se usa
P. ej : "P" :
"0001100"
GFEDCBA
" 0001100"
" 0001100"
" 1111111"
" 1111111"
" 1111111"
" 1111111"
" 0001000"
" 1000111"
"0001110"
" 0001000"
" 1000001"
" 0001110"
" 0010001"
" 0010010"
"1111111" " 1111111"
00
01
10
11
SEG
SEG0
SEG1
SEG2
7
SEG3
00
01
10
11
AN
"1110"
"1101"
"1011"
4
"0111"
Esto es un
decodificador
Cont a1ms
4
Cl k
( 10MHz)
Reset
Reset
T1ms
Cont a4ms
Reset
Reset
Cuent a4ms( 1. . 0)
Codi f i caci n de est ados:
Pausa 00
Pl ay 01
FF 10
00
01
10
11
est ado_act ual
SEG3
"P"
"P"
" "
7
no se usa
00
01
10
11
SEG2
"A"
"L"
" "
7
no se usa
00
01
10
11
SEG1
"U"
"A"
"F"
7
no se usa
00
01
10
11
SEG0
"S"
"Y"
"F"
7
no se usa
P. ej : "P" :
"0001100"
GFEDCBA
" 0001100"
" 0001100"
" 1111111"
" 1111111"
" 1111111"
" 1111111"
" 0001000"
" 1000111"
"0001110"
" 0001000"
" 1000001"
" 0001110"
" 0010001"
" 0010010"
"1111111" " 1111111"
00
01
10
11
SEG
SEG0
SEG1
SEG2
7
SEG3
00
01
10
11
AN
"1110"
"1101"
"1011"
4
"0111"
Esto es un
decodificador

Figura 17.4: Esquema del circuito de visualizacin


17.2.2. Modelo en VHDL
AcontinuacinsemuestraelcdigoVHDLqueimplementaelcircuitodelafigura17.4.
ar chi t ect ur e Behavi or al of t emp_mux i s
- - l os 4 di spl ays, pr epar ados par a ser most r ados segun l a cuent a
si gnal SEG0, SEG1, SEG2, SEG3 : st d_l ogi c_vect or ( 6 downt o 0) ;
si gnal cuent a : unsi gned ( 13 downt o 0) ; - - par a cont ar hast a 10. 000
const ant cf i ncuent a : nat ur al : = 10000;
si gnal f i n1mi l i : st d_l ogi c;
si gnal cuent a4mi l i s : unsi gned ( 1 downt o 0) ;
begi n

130 Universidad Rey J uan Carlos


17. Visualizacin del reproductor MP3
- - - pr oceso que segun el est ado asi gna a l os 4 di spl ays i nf or maci on di f er ent e.
- - Si PAUSA muest r a " PAUS" - Si PLAY muest r a " PLAY" - Si FW muest r a " FF"
P_QUE_MUESTRO: Pr ocess ( est ado_act ual )
begi n
case est ado_act ual i s
when PAUSA =>
- - GFEDCBA
SEG3 <= " 0001100" ; - - P
SEG2 <= " 0001000" ; - - A
SEG1 <= " 1000001" ; - - U
SEG0 <= " 0010010" ; - - S
when PLAY =>
SEG3 <= " 0001100" ; - - P
SEG2 <= " 1000111" ; - - L
SEG1 <= " 0001000" ; - - A
SEG0 <= " 0010001" ; - - Y
when FW=>
SEG3 <= " 1111111" ; - - nada
SEG2 <= " 1111111" ; - - nada
SEG1 <= " 0001110" ; - - F
SEG0 <= " 0001110" ; - - F
end case;
end pr ocess;
- - - - - - cont amos un mi l i segundo, como el r el oj va a 10 MHz, t enemos que cont ar 10000.
P_Cont a_1mi l i : Pr ocess ( Reset , Cl k)
begi n
i f Reset = ' 1' t hen
cuent a <= ( ot her s => ' 0' ) ;
f i n1mi l i <= ' 0' ;
el si f Cl k' event and Cl k=' 1' t hen
i f cuent a < cf i ncuent a t hen
cuent a <= cuent a + 1;
f i n1mi l i <= ' 0' ;
el se
cuent a <= ( ot her s => ' 0' ) ;
f i n1mi l i <= ' 1' ;
end i f ;
end i f ;
end pr ocess;
- - - - Ahor a cont amos cuat r o cuent as de f i n1mi l i
P_Cont a_4mi l i s: Pr ocess ( Reset , Cl k)
begi n
i f Reset = ' 1' t hen
cuent a4mi l i s <= ( ot her s =>' 0' ) ;
el si f Cl k' event and Cl k=' 1' t hen
i f f i n1mi l i = ' 1' t hen
i f cuent a4mi l i s = 3 t hen
cuent a4mi l i s <= ( ot her s => ' 0' ) ;
el se
cuent a4mi l i s <= cuent a4mi l i s + 1;
end i f ;
end i f ;
end i f ;
end pr ocess;
- - - - ahor a, gober nados por cuent a4mi l i s, cada mi l i segundo most r amos un di spl ay
- - di f er ent e. Y a l a vez, damos l a or den de act i var el anodo cor r espondi ent e
P_Muest r a_di spl ay: Pr ocess ( cuent a4mi l i s, SEG3, SEG2, SEG1, SEG0)
begi n
case cuent a4mi l i s i s
when " 00" =>
SEG <= SEG0;
AN <= " 1110" ;
when " 01" =>
SEG <= SEG1;
AN <= " 1101" ;
when " 10" =>
SEG <= SEG2;
AN <= " 1011" ;
when ot her s =>
SEG <= SEG3;
AN <= " 0111" ;
end case;
end pr ocess;
end Behavi or al ;
Cdigo 17-1: Arquitectura del circuito de visualizacin del MP3
Departamento de Tecnologa Electrnica 131



18. Robot rastreador
Esteproblemasepusoenelexamendel9deseptiembrede2009.
18.1. Enunciado
Queremosrealizarelcontroldeunrobotrastreador,estoes,
un coche que sigue una lnea negra sobre un suelo blanco.
Para ello disponemos de un coche elctrico de juguete y
queremosrealizarelcircuitoelectrnicoquecontroleelgiro
delcoche(derechaoizquierda).
Para saber si el coche est sobre la lnea negra o no, se
ponendosdetectoresdeinfrarrojosenlapartedelanteradel
coche (ver figura de la derecha). Los detectores de
infrarrojos estn juntos y centrados en el alern delantero
delcoche.ElreceptorqueestalaizquierdaselellamarRI
yeldeladerechaRD.
Sinentraraexplicarelfuncionamientodelosdetectoresde
infrarrojos,lonicoquenosimportaparaesteproblemaes
que los detectores dan un cero cuando estn sobre la lnea
negra (ya que la luz emitida no se refleja) y devuelven un
unocuandoestnsobreelsueloblanco(porquesereflejala
luz).

RI : receptor
izquierdo
RD: receptor
derecho
Rueda
delantera
izquierda
Rueda
trasera
izquierda
RI : receptor RD: receptor
izquierdo derecho
Rueda
delantera
izquierda
Rueda
trasera
izquierda

Figura 18.1: Coche visto desde


arriba

As que usaremos las salidas de los detectores de infrarrojos como entradas de nuestro
sistema de control. Por lo tanto, nuestro sistema de control tendr dos entradas: RI y RD,
queindicanlosvaloresdevueltosporlosreceptoresizquierdoyderechorespectivamente.
Como se muestra en la figura de la derecha, nuestro
sistema tendr dos salidas: GI y GD, que dan la orden de
girar a la izquierda o derecha, respectivamente. Por
ejemplo: GD=' 1' ser la orden de girar a la derecha. Si las
dos estn a cero significa que el coche debe ir recto.
Obviamente, nunca se deber dar la orden de girar a la
derechaeizquierdasimultneamente.
RI
RD
GI
GD
Cl k
Reset
RI
RD
GI
GD
Cl k
Reset

Figura 18.2: Esquema de entradas


y salidas del sistema de control
Elobjetivoesdirigirelgirodelcochedelasiguientemanera:
1. Cuandolosdosreceptoresestnsobrelalneanegra,elcocheestdondedebeestary
porlotantonosedebengirarlasruedas(GI =' 0' yGD=' 0' ).Verfigura18.3.A.
2. Cuando uno de los receptores no est sobre la lnea negra (se recibe un 1 de dicho
receptor),sedebegirardemodoquesecorrijaladesviacin.Estoes:
2.1. Si el receptor de la izquierda no est sobre la lnea negra pero el receptor de la
derecha s est, el coche se est saliendo por la izquierda y deber girar a la
derecha.Verfigura18.3.B.
Departamento de Tecnologa Electrnica 133
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
2.2. Si el receptor de la derecha no est sobre la lnea negra pero el receptor de la
izquierda s est, el coche se est saliendo por la derecha y deber girar a la
izquierda.
3. Cuandoningunodelosreceptoresestnsobrelalneanegra,significaqueelcochese
ha salido completamente y deber de corregir la desviacin segn por el lado por
dondesehayasalido.Verfigura18.3.C
RI =' 0' RD=' 0'
Sobre la lnea
RI =' 1' RD=' 0'
por la izquierda
Se va de la lnea
No giro
giro derecha
RI =' 1' RD=' 1'
Se va del todo por la izquierda
giro derecha
A B C
RI =' 0' RD=' 0'
Sobre la lnea
RI =' 1' RD=' 0'
por la izquierda
Se va de la lnea
No giro
giro derecha
RI =' 1' RD=' 1'
Se va del todo por la izquierda
giro derecha
A B C

Figura 18.3: Distintas posiciones del coche respecto a la lnea


o de la lnea negra es mayor
anchodelosdosreceptoresjuntos.Portantonuncasepodrpasardeestarsobre
b
El o que la mecnica del coche y su
r sreceptoressobrelalneaa
ar arconunreceptorsobrela
Existe ente(Reset ),peronosedebedepresionar
namientonormaldelcircuito.
Alempezarseponeelcochealineado.Estoes,losdosreceptoresestarnsobrelalnea
olaremos,asquenonosimporta.

dos del sistema de control de giro del coche


. Realizar el diagrama de estados de la
ntrolaelcircuito.
Datosadicionalesdelsistema:
Los dos receptores estn lo ms juntos posible y el anch
queel
solamenteunreceptoraestarsobresloelotroreceptor.Estoes,entremediassiempre
ha runmomentoenelqueseestarsobrelosdosreceptores
reloj del circuito (Cl k) es mucho ms rpid
movimiento.
Po estoltimo,nuncapodremospasardeestarconlosdo
est totalmentefueradelalnea.Entremediaselcocheest
lneayelotrono.
unpulsadorpararesetearasncronam
duranteelfuncio
negra.
La velocidad del coche va a ser constante y para esta versin del coche no la
utilizaremosnilacontr
Se pide:
a) Especificar las entradas, salidas y esta
considerndolo como mquina de Moore
mquinadeestadosqueco
134 Universidad Rey J uan Carlos
18. Robot rastreador
b) Latabladeestadossiguientesysalidas
ebiestablesparabiestablesJK
tradasJdedosdelosbiestables
pidenlasentradasK)
18
c) Latabladeexcitacind
d) Ecuacionessimplificadasparalassalidasyparalasen
delcircuito(nose
.2. Solucin
18. s. Diagrama de estados
La trolsonlasmismasquelasdelafigura18.2que
se

RD:receptordeinfrarrojosdeladerecha.
Paraambas,losvaloresson:
0:siestsobrelalnea
1:siestfueradelalnea
Lascuatrocombinacionessonposibles(verfigura18.4)
Dossalidas(GI,GD)
GI =' 1' :Ordenparagiraralaizquierda.
GD=' 1' :Ordenparagiraraladerecha.
Lasposiblessa
( GI , GD) = ( 1, 1) Nosedebeponernunca
2.1. Entradas, salidas y estado
sentradasysalidasdelsistemadecon
pusoenelenunciado.
Dosentradas(RI , ): RD
RI :receptordeinfrarrojosdelaizquierda.
lidasson:
( GI , GD) = ( 1, 0) Giroalaizquierda
( GI , GD) = ( 0, 1) Giroaladerecha
( GI , GD) = ( 0, 0) Recto
RI =' 1' RD=' 1'
Ms all izquierda
GI =' 0' GD=' 1'
A
RI =' 1' RD=' 0'
A la izquierda
GI =' 0' GD=' 1'
RI =' 0' RD=' 0'
Centrado
GI =' 0' GD=' 0'
RI =' 0' RD=' 1'
A la derecha
GI =' 1' GD=' 0'
RI =' 1' RD=' 1'
Ms all derecha
GI =' 1' GD=' 0'
B C D E
No giro Giro a la dere a la izquierda cha Giro
RI =' 1' RD=' 1'
Ms all izquierda
GI =' 0' GD=' 1'
A
A la izquierda Centrado A la derecha
RI =' 1' RD=' 0'
GI =' 0' GD=' 1'
RI =' 0' RD=' 0'
GI =' 0' GD=' 0'
RI =' 0' RD=' 1' RI =' 1' RD=' 1'
Ms all derecha
GI =' 1' GD=' 0' GI =' 1' GD=' 0'
B C D E
No giro Giro a la dere a la izquierda

Figu n de los receptores respe y giro
Ahora hay que realizar el diagrama de transicin de estados. Recordamos que en este
apartadohayquerealizarlocomounamquinadeMoore.
Elordendelasentradasysalidaseneldiagramaserelsiguiente(figura18.5):
cha Giro
ra 18.4: Posici cto a la lnea
Departamento de Tecnologa Electrnica 135
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
Est ado
GI GD
RI RD
entradas
Salidas
Est ado
GI GD
RI RD
entradas
Salidas

Figura 18.5: Orden de entradas y salidas en el diagrama de estados
FjatequeesunamquinadeMoore,porloquelassalidasestnenelpropioestado.
Inicialmente partim que el enunciado os del estado CENTRO, en donde RI =' 0' y RD=' 0' , ya
dicequealprincipiosecolocaelcochesobrelalnea.Enesteestadosemantieneelcoche
singirar,hastaqueunodelosreceptorescambiea1.
En Centro:
Imposible
1 1
CENTRO
0 0
0 0
0 1 1 0
S
la derecha
le por
la izquierda
En Centro:
e sale por Se sa
Imposibl
1 1
e
CENTRO
0 0
0 0
0 1 1 0
S
la derecha
le por
la izquierda

Figura 18.6: Estado inicial y sus transiciones


Estando en CENTRO, si el detector RI se pone a uno significa que nos salimos por la
izquier ura18.4.B).Yporlotanto,hayquegiraraladerecha.L ocurre
sielde ponea1.Loquenopuedeocurrirnuncaesqueesta lalnea
ambos receptores se pongan a la vez los dos a uno, pues primero se debe poner uno y
luego el otro. Para ello creamos un estado I ZQ al que vamos cuando desde CENTRO el
receptor RI se pone a 1. En este estado, el giro se hace a la derecha. Saldremos este
estadocuandohayamo ro(ambosreceptoresa
e sale por Se sa
da(verfig ocontrario
tectorRDse ndosobre
de
scorregidoladesviacinyvolvamosalcent
0).Lomismoocurresielcochesedesvaaladerecha.
En Centro:
Imposible
1 1
CENTRO
En Centro:
Imposible
1 1
0 0
0 0
0 1 1 0
I ZQ
0 1
DCHA
1 0
1 0 0 1
CENTRO
0 0 0 0
0 0
0 0
0 1 1 0
I ZQ
0 1
DCHA
1 0
1 0 0 1
0 0 0 0

Figura 18.7: Estados con un detector sobre la lnea y otro fuera


Sin embargo, puede ocurrir, que estando en los estados I ZQ o DCHA el coche se salga
totalmente de la lnea. Eso lo sabremos porque ambos receptores estn a 1. Para ello
crearemoslosestadosF_I ZQyF_DCHA(deFueraIZQuierdayFueraDereCHA).
136 Universidad Rey J uan Carlos
18. Robot rastreador
En Centro:
Imposible
1 1
CENTRO
0 0
0 0
0 1 1 0
I ZQ
0 1
DCHA
1 0
1 0 0 1
0 0 0 0
F_I ZQ
0 1
1 1
1 0
1 1
En IZQ
Imposible
0 1
En DCHA
Imposible
1 0
F_DCHA
1 0
0 1
1 1
1 1
0 1
0 0
En F_IZQ
Imposible
En F_DCHA
Imposible
1 0
0 0
En Centro:
Imposible
1 1
CENTRO
0 0
0 0
0 1 1 0
I ZQ
0 1
DCHA
1 0
1 0 0 1
0 0 0 0
F_I ZQ
0 1
1 1
1 0
1 1
En IZQ
Imposible
0 1
En DCHA
Imposible
1 0
F_DCHA
1 0
0 1
1 1
1 1
0 1
0 0
En F_IZQ
Imposible
En F_IZQ
Imposible
0 1
0 0
En F_DCHA
Imposible
1 0
0 0
En F_DCHA
Imposible
1 0
0 0

Figura 18.8: Diagrama de estados final sin reducir


Eldiagramadelafigura18.8podrasereldefinitivo.Sinembargo,podemosfijarnosque
en realidad los estados F_I ZQ y F_DCHA no son necesarios ya que tienen la misma salida
queI ZQyDCHArespectivamente,yendichosestados,lasmismasentradasconducenalos
mismosestados(osonentradasimposibles).Asquesepodrasimplificarenelmostrado
enlafigura18.9.
En Centro:
Imposible
1 1
CENTRO
0 0
0 0
0 1 1 0
I ZQ
0 1
DCHA
1 0
1 X X 1
0 0 0 0
En IZQ
Imposible
0 1
En DCHA
Imposible
1 0
En Centro:
Imposible
1 1
CENTRO
0 0
0 0
0 1 1 0
I ZQ
0 1
DCHA
1 0
1 X X 1
0 0 0 0
En IZQ
Imposible
0 1
En IZQ
Imposible
0 1
En DCHA
Imposible
1 0
En DCHA
Imposible
1 0

Figura 18.9: Diagra dos final reducido


Este diagrama no se puede simplificar m e cada estado tiene una salida distinta.
18.2.2. Tabla de estados siguientes y salidas
Antesdenadatenemosque calcularelnmero debiestablesque
necesitamos y asignarles unos valores. Como tenemos 3 estados,
nos vale con dos biestables. Asignaremos los mismos valores de
los estados que de las salidas, pero vale cualquier otra
combinacin.Laasignacinsemuestraenlatabla18.1.
ma de esta
s ya qu
DisendolocomomquinadeMealyssepodrasimplificarms(peronosepedaenel
examen).
Est ado Q1 Q0
CENTRO 0 0
I ZQ 0 1
DCHA 1 0
Est ado Q1 Q0
CENTRO 0 0
I ZQ 0 1
DCHA 1 0

Tabla 18.1: Codificacin
de estados
Latabladeestadossiguientesysalidassemuestraenlatabla18.2.
Departamento de Tecnologa Electrnica 137
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
Q1 Q0 RI RD GI GD Q1 Q0
0 0 0 0 0 0 0 0
0 0 0 1 0 0 1 0
0 0
0
1 0 0 0 0 1
0 1 1 0 0 X X
0 1 0 0 0 1 0 0
0 1 0 1 0 1 X X
0 1 1 0 0 1 0 1
0 1 1 1 0 1 0 1
1 0 0 0 1 0 0 0
1 0 0 1 1 0 1 0
1 0 1 0 1 0 X X
1 0 1 1 1 0 1 0
1 1 X X X X X X
Estado
actual Entradas Salidas
Estado
siguiente
t+1 t+1
CENTRO
I ZQ
DCHA
Sin usar (imposible)
condiciones imposibles
condiciones imposibles
condiciones imposibles
Moore: Slo
dependen del estado
Q1 Q0 RI RD GI GD Q1 Q0
0 0 0 0 0 0 0 0
0 0 0 1 0 0 1 0
0 1 0 0 0 0 1
0 1 1 0 0 X X
0 1 0 0 0 1 0 0
0 1 0 1 0 1 X X
0 1 1 0 0 1 0 1
0 1 1 1 0 1 0 1
1 0 0 0 1 0 0 0
1 0 0 1 1 0 1 0
1 0 1 0 1 0 X X
1 0 1 1 1 0 1 0
1 1 X X X X X X
0
0
Estado
actual Entradas Salidas
Estado
siguiente
t+1 t+1
CENTRO CENTRO
I ZQ I ZQ
DCHA DCHA
Sin usar (imposible)
condiciones imposibles condiciones imposibles
condiciones imposibles condiciones imposibles
condiciones imposibles condiciones imposibles
Moore: Slo
dependen del estado

Tabl .2: Tabla de estados siguientes y salida


18.2.3. Tabl
atabladeexcitacindelosbiestableslapodramoshaberrellenadoenlatabla18.2.Para
saber las ecuaciones de las entradas de los biestables necesitamos saber qu necesitamos
para lograr cada una de las transiciones. Como nos piden hacerlo con biestables JK,
ponemossutabla,yapartirdeellaobtenemoslasentradasJyKparalascuatroposibles
transiciones.
a 18 s
a de excitacin de biestables para biestables J-K
L
J K Q( t +1)
0 0 Q( t )
0 1 0
1 0 1
1 1 Q( t )
Q(t) Q(t+1) J K
0 0 0 X
0 1 1 X
1 0 X 1
1 1 X 0
J K Q( t +1)
0 0 Q( t )
0 1 0
1 0 1
1 1 Q( t )
Q(t) Q(t+1) J K
0 0 0 X
0 1 1 X
1 0 X 1
1 1 X 0
Q(t) Q(t+1) J K
0 0 0 X
0 1 1 X
1 0 X 1
1 1 X 0

Tabla 18.3: Tabla de entradas necesarias para obtener una transicin en biestables J-K
Ahora nos fijamos en la tabla de los estados siguientes (tabla 18.2) paraver encada caso
qutransicioneshayyquvaloresenlasentradasdelosbiestablesJKnecesitamos.
138 Universidad Rey J uan Carlos
18. Robot rastreador
Q1 Q0 RI RD GI GD Q1 Q0 J 1
0 0 0 0 0 0 0 0
K1 J 0 K0
0 X 0 X
0 0 0 1 0 0 1 0 1 X 0 X
0 0 1 0 0 0 0 1 0 X 1 X
0 0 1 1 0 0 X X X X X X
0 1 0 0 0 X 1 0 X
1 0 X 0 0 X
X X X X X X
0 X 0 0 X
X X X X X X
0 1 0 0 0 1 0 0 0 X X 1
0 1 0 1 0 1 X X X X X X
0 1 1 0 0 1 0 1 0 X X 0
0 1 1 1 0 1 0 1 0 X X 0
1 0 0
1 0 0 1 1 0
1 0 1 0 1 0
1 0 1 1 1 0 1
1 1 X X X X
Estado
actual Entradas Salidas
Estado
siguiente
t+1 t+1
Moore: Slo
dependen del estado
Entradas en los
biestables para
conseguir las
transiciones QiQi
t+1
K1 J 0 K0
0 X 0 X
0 0 0 1 0 0 1 0 1 X 0 X
0 0 1 0 0 0 0 1 0 X 1 X
0 0 1 1 0 0 X X X X X X
0 1 0 0 0 X 1 0 X
1 0 X 0 0 X
X X X X X X
0 X 0 0 X
X X X X X X
Q1 Q0 RI RD GI GD Q1 Q0 J 1
0 0 0 0 0 0 0 0
CENTRO
I ZQ
DCHA
Sin usar (imposible)
0 1 0 0 0 1 0 0 0 X X 1
0 1 0 1 0 1 X X X X X X
0 1 1 0 0 1 0 1 0 X X 0
0 1 1 1 0 1 0 1 0 X X 0
1 0 0
1 0 0 1 1 0
1 0 1 0 1 0
1 0 1 1 1 0 1
1 1 X X X X
Estado
actual Entradas Salidas
Estado
siguiente
t+1 t+1
CENTRO CENTRO
I ZQ I ZQ
DCHA DCHA
Sin usar (imposible)
Moore: Slo
dependen del estado
Entradas en los
biestables para
conseguir las
transiciones QiQi
t+1

btener una transicin en biestables J-K


18.
Las
bie
GD = Q0
Para los mapas deKarnaugh. Se muestranen la
Tabla 18.4: Tabla de excitacin de los necesarias para o
2.4. Ecuaciones simplificadas
ecuaciones de las salidas son inmediatas porque las hemos hecho coincidir con los
stablesdelosestados.Aspues:
GI = Q1
las entradas de los biestables utilizamos
figura18.10,seincluyenlasK,aunquenosepedan.
RI - RD
J1
Q1- Q0
J 1=RIRD
00 01 11 10
0 1 X 0
0 X 0 0
00
01
X X X X
X X X X
11
10
RIRD
RI - RD
K1
Q1- Q0
00 0 11 10 1
X X X X
X X X X
00
01
X X X X
1 0 0 X
11
RI - RD
J0 RI - RD
J1 00 01 11 10
10
Q1- Q0
0 0 X 1
X X X X
00
01
X X X X
0 0 0 X 10
11
K1=RD
RIRD
J 0=RIRD
RI - RD
Q1- Q0
K0
K0=RI
00 01 11 10
X X X X
1 X 0 0
00
01
X X X X
X X X X
11
10
RI
RD
Q1- Q0
J 1=RIRD J 1=RIRD J 1=RIRD
00 01 11 10
0 1 X 0
0 X 0 0
00
01
X X X X
X X X X
11
10
00 01 11 10
0 1 X 0
0 X 0 0
00
01
X X X X
X X X X
11
10
RIRD RIRD
RI - RD
K1
Q1- Q0
00 0 11 10 1
X X X X
X X X X
00
01
X X X X
1 0 0 X
11
1
10
00 0 11 10
X X X X
X X X X
00
01
X X X X
1 0 0 X
11
RI - RD
J0
00 01 11 10
0 0 X 1
X X X X
00
01
10
Q1- Q0
X X X X
0 0 0 X 10
11
00 01 11 10
0 0 X 1
X X X X
00
01
X X X X
0 0 0 X 10
11
K1=RD K1=RD
RIRD
J 0=RIRD J 0=RIRD
RI - RD
Q1- Q0
K0
K0=RI K0=RI
00 01 11 10
X X X X
1 X 0 0
00
01
X X X X
X X X X
11
10
00 01 11 10
X X X X
1 X 0 0
00
01
X X X X
X X X X
11
10
RI
RD RD

s de Karnaugh y ecuaciones de las entradas de los biestables Figura 18.10: Mapa

Departamento de Tecnologa Electrnica 139





19. Teclado de telfono mvil
Esteproblemasepusoenelexamendel9deseptiembrede2009.
19.1. Enunciado
Sequiererealizarelcircuitodeunatecladetelfonomvilquefuncionecomocuandose
implificar, se va a realizar el circuito para una
irloscaracteres:A,B,2(parasimplificarhemos
selsiguiente:
e esepulsalateclaP.
rlaletraA,debopulsarPunavez.
r P dos veces rpidamente. En la pantalla se
l , andovuelvo se
ndavez,sefijaraelva
n).
dola
carcter
correspondientealasecuencia:AB2
Si pulsase P cuatro veces rpidamente obtendra de nuevo la letra A. Ya que la
secuencia es circular: AB2AB2A.... Obteniendo el carcter correspondiente segn
Si despu do P, no vuelvo
segundo o ms, se fija el ltimo carcter qu
estadoinicial(paraescribirenlasiguienteposicin).
ito:

escriben mensajes de texto (sms). Para s


nicateclaydichateclaservirparaescrib
eliminadolaletraCyotroscaracteres).
Elfuncionamientoresumidodelcircuitoe
Inicialmentenosemu stranadahastaqu
Siquieroescribi
Si quiero escribir la letra B, debo pulsa
muestraAalpulsar aprimeravez ycu
muchoenpulsarlasegu
apulsarsemuestraB.Sitarda
lordeA(ysevolveraaempezarpara
escribirenlasiguienteposici
SipulsoPtresvecesrpidamenteobtengoelnmero2(recuerdaquehemosquita
letra C para simplificar). Cada vez que he pulsado P, se habr mostrado el
elnmerodevecesquepulse.
s de haber pulsa a pulsar P durante un intervalo un
e se tenga, y a continuacin se vuelve al
de
Encualquierestado,simantengoPpulsadoduranteunsegundooms,sefijaelvalor
numrico (2) y al soltar P se vuelve al estado inicial (para escribir en la siguiente
posicin).
Acontinuacinsemuestranlasentradasysalidasdelcircu
Entradas(ademsdelrelojyreset):
P: Pulsador de la tecla del mvil (recuerda que en
estemvilparasimplificarslotenemosunatecla)
Salidas:
A:MostrarelcarcterA
B:MostrarelcarcterB
DOS:Mostrarelnmero2
P B
A
Cl k
Reset
DOS
LI STO
P B
A
Cl k
Reset
DOS
LI STO

Figura 19.1: Esquema de


entradas y salidas del sistema
de control
(A, B, DOS) est listo para
sar a la siguiente posicin. Slo est activa durante un ciclo de
LISTO: Indica que el carcter indicado por una de las salidas
fijarlo, y se deber pa
reloj.
Departamento de Tecnologa Electrnica 141
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
El uncionamientodetalladocontiemposeselsiguiente: f
os de un
pulsarP,lasotrassalidasB, DOS, LI STOsequedanacero.
ior, la salida LI STOslo se debe mantener activa durante un ciclo de
slocualelsistemavuelvealestadoinicial,dondetodaslassalidasseponena
B, DOSyLI STO).
Sinembargo,sihepulsadoP,(haciendoque, A, A=' 1' ),y
vuelvoapulsarPantesdequetranscurraunsegundo,seactivarlasiguientesalidaen
lasecuencia(porejemplo,siAestabaauno;sepondrA=' 0' yB=' 1' ).Elrestodesalidas
semantienenacero.
En cualquier estado, si pulso P durante un segundo o m
LI STO=' 1' .Estoocurreduranteunciclodereloj,luegosepo ssalidasacero,
ynosehacenadahastaquesedejedepulsarP.Aldejarde alestado
inicial.
De las salidas de caracteres: A, B y DOS slo puede haber una de ellas activa
simultneamente.Sp
se pide mostrar nada en
ernos.
b) Encorrespondenciaconloanterior,dibujareldiagramadeestadosdelamquinade
Mealyquecontrolaelcircuito.
Nosepiderealizarlatabladeestados.
Inicialmentenosemuestraningncarcter(lascuatrosalidasacero),enesteestadose
esperaaquesepulseP.
Si desde el estado inicial se pulsa P mantenindola presionada durante men
segundo, se muestra el carcter A (A=' 1' ). La salida A se pone a uno desde que se
comienzaa
SiunavezquehepulsadoP,novuelvoapulsarP,transcurridounsegundoelvalorse
fija.Estoes:LI STO=' 1' ysemantienelaltimasalidaqueestabaauno:A, BDOS.
En el caso anter
reloj,tra
cero(A,
porejemplo,sehayaactivado
s, se fija el 2: DOS=' 1' y
nentodasla
pulsarPsevuelve
Consideraciones:
Lasealderelojvaa1MHz
La seal de reset es activa a nivel alto y no se usa en el funcionamiento normal del
circuito
,
uedeserqueningunadeellasestactiva.
La entrada P no tiene rebotes. Por tanto, con la frecuencia del reloj que se tiene, ser
imposiblepulsarlateclaPduranteunslociclodereloj,lospulsossernbastantems
largos.
Todas las entradas y salidas del circuito son de un bit, no
displaysdesietesegmentos.
Sepide:
a) Dibujar los bloques internos del circuito, con entradas, salidas y las seales
intermedias que se vayan a usar. Indicar la funcin de cada uno de los bloques
int
142 Universidad Rey J uan Carlos
19. Teclado de telfono mvil
19.2. Solucin
19.2.1. Bloques internos del circuito
Para realizar este circuito necesitamos una mquina de estados y un temporizador que
nos permitir medir si ha transcurrido un segundo despus de pulsar la tecla P y si se
mantiene resionadadurantemsdeunsegundo.
Elcircuitotienedosbloques:lamquina
deestadosyuntemporizador.
Delamquinadeestadossaleunaseal
in
contador
La
un segundo desde que E se ha
mantenidoac
lateclap
MaqEst ados
termedia E que va al temporizador.
Esta seal funciona como habilitacin
(enable)demodoquecuandoEescero,el
se pone a cero y no cuenta,
mientras que cuando E es uno, se
habilitalacuenta.
sealTindicacundohatranscurrido
tivo(E=' 1' ).
Tempor i zador
P
T
E
A
B
Cl k Cl k
Reset
Cl k
Reset
Re et s
T
E
T
P
DOS
LI STO LI STO
A
B
E
DOS
MaqEst ados
Tempor i zador
P
T
E
A
B
T
P
DOS
Cl k Cl k
Reset
Cl k
Reset
Re et s
T
E
LI STO LI STO
circuito
tadosusaremoselsiguienteordendeentradasysalidas
A
B
DOS
E
Figura 19.2: Bloques internos del
19.2.2. Diagrama de estados
Paraeldiagramadees
entradas
Est ado
P T / A B DOS LI STO E
entradas
Salidas
Est ado
P T / A B DOS LI STO E
entradas
Salidas

gura 19.3: Orden de entradas y salidas en el


diagrama de estados
Est ado
Fi
P T / A B D L E
Salidas
entradas
Est ado
P T / A B D L E
Salidas

Figura 19.4: Orden de entradas y salidas en el


diagrama de estados. Salidas con iniciales para
simplificar
Co de
pon rn
comoceros.FjatequeesunamquinadeMealy.
Empezamosahacerdeldiagramasegnlasinstrucciones:
PartimosdelestadoI NI CI AL,dondeesperamosaquese
pulse P, todas las salidas estn a cero, incluida la
habilitacin del contador, porque ahora no hay que
contarsegundos(elusuariopuedetardarloquequiera
enescribiruncarcter).
Como la habilitacin del temporizador est a cero
(E=' 0' ),serimposiblequeTseauno.
NosquedamosenelestadoI NI CI ALhastaquesepulse
P,cuandoestoocurretenemosqueactivarlasalidaAy
eltemporizador(E=' 1' )
mo hay muchas salidas, para que el diagrama sea ms fcil de entender, en vez
erunos,sevanaponerlasinicialesdelasseales(figura19.4).Loscerossepond
I NI CI AL
00/ 00000
En INICIAL
Imposible
T=' 1'
X 1
P0/ A000E
I NI CI AL
00/ 00000
En INICIAL
Imposible
T=' 1'
X 1
En INICIAL
Imposible
T=' 1'
X 1
P0/ A000E
Figura 19.5: Estado inicial
CuandosehapulsadoP,tenemosqueverdurantecuntotiemposepulsaP:
Departamento de Tecnologa Electrnica 143
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
Sisepulsaduranteunsegundooms,indicaquetenemosq nmero2.
Sisepulsamenosdeunsegundo,hemoselegidolaletraA, squeseguir
haciendocomprobaciones.Estoocurrecuandolasentradasso P, T) oes,latecla
siguepresionadayacabadellegarlasealdequehapasadounsegundo(T).
cumplenningunadeestasdos,seguimosesperando,ylasentradasparaesto
son(P, 0)
Para comprobar esto, creamos un estado ESP_S_A (ESPera a Soltar, A) que
estamos esperando a que se suelte la tecla y que recuerda que la letra que se est
mostrandoeslaA.
uefijarel
perotenemo
n( ,est
Sinose
indica que
ESP_S_A
P0/ A000E
I NI CI AL
00/ 00000
En INICIAL
Imposible
T=' 1'
X 1
P0/ A000E
ESP_
espe
S_A (ESPera a Soltar A)
ramos a ver qu pasa antes:
- pasa un segundo
se va mostrando A por pantalla
- soltar P
00/ A0000
PT/ 00DL0
ESP_S_A
P0/ A000E
I NI CI AL
00/ 00000
En INICIAL
Imposible
T=' 1'
X 1
En INICIAL
Imposible
T=' 1'
X 1
P0/ A000E
ESP_
espe
S_A (ESPera a Soltar A)
ramos a ver qu pasa antes:
- pasa un segundo
se va mostrando A por pantalla
00/ A0000
- soltar P
PT/ 00DL0

se
deb teuncicloderelojyluegosedebeesperaraquesesueltelatecla
st ha
vue ESP_S_A
Figura 19.6: Estado de espera
Cuando se fija el nmero (se presiona T durante un segundo o ms), la salida LI STO,
eponeraunoduran
(e adoESP_S).Sinohacemosestaespera,enelestadoI NI CI ALconsideraramosquese
ltoapresionarP,yesoseraunerrorporqueiramosdenuevoalestado .
00/ 00000
En INICIAL
posible
T=' 1'
X 1

Im
ESP_S_A
P0/ A000E
I NI CI AL
P0/ A000E 00/ A0000
PT/ 00DL0
ESP_S
00/ 00000
En INICIAL
posible
T=' 1'
X 1

Im
En INICIAL
posible
T=' 1'
X 1

Im
P0/ A000E
P0/ 00000
se fija el dos (un slo ciclo)
salidas a cero,
Imposible
T=' 1'
X 1
en espera de
que se suelte P
En ESP_S
0
0
0
/
0
0
0
0
se ha soltado P
ESP_S_A
P0/ A000E 00/ A0000
I NI CI AL
PT/ 00DL0
ESP_S ESP_S
P0/ 00000
se fija el dos (un slo ciclo)
salidas a cero,
Imposible
T=' 1'
X 1
en espera de
que se suelte P
En ESP_S En ESP_S
Imposible
T=' 1'
X 1
0
0
0
/
0
0
0
0
se ha soltado P

En el2.Esto
c el
ar
el2 estosera( 0, T) .
En este caso no hara falta ir al estado ESP_S sino que se ira directamente al estado
I NI CI ALDetodosmodos,iralestadoESP_Snoseraunerror,porqueinmediatamenteen
el ciclo de reloj siguiente se ira al estado I NI CI AL, y es imposible que el usuario consiga
Figura 19.7: Estado de espera a que suelte la tecla
elenunciadoindicaquesisepulsaTporunsegundooms,sedebedefijar
in luye el caso improbable (aunque no imposible) en el que soltamos la tecla justo en
instanteenelquellegaelavisodequehapasadounsegundo.Enestecasodebemosfij
(loindicaelenunciado).Laentradapara
144 Universidad Rey J uan Carlos
19. Teclado de telfono mvil
presionar el pulsador con solo un ciclo de reloj entre medias (y las teclas no tienen
rebotes).
ESP_S_A
P0/ A000E
I NI CI AL
00/ 00000
En INICIAL
Imposible
T=' 1'
X 1
P0/ A000E 00/ A0000
PT/ 00DL0
ESP_S
P0/ 00000
Caso
improbable.
Se fija el dos
(un slo ciclo)
SP_S
posible
T=' 1'
X 1
En E
Im
0
0
/
0
0
0
0
0
0T/ 00DL0
ESP_S_A
P0/ A000E
I NI CI AL
00/ 00000
En INI
Im
CIAL
posible
T=' 1'
X 1
En INI
Im
CIAL
posible
T=' 1'
X 1
P0/ A000E 00/ A0000
PT/ 00DL0
ESP_S ESP_S
P0/ 00000
Caso
improbable.
Se fija el dos
(un slo ciclo)
SP_S
posible
T=' 1'
X 1
En E
Im
En E
Im
SP_S
posible
T=' 1'
X 1
0
0
/
0
0
0
0
0
0T/ 00DL0

Figura 19.8: Se fija el dos en el caso improbable que suelte la tecla a la vez que termina la temporizacin
Ahora,estandoenelestadoESP_S_A,estoes,elpulsadorpresionadoymostrandolaletra
A.Sisesueltalateclaantesdequepaseunsegundo,entradas:( 0, 0) .Tenemosque:
EsperaraversisevuelveapresionarPa estadoESP_P_A
Para contabilizar los segundos, tenem contador
habilitacinaceroduranteelcambiode ' 0' ).
ntesdeunsegundo
os que reiniciar el poniendo su
estado(E=
ESP_S_A
P0/ A000E
I NI CI AL
00/ 00000
En INICIAL
Imposible
T=' 1'
1 X
P0/ A000E 00/ A0000
PT/ 00DL0
ESP_S
P0
En ESP_S
Imposible
T=' 1'
X 1
/ 00000
0
0
/
0
0
0
0
0
0T/ 00DL0
A se sigue mostrando
E='0' para reiniciar el temporizador
Se ha soltado P antes de
_P_A
un segundo
ESP
00/ A000E
habilitar la cuenta
ESP_S_A (ESPera a Presionar, A)
s a ver qu pasa antes:
esiona P
- pasa un segundo
E='1' se vuelve a
esperamo
- se pr
ESP_S_A
P0/ A000E
I NI CI AL
00/ 00000
En INICIAL
Imposible
T=' 1'
1 X
En INICIAL
Imposible
T=' 1'
1 X
P0/ A000E 00/ A0000
PT/ 00DL0
ESP_S ESP_S
P0
En ESP_S
Imposible
T=' 1'
X 1
/ 00000
En ESP_S
Imposible
T=' 1'
X 1
0
0
/
0
0
0
0
0
0T/ 00DL0
A se sigue mostrando
E='0' para reiniciar el temporizador
Se ha soltado P antes de
_P_A
un segundo
ESP
00/ A000E
habilitar la cuenta
ESP_S_A (ESPera a Presionar, A)
s a ver qu pasa antes:
esiona P
- pasa un segundo
E='1' se vuelve a
esperamo
- se pr

Figura 19.9: Se suelta la tecla antes que pase un segundo: nueva espera
hora, estando en el estado ESP_P_A, esto es, el pulsador sin presionar y mostrando la
letraA,puedepasar:
QueantesdequepaseunsegundosevuelvaapresionarP.Enestecasovolvemosal
estadoaESP_S_B(similaraESP_S_A)
QuepaseunsegundosinvolverapresionarP,entradas( 0, T) enestecasosefijala
letraA
Enelcasoimprobablequeamboseventosocurransimultneamente,elenunciadodice
quesefijelaletraA.Lasentradasseran( P, T) ,paraestecaso,podemosirnosalestado
inicial (como en el caso anterior, y de este nos iramos en el siguiente ciclo de reloj a
ESP_S_A(puesPvaaseguirpresionadayaquenolapodremospulsarduranteunnico
ciclodereloj),onospodemosirdirectamentealestadoESP_S_A (loquesuponeponer
unaflechams).Eneldiagramahemoselegidolaprimeraopcin(ambassonvlidas).
de
A
Departamento de Tecnologa Electrnica 145
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
ESP_S_A
P0/ A000E
I NI CI AL
00/ 00000
En INICIAL
Imposible
T=' 1'
X 1
P0/ A000E 00/ A0000
PT/ 00DL0
ESP_S
P0/ 00000
En ESP_S
Imposible
T=' 1'
X 1
0
0
/
0
0
0
0
0
0T/ 00DL0
ESP_P_A
00/ A000E
ESP_S_B
PT/ A00L0
Se fija A
P0/ 0B000
0T/ A00L0 Se reinicia
temporizador
ESP_S_B (ESPera a Soltar, B)
esperamos a ver qu pasa antes:
- soltar P
- pasa un segundo
Se reinicia
temporizador
Se muestra B
ESP_S_A
P0/ A000E
I NI CI AL
00/ 00000
En INICIAL
Imposible
T=' 1'
X 1
En INICIAL
Imposible
T=' 1'
X 1
P0/ A000E 00/ A0000
PT/ 00DL0
ESP_S ESP_S
P0/ 00000
En ESP_S
Imposible
T=' 1'
X 1
En ESP_S
Imposible
T=' 1'
X 1
0
0
/
0
0
0
0
0
0T/ 00DL0
ESP_P_A
00/ A000E
ESP_S_B
PT/ A00L0
Se fija A
P0/ 0B000
0T/ A00L0 Se reinicia
temporizador
ESP_S_B (ESPera a Soltar, B)
esperamos a ver qu pasa antes:
- soltar P
- pasa un segundo
Se reinicia
temporizador
Se muestra B

Figura 19.10: Nueva espera a que se suelte B


Ahora,estandoenelestadoESP_S_B,estoes,elpulsadorpresionadoymostrandolaletra
B,puedepasar:
( P, 0) :NohapasadounsegundoysiguePpulsadaSeguimosenESP_S_B
0, 0) : Se suelta P antes de un segundo Esperamos a ver si se vuelve a presionar P
antesdeunsegundo
( P, T) :HapasadounsegundoynohemossoltadoP Fijamosel2,yesperamosaque
suelteelpulsador:ESP_S
( 0, T) : Caso improbable de soltar justo en el segundo, lo tratamos como el anterior,
peronosvamosalestadoI NI CI AL(sifusemosalestadoESP_S,seravlidoporqueel
circuitofuncionaraigualdesdeelpuntodevistadelusuario)
Recuerdaqueparacontabilizarlossegundos,tenemosquereiniciarelcontadorponiendo
suhabilitacinaceroduranteelcambiodeestado(E=' 0' ),yluegoponerlaauno.
P0/ 0B00E
ESP_S_A
P0/ A000E
I NI CI AL
00/ 00000
En INICIAL
Imposible
T=' 1'
X 1
P0/ A000E 00/ A0000
PT/ 00DL0
ESP_S
P0/ 00000
En ESP_S
Imposible
T=' 1'
X 1
0
0
/
0
0
0
0
0
0T/ 00DL0
ESP_P_A
00/ A000E
ESP_S_B
PT/ A00L0
P0/ 0B000
0T/ A00L0
00/ 0B000
PT/ 00DL0
0T/ 00DL0
Se ha soltado
P antes de un
segundo
P0/ 0B00E
ESP_S_A
P0/ A000E
I NI CI AL
00/ 00000
En INICIAL
Imposible
T=' 1'
X 1
En INICIAL
Imposible
T=' 1'
X 1
P0/ A000E 00/ A0000
PT/ 00DL0
ESP_S ESP_S
P0/ 00000
En ESP_S
Imposible
T=' 1'
X 1
En ESP_S
Imposible
T=' 1'
X 1
0
0
/
0
0
0
0
0
0T/ 00DL0
ESP_P_A
00/ A000E
ESP_S_B
PT/ A00L0
P0/ 0B000
0T/ A00L0
00/ 0B000
PT/ 00DL0
0T/ 00DL0
Se ha soltado
P antes de un
segundo

Figura 19.11: Se ha soltado P antes de que pase un segundo
146 Universidad Rey J uan Carlos
19. Teclado de telfono mvil
Ahora,estandoenelestadoESP_P_B,estoes,elpulsadorsinpulsarymostrandolaletraB,
puedepasar:
:Sehapulsadoantesdequepaseunsegundo:SemuestraeldosESP_S_2
osesperando
vamosalestado:I NI CI AL
bable de pulsar justo en el segundo, lo tratamos como el anterior
sirnosaESP_S_A).
( P, 0)
( 0, 0) :NohapasadounsegundoynosehapulsadoPSeguim
( 0, T) :HapasadounsegundoypulsadoP FijamoslaB,y
( P, T) : Caso impro
(tambinpodramo
P0/ 0B00E
ESP_S_A
P0/ A000E
I NI CI AL
00/ 00000
En INICIAL
Imposible
T=' 1'
X 1
P0/ A000E 00/ A0000
PT/ 00DL0
ESP_S
P0/ 00000
En ESP_S
Imposible
T=' 1'
X 1
0
0
/
0
0
0
0
0
0T/ 00DL0
ESP_P_A
00/ A000E
ESP_S_B
PT/ A00L0
0T/ A00L0
P0/ 0B000
00/ 0B000
PT/ 00DL0
0T/ 00DL0
00/ 0B0 _P_B 0E ESP
PT/ 0B0L0
0T/ 0B0L0
P0/ 00D00
Se ha pulsado
P a de un
segundo
do 1 se
sin pulsar P (o justo
se ha pulsado en el
seg ndo)
ntes
Ha pasa gundo
u
P0/ 0B00E
ESP_S_A
P0/ A000E
I NI CI AL
00/ 00000
En INICIAL
Imposible
T=' 1'
X 1
En INICIAL
Imposible
T=' 1'
X 1
P0/ A000E 00/ A0000
PT/ 00DL0
ESP_S ESP_S
P0/ 00000
En ESP_S
Imposible
T=' 1'
X 1
En ESP_S
Imposible
T=' 1'
X 1
0
0
/
0
0
0
0
0
0T/ 00DL0
ESP_P_A
00/ A000E
ESP_S_B
PT/ A00L0
0T/ A00L0
P0/ 0B000
00/ 0B000
PT/ 00DL0
0T/ 00DL0
00/ 0B0 _P_B 0E ESP
PT/ 0B0L0
0T/ 0B0L0
P0/ 00D00
Se ha pulsado
P a de un
segundo
do 1 se
sin pulsar P (o justo
se ha pulsado en el
seg ndo)

Figu espera a ver si e vuelve a pulsar mostrando la B


Ylosdosestadosque sehacendemanerasimilar.
Slohayqueteneren delestadoESP_P_2
ieneESP_S_A.
dosfinalsemuestraenlafigura19.13.
ntes
Ha pasa gundo
u
ra 19.12: En la s P
quedan
cuentaquedespusdel2vienelaA.Yporeso,
v
Eldiagramadeesta
Departamento de Tecnologa Electrnica 147
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
P0/ 0B00E
ESP_S_A
P0/ A000E
I NI CI AL
00/ 00000
En IN AL
Imposible
T=
X 1
ICI
' 1'
P0/ A000E 00/ A0000
PT/ 00DL0
ESP_S
P0/ 00000
Imposible
En ESP_S
T=' 1'
X 1
0
0
/
0
0
0
0
0
0T/ 00DL0
ESP_P_A
00/ A000E
ESP_S_B
PT/ A00L0
P0/ 0B000
0T 0L0 / A0
00/ 0B000
PT/ 00DL0
0T/ 00DL0
00/ 0B00E ESP_P_B
PT/ 0B0L0
0T/ 0B0L0
P0/ 00D00
P0/ 00D0E ESP_S_2
0
T
/
0
0
D
L
0
P
T
/
0
0
D
L
0
00/ 00D00
ESP_P_2
00/ 00D0E
P
0
0
/
A
0
0
0
PT/ 00DL0
0T/ 00DL0
P0/ 0B00E
ESP_S_A
P0/ A000E
I NI CI AL
00/ 00000
En IN AL
Imposible
T=
X 1
ICI
' 1'
En IN AL
Imposible
T=
X 1
ICI
' 1'
P0/ A000E 00/ A0000
PT/ 00DL0
ESP_S ESP_S
P0/ 00000
Imposible
En ESP_S
T=' 1'
X 1
En ESP_S
Imposible
T=' 1'
X 1
0
0
/
0
0
0
0
0
0T/ 00DL0
ESP_P_A
00/ A000E
ESP_S_B
PT/ A00L0
P0/ 0B000
0T 0L0 / A0
00/ 0B000
PT/ 00DL0
0T/ 00DL0
00/ 0B00E ESP_P_B
PT/ 0B0L0
0T/ 0B0L0
P0/ 00D00
P0/ 00D0E ESP_S_2
0
T
/
0
0
D
L
0
P
T
/
0
0
D
L
0
00/ 00D00
ESP_P_2
00/ 00D0E
P
0
0
/
A
0
0
0
PT/ 00DL0
0T/ 00DL0

Figura 19.13: Diagrama de estados final



148 Universidad Rey J uan Carlos





20. Clculo de temporizacin de un circuito 1
Esteproblemasepusoenelexamendel30deenerode2009.
20.1. Enunciado
1. Explicarbrevementequeslametaestabilidadyporquseproduce
efuncionarelsiguientecircuito 2. Calcularlafrecuenciamximaalaquepued
D0 Q0 D1 Q1 S1
A
S0
Cl k
D0 Q0 D0 Q0 D1 Q1 D1 Q1 S1
A
S0
Cl k

Figura 20.1: Circuito para analizar
Teniendoencuentalassiguientescaractersticas:
TiempodepropagacinTiempod setup Tiempodehold Frecuenciamxima e
Biestables tpmax=20ns tsu=10ns th=5ns fmax=25MHz
tpmin=4ns
Puertas
lgicas
tpmax=10ns
t =5ns pmin

Entradas tpmax=10ns
tpmin=5ns

Tabla 20.1: Caractersticas de los componentes del circuito

20.2. Solucin
20.2.1. Metaestabilidad
Metaestabilidadesunestadoinestabledeunbiestable,enelqueelbiestablenoestaun
valor 0 1. Este estado rmetros temporales del
setupydeholddelbiestable

se produce por no cumplirse los pa


biestable.Cuandonoserespetanlostiemposde
20.2.2. Frecuencia mxima
Veamoslasentradasdelosbiestables(D0yD1)
Departamento de Tecnologa Electrnica 149
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
entradas
salidas
D0 D1
A tpmax(A)+tpmax(puerta)+tsu(D0)=30ns
Q0 tpmax(D0)+tpmax(puerta)+tsu(D1)=40ns
tpmax(D1)+tpmax(puerta)+tsu(D1)=40ns
Q1 tpmax(D1)+2tpmax(puerta)+tsu(D0)=50ns
Tabla 20.2: Tiempos de propagacin mximos
Elcaminocrticotarda50ns,porlotantolafrecuenciamximaes:
1
50 ns
=
10
9
50
Hz =
1000
50
10
6
Hz
=20 MHz
1
50 ns
=
10
9
50
Hz =
1000
50
10
6
Hz
=20 MHz

Como es una frecuencia menor que la frecuencia mxima de los biestables (25 MHz), la
frecuenciamximadeestecircuitoserde20MHz.

150 Universidad Rey J uan Carlos





21. Anlisis de un circuito 1
Esteproblemasepusoenelexamendel30deenerode2009.
21.1. Enunciado
Delcircuitodecaptulo20(figura20.1):
1) Obtenerlatabladeexcitacindelautmata
2) Dibujareldiagramadetransicindeestados
3) EsunamquinadeMooreodeMealy?Porqu?
21.2. Solucin
21.2.1. Tabla de excitacin del autmata
Primeroobtenemoslasecuacionesdelasentradasdelosbiestablesylassalidas.

D0 = A + Q1
D1 = Q0 Q1
Ecuaci ones
S0 = Q0
S1 = Q1
D0 = A + Q1
D1
Ecuaci ones
= Q0 Q1
S0 = Q0
S1 = Q1

A partir de las cu s obtenemos el estado


siguiente. Como son bi D, el valor de Q es
eldel (D)

0
0 1 0 1 1
0 1 1 1 1
1 0 0 1 0
1 0 1 1
1 1 0 0 0
1 1 1 0 1
Estado
siguiente
e
n
t
r
a
d
a
e acione
estables
directamente datodelbiestable
Estados
Q1 Q0 A Q1' Q0'
0 0 0 1 1
0 1 1 1
1

Tabla 21.1: Tabla del estado siguiente


Organizamos la tabla de manera que sea ms fcil ver el estado siguiente segn la
1 1
1 0 1 0 1 1
1 1 0 0
Est ado si gui ent e
A=0 A=1
entrada.
Est ados
Q1 Q0 Q1' Q0' Q1' Q0'
0 0 1 1 1 1
0 1 1 1
0 1
Est ados
Q1 Q0 Q1' Q0' Q1' Q0'
1
1 1
1 0 1 0 1 1
1 1 0 0
Est ado si gui ent e
A=0 A=1
0 0 1 1 1
0 1 1 1
0 1

del a Tabla 21.2: Tabla de excitacin utmata


Departamento de Tecnologa Electrnica 151
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
21.2.2. Diagrama de transicin de estados
01
01
00
00
10
10
11
11
X
X
0
1
0
1
00
00
00
00
01
01
01
01
10
10
10
10
11
11
11
11
X
X
0
1
0
1

Figura 21.1: Diagrama de transicin de estados


El ltimo apartado: es una mquina de Moore porque las salidas no dependen de las
entradas.Estosepuedededucirdirectamenteobservandoelcircuito.

152 Universidad Rey J uan Carlos





22. Clculo de temporizacin de un circuito 2
Esteproblemasepusoenelexamendel11deseptiembrede2009.
22.1. Enunciado
Calcularlafrecuenciamximaalaquepuedefuncionarelsiguientecircuito
D0 Q0 D1 Q1
A
S1
Cl k
B
D0 Q0 D0 Q0 D1 Q1 D1 Q1
A
S1
Cl k
B

Figura 22.1: Circuito para analizar


Ten
setup Tiempodehold Frecuenciamxima
iendoencuentalassiguientescaractersticas:
Tiempodepropagacin Tiempode
Bies e
tpmin=11ns
h=10ns fmax=20MHz tabl s tpmax=25ns tsu=20ns t
tpmax=15ns

Puertaslgicas
tpmin=7ns
Entradas tpmax=50ns
tpmin=16ns

Tabla 22.1: Caractersticas de los componentes del circuito
22.2. Solucin
Veamosculeselcaminocrtico:
Salidas
Entradas D0 D1
A tpmax(A)+2tpmax(puerta)+tsu(D0)=50+215+20=
100ns

B tpmax(B)+tpmax(puerta)+tsu(D1)=50+15+20=85ns
Q0 tpmax(Q0)+3tpmax(puerta)+tsu(D0)=25+315+20=
90ns
Q1 tpmax(Q0)+tpmax(puerta)+tsu(D0)=25+15+20=
60ns
tpmax(Q1)+2tpmax(puerta)+tsu(D1)=25+215+20=
75ns
Tabla 22.2: Tiempos de propagacin mximos
ElcaminocrticovadelaentradaAalbiestableD0.Comoson100ns,lafrecuenciamxima
es
Departamento de Tecnologa Electrnica 153
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
1
100ns
=
10
9
100
Hz = 10 MHz
1
100ns
=
10
9
100
Hz = 10 MHz

ue la mxima fijada por los biestables, la Como 10 MHz es una frecuencia menor q
frecuenciamximadelcircuitoser10MHz.

154 Universidad Rey J uan Carlos





23. 24. Anlisis de un circuito 2
p Este roblemasepusoenelexamendel11deseptiembrede2009.
24.1. Enunciado
Delcircuitosiguiente:
BB
D0 Q0 D1 Q1
A
S1
S0
D0 Q0 D0 Q0 D1 Q1
A
S1
Cl k Cl k
S0

alizar
2) ansicindeestados
)
Figura 24.1: Circuito para an
1) Obtenerlatabladeexcitacindelautmata
Eldiagramadetr
3 EsunamquinadeMooreodeMealy?Porqu?
24.2. Solucin
24.2.1. Tabla de excitacin del autmata
Primeroobtenemoslasecuacionesdelasentradasdelosbiestablesy
lasdeverdadparaqueluegonos

lassalidas.Incluimos
latab seamsfcilrellenarlatabladelautmata.
D0 = A Q1
D1 = B Q0
S0 = Q0 D0 = A Q1
S1 = Q1 D1 = B Q0
S0 = Q0
0 0 0
0 1 1
S1 = Q1

1 0 0
1 1 0
Q1 A D0 Q0 B D1
0
1
1 0 0
1 1 0
0 0
0 1
Q1 A D0
0 0 0
0 1 1
1 0 0
1 1 0
Q1 A D0
0 0 0
0 1 1
1 0 0
1 1 0
Q0 B D1
0
1
1 0 0
1 1 0
0 0
0 1
Q0 B D1
0
1
1 0 0
1 1 0
0 0
0 1

e las entradas de los


biestables
ntradas:
Tabla 24.1: Tablas de verdad d
Apartirdelasecuacionesobtenemoslosestadossiguientessegnlase
Departamento de Tecnologa Electrnica 155
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
Q1 Q0 A B Q1' Q0'
0 0 0 0 0 0
0 0 0 1 1 0
0 0 1 0 0 1
0 0 1 1 1 1
0 1 0 0 0 0
0 1 0 1 0 0
0 1 1 0 0 1
0 1 1 1 0 1
1 0 0 0 0 0
1 0 0 1 1 0
1 0 1 0 0 0
1 0 1 1 1 0
1 1 0 0 0 0
1 1 0 1 0 0
1 1 1 0 0 0
1 1 1 1 0 0
Q1 Q0 A B Q1' Q0'
0 0 0 0 0 0
0 0 0 1 1 0
0 0 1 0 0 1
0 0 1 1 1 1
0 1 0 0 0 0
0 1 0 1 0 0
0 1 1 0 0 1
0 1 1 1 0 1
1 0 0 0 0 0
1 0 0 1 1 0
1 0 1 0 0 0
1 0 1 1 1 0
1 1 0 0 0 0
1 1 0 1 0 0
1 1 1 0 0 0
1 1 1 1 0 0
Q1 Q0 A B Q1' Q0'
0 0 0 0 0 0
0 0 0 1 1 0
0 0 1 0 0 1
0 0 1 1 1 1
0 1 0 0 0 0
0 1 0 1 0 0
0 1 1 0 0 1
0 1 1 1 0 1
1 0 0 0 0 0
1 0 0 1 1 0
1 0 1 0 0 0
1 0 1 1 1 0
1 1 0 0 0 0
1 1 0 1 0 0
1 1 1 0 0 0
1 1 1 1 0 0

Tabla 24.2: Tabla del estado siguiente
mejor
loscambiosdeestadosconlasentradas

Organizamoslatablaparapoderver
Est ado AB
Q1 Q0 00 01 10 11
0 0 00 10 01 11
0 1 00 00 01 01
1 0 00 10 00 10
1 1 00 00 00 00
estado
siguiente
estado
actual
entradas
Est ado AB
Q1 Q0 00 01 10 11
0 0 00 10 01 11
0 1 00 00 01 01
1 0 00 10 00 10
1 1 00 00 00 00
Est ado AB
Q1 Q0 00 01 10 11
0 0 00 10 01 11
0 1 00 00 01 01
1 0 00 10 00 10
1 1 00 00 00 00
estado
siguiente
estado
actual
entradas

Tabla 24.3: Tabla de excitacin del autmata


24.2.2. Diagrama de transicin de estados
Concualquieradeestastablasobtenemoslosestadossiguientesparadibujareldiagrama
deestados:
00
00
00
10
10
01
01
01
10
11
11
11
XX
0X
1X
X0
X1
00
00
00
00
00
10
10
01
10
10
10
10
01
01
01
01
01
10
11
11
11
11
11
XX
0X
1X
X0
X1

Figura 24.2: Diagrama de transicin de estados


El ltimo apartado: es una mquina de Moore porque las salidas no dependen de las
entradas.Estosepuedededucirdirectamenteobservandoelcircuito).

156 Universidad Rey J uan Carlos





Departamento de Tecnologa Electrnica 157
Referencias
[1] AdeptdeDigilent.ProgramagratuitoparaprogramarlasFPGAsporUSB:
Hhttp://www.digilentinc.com/Products/Detail.cfm?Prod=ADEPTH
[2] Basys,tarjetaconFPGAfabricadaporDigilent.
ManualdereferenciadelaversinE:
Hhttp://www.digilentinc.com/Data/Products/BASYS/BASYS_E_RM.pdfH
Pginawebdelatarjeta:
Hhttp://www.digilentinc.com/Products/Detail.cfm?NavPath=2,400,791&Prod=BASYSH
[3] CreativeCommons.Hhttp://creativecommons.org/H
Licenciadeestemanual:Hhttp://creativecommons.org/licenses/byncnd/3.0/H
[4] D.Jones,Steppingmotortypes.Hhttp://www.cs.uiowa.edu/~jones/step/index.htmlH
[5] DepartamentodeTecnologaElectrnica,UniversidadReyJuanCarlos.Hhttp://gtebim.esH
[6] DigilentInc.Hhttp://www.digilentinc.com/H
[7] E.Carletti,Motorespasoapaso,caractersticasbsicas.Hhttp://robots
argentina.com.ar/MotorPP_basico.htmH
[8] ElectrnicaDigitalII.Hhttp://gtebim.es/docencia/EDIIH
[9] Ericsson,IndustrialCircuitsApplicationNote:StepperMotorBasics
Hhttp://library.solarbotics.net/pdflib/pdf/motorbas.pdfH
[10] F.Machado,N.Malpica,J.Vaquero,B.Arredondo,S.Borremeo,Aprojectorientedintegral
curriculumonElectronicsforTelecommunicationEngineers,EDUCONConference,
Madrid,abril2010
[11] F.Machado,S.Borromeo,N.Malpica,DiseodigitalavanzadoconVHDL,Ed.Dykinson,
2009.
[12] F.Machado,S.Borromeo,N.Malpica,DiseodigitalconesquemticosyFPGA,Ed.
Dykinson,2009.
[13] IEEE,InstituteofElectricalandElectronicsEngineers.Hhttp://www.ieee.orgH
[14] IEEEStandardforVHDLRegisterTransferLevel(RTL)Synthesis,IEEEStd1076.6
[15] ISEWebPackdeXilinx.Hhttp://www.xilinx.com/tools/webpack.htmH
Paradescargarversionesantiguas:
Hhttp://www.xilinx.com/webpack/classics/wpclassic/index.htmH
[16] Minebea.Hhttp://www.minebea.co.jp/english/index.htmlH
[17] Mitsumi.Hhttp://www.mitsumi.co.jp/latest/Catalog/indexuse/index_e.htmlH
[18] Opencores.Hhttp://www.opencores.orgH
[19] Pegasus,tarjetaconFPGAfabricadaporDigilent.Manualdereferencia:
Hhttp://www.digilentinc.com/Data/Products/PEGASUS/PEGASUSrm.pdfH
Pginawebdelatarjeta:
Hhttp://www.digilentinc.com/Products/Detail.cfm?NavPath=2,398,537&Prod=PEGASUSH
[20] SankenElectric,SemiconductorsGeneralCatalog.Abril2010.Disponible:
Hhttp://www.sankenele.co.jp/en/prod/library/lib_semicon_all.htmH
Elapartadodetransistoresestdisponibleen:
Hhttp://www.sankenele.co.jp/en/prod/library/images/get_pdf.gifH
[21] ShinanoKenshi.StepperMotors.Hhttp://www.shinano.com/xampp/steppermotors.phpH
[22] Solarbotics.StepperMotors.
Hhttp://www.solarbotics.net/library/pieces/parts_mech_steppers.htmlH
[23] UniversidadReyJuanCarlos,Hhttp://www.urjc.esH
[24] Wikipedia,Motorpasoapaso,Hhttp://es.wikipedia.org/wiki/Motor_paso_a_pasoH
[25] Xilinx,Hhttp://www.xilinx.comH
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
158 Universidad Rey J uan Carlos
[26] XilinxUniversityProgramVirtexIIProDevelopmentSystem.Hardwarereferencemanual.UG069
v1.09marzo2005.Hhttp://www.xilinx.com/univ/xupv2p.htmlH
[27] XSTUserGuide9.2i.Xilinx,Hhttp://ww.xilinx.com/itp/xilinx92/books/docs/xst/xst.pdfH

También podría gustarte