You are on page 1of 167

See

discussions, stats, and author profiles for this publication at: https://www.researchgate.net/publication/45173506

Diseo de circuitos digitales con VHDL

Article January 2010


Source: OAI

CITATIONS READS

0 2,784

2 authors:

Felipe Machado S. Borromeo


King Juan Carlos University King Juan Carlos University
26 PUBLICATIONS 144 CITATIONS 35 PUBLICATIONS 209 CITATIONS

SEE PROFILE SEE PROFILE

All content following this page was uploaded by Felipe Machado on 30 May 2014.

The user has requested enhancement of the downloaded file.




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 Juan 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:Visualizacindecuentacomodecimalsinsigno....................................................................................................... 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(FILTRO_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 Juan 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:ProcesoconsentenciaIF ................................................................................................................................................... 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:Declaracindesealunsigned ...................................................................................................................................... 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:Declaracindelassealesdeestadodetipoestados_led 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 Juan 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
Estemanualesunaguaprcticaparaaprenderadisearcircuitosdigitalesmedianteel
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 Telecomunicacin1. Previamente, los alumnos de esta carrera
hancursadolaasignaturaElectrnicaDigitalI(ED1).EnED1losalumnosadquirieronlos
conceptos bsicos de la electrnica digital y realizaron diseos tanto con componentes
discretoscomocondispositivoslgicosprogramables.LasprcticasrealizadasconFPGA
deED1estnguiadasenelmanualdelareferencia[12].Endichasprcticasseenseaa
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
digitalesyanalgicosenlaqueseincluyendoscaptulosconalgunasindicacionessobre
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
menosabstractadedisear,yporestocreemosqueeslaformamsrecomendablepara
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
estamosusandounlenguajedeprogramacinhabitual(C,Pascal,...).Notenerunaidea
aproximadadelhardware(esquemtico)quesegeneraapartirdelcdigoVHDLesuna
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
realizadoconVHDL(captulo6) conelcontadorrealizadoenesquemticos(captulo19
delareferencia[12]).
ElVHDLesunestndardelInstitutodeIngenierosElctricosyElectrnicos2(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
conelobjetivodegenerarmaterialeducativoabierto,hemospublicadoestemanualbajo
licenciaCreativeCommons[3]quepermitecopiarloydistribuirlo.Esperamosquedisfrutes
desulecturayqueteayudeaaprenderadisearcircuitoselectrnicosdigitales.Parair
mejorando el manual, agradeceremos la comunicacin de comentarios, sugerencias y
correccionesalasdireccionesdecorreoelectrnicodelosautores.
felipe.machado@urjc.esysusana.borromeo@urjc.es.

2 InstituteofElectricalandElectronicsEngineers

14 Universidad Rey Juan 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]:elISEWebPack3
[15].Enelrestodelasprcticasnoseharreferenciaalentornodedesarrollo.Asquesi
tienesdudasdecmoimplementarelcircuitoenlaFPGA,vuelveaestaprcticaorepasa
lasprcticasdelaopasado[12].

2.1. Tarjetas Pegasus y Basys


LatarjetaqueutilizaremosenprcticaseslaPegasus[19]delaempresaDigilent[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

LatarjetaPegasuscontieneunaFPGAdeXilinxdemodeloSpartanIIXC2S50XC2S200
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.Lafotodelaplacanocoincideexactamenteconlaversindelaplacaque
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

Conector JTAG Conector


FPGA Memoria
de expansin
Flash

VGA

Alimentacin

Jumpers de
configuracin

PS/2

Display
Puerto
7 segmentos
accesorio

Pulsadores Interruptores
LEDs
Figura 2.1: Placa Pegasus de Digilent

Amedidaquevayamosavanzandoconlaprcticairemosaprendiendolafuncionalidad
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
disponibles4 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 Juan Carlos


2. Encender un LED

FPGA Jumpers de
Conectores PMOD
configuracin
Jumpers para
la frecuencia
del reloj

PS/2
VGA

USB

Interruptor Displays
para encender 7 segmentos
la tarjeta

Interruptores Pulsadores
LEDs
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 no5).
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.
PEGASUS BASYS
'1' Encendido Spartan-II '1' Encendido Spartan-3E
'0' Apagado PIN LED '0' Apagado PIN LED
46 LD0 15 LD0
390 45 LD1 390 14 LD1
44 LD2 08 LD2
43 LD3 07 LD3
42 LD4 05 LD4
41 LD5 04 LD5
37 LD6 03 LD6
36 LD7 02 LD7

Figura 2.3: Conexin de los LED de la placa Pegasus (izquierda) y la Basys (derecha)

Viendoelesquemaelctricodelafigura2.3podemosdeducirquesiponemosun1lgico
enelpin46delaFPGAdelaPegasusencenderemoselLED,yaque conun1 lgicola
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

Aspues,steserelobjetivodelprimerejercicio,ponerun1enelpin46yun0enel
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,quelollamaremos led0,indicamoslaruta
donde guardaremos el proyecto, que ser C:/practicas/ed2/tunombre. Respecto al
nombreyalaruta,esconveniente:
NotrabajardesdeundispositivodememoriaUSB6.
Noincluirespaciosenlaruta,portanto,estoincluyenotrabajarenel "Escritorio"ni
en"Mis documentos"
Noincluirenlarutaoenelnombreacentosniees,nicaracteresextraos,ninombres
muylargos,lomsconvenienteeslimitarseacaracteresalfanumricos,yusarelguin
bajoenvezdelespacio.
Paraelltimorecuadrodelaventana,dondeponeTopLevelSourceTypeseleccionaremos
HDL,yaquenuestrodiseoloharemosmediantelenguajesdedescripcindehardware7.

6 Sieststrabajandoenellaboratorio,alterminarlasesinnoolvidescopiarlosficherosconextensin.vhdy
.ucfentumemoriaUSBoentucorreoelectrnico(ocupanmuypoco).Delocontrario,elprximoda
puedeserquelosficheroshayandesaparecido.
7 HDL:delingls:HardwareDescriptionLanguage

18 Universidad Rey Juan Carlos


2. Encender un LED


Figura 2.4: Ventana para la creacin de nuevo proyecto

Unavezquehemosrellenadolostresrecuadrospinchamosen Next.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
encapsuladodelaFPGA,quesemuestranenlafigura2.5paralaPegasusylafigura2.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.

tipo de dispositivo XC2S200 cdigo de fecha tipo de dispositivo XC3S100E cdigo


encapsulado PQ208 encapsulado TQG144
cdigo de lote cdigo
velocidad 5C velocidad 4C
rango de operacin rango de operacin
C: comercial C: comercial


Figura 2.5: Interpretacin del texto del encapsulado de Figura 2.6: Interpretacin del texto del
la FPGA de la Pegasus 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

Pegasus Basys
Family Spartan2 Spartan3E
Device Mirar en la FPGA
Package PQ208 TQ144
Speed Mirar en la FPGA


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.
Yatenemoselproyectocreadoyahoranosdisponemosacrearnuestrodiseo.Paraello
creamosunanuevafuente(fichero)paraelproyectopinchandoenProjectNew Source.
Estoharaparecerunanuevaventanaquenospedirqueseleccionemoseltipodefuente
quequeremoscrear.ComoestamostrabajandoenVHDL,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 Juan Carlos


2. Encender un LED

Ahoranossaldrunaventanacomolamostradaenlafigura2.9.Pordefecto,elnombre
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: led0 y led1. Otra
alternativaescrearlosnosotrosdirectamenteenVHDL.ParaterminarpinchamosNexty
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.Estoes,laherramientanoanalizalaslneasquecontienendosguionesypuedes
ponercualquiercomentario.

Cabecera

Bibliotecas

Entidad

Arquitectura


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

DespusdelacabeceraestnlasreferenciasalasbibliotecasdelIEEE8,quesonnecesarias
parapoderutilizarlostiposdedatosqueemplearemos.Paranuestrocaso,nosbastacon
utilizar la biblioteca IEEE.STD_LOGIC_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:led0yled1.
EnVHDL,laentidaddefinelasentradasysalidasdelcircuito.Ynohacereferenciaala
estructuraofuncionalidadinterna.Escomodefinirunacajanegra.Ennuestroejemplo,la
entidadsepuederepresentarcomomuestralafigura2.12.

8 ElIEEE(InstituteofElectricalandElectronicsEngineers)eslaasociacinquehaestandarizadoelVHDL.

22 Universidad Rey Juan Carlos


2. Encender un LED

LED0

LED0
LED1

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

El ISE ha creado los puertos de tipo STD_LOGIC, que es un tipo de dato parecido al BIT,
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)
Haymsvaloresposiblesquenosehanincluidoparanocomplicarinnecesariamentela
explicacin.
Ahoraquedadescribirlaarquitectura.EnVHDL,laarquitecturadescribelaestructura,el
funcionamientooelcomportamientodeuncircuito.
Ennuestroejemplo,nosotrosqueremosasignaraunpuertoelvalor1yalotroelvalor
0. Esto se realiza con una sentencia concurrente para cada LED. El cdigo 21 muestra
cmoserealizaenVHDL.ElVHDLnodistingueentremaysculasyminsculas.
architecture BEHAVIORAL of LED0 is
begin
led0 <= '1'; -- Encendemos el LED0
led1 <= '0'; -- Apagamos el LED0
end BEHAVIORAL;
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 (BEHAVIORAL)


indica el tipo de descripcin: en este caso la arquitectura explica el comportamiento del
circuito.Enrealidad,aqusepuedeponerelnombrequeunoquiera,aunqueexisteuna
convencindeindicareltipodedescripcin:
BEHAVIORAL (oCOMPORTAMENTAL)
STRUCTURAL(oESTRUCTURAL)

FUNCTIONAL (oFUNCIONAL)
DATAFLOW (oFLUJO_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,apartirdel BEGINseincluyenlassentenciasconcurrentesdenuestrocircuito.
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, indenta9 las
sentenciasconcurrentescondosespaciosaladerecha.Unavezquehemosterminadocon
eldiseodeejemplo,lograbamos(FileSave).

2.4. Sntesis e implementacin del circuito


Ahoraseleccionalaventanadeprocesosylaventanadefuentes(Sources).Enlaventanade
fuentesverificaqueelcomponenteyelficheroquehemoscreadoestseleccionado: led0-
Behavioral(led0.vhd).Pinchaenlunavezsinoestuvieseseleccionado.
AunquealospuertosdesalidaleshayamosdadounosnombresreferidosalosLEDque
vamosautilizar,laherramientanosabequpinesqueremosutilizar.Paraindicarleala
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,enelladespliegalaseccinquedice User Constraints,pinchadosvecesen Assign
Package Pins(figura2.13).Posteriormentenossaldrunaventanadeavisoquenosindica
queparaesteprocesoserequiereaadiralproyectounficherodeltipo UCF.Estetipode
ficherossonlosqueseusanparadefinirlasconexionesdelospinesdelaFPGAconlos
puertosdenuestrodiseo,yportantopinchamosenYes.


Figura 2.13: Seleccin para la asignacin de pines

Ahora nos aparecer la herramienta Xilinx PACE. En ella podemos distinguir tres
subventanas,ladeladerecha,tiene2pestaasensuparteinferior,enunasemuestrala
arquitecturadelaFPGAyenlaotralaasignacindelospines(verfigura2.14).
Enlasubventanadelaparteinferiorizquierdahayunatablaconlosnombresdenuestros
puertos: led0 y led1. En una columna se indica la direccin de los puertos (ambos de

9 Indentaresinsertarespaciosotabuladoresparamoverunbloquedecdigoaladerechayfacilitarla
comprensindelcdigo.EltrminoindentarnoestreconocidoenlaRAEyparasercorrectoshabraque
utilizareltrminosangrado

24 Universidad Rey Juan 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
desplegableconlosbancosdelaFPGA(lospinesseorganizanenbancos),peroenestas
celdas hay que indicar los pines y no los bancos. As que pinchamos en dichas celdas y
ponemosnosotrosmismoselpinquequeremosconectar.As,siusamoslaPegasus,parael
puertoled0conectamoselpin46,paraelloescribimosP46(elmismonmeroqueindicala
placaaadindoleuna P).Paraelpuerto LED1leasignamoselpin P45.Siusamoslaplaca
Basys,tendramosqueponerlospinesP15yP14,respectivamente.

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
ISE.

Enlaventanade procesos,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 .bit). Ahora veremos los pasos que hay que dar para
programarlaplacaPegasus(laBasysrequiereunospasosdiferentes).
Loprimeroquetenemosquehaceresquitarlostresjumpersdeconfiguracin:M0, M1yM2
delconector J4,(versituacinenlafigura2.1).Paranoperderlascaperuzasconctalosa
unsloconectordejandoelotroalairecomosemuestraaladerechadelafigura2.16.
jumper jumper desconectado
jumper
conectado sin perder su caperuza
desconectado

su caperuza
est perdida y
pisoteada por el
suelo del labo

Representacin:


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 Juan 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
elctrica10.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
variasopciones,dejamoslaopcinquehaypordefectoconfigure 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 xcf02s.Acontinuacinnospedirlosficherosdeprogramacinparacadaunode
loscomponentes(figura2.17).


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

10Cuandoestsenellaboratorioylodesenchufes,fjateenquenosequedeenchufadoeladaptadordela
clavijaplanaamericanaaclavijaredondaeuropea

Departamento de Tecnologa Electrnica 27


Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10

ParalaFPGAhayqueasignarelficheroled0.bit,sabremosqueestasignandoelfichero
alaFPGAporquestatendrcolorverdeyademslaextensindelficheroes .bit(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,pinchamosen Program,y
ledamosaOkalasiguienteventanasincambiarnada(sidisemosa Verifydaraunerror
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 Juan Carlos


2. Encender un LED


Figura 2.19: Programacin realizada con xito

AhoramiramoslaplacaydeberahabertresLEDencendidos:
LD8:queindicaquelaplacaestencendida

LD9:queindicaquesehaprogramadolaFPGA

LD0:queeselLEDquehacemosencendernosotrosconeldiseodelaFPGA

ElLED LD1deberestarapagado,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
apartirdeloquehayagrabadoenlamemoriaROM(enrealidadesunamemoriaflash).
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
FPGAseprogramarconelcircuitoquesehayagrabadoendichamemoriaflash.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
laposicin VUSB,transcurridountiempoaparecerqueestconectadaunatarjeta,enla
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 Juan 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)

Acontinuacinpinchamosenelbotn browsecorrespondientealaFPGA,ybuscamosel
fichero led0.bit que hemos generado en nuestro proyecto. Aparecer un warning
indicandoelmensaje:StartupclockforthisfileisCCLKinsteadofJTAGCLK.Problems
willlikelyoccur.Associateconfigfilewithdeviceanyway?.AestemensajecontestamosS.
Otra cosa es que salga un mensajede 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,slotenemosquepincharen ProgramyseprogramarlaFPGA.El
resultadoserqueseencenderelLED LD0,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
aunquetrabajessiempreenelmismoordenador,yaqueesimportantequehagascopias
deseguridadyquetengasuncontroldeversionesdelosdiseosquevanfuncionando.
Cuandoquierashacerunacopiadetutrabajonotienesquecopiartodoeldirectoriodel
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 Juan Carlos


2. Encender un LED

copiarelfichero .bit.QueeselficheroqueseusaparaprogramarlaFPGA,asnotienes
quevolverloagenerar.
Estosficheros .vhdy .ucfsonlosquevamosacopiarennuestramemoriaUSBonoslo
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_LOGIC
UndiseoVHDLconstacomomnimodeunaentidadyunaarquitectura
Laentidaddefinelasentradasysalidasdeldiseo
Laarquitecturadefineeldiseointernamente
NormalmenteesnecesariohacerreferenciaalabibliotecadelIEEE:STD_LOGIC_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,aladerechadelinterruptor SW0seindicaquehaciaarribason3,3Vyhaciaabajo
son0V.
Spartan-II
Spartan-II 3,3V
3,3V PIN pulsador
PIN interruptor
59 BTN0
89 SW0 4,7k
4,7k 58 BTN1
88 SW1
57 BTN2
87 SW2
154 BTN3
86 SW3 0,1F
84 SW4 4,7k
83 SW5
82 SW6
81 SW7

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
lotienelaBasys,yporlotanto,lasealdeentradadelospulsadoresnoestanlimpia,y
puedeparecerquesehapulsadovariasveces(rebote).Elesquemaelctricosemuestraen
lafigura3.2,endondesepuedeobservarquelospulsadoresnotienenelcondensadorque
stienelatarjetaPegasus.
Spartan3E Spartan3E
3,3V 3,3V
PIN interruptor PIN pulsador
38 SW0 69 BTN0
4,7k 36 SW1 4,7k 48 BTN1
29 SW2 47 BTN2
24 SW3 41 BTN3
18 SW4 4,7k
12 SW5
10 SW6
6 SW7

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).
MUX
A
A 1 Z
Z
B 0 B

S S

Si S='1', por la salida Z tendremos A


Si S='0', por la salida Z tendremos B
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 gate_mux (recuerda ponerlo en:
C:\practicas\ed2\tunombre). Crea un nuevo mdulo VHDL llamado tambin GATE_MUX
conlospuertosllamadosigualquelosdelafigura3.4.Laarquitectura,envezdellamarla
BEHAVIORALllmalaGATE,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

Apartirdelcdigo31podemosobservarqueparaundiseoenelniveldepuertas,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 D
Z

E
S
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.Lassealessedeclaranantesdel begindelaarquitectura.Portanto,nuestro
diseoquedacomomuestraelcdigo32:

architecture GATE of GATE_MUX is


signal D, E : STD_LOGIC;
begin

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)

Ahorahemosusadotressentenciasconcurrentesquesonequivalentesalasentenciadel
cdigo31.Puedesprobar,siquieres,quefuncionaigual.
Una caracterstica fundamental de las sentencias concurrentes es que, como su nombre
indica,sonconcurrentes.Estoes,queseejecutantodasalavez.Queescomofuncionan
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 Juan Carlos


3. Sentencias concurrentes

architecture GATE of GATE_MUX is


signal D, E : STD_LOGIC;
begin
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' else B;

Cdigo 3-4: Sentencia concurrente condicionada que define el multiplexor

Pruebaaimplementarestediseoycompruebaquefuncionaigual.
3.1.4. Uso de procesos

Otraalternativaesusarprocesos,quelosveremosconmsdetallemsadelante.Dentro
del proceso, las sentencias se tratan secuencialmente y no de manera concurrente como
vimosqueocurreconlassentenciasconcurrentespuestasdirectamenteenlaarquitectura.
Asqueelordendelassentenciasdentrodeunprocesosesimportante.
Elprocesoempiezaconsunombre,aloquelesiguendospuntosylapalabrareservada
PROCESS.Despusdestaseponelalistadesensibilidad,dondesedebenponertodaslas
sealesqueseleenenelproceso.Lassealesqueseleenson:lassealesqueestndentro
de las condiciones (por ejemplo dentro de la sentencia if) y las seales que estn en la
partederechadelasasignaciones.
Elprocesoqueimplementanuestromultiplexorsemuestraenelcdigo35.
P_MUX: Process (A, B, S) -- lista de sensibilidad: A, B, S
begin
if S='1' then -- S se lee
Z <= A; -- A se lee
else
Z <= B; -- B se lee
end if;
end process;
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 MUX4ALT
queremos realizar un multiplexor con cuatro A 00
alternativas. La figura 3.6 muestra el esquema de este B 01
multiplexor. 10
C Z
Elaopasadovimoscmoserealizabaenpuertaseste D 11
multiplexor y tambin cmo se realizaba con
multiplexoresdedosalternativas.Ahorasimplemente S(1:0)
2


veremoscmosedescribeenVHDL. Figura 3.6: Multiplexor de 4
Para poder seleccionar 4 alternativas la seal de alternativas
seleccin (S) debe de ser de 2 bits. Por tanto
necesitamos definir un vector. Para esto se utiliza el
tipoSTD_LOGIC_VECTOR.
Para realizar el diseo, creamos un nuevo proyecto llamado mux4alt y al definir los
puertos debemos crear la entrada S como un vector. Para ello, al definir los puertos,
activamoselcampoBusdelpuertoS,eindicamosqueelMSB(bitmssignificativo11)esel
bit nmero 1, y el LSB (bit menos significativo12) 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.
entity mux4alt is
Port ( A : in STD_LOGIC;
B : in STD_LOGIC;
C : in STD_LOGIC;
D : in STD_LOGIC;
S : in STD_LOGIC_VECTOR (1 downto 0);
Z : out STD_LOGIC);
end mux4alt;
Cdigo 3-6:Entidad del multiplexor de 4 alternativas

Eltipo STD_LOGIC_VECTOResunvectorde STD_LOGICynormalmentesedefinenconrango


descendenteterminadoencero.Elrangodescendenteseespecificaconlapalabradownto.

11MSB:delinglsMostSignificantBit
12LSB:delinglsLeastSignificantBit

38 Universidad Rey Juan Carlos


3. Sentencias concurrentes

Lasentenciaconcurrentequedescribeestemultiplexorsemuestraenelcdigo37.Esta
sentencia es una extensin para 4 alternativas del cdigo 34. Fjate que la comparacin
delvalordelasealSsehaceconcomillasdoblesporserunvector.
Z <= A when S="00" else
B when S="01" else
C when S="10" else
D;
Cdigo 3-7: Sentencia concurrente condicionada que define el multiplexor de cuatro alternativas

Silo quisisemosrealizarcon unprocesotenemosdosmanerasdehacerlo,mediante if


(cdigo 38) o mediante case (cdigo 39). Es muy importante que la ltima alternativa
siemprecierretodaslasposibilidades.EnelcasodelIFsedebeterminarconunELSE.Yen
elcasodel CASEsedebedeterminarconunwhen others",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: Process (A,B,C,D,S) P_MUX: Process (A,B,C,D,S)
begin begin
if S="00" then case S is
Z <= A; when "00" =>
elsif S="01" then Z <= A;
Z <= B; when "01" =>
elsif S="10" then Z <= B;
Z <= C; when "10" =>
else Z <= C;
Z <= D; when others =>
end if; Z <= D;
end process; end case;
end process;
Cdigo 3-8:Proceso con sentencia IF
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


MUX4BITS

Ahora haremos un multiplexor de dos 4


A(3:0) 1 4
alternativas, pero cada alternativa tendr cuatro Z(3:0)
4
bits.Portanto,lasalidatambintendr4bits. B(3:0) 0

Elesquemadeestemultiplexorsemuestraenla
figura3.8 S
Figura 3.8: Multiplexor de 4 bits de dato

Laentidadsercomolamostradaenelcdigo310.
entity mux4bits is
Port ( A : in STD_LOGIC_VECTOR (3 downto 0);
B : in STD_LOGIC_VECTOR (3 downto 0);
S : in STD_LOGIC;
Z : out STD_LOGIC_VECTOR (3 downto 0);
end mux4bits;
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

Laarquitecturaserigualquelausadaparaelmultiplexordedosalternativascondatos
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, SW1y SW0),elpuerto Balrestodeinterruptores(SW7, SW6, SW5y SW4).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 others" o
"else".Conestoevitamosgenerarunelementodememoria(severenelcaptulo5)

40 Universidad Rey Juan Carlos


4. Codificadores, decodificadores, convertidores de cdigo
Enestaprcticavamosacomplicardiseosdelasprcticasanteriores

4.1. Convertidor de binario a 7 segmentos


Enesteejerciciovamosamodificareldiseodelmultiplexorde4bitsdedatos(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
(puerto AN).Quizsrecuerdesdelaopasadoqueconlosnodossecontrolaqudisplays
vanalucir.Tantolosnodoscomolossegmentosdelosdisplayssonactivosanivelbajo.
Esto es, para que luzca un segmento hay que poner un cerolgico. Y para activar un
displaytengoqueponeruncerolgicoenelnodocorrespondiente.
LED(3:0)
MUX4BITS
CONV_7SEG
4 Puertos
A(3:0) 1 4 In Out
6
SEG(6:0) A(3:0) LED(3:0)
4
B(3:0) 0 Z(3:0) B(3:0) SEG(6:0)
S AN(3:0)

S
Figura 4.1: Multiplexor y salida a 7 segmentos

Asquecreaunnuevoproyectollamado mux7seg,ydentrodelcreaunnuevomdulo
VHDLquetengalospuertosmostradosenlatabladeladerechadelafigura4.1.
Dentrodelaarquitecturadebersdeclararlaseal Z,quelaasignarsalpuertodesalida
LEDyqueusarsparaconvertirlaenlossietesegmentos.Nopodrsusar Zcomopuerto:
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 A A A A A A A
0 F
1 F
2 F
3 4 5 F
6 F B
7 F B
G B G B G B F G B F G B G B G G

E C E C E C E C E C E C E C E C
D D D D D D D D

A A A A A A A A
8 F
9 F
A F
B C D E F F B
G B G B G B F G B F G B F G B F G B G

E C E C E C E C E C E C E C E C
D D D D D D D D

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,
arbitrariamentesehaasignadoelbitmssignificativode SEGalsegmentoAyelmenos
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).
Si Z="0000" mostramos el cero

A
Usamos un vector SEG(6:0) que contendr el valor de los segmento s
0 F G B SEG(6) segmento A
SEG(5) segmento B
C
E D SEG(4) segmento C Como para el cero (Z="0000") se encienden todos
SEG(3) segmento D los segmentos menos el G, la asignacin ser:
SEG(2) segmento E
SEG(1) segmento F SEG <= "0000001" Bit 0 correspondiente
SEG(0) segmento G con los segmentos F que
Un cero enciende el segmento estar apagado
por ser lgica negada

Si Z="0001" mostramos el uno

A
Como para el uno (Z="0001") se encienden los
1 F
segmentos B y C, la asignacin ser:
G B

C
SEG <= "1001111"
E D
Bits correspondientes
con los segmentos B y C
que estarn luciendo

Si Z="0010" mostramos el dos

A
2 Como para el dos (Z="0010") se encienden todos
F G B los segmentos menos el C y el F, la asignacin ser:

E D
C SEG <= "0010010"
Bits correspondientes
con los segmentos C y F
que estarn apagados
Figura 4.3: Valores del vector de los segmentos (SEG) para los nmeros 0, 1 y 2

LassentenciasconcurrentesVHDLdelaarquitecturadebentenerelaspectodelafigura
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 Juan 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
ltimovalor13

Z <= A when S='1' else B; multiplexor

LED <= Z; Asignacin de las seal Z a los LED


(no se puede usar Z como puerto de salida)
comentarios para ayudar a identificar
AN <= "1110"; Encendemos el nodo 0 el nmero y los segmentos que lucen

SEG <= "0000001" when Z="0000" else -- 0: A,B,C,D,E,F


"1001111" when Z="0001" else -- 1: B,C Primeros 4 nmeros
"0010010" when Z="0010" else -- 2: A,B,D,E,G del convertidor a
"0000110" when Z="0011" else -- 3: A,B,C,D,G siete segmentos
.....
..... contina t con el resto de casos
.....
"0110000" when Z="1110" else -- E(14): A,D,E,F,G Dos ltimos nmeros
"0111000"; -- when Z="1111"; -- F(15): A,E,F,G 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
alrevsporhaberasignadolospinesensentidocontrario,estoes,elsegmentoAdonde
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.
Recuerdaqueundecodificadoractivalasalidacorrespondientealnmerocodificadoen
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).

13Aunquenohayningncasoms,esmejorponerlacondicinpordefecto.Tantoporsisenoshaolvidado
incluiralgunaotro,comoporsielsintetizadornosedacuentadequenohaymscondiciones,yentales
casos,nosgeneraraunelementodememoria(enestoscasosunlatch).

Departamento de Tecnologa Electrnica 43


Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10

DECOD 2a4
S0 E I1 I0 S3 S2 S1 S0
I0
S1 0 X X 0 0 0 0
I1 1 0 0 0 0 0 1
S2 1 0 1 0 0 1 0
1 1 0 0 1 0 0
E S3 1 1 1 1 0 0 0

Figura 4.5: Puertos del decodificador y tabla de verdad

Eldecodificadorsehacedemanerasimilaralconvertidordesietesegmentosdelejercicio
anterior,sloquecambianlassalidasqueseactivansegnelnmeroquesetengaenla
entrada.LamayornovedadeslasealdehabilitacinE.
Loquevamosahacerenestediseoesmostrareneldisplayelnmerocodificadoenlos
cuatroprimerosinterruptores(SW3, SW2, SW1, SW0).Elnmerotambinsemostrarenlos
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.
LD3-LD0

LED(3:0)

CONV_7SEG SEG_A-SEG_G
SW3-SW0
4 6
D_IN(3:0) SEG(6:0)

DECOD_2a4
AN3-AN0
I0 S0 AN(0)
SW7-SW6
I1 S1 AN(1) Controlamos qu
display se va a
encender
S2 AN(2)
BTN0 E S3 AN(3)

Negamos porque los displays se


controlan con lgica inversa
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,cuando I="01"sedebeactivarelsegundodisplay,
el tercero cuando I="10" y el cuarto cuando I="11". Todo esto siempre cuando no est
presionadoelpulsadorBTN0,yaquevaafuncionarcomohabilitacin.
Eldecodificadorconhabilitacinlopodemoshacerconsentenciasconcurrentes(cdigo4
1)oconunproceso(cdigo42).Ambasformasproducencircuitosequivalentes,incluso
haymsformasdehacerlo.

44 Universidad Rey Juan Carlos


4. Codificadores, decodificadores, convertidores de cdigo

Eneldecodificadorrealizadoconlasentenciaconcurrente(cdigo41)sehautilizadouna
sealauxiliar S_DECODqueluegosevaainvertirdebidoaquelosnodosfuncionancon
lgica negada. En el cdigo del proceso las salidas se han codificado directamente con
lgicanegada.Algosimilarsehahechoconlasealdehabilitacin,enelcdigo41seha
negadoyluegosehacomprobadosivale0.Mientrasqueenelprocesodirectamentese
compruebasivaleuno.ElVHDLpermiteelegirlamaneraquemsteguste.Elcdigo41
usainversoresyseparecemsalesquemadelafigura4.6.Elcdigo42quizsseams
fcildeentender.
P_DECOD: Process (E, I)
begin
E_NEG <= NOT E; if E='1' then
AN <= (others =>'1');
S_DECOD <= "0000" when E_NEG='0' else -- AN <= "1111";
"0001" when I="00" else else
"0010" when I="01" else case I is
"0100" when I="10" else when "00" =>
"1000"; -- when I="11" AN <= "1110";
when "01" =>
-- invertimos para tener logica negada AN <= "1101";
AN <= NOT (S_DECOD); when "10" =>
AN <= "1011";
when others => -- "11"
Cdigo 4-1:Decodificador con sentencia AN <= "0111";
concurrente end case;
end if;
end process;
Cdigo 4-2:Decodificador con proceso

Porltimo,fjateenlaprimeraasignacindelcdigo42:
AN <= (others => '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,laentrada I(1:0)laasocias
alosinterruptores SW7y SW6.Laentrada D_IN(3:0)laasociasalosinterruptores SW3, 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.
LasealdehabilitacinEIserelpulsadorBTN0.Cuandoestpulsado,sedeshabilitar
elcodificador.
Pararecordardelaopasado,elesquemaylatabladeverdaddelcodificadorsemuestra
enlafigura4.7.Unposibleesquemadelcircuitosemuestraenlafigura4.8,yenlafigura
4.9hayunadescripcinVHDL.
CODIF EI I7 I6 I5 I4 I3 I2 I1 I0 S2 S1 S0 A EO
I0 EO 0 X X X X X X X X 0 0 0 0 0
I1 1 0 0 0 0 0 0 0 0 0 0 0 0 1
I2 S0 1 0 0 0 0 0 0 0 1 0 0 0 1 0
I3 S1 1 0 0 0 0 0 0 1 X 0 0 1 1 0
I4
S2
1 0 0 0 0 0 1 X X 0 1 0 1 0
I5 1 0 0 0 0 1 X X X 0 1 1 1 0
I6 1 0 0 0 1 X X X X 1 0 0 1 0
A
I7 1 0 0 1 X X X X X 1 0 1 1 0
EI
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

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

LED0
LED1
LED2 Si est deshabilitado (EI='0')
CODIF muestro un "-" (segmento G)
SW0 I0 EO MUX6BITS
SW1 I1 CONV_7SEG 6
SW2 I2 numero(0) "1111110" 0
S0 D0 6
SEG(6:0)
SW3 I3 numero(1) 6
S1 D1 1
SW4 I4 numero(2) SEG_AUX(6:0)
S2 D2
SW5 I5
activo D3
SW6 I6
A
SW7 I7
Como slo hay 3 bits, el cuarto
BTN0 EI
va a cero (nmero entre 0 y 7)

Si no hay ninguna entrada


activa se apagan todos los 4
display (todos los nodos a 1) "1111" 0
4
"1110" 1
Si hay alguna entrada activa 4
1
se enciende el primer display 4
AN(3:0)
4
"0000" 0
Si no est habilitado se encienden todos
los displays (todos los nodos a 0)

Figura 4.8: Esquema de bloques del codificador

46 Universidad Rey Juan Carlos


4. Codificadores, decodificadores, convertidores de cdigo

P_CODIF: Process (BTN0, SW)


begin
if BTN0 = '1' then
numero <= "000";
activo <= '0';
else Para no ponerla en
activo <= '1'; todas las
if SW(7) = '1' then condiciones, se
numero <= "111"; puede poner la
elsif SW(6) = '1' then asignacin por
numero <= "110"; defecto al
elsif SW(5) = '1' then principio
numero <= "101";
elsif SW(4) = '1' then Codifica los
numero <= "100"; interruptores
elsif SW(3) = '1' then en un nmero
numero <= "011"; binario
elsif SW(2) = '1' then
numero <= "010";
Y cuando haya
elsif SW(1) = '1' then
numero <= "001";
elsif SW(0) = '1' then que asignar otro
numero <= "000"; valor se incluye
else en esa condicin
numero <= "000";
activo <= '0';
end if;
end if;
end process;

LED <= numero; Lleva el nmero codificado a los LED

seg_aux <= "0001111" when numero="111" else -- 7


"0100000" when numero="110" else -- 6
"0100100" when numero="101" else -- 5
"1001100" when numero="100" else -- 4 Convierte el
"0000110" when numero="011" else -- 3 nmero a siete
"0010010" when numero="010" else -- 2 segmentos
"1001111" when numero="001" else -- 1
"0000001"; -- when numero="000" -- 0

SEG <= seg_aux when BTN0='0' else "1111110"; Inhabilita los segmentos si se
pulsa BTN0 (pone un signo "-")
AN <= "0000" when BTN0='1' else
"1111" when activo = '0' else Controla qu
"1110"; -- BTN0 ='1' AND activo = '1' displays lucen
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 numero="111" else


"0100000" when numero="110" else
"0100100" when numero="101" else
"1001100" when numero="100" else
"0000110" when numero="011" else
"0010010" when numero="010" else
"1001111" when numero="001" else
"0000001"; -- when numero="000"

SEG <= seg_aux when BTN0='0' else "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' else


"0001111" when numero="111" else
"0100000" when numero="110" else
"0100100" when numero="101" else
"1001100" when numero="100" else
"0000110" when numero="011" else
"0010010" when numero="010" else
"1001111" when numero="001" else
"0000001"; -- when numero="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 <= numero;

P_CODIF: Process (BTN0, SW)


begin
if BTN0 = '1' then -- esta deshabilitado
AN <= "0000"; -- se encienden todos los displays
numero <= "000";
SEG <= "1111110"; -- mostramos un guion
else
AN <= "1110"; -- se enciende el display de la derecha
if SW(7) = '1' then
numero <= "111";
SEG <= "0001111"; -- 7
elsif SW(6) = '1' then
numero <= "110";
SEG <= "0100000"; -- 6
elsif SW(5) = '1' then
numero <= "101";
SEG <= "0100100"; -- 5
elsif SW(4) = '1' then
numero <= "100";
SEG <= "1001100"; -- 4
elsif SW(3) = '1' then
numero <= "011";
SEG <= "0000110"; -- 3
elsif SW(2) = '1' then
numero <= "010";
SEG <= "0010010"; -- 2
elsif SW(1) = '1' then
numero <= "001";
SEG <= "1001111"; -- 1
elsif SW(0) = '1' then
numero <= "000";
SEG <= "0000001"; -- 0
else -- no hay ninguno activo
numero <= "000";
SEG <= "XXXXXXX"; -- da igual, no se muestra ningun numero
AN <= "1111"; --se apagan todos los displays
end if;
end if;
end process;
Cdigo 4-6: Otra alternativa al circuito de la figura 4.8, todo en un mismo proceso

4.4. Conclusiones
Resumiendo,losconceptosprincipalesdeestaprctica:
Lospuertosdesalidanosepuedenleer,siloquisisemosleertendramosque crear
unasealauxiliarqueluegolaasignaremosalpuerto.
Sepuedeninicializartodoslosbitsdeunvectoraunmismovalorusandolaexpresin
others => '1'"

48 Universidad Rey Juan 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
facilitanmucholatareadeldiseo.Sinembargo,puedenhacerquenosperdamosla
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
todoelVHDLesaceptadoparasintetizarloeimplementarloenlaFPGA.Estosedebea
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


Empezaremosconunodelosejemplosmssencillosquepodemosprobar:elbiestableJ
K. Para recordar del ao pasado, en la figura 5.1 se muestra la tabla de verdad del
biestableJK.Aladerechasemuestraelesquemadelcircuitoquesequiereimplementar,
endondeseindicanaquelementosdelaplacavanconectadoslospuertos:Entradasa
lospulsadoresBTN1yBTN0ysalidaalLEDLD0.

J K Q(t+1) BTN1 J Q LD0


0 0 Q(t)
0 1 0 CLK
1 0 1
1 1 Q(t) BTN0 K

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_JK1: Process (Clk)
begin P_JK2: Process (Clk)
if Clk'event and Clk='1' then begin
if J='1' and K='1' then if Clk'event and Clk='1' then
Q <= not Q; if J='1' and K='1' then
elsif J='1' and K='0' then Q <= not Q;
Q <= '1'; elsif J='1' and K='0' then
elsif J='0' and K='1' then Q <= '1';
Q <= '0'; elsif J='0' and K='1' then
else Q <= '0';
Q <= Q; end if;
end if; end if;
end if; end process;
end process;
Cdigo 5-1: Proceso que implementa un biestable J-K Cdigo 5-2: Otra alternativa para el biestable J-K

Ahoracreaunproyectollamado biest_jkyunanuevafuenteVHDLdelmismonombre.
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.
Compruebaademsqusucedecuandomantienespresionadoslosdospulsadores PB0 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
VHDLparasntesis.Laformadedescribirbiestablesquesevaaexplicarnoeslanica
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

Elprocesodebetenerunasentenciaqueindicasiesunelementodememoriaactivo
pornivel(latch)oporflanco(flipflop).Enelcdigo51,resaltadoennegrita,indicaque
esunflipflopactivoporflancodesubida.loscuatroposiblescasosson:
Siesunflipflopactivoporflancodesubidalasentenciaderelojdebeser:
if clk'event and clk='1' then
Siesunflipflopactivoporflancodebajadalasentenciaderelojdebeser:
if clk'event and clk='0' then
Siesunlatchactivopornivelaltolasentenciaderelojdebeser:
if enable='1' then
Siesunlatchactivopornivelbajolasentenciaderelojdebeser:
if enable='0' then

Lasentenciaderelojnodebedetenerningunacondicinmsapartedeladelreloj.
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.
if clk'event and clk='1' then if clk'event and clk='1' and J='1' then
if J='1' then ....
......
Cdigo 5-4: sentencia de reloj INCORRECTA
Cdigo 5-3: Sentencia de reloj CORRECTA

Elbiestablepuedetenerinicializacionesasncronas(reset,clear,set,preset,...odiversos
nombres).Estainicializacinsedebeponerantesdelasentenciadereloj.Lasentencia
derelojseponeconunelsifquesiguealasentenciadeinicializacin(cdigo55).
Biest_proc: Process (Reset, Clk)
begin
if reset = '0' then
Q <= '0';
elsif clk'event and clk='1' then
-- ahora van sentencias sincronas
......
Cdigo 5-5: Inicializacin sncrona

Fueradelasentenciaderelojnodebedehaberningunasentenciams.Solamentese
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.
Biest_proc: Process (Reset, Clk) Biest_proc: Process (Reset, Clk)
begin begin
H <= P; -- INCORRECTO if Reset = '0' then
if Reset = '0' then Q <= '0';
Q <= '0'; elsif Clk'event and Clk='1' then
elsif Clk'event and Clk='1' then Q <= Dato;
-- aqu van sentencias sincronas end if;
...... H <= P; -- INCORRECTO
end process;
Cdigo 5-6: Asignacin antes de la
inicializacin. INCORRECTA Cdigo 5-7: Asignacin fuera del reloj. INCORRECTA

Lasentenciaderelojdebedeterminarconun end ifynodebedehaberun elseo


elsifacontinuacin(enelmismoniveldel if).Puedehabersentencias ifanidadas
dentrodelasentenciadereloj(comoenelcdigo51ycdigo53),peronoalmismo
nivel.

52 Universidad Rey Juan Carlos


5. Elementos de memoria

Biest_proc: Process (Reset, Clk)


begin
if Reset = '0' then
Q <= '0';
elsif Clk'event and Clk='1' then
Q <= Dato;
else
Q <= P;
end if;
end process;
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
sealDatonoseincluyeporserunasealsncrona:estdentrodelacondicindereloj.
Incluirlanoesincorrecto,perohacelasimulacinmslenta.
Biest_proc: Process (Reset, ValorInicial, Clk)
begin
if Reset = '0' then
Q <= ValorInicial; -- dato asincrono
elsif Clk'event and Clk='1' then
-- Aqui van las senales sincronas y no se ponen en la lista de sensibilidad
Q <= Dato;
end if;
end process;
Cdigo 5-9: Lista de sensibilidad con el reloj y las seales asncronas

Dentrodelacondicindelrelojpuedenirtodotipodesentencias.Estassentenciasson
secuencialesysimportaelordendeaparicin.Siseasignavaloraunasealmsde
unavez,laltimaasignacineslaqueledarvalor.As,loscdigos510y511son
equivalentes.Elcdigo510asigna Q<='0'cuando Inic='1'.Mientrasqueelcdigo5
11asigna Q<='0'siempre,peroessobrescritopor Q<=Datocuando Inic='0',portanto,
asignaQ<='0'cuandoInic='1'.
Biest_proc: Process (Reset, Clk) Biest_proc: Process (Reset, Clk)
begin begin
if Reset = '0' then if Reset = '0' then
Q <= '0'; Q <= '0';
elsif Clk'event and Clk='1' then elsif Clk'event and Clk='1' then
if Inic = '0' then Q <= '0';
Q <= Dato; if Inic = '0' then
else Q <= Dato;
Q <= '0'; end if;
end if; end if;
end if; end process;
end process;
Cdigo 5-11: Proceso equivalente al del cdigo 5-10
Cdigo 5-10: Proceso equivalente al del cdigo 5-11

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 Q guarda 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 else o un when others". 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 else se cubren todas las
posibilidades. Sin embargo, el proceso 513 s genera latch. Aunque la seal Select
nuncapudieravaler"11"sedebedeponersegnelcdigo512.
CombProc: Process(Select,Dato1,Dato2) LatchProc: Process(Select,Dato1,Dato2)
begin begin
if Select = "00" then if Select = "00" then
Q <= '0'; Q <= '0';
elsif Select = "01" then elsif Select = "01" then
Q <= Dato1; Q <= Dato1;
else elsif Select = "10" then
Q <= Dato2; Q <= Dato2;
end if; end if;
end process; end process;
Cdigo 5-12: Proceso combinacional (no genera Cdigo 5-13: Proceso que genera latch.
latch). Correcto Posiblemente no lo quieras generar

Incluso,aunquesecubrantodaslasposibilidadessedebeterminarconunelseporque
lostipos std_logictienenmsvaloresposiblesapartede0y1.Elcdigo514esel
recomendadofrentealcdigo515.
CombProc: Process(Select,Dato1,Dato2) LatchProc: Process(Select,Dato1,Dato2)
begin begin
if Select = "00" then if Select = "00" then
Q <= '0'; Q <= '0';
elsif Select = "01" then elsif Select = "01" then
Q <= Dato1; Q <= Dato1;
elsif Select = "10" then elsif Select = "10" then
Q <= Dato2; Q <= Dato2;
else elsif Select ="11" then
Q <= '1'; Q <= '1';
end if; end if;
end process; end process;
Cdigo 5-14: Proceso combinacional (no genera Cdigo 5-15: Proceso que es posible que genere
latch) 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 else. El cdigo 516 es
equivalentealcdigo512,yelcdigo517esequivalenteal514.
CombProc: Process(Select,Dato1,Dato2) CombProc: Process(Select,Dato1,Dato2)
begin begin
Q <= Dato2; Q <= '1';
if Select = "00" then if Select = "00" then
Q <= '0'; Q <= '0';
elsif Select = "01" then elsif Select = "01" then
Q <= Dato1; Q <= Dato1;
end if; elsif Select = "10" then
end process; Q <= Dato2;
end if;
Cdigo 5-16: Proceso combinacional equivalente al end process;
cdigo 5-12 (no genera latch)
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 Juan 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.

BTN0 T Q LD0
T Q(t+1)
0 Q(t)
1 Q(t) CLK Reset
BTN3
Figura 5.3: Tabla de verdad del biestable T y su esquema

Loscdigos518y519muestranprocesosequivalentesparaimplementarunbiestableT
activoporflancodesubida.
P_T: Process (Reset, Clk) P_T: Process (Reset, Clk)
begin begin
if Reset = '1' then if Reset = '1' then
Q <= '0'; Q <= '0';
elsif Clk'event and Clk = '1' then elsif Clk'event and Clk = '1' then
if T = '1' then if T = '1' then
Q <= not Q; Q <= not Q;
end if; else
end if; Q <= Q;
end process; end if;
end if;
Cdigo 5-18: Proceso que implementa un biestable T end process;
Cdigo 5-19: Alternativa que describe el biestable T

AhoraimplementaestediseoenlaFPGA,asociandoelbotndeencendido/apagadoal
pulsadorBTN0,elResetalpulsadorBTN3,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?Porquavecesfuncionaelbotndeencendido/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

T='0' Q
guarda valor
'1' cambio en Q

BTN0-T

CLK
50 MHz

LED0-Q

Oscilar hasta que soltemos el pulsador

Valor final depende del


estado al soltar el pulsador
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
transformarnuestropulsohumanoenpulsodelperiododelreloj.Podramospensaren
utilizarlaexpresin T'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).
PULSO_BTN0

BTN0_RG1
BTN0 D Q

Clk

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 Juan Carlos


5. Elementos de memoria

clk

Clk

BTN0

BTN0_RG1
PULSO_BTN0

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.

PULSO_BTN0

BTN0_RG1 BTN0_RG2
BTN0 D Q D Q

Clk
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.
clk

Clk

BTN0

BTN0_RG1

BTN0_RG2

PULSO_BTN0

Ahora los pulsos siempre duran de un ciclo de reloj


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 biestable T

PULSO_BTN0
T Q LD0
BTN0_RG1 BTN0_RG2
BTN0 D Q D Q

Reset
Reset Reset
Clk

BTN3

Figura 5.9: Circuito que enciende y apaga un LED con el mismo pulsador

EstecircuitosepuededescribirconelcdigoVHDLmostradoenlafigura5.10.
biest_D1: Process (Reset, Clk)
BTN0_RG1
begin BTN0 D Q
if Reset = '1' then
BTN0_REG1 <= '0'; Primer
elsif Clk'event and Clk='1' then biestable D Reset
BTN0_REG1 <= BTN0; Clk
end if;
end process;

biest_D2: Process (Reset, Clk) BTN0_RG1 BTN0_RG2


begin D Q
if Reset = '1' then Segundo
BTN0_REG2 <= '0'; biestable D Reset
elsif Clk'event and Clk='1' then
BTN0_REG2 <= BTN0_REG1; Clk
end if;
end process;

PULSO_BTN0 <= '1' when (BTN0_REG1 = '1' and BTN0_REG2='0') else '0';
Deteccin de
flanco de subida
biest_T: Process (Reset, Clk)
begin
if Reset = '1' then biestable T cuya PULSO_BTN0 Q_T
Q_T <= '0'; entrada T Q
elsif Clk'event and Clk='1' then PULSO_BTN0 se ha
if PULSO_BTN0 = '1' then transformado en Reset
Q_T <= NOT Q_T; un pulso de un
end if; Clk
ciclo de reloj
end if;
end process;
Asignacin al puerto de salida Q_T es necesario
LD0 <= Q_T;
porque los puertos de salida no se pueden leer

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
procesoselvalordelassealesnoseactualizainmediatamentesinoqueseactualizan
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 Juan Carlos


5. Elementos de memoria

Debido a esto, el proceso 521 es equivalente al proceso 520. Aunque las asignaciones
estncambiadasdeorden.
biest_Ds: Process (Reset, Clk) biest_Ds: Process (Reset, Clk)
begin begin
if Reset = '1' then if Reset = '1' then
BTN0_REG1 <= '0'; BTN0_REG1 <= '0';
BTN0_REG2 <= '0'; BTN0_REG2 <= '0';
elsif Clk'event and Clk='1' then elsif Clk'event and Clk='1' then
BTN0_REG1 <= BTN0; BTN0_REG2 <= BTN0_REG1;
BTN0_REG2 <= BTN0_REG1; BTN0_REG1 <= BTN0;
end if; end if;
end process; end process;
Cdigo 5-20: Proceso que implementa los 2 Cdigo 5-21: Proceso equivalente al 5-20
biestables D

Ahora,creaunnuevoproyectoeimplementaenlaFPGAestecircuitoycompruebaque
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
porquelospulsadoresdelaBasysnotienenelcircuitodeeliminacinderebotes(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 sehan 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.LascondicionesdebenterminarenELSEynoELSIF.
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).Elcronogramadeestassealessemuestraenlafigura6.1.Comose
puedeapreciar,laseal S1segestara1solamenteduranteuncicloderelojduranteun
segundo.
T=1 s (f = 1Hz)

(no est a
T=20 ns escala)

Clk

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.
(no est a escala)
T=1 s
T=20 ns
T=20 ns
P_Conta1seg Biestable T
S1seg
Clk Clk S1seg T Q LED

50 MHz Reset 1 Hz Clk

Cada segundo le llega un '1' y entonces


cambiar de estado (se encender y apagar)
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(50106).Lamenorpotencia14dedossuperiora50106es26.Estoes,226>50106>
225. Por tanto, necesitamos 26 bits para poder representar el nmero 50106. As que
nuestrasealdecuentavaatener26bits.
Para llevar la cuenta se puede utilizar una seal de tipo entero o natural (integer o
natural).Estasealdebedetenerunrangopotenciadedos.Sudeclaracinsera:
signal cuenta : natural range 0 to 2**26-1;
Fjatequeelrangodelosenterosonaturalesesascendente(toenvezde downto comolo
eraenlos std_logic_vector).
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:
signal cuenta256 : natural range 0 to 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
architecture Behavioral of conta1seg is
signal cuenta : natural range 0 to 2**26-1;
constant cfincuenta : natural := 50000000;
signal s1seg : std_logic;
signal ledaux : std_logic;
begin

-- Proceso que genera la senal periodica de 1 segundo


P_conta1seg: Process (reset, clk)
begin
if reset = '1' then
cuenta <= 0;
s1seg <= '0';
elsif clk'event and clk = '1' then
if cuenta = cfincuenta-1 then -- aqui se pone la constante en vez de 49999999
cuenta <= 0;
s1seg <= '1';
else
cuenta <= cuenta + 1;
s1seg <= '0';
end if;
end if;
end process;

-- biestable T que cambia con la senal s1seg, cada segundo


P_LED: Process (reset, clk)
begin
if reset = '1' then
ledaux <= '0';
elsif clk'event and clk='1' then
if s1seg = '1' then
ledaux <= not ledaux;
end if;
end if;
end process;

LD0 <= ledaux;


end Behavioral;
Cdigo 6-1: Arquitectura del contador

14Paracalcularelnmerodebitsquenecesitas,obtnelenterosuperioralresultadodellogaritmoenbase2
delnmero.Porejemplo,log2(50106) = 25,75 26 bits.Paracalcularellogaritmoenbasedosy
notienesenlacalculadora,lopuedescalcularconellogaritmoenbase10:log2(X)=log10(X)/log10(2).Otra
forma(menoselegante)dehacerloesircalculandolaspotenciassucesivasdedoshastaencontrarlaprimera
queseamayorqueelnmero.

62 Universidad Rey Juan Carlos


6. Contadores

Ademsdelrangodelasealcuenta,fjateenlaconstantecfincuenta.Envezdeponerel
nmero directamente en la expresin condicional, se pone una constante que hace ms
entendibleelcdigo.
Losdosprocesosdelcdigo61sepuedenunirenunosolo(cdigo62).
P_conta1seg: Process (reset, clk)
begin
if reset = '1' then
cuenta <= 0;
ledaux <= '0';
elsif clk'event and clk = '1' then
if cuenta = fincuenta-1 then
cuenta <= 0;
ledaux <= not ledaux;
else
cuenta <= cuenta + 1;
end if;
end if;
end process;
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 (reset y clk) 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).
Loqueharemosesutilizarlaseal s1segquecreamosenelejercicioanterior(figura6.1y
cdigo61)paracontarcadasegundo.Asqueutilizaremosdoscontadores,unoquenos
pasade50MHza1Hzyquecrealaseal s1seg;yelotrocontadorcontardiezcuentas
de un segundo (s1seg). El esquema del circuito se muestra en la figura 6.3. A este
esquemalefaltaelcontroldelosnodosparaqueluzcaeldisplay(repasalaprctica4).
Como puedes observar, la cuenta de 10 segundos se mostrar por un display de siete
segmentosyporcuatroLED.
LED(3:0)

CONV_7SEG
P_Conta1seg PConta10segs
4 6
S1seg conta10s
Clk Clk S1seg
Reset SEG(6:0)
Clk
PB3

Reset A

T=20 ns (no est a escala) F G B


T=1 s
E C
D
T=20 ns
Clk

50 MHz
1 Hz
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
naturalesnoserecomiendacuandoqueremosmostrarlosporundisplay(oporcualquier
otromedio).Estosedebeaqueenloscircuitoslosnmerosserepresentanenbinario,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: std_logic_vector.Sinembargo,sabemosdelaopasado
que la representacin de un nmero cambia si utilizamos nmeros sin signo (binario
puro)oconsigno(habitualmentecomplementoa2).Porejemplo,elnmerosilasealS
=1001,sereselnmero9siesunnmerosinsigno,oserelnmero7siesconsigno
encomplementoados.
Asqueparapodercomparar,sumaryrestarnmerosbinariosnecesitamossabersison
nmeros sin signo o si estn en complemento a dos. Para ello se utilizan los tipos:
unsigned y signed. Su declaracin y manejo es similar al de los std_logic_vector. Por
ejemplo,ladeclaracindelasealconta10s,quequeremosqueseaunnmeroquecuente
de0a9,ser:

signal conta10seg : unsigned (3 downto 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.
Parautilizarlostipos unsignedy signedesrecomendablecambiardebibliotecas,envez
de utilizar las predeterminadas por el ISEWebpack (ver cdigo 64), se recomiendan las
delcdigo65.EstoestenlacabeceradetodoslosdiseosquecreaelISEWebpack.As
queapartirdeahora,siemprequecreesunanuevafuente,quitalasqueestnenelcdigo
64(lassealadasennegrita)ycmbialasporladelcdigo65(labibliotecaNUMERIC_STD).

library IEEE; library IEEE;


use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.NUMERIC_STD.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

Cdigo 6-4: Bibliotecas por defecto que pone el ISE Cdigo 6-5: Bibliotecas recomendadas

Elprocesoqueseencargadecontarlosdiezsegundos(PConta10segs)vaacontarconla
seal conta10seg,queesdetipo unsigned (ver cdigo63).Elprocesosemuestraenel
cdigo 66. Fjate en la ltima sentencia: debido a que la seal conta10seg es de tipo
unsigned y el puerto de salida LED es de tipo std_logic_vector, hay que convertir
conta10sega std_logic_vector.Parahaceresto,esnecesarioqueambassealestenganel
mismonmerodebits(enestecaso 4:3 downto 0).

64 Universidad Rey Juan Carlos


6. Contadores

P_CONTA10SEG: Process (reset, clk) -- contador de 10 segundos


begin
if reset = '1' then
conta10seg <= (others => '0');
ledaux <= '0';
elsif clk'event and clk='1' then
if s1seg = '1' then -- contamos al
if conta10seg = 9 then
conta10seg <= (others => '0');
else
conta10seg <= conta10seg + 1;
end if;
end if;
end if;
end process;

-- hay que hacer un "cast" para convertir de unsigned a std_logic_vector


LED <= std_logic_vector (conta10seg);
Cdigo 6-6: Proceso que cuenta 10 segundos

AhoraimplementaestecircuitoenlaFPGA,lasentradasysalidasdelcircuitosemuestran
enlafigura6.4
CONTA_10SEGS
6
Clk SEG(6:0)

4
LED(3:0)
PB3 Reset
4
AN(3:0)

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:S1decima,estedivisorde
frecuenciasersimilaralquegenerabaunadeunsegundo,perolacuentaser10veces
menor.Lasealresultante,envezdesercomoladelafigura6.1,sercomolamostrada
en la figura 6.5. Fjate que la seal S1decima est a uno enun slo ciclo de reloj durante
todosuperiododeunadcimadesegundo.
T=0,1 s (f = 10Hz)

(no est a
T=20 ns escala)

Clk

S1decima

Figura 6.5: Cronograma de la seal de una dcima de segundo que queremos obtener

ElprocesoqueimplementalasealS1decimaessimilaralproceso P_Conta1segdelcdigo
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 PConta10segs (figura

Departamento de Tecnologa Electrnica 65


Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10

6.3).DecadaprocesoobtendremoslacuentaenBCD(4bits)yunasealqueindicarel
findecuentaparahacercontaralsiguientecontador.
Elesquemainicialdelcronmetrosemuestraenlafigura6.6.Lefaltaraincluirlapartede
visualizacinporlosdisplaysqueladiscutiremosmsadelante.
P_Conta1decima PConta10decimas PConta10seg PConta60seg PConta10min
S1decima S1seg S10seg S60seg
Clk S1decima S1seg S1seg S10seg
4 4 4 4
Clk decimas segundos dec_segundos minutos
Reset
Clk Clk Clk Clk
PB3

Reset Reset Reset Reset

decimas(3:0) segundos(3:0) dec_segundos(3:0) minutos(3:0)



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_Conta1decima es igual que el proceso P_conta1seg del cdigo 61,
nicamentehayquecambiarelrangodelaseal cuentayelvalordelaconstantedefin
decuenta(ahoravaldr5000000).Culseraelrangodelasealcuenta?
El resto de procesos son similares al proceso P_Conta10seg del cdigo 63, pero hay que
cambiar los nombres de las seales y crear las seales de fin de cuenta: S1seg, S10seg,
S60seg.Porejemplo,elproceso PConta10decimas(verfigura6.6),seracomoelmostrado
enelcdigo67(lafigura6.7muestraelesquemadelcontadordedcimas).Lacuentade
diezdcimasdesegundosproducelasealdeavisodequehatranscurridounsegundo:
s1seg.
P_CONTA10DECIMAS: Process (reset, clk)
PConta10decimas
begin S1seg
if reset = '1' then S1decima
S1seg
decimas <= (others => '0'); decimas
4
s1seg <= '0';
elsif clk'event and clk='1' then
s1seg <= '0'; Clk
Reset
if s1decima = '1' then
if decimas = 9 then
decimas <= (others => '0'); Reset
s1seg <= '1';
else decimas(3:0)
decimas <= decimas + 1;
end if; Figura 6.7: Esquema del proceso contador de dcimas
end if;
end if;
end process;
Cdigo 6-7: 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 Juan 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
sinlahabilitacin.Latabla61muestralosdisplaysqueseenciendenyelnmeroquese
muestrasegnlosinterruptoresqueestnactivados.
SW7 SW6 nodo DISPLAY
0 0 AN3 dcimas
0 1 AN2 segundos
1 0 AN1 decenas de segundos
1 1 AN0 minutos

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).
DECOD_2a4
AN3-AN0
SW6 I(0) S0 AN(0)
SW7 I(1) S1 AN(1) Controlamos
qu display
S2 AN(2) se enciende
Lo hacemos sin
habilitacin S3 AN(3)
(siempre habilitado)
Negamos porque los
displays se controlan
con lgica inversa
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
decimas(3:0) 00
CONV_7SEG SEG_A-SEG_G
4
segundos(3:0) 01 mostrar(3:0)
4 6
4 SEG(6:0)
dec_segundos(3:0) 10
4
minutos(3:0) 11

SW6 2
I(1:0)
SW7

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_Conta1decima PConta10decimas PConta10seg PConta60seg PConta10min


S1decima S1seg S10seg S60seg
Clk S1decima S1seg S1seg S10seg
4 4 4 4
Clk decimas segundos dec_segundos minutos
Reset
Clk Clk Clk Clk
PB3

decimas(3:0)
Reset Reset Reset Reset

segundos(3:0)

dec_segundos(3:0)
minutos(3:0)
4 4 4 4

AN3-AN0
DECOD_2a4 I(1:0) 00 01 10 11
I(1:0) S0 AN(0) CONV_7SEG SEG_A-SEG_G
SW6
SW6 S1 AN(1) SW7
4 mostrar(3:0) 6
SW7 S2 AN(2) SEG(6:0)
El nmero que se
S3 AN(3)
muestra segn estn
los interruptores
Figura 6.10:Esquema completo del cronmetro con visualizacin manual

Ahoracreaunnuevoproyectollamado crono_manual,implementaeldiseodelafigura
6.10 en la FPGA y comprueba que funciona. Evidentemente, es un cronmetro de
prestacionesmuymalas,porquenopuedesvisualizarsimultneamentemsdeuncifra.
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.
Lasolucinpodraserqueenvezdequenosotroscambiemoslaseal I(1:0)moviendo
los interruptores SW6 y SW7, hicisemos un circuito que haga como si los movisemos
peridicamentedemaneraautomtica.Lavelocidaddelcambiodebesertanrpidaque
no sea perceptible por nosotros los humanos. Por ejemplo, si cambiamos el display cada
milisegundoseguramentenonosdemoscuentadequeestcambiando,salvoquecomo
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_conta1seg 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 (s1mili) como la
mostradaenlafigura6.11.
T=1ms (f = 1kHz)
Relacin:
(no est a
T=20 ns frecuencia
escala)
50MHz
= 50000
clk 1kHz
50MHz periodo
1ms 1000000ns
s1mili = = 50000
20ns 20ns
1kHz
Figura 6.11 : Cronograma de la seal de una milsima de segundo que queremos obtener

68 Universidad Rey Juan Carlos


6. Contadores

A partir de la seal de un milisegundo (s1mili) realizaremos una cuenta de cuatro (de


ceroatres)paraseleccionareldisplayquevaaluciryelnmeroquesevaamostrar.Esta
seal (cuenta4ms) tendr una funcionalidad equivalente a la seal I que antes era
gobernadaporlosinterruptores(verfiguras6.8,6.9y6.10).
Enlafigura6.12semuestraelmultiplexadoeneltiempo.Encadamilisegundosemuestra
undisplaydistinto(slohayunnodoactivo).Lafrecuenciaderefrescodeldisplayesde
250Hz(T=4ms).Esmuyimportanteseleccionarelnmerocorrespondientealnodoque
sevaaseleccionar.
T=1 ms

s1mili
Segundos
CUENTA4MS 0 1 2 3 0 1 2 3
minutos decenas unidades dcimas

AN_0

AN_1
M DS US dec

AN_2
AN_3 AN_2 AN_1 AN_0

AN_3
Segn el valor de CUENTA4MS
mostrar dec US DS M US DS UM DM se selecciona las dcimas, las
unidades o decenas de segundos
4 x 1 ms o los minutos

Figura 6.12:Multiplexado en el tiempo para mostrar los displays

Elesquemadelcircuitofinalsemuestraenlafigura6.13.Creaunnuevoproyectollamado
crono_autoeimplemntaloenlaFPGA.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_Conta1decima PConta10decimas PConta10seg PConta60seg PConta10min


S1decima S1seg S10seg S60seg
Clk S1decima S1seg S1seg S10seg
4 4 4 4
Clk decimas segundos dec_segundos minutos
Reset
Clk Clk Clk Clk
BTN3

decimas(3:0)
Reset Reset Reset Reset

segundos(3:0)

dec_segundos(3:0)
minutos(3:0)
P_Conta1mili PConta4milis 4 4 4 4

S1decima 2
Clk S1mili cuenta4ms cuenta4ms
00 01 10 11
Clk
CONV_7SEG SEG_A-SEG_G
Reset
Clk 4 mostrar(3:0) 6
BTN3 SEG(6:0)

Reset

DECOD_2a4
Lo que antes era I 2
I S0 AN(0)
SW6 I(1:0)
S1 AN(1) AN3-AN0
SW7
S2 AN(2)
S3 AN(3)

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?
Enlafigura6.14semuestracmoseraestecircuito.Estecircuitoesunaalternativams
costosaentrminosderecursosrespectoalcircuitodelafigura6.9.Tantoporqueusams
convertidores,comoporqueelmultiplexortieneunanchodebusdelosdatosmayor(7
bits frente a 4). Al disear en VHDL debes tener muy presente qu circuito ests
generandoparaevitardesperdiciarrecursos.

70 Universidad Rey Juan Carlos


6. Contadores

CONV_7SEG
4
decimas(3:0) 6

CONV_7SEG
6
4
segundos(3:0) 00
6
6
01 7
SEG(6:0)
CONV_7SEG 6
4
10
dec_segundos(3:0) 6
11
2
CONV_7SEG
4
minutos(3:0) 6

I(1:0)

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 0a 7 (3 bits), y no se desbordar, estoes, si pulsamos el UP estando en
sietesequedarfijo(nopasaacero),ysiledamosal DOWNestandoencero,sequedaren
cero(nopasaasiete).
ElresetdelcircuitoiralpulsadorBTN4.
Eldiagramadeestadosdelcontadorsemuestraenlafigura6.15.
P_UP P_UP P_UP P_UP P_UP P_UP P_UP
P_UP

0 1 2 3 4 5 6 7

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,
debemosrealizarundetectordeflancoparacadapulsador.Poreso,enlafigura6.15las
sealesnoson UPy DOWNsino P_UPy P_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

Detecta_flanco PConta CONV_7SEG


3
BTN0 UP P_UP P_UP CUENTA
6
SEG(6:0)
BTN1 DOWN P_DOWN P_DOWN

Clk Clk Clk


Reset Reset
BTN3
Figura 6.16: Esquema del contador que implementaremos

Intenta realizar el contador t slo (proceso PConta de la figura 6.16). Si no te sale,


consultaelcdigo68
P_conta: Process (reset, clk)
begin
if reset = '1' then
conta <= (others => '0');
elsif clk'event and clk='1' then
if pulso_up = '1' then
if conta /= 7 then
conta <= conta + 1;
end if;
elsif pulso_down = '1' then
if conta /= 0 then
conta <= conta - 1;
end if;
end if;
end if;
end process;
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 (integer o natural) deben de tener un rango
potenciadedos.Porejemplo:singal conta : integer range 0 to 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.
Lostiposintegerynaturalsepuedenutilizarpararealizarcuentasinternas,peropara
realizarcuentasquevanaserutilizadasporotrosprocesosobloques,serecomienda
utilizarlostiposvectoriales:unsignedysigned.Pararepresentarnmerosesimportante
utilizarestostiposenvezdeltipostd_logic_vector,paradistinguirsilarepresentacin
delnmeroesenbinariopuro(sinsigno)oencomplementoados(consigno).
Alusarlostiposunsigned ysignedserecomiendautilizarlabibliotecaNUMERIC_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 Juan 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.Laordendedesplazamientoladarelpulsador BTN2.
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.
Lo que haya en los interruptores se
carga en el registro cuando CARGA='1'

SW7 SW6 SW5 SW4 SW3 SW2 SW1 SW0

BTN0 CARGA
BTN2 DESPL_IZQ

7 6 5 4 3 2 1 0

Clk Clk Lo que haya en el


registro se mueve a la
Reset izquierda cuando
DESPL_IZQ='1'
BTN3
LD7 LD6 LD5 LD4 LD3 LD2 LD1 LD0
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_registro: Process (reset, clk)


begin
if reset = '1' then
registro <= (others => '0');
elsif clk'event and clk='1' then
if pulso_carga = '1' then
registro <= dato;
elsif pulso_desplz_izq = '1' then
registro (7 downto 1) <= registro (6 downto 0); -- desplazamiento a izquierda
end if;
end if;
end process;
Cdigo 7-1: Cdigo del proceso de registro de desplazamiento

Sihasentendidolasprcticasanteriores,nodeberasdetenerproblemasparaentenderel
cdigo71,salvoparalasentenciaresaltadaennegrita.
Estasentenciaseraequivalentealassealadasennegritaenloscdigos72y73
P_registro: Process (reset, clk) P_registro: Process (reset, clk)
begin begin
if reset = '1' then if Reset = '1' then
registro <= (others => '0'); registro <= (others => '0');
elsif clk'event and clk='1' then elsif clk'event and clk='1' then
if pulso_carga = '1' then if pulso_carga = '1' then
registro <= dato; registro <= dato;
elsif pulso_desplz_izq = '1' then elsif pulso_desplz_izq = '1' then
registro (7) <= registro (6); registro (1) <= registro (0);
registro (6) <= registro (5); registro (2) <= registro (1);
registro (5) <= registro (4); registro (3) <= registro (2);
registro (4) <= registro (3); registro (4) <= registro (3);
registro (3) <= registro (2); registro (5) <= registro (4);
registro (2) <= registro (1); registro (6) <= registro (5);
registro (1) <= registro (0); registro (7) <= registro (6);
end if; end if;
end if; end if;
end process; end process;
Cdigo 7-2: Cdigo equivalente al cdigo 7-1 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
registro(0) se propagara inmediatamente a todos los dems bits, no ocurre porque el
registro(1)notomaelvalorderegistro(0)hastaquesesaledelproceso.

Loqueocurrealdesplazaralaizquierdasemuestraenlafigura7.2.
7 6 5 4 3 2 1 0

Antes de
desplazar

bit 0 se
bit 7 se mantiene
pierde y se
7 6 5 4 3 2 1 0 duplica

despus de
desplazar

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 Juan 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

7 6 5 4 3 2 1 0

Antes de
desplazar

bit 7 va
al bit 0
7 6 5 4 3 2 1 0

despus de
desplazar

Figura 7.3: Rotacin a la izquierda

Esteprocesosemuestraenelcdigo74.
P_registro: Process (reset, clk)
begin
if reset = '1' then
registro <= (others => '0');
elsif clk'event and clk='1' then
if pulso_carga = '1' then
registro <= dato;
elsif pulso_desplz_izq = '1' then
registro <= registro (6 downto 0) & registro(7); -- rotacion izquierda
elsif pulso_desplz_dcha = '1' then
registro <= registro(0) & registro (7 downto 1); -- rotacin derecha
end if;
end if;
end process;
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_registro: Process (Reset, Clk)
begin
if Reset = '1' then
registro <= (others => '0');
elsif Clk'event and Clk='1' then
if pulso_carga = '1' then
registro <= dato;
elsif pulso_desplz_izq = '1' then
registro (7 downto 1) <= registro (6 downto 0) -- rotacion izquierda
registro (0) <= registro(7);
elsif pulso_desplz_dcha = '1' then
registro (7) <= registro(0); -- rotacin derecha
registro (6 downto 0) <= registro (7 downto 1);
end if;
end if;
end process;
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.
Paraellovamosarealizarundivisordefrecuenciaquedunaseal(s1decima)conuna
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",demodoquehayaunsloLEDencendido.Elesquemadelcircuitose
muestraenlafigura7.4.
P_Conta1decima P_RotaReg
S1decima 8
S1decima registro LED(7:0)
Clk rota_izq
Clk
Reset Clk Reset
PB3

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 Juan 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 probar15 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:
Unareferencia16(instanciacin)alcircuitoaprobar
Uno o varios procesos que generan los estmulos de entrada al circuito (tambin
conocidoscomovectoresdetest).Estosprocesossimulanlasentradasdelcircuitoen
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.
Losprocesosdelbancodepruebasnosevanaimplementarenhardware,sonslopara
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

banco de
pruebas Unidad que se quiere
comprobar su correcto
TB_UUT funcionamiento

P_Inputs

Proceso que simula


las entradas al UUT
circuito In1
4
Observamos si las salidas
Out1
In2 son las que tiene que ser.
P_Clk Clk Out2
Clk
Reset

Proceso que
simula el reloj P_Reset

Proceso que simula el Reset


Figura 8.1: Esquema general de un banco de pruebas

Acontinuacinvamosaverlosbancosdepruebasylasimulacinconunejemplosencillo

8.1. Ejemplo sencillo


Vamosarealizaruncontadormuybsicoquecuentede0a15.Estecontadorvaacontar
ciclosdereloj,portanto,siloimplementsemosenlaplacanoseramoscapazdeverla
cuentaporsurapidez.
Los puertos de entrada y salida del circuito se muestran en la figura 8.2. La salida del
circuito(CUENTA)serununsignedquecontarde0a15.Acurdatedeincluirlabiblioteca
IEEE.NUMERIC_STD.ALL,yquitarlasdosltimasqueseincluyenpordefecto.

Conta

4
CUENTA Definiremos CUENTA como unsigned
Clk Clk
Reset


Figura 8.2: Puertos de entrada y salida del contador que vamos a probar

Asquecreaunproyectonuevollamado simul_contaycreaelcomponenteVHDL conta.


Esteseruncontadorde0a15ascendente.Contarciclosdereloj.Sinoteacuerdascmo
sehacenloscontadores,repasaelcaptulo6.
Unavezquelotengashechoyhayascomprobadoquelasintaxisestbien,procederemos
asimularlo.Paraellocrearemosunbancodepruebas:
CreamosunanuevafuenteProject New Source
IndicamosquelafuentevaaserdeltipobancodepruebasdeVHDL: seleccionaVHDL
Test BenchynmbralaTB_CONTA (verfigura8.3).

78 Universidad Rey Juan Carlos


8. Simulacin


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

Enlasiguienteventanaseseleccionalaentidadqueelbancodepruebasvaaprobar
(testear). Como slo hay una (conta), no hay ms opcin que seleccionar, por tanto
pinchamosenNext.YluegoenFinish.
ComoresultadonosaparecerlaentidadylaarquitecturaVHDLdelbancodepruebas.
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 numeric_std igual que hiciste
conlaentidad(figura8.4A).Recuerdaelcdigo65.
Laentidaddelbancodepruebasestlafigura8.4B.Fjatequeestaentidadnotiene
puertos.
Dentro de la parte declarativa de la arquitectura (antes del BEGIN de la arquitectura)
debesincluir:
La declaracin del componente que vas a probar (figura 8.4C). El nombre de los
componentesylospuertosdebendecoincidirconladeclaracindelaentidad(deconta,
en este caso). Aqu tendrs que cambiar el tipo de la seal cuenta, pues si seguiste las
instrucciones,debeserununsigned.
Lassealesdeentradadelcomponente,queirnasuspuertos:resetyclk(figura8.4D)
Lassealesdesalidadelcomponentes,queirnasuspuertos: cuenta,quetendrsque
cambiaratipounsigned.(figura8.4E)
Yaenlapartedesentenciasdelaarquitectura(despusdel begin),vienelareferencia
(instanciacin)delcomponente(figura8.4F).Aquserealizaelmapeo(portmap)delos
puertosdelcomponenteconlassealesdelbancodepruebas.
Porltimo,elISEhacreadounprocesovacoquetenemosquerellenarparaincluirlos
estmulosquelevamosaintroduciranuestrocomponenteconta10(figura8.4G)

Departamento de Tecnologa Electrnica 79


Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10

LIBRARY ieee; Bibliotecas utilizadas


USE ieee.std_logic_1164.ALL;
Quitamos la A
USE ieee.std_logic_unsigned.all;
USE ieee.numeric_std.ALL;
std_logic_unsigned

ENTITY tb_conta_vhd IS La entidad del banco de pruebas


B
END tb_conta_vhd; no tiene puertas de entada/salida

ARCHITECTURE behavior OF tb_conta_vhd IS

-- Component Declaration for the Unit Under Test (UUT)


COMPONENT conta10
PORT(
Reset : IN std_logic;
Declaracin del
Clk : IN std_logic; componente que vamos C
cuenta : OUT std_logic_vector(3 downto 0) a probar (UUT)
);
END COMPONENT; cambiar a unsigned

--Inputs Seales que vamos a generar


SIGNAL Reset : std_logic := '0'; (estmulos): entradas a conta, D
SIGNAL Clk : std_logic := '0';
Seales que vamos a observar
--Outputs
SIGNAL cuenta : std_logic_vector(3 downto 0); si estn bien. Salidas del
componente conta E
BEGIN cambiar a unsigned
-- Instantiate the Unit Under Test (UUT)
uut: conta10 PORT MAP( Referencia (instanciacin) del
F
Reset => Reset,
componente conta (a probar)
Clk => Clk,
cuenta => cuenta
);

tb : PROCESS
BEGIN
Patrn de ejemplo para generar
-- Wait 100 ns for global reset to finish los estmulos: Generar los
wait for 100 ns; valores de las seales de G
entrada,
-- Place stimulus here En este caso de Reset y Clk

wait; -- will wait forever


END PROCESS;

END;
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
(puedehabervariasreferenciasauncomponente),lareferenciaempiezaconunnombre
quela identificademaneranica.A continuacinseincluyeelnombredelcomponente
que se referencia. Este nombre debe de coincidir con el nombre de la entidad de dicho
componente.
Porltimo,enelmapeodelospuertos(portmap)alaizquierdaseponenlosnombresde
lospuertosdelcomponente,yaladerechalosnombresdelassealesdelaarquitectura
delbancodepruebas.Estosnombres,aunqueloshemospuestoiguales,notienenporqu
coincidir.Lafigura8.5muestrademaneramsgrficaestaexplicacin.

80 Universidad Rey Juan Carlos


8. Simulacin

nombre de la
referencia
("instanciacin"). nombre del componente que
Debe ser nico estamos "instanciando".
Debe ser el mismo que el
nombre que le dimos a la Entidad del componente que estamos testeando
entidad entity conta is
uut: conta Port (
PORT MAP( Reset : in STD_LOGIC;
Reset => Reset,
Clk : in STD_LOGIC;
Clk => Clk, mapeo de puertos cuenta : out UNSIGNED (3 downto 0)
cuenta => cuenta );
); end conta;

puertos del seales de la


componente arquitectura
del banco de
pruebas

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.
TenemosdosentradasanuestrocircuitoConta:elrelojyelreset.Generaremosunproceso
independienteparacadaunadeellas:
Elprocesodelrelojdebedegenerarunasealderelojperidicade20ns(50MHz).Dicha
sealderelojestarlamitaddeltiempoaceroylaotramitadauno(figura8.6).
20 ns

10 ns

CLK


Figura 8.6: Periodo de la seal de reloj

LosprocesosdelVHDLsontilesparagenerarsealesperidicasparasimulacin.Para
ello se utilizan procesos sin lista de sensibilidad pero con sentencias "wait for". Al
terminar un proceso, si no tiene lista de sensibilidad, el simulador vuelve a entrar
inmediatamenteenelprocesohastaencontrarunasentencia wait.Lasentenciadetienela
ejecucindelprocesohastaquetermineeltiempoindicadoporlasentencia "wait for".
Vemosloconunejemplo.Queremosrealizarelprocesoquegeneralasentenciadereloj.
Recuerdaqueestamoshablandoparasimulacin,estasentencianosepodrimplementar
en la FPGA. El cdigo 81 muestra cmo se genera una seal de reloj para simulacin.
Copiaesteprocesoenelbancodepruebas.
P_Clk: Process
begin
clk <= '1';
wait for 10 ns;
clk <= '0';
wait for 10 ns; -- al terminar aqui, vuele al principo
end process;
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 wait la hacemos con un
tiempo que no sea mltiplo del reloj para evitar que sean seales simultneas, pues es
algoimprobableypuedellevarnosaalgunaconfusinenlasimulacin.
Paraelresetnoqueremosqueelprocesosevuelvaaejecutarunavezterminado,porlo
tantoterminaremoselprocesoconun waitquenotengatiempo.Estoharqueelproceso
semantengaesperandoeternamente(seacabaelprocesoconesewait).
P_Reset: Process
begin
reset <= '0';
wait for 45 ns; -- esperamos un tiempo no multiplo del reloj
reset <= '1'; -- pulsamos el reset
wait for 40 ns;
reset <= '0'; -- soltamos el reset pasados 85 ns desde el principio
wait; -- esperamos eternamente -> se para el proceso
end process;
Cdigo 8-2: Cdigo que simula el funcionamiento del reset

Incluyeelprocesodelcdigo82enelbancodepruebas.Yahorapasaremosasimularlo.
ElprimerpasoesseleccionarelentornodelISEparasimulacin(figura8.7).

Seleccionamos
Behavioural
Simulation


Figura 8.7: Seleccin del entrono para simulacin

Acontinuacin,enlaventanadeprocesos,tedeberaparecerXilinx ISE Simulator(figura


8.8)

82 Universidad Rey Juan Carlos


8. Simulacin

El banco de
pruebas tiene
que estar
seleccionado

Debe aparecer
Xilinx ISE
Simulator


Figura 8.8: Entrono para simulacin

SienvezdelXilinx ISE SimulatorteapareceModelsimocualquierotro,debescambiarlas


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...


Figura 8.9: Cambio de las propiedades del proyecto

Alpincharen Properties,tesaldrunaventanaconlaquepodrsseleccionarelXilinxISE
Simulator(figura8.10).LuegopinchaenOk.

Seleccionamos
ISE Simulator


Figura 8.10: Seleccin del ISE Simulator

Ahora,enlaventanadeSourcesvuelveaseleccionarelbancodepruebas:tb_conta_vhd.Y
dentro de la ventana de Processes, pincha dos veces en Simulate Behavioral Model (figura
8.11).

84 Universidad Rey Juan Carlos


8. Simulacin

Selecciona el
banco de
pruebas

Pincha dos
veces para
simular


Figura 8.11: Arranque de la simulacin

Acontinuacinversunaventanaconelcronogramadelasimulacin(figura8.12).


Figura 8.12: Resultado de la simulacin

La seal cuenta 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 cuenta


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.
Aunqueavecessepuedenaveriguarloserroresconapartirdelassalidasdelcircuitos,
normalmenteesresultainmediato.
Lacomprobacindelosdiseosesunatareaqueenmuchoscasossuperaentiempode
desarrolloalapropiatareadeldiseo,portanto,nosedebedesestimarsuimportancia.
Enesoscasos,lacomplejidaddelosbancosdepruebapuedesermuyelevada.
As que en este captulo slo hemos hecho una primera aproximacin a la simulacin y
comprobacindecircuitos.Encursosposterioresveremosmtodosmsavanzadospara
ladeteccindeerrores[11].

86 Universidad Rey Juan Carlos


9. Mquinas de estados finitos
Lasmquinasdeestadosfinitoslashemosestudiadoenteora,enestaprcticaveremos
cmoimplementarlasenVHDL.
AunquehayvariasformasdeimplementarunamquinadeestadosenVHDL,demanera
general,nosotroslaimplementaremosmediantetresprocesos:
Procesosecuencialqueguardaelestado
Procesocombinacionalqueobtieneelestadosiguienteapartirdelestadoactualydelas
entradas
Procesocombinacionalqueobtienelasalidasapartirdelestadoactualydelasentradas
encasodequeseadeMealy.
Estostresprocesosesesquematizanenlafigura9.1.Fjatequesloelprocesosecuencial
tienerelojyreset.
estado_siguiente

P_Secuencial P_Comb_estado
D estado_actual
Clk
Clk
Reset
Reset
P_Comb_salidas

Salidas
Entradas

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
mquinadeestadosfinitos.Elesquemadeestosdosbloquessemuestraenlafigura9.2
(estosbloquespuedentenermsdeunproceso).

Departamento de Tecnologa Electrnica 87


Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10

Detector de flanco Mquina de estados


Pulso_BTN0
BTN0 LD0

Clk Clk Clk Clk


Reset Reset

Reset Reset
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 (Pulso_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.Poreso,enlaleyendadeldiagramadelafigura9.3,laentradaes Pulso_BTN0yno
directamenteelpulsador:BTN0.
Leyenda entrada
1
0
Pulso_BTN0
OFF ON
0 1 estado
LD0
0 1 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).
type estados_led is (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 BEGIN). El tipo enumerado que hemos declarado en el cdigo 91 nos permite
asignarlosvaloresLED_OFFyLED_ONalassealesquesedeclarendeltipoestados_led.
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:
signal estado_actual, estado_siguiente : estados_led;

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
estadossepuededescribircontresprocesos.Estosprocesosseexplicanenlossiguientes
apartados.

88 Universidad Rey Juan 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: Process (estado_actual, Pulso_BTN0)
begin
case estado_actual is
when LED_OFF =>
if Pulso_BTN0 = '1' then
estado_siguiente <= LED_ON;
else
estado_siguiente <= LED_OFF;
end if;
when LED_ON =>
if Pulso_BTN0 = '1' then
estado_siguiente <= LED_OFF;
else
estado_siguiente <= LED_ON;
end if;
end case;
end process;
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 (estado_actual) y segn las entradas,
obtendremoselestadosiguiente(estado_siguiente).Silocomparasconeldiagramadela
figura9.3,ambosdicenlomismo,unoencdigoyotrodeformagrfica.
Esmuyimportanteponertodoslosestadosenel CASE.Yqueentodaslasalternativasse
asigne el estado_siguiente, porque de lo contrario, se generara un latch para la seal
estado_siguiente. Y esta seal debe ser combinacional, ya que es en la seal
estado_actualdondesecreaunelementodememoriaparaguardarelvalor.

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: Process (reset, clk)
begin
if reset = '1' then
estado_actual <= LED_OFF;
elsif clk'event and clk='1' then
estado_actual <= estado_siguiente;
end if;
end process;
Cdigo 9-4: Proceso que actualiza y guarda el estado

9.1.3. Proceso combinacional que proporciona las salidas

Esteprocesocombinacionalproporcionalassalidasenfuncindelestadoactualy,encaso
dequeseaunamquinadeMealy,tambinenfuncindelasentradas.Ennuestrocaso,
comoesunamquinadeMoore,solodependerdelestadoactual.Elprocesosemuestra
enelcdigo95

Departamento de Tecnologa Electrnica 89


Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10

P_COM_SALIDAS: Process (estado_actual)


begin
case estado_actual is
when LED_OFF =>
LD0 <= '0';
when LED_ON =>
LD0 <= '1';
end case;
end process;
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


Ahoravamosaimplementartambineldetectordeflancocomomquinadeestados.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,loimplementaremoscomounamquinadeMoore(recuerdafigura5.6)
quesonmsseguras.Enlafigura9.4semuestraeldiagramadeestadosdeldetectorde
flancodesubida.
0
0 Leyenda entrada

inic s0 BTN0
0 0 0
1
1 estado
pulso_btn0
1 s01
1 salida

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

Ahoracreaunnuevoproyecto,importalosficherosVHDLyUCFdelaprcticaanterior17
ymodificaeldetectordeflancodescribindolocomolamquinadeestadosdelafigura
9.4. Por tanto, creando otros tres procesos nuevos: uno secuencial, otro combinacional
paraelestadoyelltimocombinacionalparalassalidas.
Tienesquetenerencuentaquevasacreardosmquinasdeestadoenelmismodiseo,
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
-- Estados para encender el LED
type estados_led is (LED_OFF, LED_ON);
signal estado_actual, estado_siguiente : estados_led;

-- Estados para detectar el flanco


type estados_flanco is (INIC, S0, S01);
signal est_fl_act, est_fl_sig : estados_flanco;
Cdigo 9-6: Declaracin de tipos enumerados distintos para cada mquina de estados

17Recuerda:ProjectAddCopyofSource....

90 Universidad Rey Juan Carlos


9. Mquinas de estados finitos

Implementaelcircuitoycompruebaquefuncionaigualqueantes.
9.2.1. Variante

Sitefijasenlafigura9.4,unavezquesehadetectadoelflanco,sivieneuncerosignifica
quede BTN0vienelasecuencia0101,yporlotantosegenerarndospulsosseguidos.Sin
embargoesimposiblequepodamospulsardosvecesenunintervalode40ns.Portanto,
elnuevopulsosedebeaunrebotepulsadoryenrealidadesmejornoconsiderarlo.
20ns
clk

Clk

BTN0 0 1 0 1

Pulso_BTN0

dos pulsos seguidos


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,vuelvoaINIC.
0
0

inic s0
1 0 0

1
X s01
1

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
segnelvalordeunasealdsplza_izq.Sivale1desplazaralaizquierda,sivale0a
la derecha. Haremos rotacin y no desplazamiento porque si no, en una vuelta, el
registrosellenaradeunos(tambinsepuededesplazar,peroasignandocerosalbitdel
extremo).
Elregistrodedesplazamientotendrunahabilitacin(enable).Siestaceronohabr
rotacinenningnsentido.
El habilitacin (enable) del registro de desplazamiento vendr dada por un seal
generadaenundivisordefrecuencia.Lasealtendrunafrecuenciade1dcimade
segundo.Unasealigualquelaquegeneramosenelcronmetro(apartado6.3,figura
6.5).Siquisisemosquefuesemsrpidoodespacio,cambiaramoslafrecuenciadeesa
seal.
ElvalordelregistropasadirectamentealosLED.
Elregistrodedesplazamientosereseteaconunvaloriguala00000001.Estohaceque
alresetearsiempreseenciendaelprimerLEDdeladerecha:LD0.
Laordenderotacinalaizquierdaoderecha(dsplza_izq)laproduceunamquinade
estados.Apartedelrelojyelreset,susentradassondossealesqueindicansielLED
que est encendido es uno de los extremos. As, cuando el LED de la derecha est
encendido (registro(0)) se activar la seal tope_dcha, indicando que LD0 est
encendido.SiseenciendeelLEDdelaizquierda, registro(7)valdr1yportantose
activarlasealtope_izq.
Portanto,lamquinadeestadosindicarelsentidoderotacindelosLEDhastaque
lleguealtopedeesesentidoydarlaordendeirensentidocontrariohastallegaral
otrotope.
Elesquemadeestecircuitosemuestraenlafigura9.7,dondeesteldivisordefrecuencia,
elregistrodedesplazamientoylamquinadeestados.
P_Conta1decima P_Rota
Clk S1decima Enable
Clk 8
rota_izq registro LED(7:0)
Reset
PB3
Clk Reset 1
1

MaquinaEstados
registro(7)
tope_izq
registro(0) rota_izq
tope_dcha
Clk
Clk
Reset
PB3

registro(0)
registro(7)
Figura 9.7: Esquema del circuito del movimiento alternativo de los LED

92 Universidad Rey Juan Carlos


9. Mquinas de estados finitos

Delostres bloquesdelafigura9.7,slolamquinadeestadosesundiseototalmente
nuevo. Pues el divisor de frecuencia se ha hecho en el apartado 6.3 (figura 6.5). Y el
registrodedesplazamientoessimilaralosdelaprctica7.
Acontinuacinsemuestraeldiagramadeestadosdelamquinadeestados,sinembargo,
antesdeverla,intentadeducirlaportimismo.Puesenclasesehanrealizadoproblemas
similares18.
Leyenda entradas
01
0X
tope_izq, tope_dcha
DCHA IZQ
0 1 estado
rota_izq
X0 10 salida

11: entrada imposible


Figura 9.8: Diagrama de transicin de estados

PuedesobservarqueseharealizadocomomquinadeMoore.
Fjatequehayentradasimposibles,yentradasquedanigual.EnVHDLcomolasntesis
enbiestableslavaarealizarelISEWebpackynuestraFPGAtienetamaodesobrapara
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
sealdetope19:
P_COMB_ESTADO: Process (estado_act, tope_izq, tope_dcha)
begin
case estado_act is
when IZQ =>
if tope_izq = '1' then
estado_sig <= DCHA;
else
estado_sig <= IZQ;
end if;
when DCHA =>
if tope_dcha = '1' then
estado_sig <= IZQ;
else
estado_sig <= DCHA;
end if;
end case;
end process;
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.

18Elproblemadelcarritohechoenclaseessimilar,quizsunpocomscomplicado.
http://laimbio08.escet.urjc.es/assets/files/docencia/EDII/carrito.pdf
19Sinembargo,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
llamar A, B, C y D.stossecorrespondernconlospulsadores BTN3, BTN2, BTN1y BTN0.
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,laltima Adelaclavecorrecta
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 clk y no vienen del exterior; el
circuitolopuedeshacermedianteunamquinadeMealyodeMoore.
Lasealhabilita_cuentadelamquinadeestadosestaraunohastaquesellegueal
findelatemporizacin(fin_cuenta='1').Lasealfin_cuentavaldr1duranteunslo
ciclodereloj,alterminarlacuenta.Luegovolveracero.
Todoestosonrecomendaciones,peronotienesquehacerelcircuitoexactamentecomo
sepropone.Sitienesotraideadecmodisearlo,llvalaacabo.

Departamento de Tecnologa Electrnica 95


Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10

Detector de flanco Mquina de estados


Pulso_D 8
BTN0 LD(7:1)
BTN1 Pulso_C
BTN2 Pulso_B habilita_cuenta
BTN3 Pulso_A Temporizador

Clk fin3seg Enable


Clk fin3seg
Reset
Clk Clk
Reset
Reset Clk Reset
Reset


Figura 10.1: Esquema del circuito de la clave electrnica

10.1. Variantes
PruebaahacerlamquinadeestadosconMealyyconMoore
HazquelosLEDparpadeendurantelostressegundosquesemantienenactivos
Hazelcircuitosinsolapamientodelaclave
Muestraordenadamenteporlosdisplayslasletrasqueintroduceelusuario:elltimo
carcterintroducidoeneldeladerecha,yelprimercarcter(deloscuatroltimos)en
eldelaizquierda.

96 Universidad Rey Juan 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.Alaizquierdasemuestraelcircuitoqueconectaelpulsadordelaplaca
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.

PEGASUS BASYS
Spartan-II Spartan-3E
3,3V 3,3V
PIN pulsador PIN pulsador
59 BTN0 69 BTN0
4,7k 58 BTN1 4,7k 48 BTN1
57 BTN2 47 BTN2
154 BTN3 41 BTN3
4,7k 0,1F 4,7k


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

BTN

El detector de flancos
producir 4 pulsos
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(FILTRO_BTN)seracomolamostradaen
lafigura11.3.

Departamento de Tecnologa Electrnica 97


Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10

4 flancos de subida

BTN

FILTRO_BTN

300 ms
Slo despus de 300 milisegundos podr haber un nuevo pulso
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.Enesteesquemapropuesto,eltemporizadorsehabilitacuandosehadetectadoun
flancodesubida.Apartirdeentoncesnoseproducirningnpulsodesubidahastaque
eltemporizadordlasealdequehanpasado3milisegundos.Despusdeesto,sepodr
detectarunnuevoflancodesubida.
Mquina de estados
BTN0 Filtro_BTN0

Temporizador
enablecont
fin3ms Enable
fin3ms

Clk Clk
Reset Clk Reset
Reset


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.
0X
0X
Leyenda entradas
inic s0
1X 00 00 BTN0,fin3ms
1X

X1 estado
filtro_btn0
s01
espera enablecont
10
01
salidas
X0 XX

Figura 11.5: Diagrama de estados del circuito que filtra los pulsos

Paracadapulsadorhabraquerealizaruncircuitosimilar.
Implementaelcontadormanualdelaseccin6.4conestosfiltros.UtilizaunaplacaBasys
paracomprobarquerealmentefuncionabien.

98 Universidad Rey Juan 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
activarlasalidaparaqueabralacompuertaquedejesalirlalatadebebidas.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
entradas
8
BTN3 LED(7:0) BTN3 Moneda de 1 Euro
BTN2
7 BTN2 Moneda de 50 cntimos
BTN1 SEG(7:0) BTN1 Moneda de 20 cntimos
BTN0
4 BTN0 Moneda de 10 cntimos
AN(3:0)
SW7 Reset
CLK
RESET

SW7
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
sealenable_contcomoentradadeltemporizador.
Detectaflanco Mq_estados
m1euro 8
BTN3 LED(7:0)
BTN2 m50cent
conv7seg
BTN1 m20cent
qdinero
BTN0 m10cent 7
cantidad s7seg
4
SEG(6:0)
Clk Clk fin2seg
Reset Temporizador
Clk Clk enable_cont
Reset Enable
Reset
fin2seg
Reset
Clk Reset


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.
ELdiseovaaserexactamenteigualconladiferenciadelainformacinquesemuestra
enlosdisplays.Ahorautilizaremosloscuatrodisplays(recuerdalaprctica6.3.2).
Loquesevaamostrarsegnelestadosemuestraenlafigura12.3.
Mientras no haya introducido el
Al haber introducido el dinero
dinero suficiente, se indica la
suficiente escribiremos LATA
En el inicio indicamos el precio cantidad que lleva (en decimal).
de la manera ms aproximada
Por ejemplo:
P150
C060


Figura 12.3: Indicaciones de los displays segn el estado

100 Universidad Rey Juan 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
PWMsemantieneconstante,yloquecambiaeseltiempoenquelasealsemantienea
unorespectoalperiodototal.

D=50% D=20% D=80%

T T T

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

SielperiododelPWMessuficientementepequeo,eldispositivoqueestgobernado(por
ejemplo,elmotor)nonotarlasvariacionesdelatensinyelresultadoesqueelmotor
recibir una corriente promedio dada por el ciclo de trabajo. La figura 13.2 muestra dos
PWMconciclosdetrabajodistintos.
D=50% D=50% D=50% D=50%
Equivale a una tensin
continua del 50% de la
nominal: el motor ir a un
T T T T 50% de la velocidad mxima

D=20% D=20% D=20% D=20%


Equivale a una tensin
continua del 20% de la
nominal: el motor ir a un
T T T T 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
intensidaddeunLEDmedianteunPWM.Elcontrolloharemoscondospulsadores.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.

0/7 D=0% 4/7 D=57%

1/7 D=14% 5/7 D=71%

2/7 D=28% 6/7 D=86%

3/7 D=41% 7/7 D=100%

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 (dutycycle): lo haremos con un contador igual al de la
prctica6.4,ydelamismamaneramostraremoselciclodetrabajoporeldisplay.
Generar la seal peridica que produzca una seal con periodo T (cuentaPWM). 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 (PMODHB320 o PMODHB521).
Adems,elpuenteenHnospermitiracontrolarelsentidodegiro.
En la prctica 14 se incluye la descripcin detallada VCC
de un circuito para controlar un motor paso a paso,
quesepodraadaptarparaestecaso.
M
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 R1
FPGA_PWM
prximo curso. El esquema bsico del circuito se
muestraenlafigura13.4.Segnelmotor,seescoger
latensin(Vcc),eltransistoryresistenciasadecuadas.
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 Juan Carlos


Circuitos digitales y analgicos

AcontinuacinveremosunasprcticasenlasqueademsdelaparterelativaalaFPGAy
elVHDL,realizaremosloscircuitosdepotenciayanalgicosnecesariosparainteractuar
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 internet22, 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
opuestosyelterminaldealimentacin.Elprocedimientoparadescubrirquterminales
cadaunoeselsiguiente23:
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 dealimentacin y por tanto la resistencia
entreellossercero.
22Informacindelosmotorespasoapasoenespaol:[7,24]yeningls[4,9,21,22]
23Informacinobtenidadehttp://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

L Alimentacin

L L
D B

C
Figura 14.1: Conexin interna de un motor unipolar

2. Identificarlosterminalesopuestos
Primero conectamos el terminal de alimentacin a la A
Motor se
fuente(Vcc)yponemoscualquierotroterminalatierra.A posiciona
este terminal que conectamos a tierra le llamaremos
terminal A. En la figura 14.2 se representa esta conexin.
B D
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 C
probando qu sucede al conectar cada uno de los dems Figura 14.2: El terminal A a
terminales a tierra. Esto lo hacemos por separado, es tierra
decir,encadamomentohaycomomximodosterminales
atierra.
Aquel terminal que no haga girar un paso al motor sino que haga que pierda par
resistivoserelterminalopuestoa A,estoes,serelterminal C(segnlareferenciade
la figura 14.2). En los otros dos casos, habr un pequeo giro del motor en sentidos
opuestos.Enlafigura14.3semuestraesteconceptodemaneragrfica.
A A Giro a derecha A Motor
Giro a izquierda
medio paso pierde
medio paso
par

B D B D B D

C C C
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
modeloPM55L048deMinebea,cuyashojasdecaractersticassepuedenconsultarenla
pginawebdeMinebea[16].Detodosmodos,elfuncionamientoconotrosmotoresser
similar,aunquetendrsqueleerlascaractersticasdelmotorquetengasparaadaptarel
circuito.

106 Universidad Rey Juan Carlos


14. Control de motor paso a paso

Alimentacin
(comn)

A
C

B D

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
esquemticalaposicindelrotor.Detodosmodos,esslounesquema,noseproducen
giros de 90 con cada paso, sino que son giros mucho menores (suelen ser menores de
10).
A y B a tierra A B y C a tierra A C y D a tierra A D y A a tierra A

B D B D B D B D

C C C C
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.
tiempo tiempo

1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9

A 1 1 1 1 1 A 1 1 1 1 1
terminal a tierra
terminal a tierra

B 1 1 1 1 1 B 1 1 1 1 1

C 1 1 1 1 C 1 1 1 1

D 1 1 1 1 D 1 1 1 1

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 motor24. 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, Cy D)quecuandosean1darnlaordendeponerel
terminalcorrespondientedelmotoratierra.Cuandoseancero,sepondrnalatensinde
alimentacin y no circular corriente por el devanado del motor, y por tanto, no se
activar.

CONTROL_MOTOR Pegasus Basys

BTN3 IZQ A AC0 (P49) JA1 (P81)


BTN0 DCHA
B AC1 (P48) JA2 (P91)

C AC2 (P81) JA3 (P82)

D AC3 (P47) JA4 (P92)

CLK
RESET

SW0
Figura 14.7: Bloque de control de motor de la FPGA

LassalidaslasconectaremosalosconectoresPMOD.LaPegasustieneunnicoconector
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.

24Tambinseveinfluenciadoporeltipodeelectrnicadepotencia.Conunaelectrnicaespecficasepuede
aumentarlafrecuencia

108 Universidad Rey Juan Carlos


14. Control de motor paso a paso

11X 0XX
0XX
100 100 Leyenda entradas
AB BC
1100 101 0110 CTS,BTN0,BTN3
11X
11X 101 101
estado
ABCD
DA 101 CD
1001 0011
salidas
0XX
0XX 11X 100
100
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
(unacentsimadesegundo).Estaseallatenemosquegenerardemodoqueestactiva
duranteunslocicloderelojencadacentsimadesegundo.
Otracosaquetienesquetenerencuentaesqueparaestapropuesta,lassealesdeentrada
delospulsadoresBTN0yBTN3nosetienenquepasarporundetectordeflanco,sinoquese
muestreancontinuamente,yaquequienhacedefiltroeslaseal CTS,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
msfcildepurar,lassalidas A, B, Cy DtambinlassaquesporcuatroLED.Inclusopara
depurarelcircuitopodrasbajarlafrecuenciadegiroycomprobarqueefectivamentese
generanlassecuenciasdeseadas.
Una vez que tenemos el circuito y vemos que los LED se mueven como pensamos, nos
quedahacerquelassalidas A, 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
unmotor.Porotrolado,elmotorvaalimentadoa24voltios(aunquepuedefuncionara
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.
VCC

VCC VCC VCC VCC


TA TB TC TD

R1 R1 R1 R1

FPGA_A FPGA_B FPGA_C FPGA_D


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

Estecircuitopodrafuncionarbien,sinembargohayquetenercuidadoporquelaFPGA
vaalimentadaconunafuentedetensindistintaqueladelmotor(3,3VlaFPGAy24Vel
motor).ParaevitarquecorrientesotensionesaltaslleguenalaFPGAdesdeelmotor,es
recomendable aislar la parte de la FPGA de la del motor. Para aislar ambas partes
podemosusaroptoacopladores.Losoptoacopladoresutilizanfotodiodosyfototransitores
paratransmitirinformacinproporcionandounaislamientoelctricoentreloscircuitosde
entradaysalida.Lafigura14.10muestrauncircuitoquesehaprobadoquefunciona.
VCC=24V

Mximo 24V, PM55L-48


M
pero puede
el resto de
funcionar a
terminales
partir de 5V
tienen un
VCC=24V
TA circuito igual

VCC=24V
optoacoplador

22k
220
STA471
FPGA_A

4N35
FPGA_GND
las tierras
son distintas

las dos partes del


circuito estn aisladas

Figura 14.10: Esquema del circuito con optoacopladores

110 Universidad Rey Juan Carlos


14. Control de motor paso a paso

Losdiodosquehayentreelcolectordeltransistorylaalimentacin V2CCsonparaquela
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
TIP120(darlington)ounIRL540(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.
habilitacin del
Mximo 24V,
driver a '1'
pero puede
funcionar a
Esta parte se pone
partir de 5V
a 5V para que
consuma menos
V1CC=5V V2CC=24V

V1CC=5V PM55L-48
10k M
optoacoplador V2CC=24V
el resto de
terminales
22k
tienen un
220 circuito igual
FPGA_A
TA
SN754410
ACPL_847
FPGA_GND
las tierras
son distintas

las dos partes del


circuito estn aisladas

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
diseodelaelectrnica depotenciasinadentrarnosenconceptostericosysinanalizar
alternativas,puesdaraparaunlibroentero.Laalternativaarealizareldiseoescomprar
mdulosconlaelectrnicadepotenciayquesepuedenconectaralaFPGA.

Departamento de Tecnologa Electrnica 111


15. Piano electrnico25
Enestaprcticarealizaremosunpianoelectrnico.Paraellogeneraremosunconjuntode
sealesdigitalesperidicasdefrecuenciasaudiblesylasamplificaremosparaescucharlas
por un altavoz. La parte analgica de amplificacin se puede adquirir26 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.
pulsadores

do re mi fa sol la si do

FPGA Amplificador de audio

interfaz Generador de
pulsadores frecuencias


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 LA SI DO RE MI FA SOL LA
Hz
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
suvez,lasalidadelamplificadorseconectaraunaresistenciadecarga,queennuestro

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.
3.3 V

0V
Amplificador con dos etapas

Ri Ro Ri Ro
FPGA +
Ve _
Ave ie Aie

Etapa1: Esquema general Etapa2: Esquema general


amplificador tensin amplificador corriente

Figura 15.2: Esquema general del circuito de amplificacin

Esimportantesealarqueeldiseomsbsicodelamplificadorpuedenonecesitaretapa
amplificadoradetensin.Sinembargo,puedeserinteresantedisearunaprimeraetapa
congananciaentensinvariable(utilizandounsimplepotencimetro)yasconseguirun
niveldevoltajevariablealasalida.
Pararealizareldiseodelamplificadordebemosteneruncuentalasespecificacionesdel
problemadediseo:
Paralascaractersticasdeentradadelamplificadorhayquetenerencuentaquelaseal
de entrada al amplificador (la salida de la FPGA) es una seal cuadrada cuya amplitud
varaentre0y3,3V.
Paradisearlascaractersticasdesalidadelamplificadorhayquetenerencuentaquela
resistenciade carga (altavoz) es 8 y que los altavoces utilizados pedirn una potencia
entre0,50,25W.
Finalmente,tenemosquedisearunanchodebandaadecuadoparaqueelamplificador
funcione correctamente en todas las frecuencias de las notas. En el caso ms general,
podemosdisearunamplificadorqueoperecorrectamenteenelrangodefrecuenciasde
lastresoctavas,esdecir,quelasfrecuenciasdecorteinferior(ysuperior)sesitenuna
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 Juan 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.
EstosproblemashansidoproblemasdeexmenesdelaasignaturaElectrnicaDigitalII
delacarreradeIngenieradeTelecomunicacindelaUniversidadReyJuanCarlos.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
DisearuncircuitoparacontrolarunreproductordeMP3.Paraelcontrol,eldispositivo
tiene un nico pulsador (P) y tiene dos salidas que gobiernan la reproduccin normal
(PLAY) y el avance rpido (FW). Estassalidas funcionan anivel alto ycuando 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)
ysemantendresteavancerpidohastasoltarelpulsador.Cuandosesueltese
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(enable).Elesquemadeestecircuitosemuestraenlafigura16.1.

MaqEstados

P P PLAY PLAY
T1s FW FW
T1s
Enable
Clk Reset

Enable
Temporizador

T1s
Clk Clk Reset

Reset
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
(Enable).Cuandoeltemporizadorestdeshabilitadonopodrestaractivalasealdefin
decuentaT1s.
16.2.2. Diagrama de transicin de estados

NospidenrealizareldiagramadelamquinadeestadosporMoore.
Lamquinadeestadostienedosentradas:
ElpulsadorP
LasealqueindicaquehapasadounsegundoT1S(findelacuenta)
Ytressalidas
Ordendeplay(PLAY)
Ordendeavancerpido(FW).
Habilitacindeltemporizador(Enable)

118 Universidad Rey Juan Carlos


16. Reproductor MP3

Elordendelasentradasysalidaseneldiagramaserelsiguiente(figura16.2).
entradas

P T1s

Estado
Play FW Enable
Salidas
Figura 16.2: Orden de entradas y salidas en la representacin de la mquina de estados

FjatequeesunamquinadeMoore,porloquelassalidasestnenelpropioestado.
InicialmentepartimosdelestadoINICIAL,endondePLAY='0'y Imposible
X 1
FW='0',escomoestarenpause.Enesteestadoelcontadorest
0 0
deshabilitado,ynosmantendremosaquhastaquesepulse P
(figura16.3).
INICIAL
Comoelcontadorestdeshabilitado,nuncallegarlasealde 0 0 0
quehapasadounsegundo(T1s),porloquesiempresercero.
Figura 16.3: Estado inicial

Qusucedesisepulsa Pestandoenelestado INICIAL?dependedeltiempoenqueest


pulsado, as que tendremos que ir a un estado en el que mientras est pulsado P
habilitemoslacuentayveamossisemantienepulsadomsdeunsegundoono(figura
16.4).
Imposible
X 1

0 0
1 0

INICIAL ESP1S
0 0 0 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)
Sinoocurrenadadeloanteriornosmantendremosendichoestado.Estoes,sinoseha
soltadoelpulsador(P='1')ynosehallegadoalfindecuenta(T1s='0').

Departamento de Tecnologa Electrnica 119


Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10

En Inicial: 1 0
Imposible
X 1
0 0
1 0 ESP1S prcticamente imposible que
0 0 1 sean 0 1 en ese instante
INICIAL 1 1
0 0 0 0 X

PLAY FW
1 0 0 0 1 0

Figura 16.5: Transicin a estado de reproduccin o avance

Estandoen PLAYnopuedellegarelfindecuentaporqueestdeshabilitadoelcontador.Y
nosmantendremosenesteestadomientrasnosevuelvaapulsarP.
Estando en FW no puede llegar el fin de cuenta porque est deshabilitado el contador. Y
nosmantendremosenesteestadomientrasnosesuelte P.Estasdosposibilidadessehan
aadidoenlafigura16.6.

En INICIAL 1 0
imposible
X 1
0 0
1 0 ESP1S
0 0 1
INICIAL 1 1 En PLAY y FW:
0 0 0 0 X Imposible
X 1
PLAY FW
1 0
1 0 0 0 1 0

0 0

Figura 16.6: Estado de reproduccin y avance

EstandoenFWcuandosesuelteelpulsadorP,elsistemavaalPLAY(figura16.7)

En INICIAL 1 0
imposible
X 1
0 0
1 0 ESP1S
0 0 1
INICIAL 1 1 En PLAY y FW:
0 0 0 0 X Imposible
X 1
PLAY 0 0 FW
1 0
1 0 0 0 1 0

0 0

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

Estandoen PLAYcuandosepulsa P,tenemosquecomprobardenuevocuntotiempose


pulsa.Sisepulsamsdeunsegundovamosa FWysiesmenos,vamosa INICIAL(pause).
Aspues,necesitamosotroestadodeesperaenelquevolveremosahabilitarelcontador.

120 Universidad Rey Juan 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').EnestehipotticocasodecidimosiralestadoINICIAL
(haberidoalestadoFWhubiesesidoigualmentevlido).
Enlafigura16.8semuestraeldiagramafinaldelamquinadeestados.

En INICIAL 1 0
imposible
X 1
0 0
1 0 ESP1S
0 0 1
En PLAY y FW:
INICIAL 1 1 Imposible
0 0 0 0 X X 1

se suelta P PLAY 0 0 FW
1 0
0 X
antes del 1 0 0 0 1 0
segundo 1 0
ESP1S2
0 0
1 0 1
se mantiene
1 1
se mantiene P pasado el
el play 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. Estado Q2 Q1 Q0
Comotenemos5estadosnecesitamos3biestables(yaquecondos Inicial 0 0 0
Esp1s 0 0 1
biestables slo podemos codificar cuatro estados). Escogemos una FW 0 1 0
codificacin cualquiera, por ejemplo la resultante de tomar PLAY 0 1 1
Esp2s 1 0 0
nmeros consecutivos. Seguramente habr codificaciones ms
ptimasquereduzcanlastransicionesdeunestadoaotro(perono Tabla 16.1:
Codificacin de estados
nosimporta).Lacodificacinescogidasemuestraenlatabla16.1.
Ahorarellenamoslatabladelosestadossiguientesysalidas(tabla16.2):

Departamento de Tecnologa Electrnica 121


Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10

Moore: slo
dependen del
estado
Estado Estado
actual Entradas Salidas siguiente
t+1 t+1 t+1
Q2 Q1 Q0 P T1s Pl FW En Q2 Q1 Q0
0 0 0 0 0 0 0 0 0 0 0
Inicial 0 0 0 0 1 0 0 0 X X X condiciones imposibles
0 0 0 1 0 0 0 0 0 0 1
0 0 0 1 1 0 0 0 X X X condiciones imposibles
0 0 1 0 0 0 0 1 0 1 1
Esp1s 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 condiciones imposibles
Fw
0 1 0 1 0 0 1 0 0 1 0
0 1 0 1 1 0 1 0 X X X condiciones imposibles
0 1 1 0 0 1 0 0 0 1 1
0 1 1 0 1 1 0 0 X X X condiciones imposibles
Play 0 1 1 1 0 1 0 0 1 0 0
0 1 1 1 1 1 0 0 X X X condiciones imposibles
1 0 0 0 0 1 0 1 0 0 0
1 0 0 0 1 1 0 1 0 0 0
Esp1s2 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
Estados imposibles 1 1 0 X X X X X X X X

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
biestablesJK,ponemossutabla,yapartirdeellaobtenemoslasentradasJyKparalas
cuatroposiblestransiciones(tabla16.3)

J K Q(t+1) Q(t) Q(t+1) J K


0 0 Q(t) 0 0 0 X
0 1 0 0 1 1 X
1 0 1 1 0 X 1
1 1 Q(t) 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 Juan Carlos


16. Reproductor MP3

Entradas en los biestables


Estado Estado para conseguir las t+1
actual Entradas Salidas siguiente transiciones Qi Qi
t+1 t+1 t+1
Q2 Q1 Q0 P T1s Pl FW En Q2 Q1 Q0 J2 K2 J1 K1 J0 K0
0 0 0 0 0 0 0 0 0 0 0 0 X 0 X 0 X
Inicial 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
Esp1s 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
Fw
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
Play 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
Esp1s2 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
Estados imposibles 1 1 0 X X X X X X X X X X X X X X

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
PLAY
00 01 11 10
0 0 0 1 0 PLAY = Q2 + Q1 Q0
Q2
1 1 X X X
Q2
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).

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;

entity mp3 is
Port ( Reset : in STD_LOGIC;
Clk : in STD_LOGIC;
P : in STD_LOGIC;
Play : out STD_LOGIC;
Fw : out STD_LOGIC);
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

architecture Behavioral of mp3 is


-- el estado no se puede llamar PLAY ni FW para diferenciarlos de los puertos
type estados is (INICIAL, ESP1S, ePLAY, eFW, ESP1S2);
signal estado_actual, estado_siguiente : estados;
signal T1S, enable : std_logic;
signal cuenta : unsigned (23 downto 0); -- 24 bits mayor que 10 millones
constant cfincuenta : natural := 10**7; -- contar 10 millones
begin

------------------------ PROCESO COMBINACIONAL DEL ESTADO --------------------


P_COMB_ESTADO: Process (estado_actual, T1S, P)
begin
case estado_actual is
when INICIAL =>
if P = '1' then
estado_siguiente <= ESP1S;
else
estado_siguiente <= estado_actual;
end if;
when ESP1S =>
if P = '0' then
estado_siguiente <= ePLAY;
elsif T1S = '1' then
estado_siguiente <= eFW;
else
estado_siguiente <= estado_actual;
end if;
when ePLAY =>
if P = '1' then
estado_siguiente <= ESP1S2;
else
estado_siguiente <= estado_actual;
end if;
when eFW =>
if P = '0' then
estado_siguiente <= ePLAY;
else
estado_siguiente <= estado_actual;
end if;
when ESP1S2 =>
if P = '0' then
estado_siguiente <= INICIAL;
elsif T1S = '1' then
estado_siguiente <= eFW;
else
estado_siguiente <= estado_actual;
end if;
end case;
end process;

------------------------ PROCESO COMBINACIONAL DE LAS SALIDAS (MOORE) ----------------


P_COM_SALIDAS: Process (estado_actual)
begin
case estado_actual is
when INICIAL =>
Play <= '0';
Fw <= '0';
enable <= '0';
when ESP1S =>
Play <= '0';
Fw <= '0';
enable <= '1';
when ePLAY =>
Play <= '1';
Fw <= '0';
enable <= '0';
when eFW =>
Play <= '0';
Fw <= '1';
enable <= '0';
when ESP1S2 =>
Play <= '1';
Fw <= '0';
enable <= '1';
end case;
end process;

124 Universidad Rey Juan Carlos


16. Reproductor MP3

------------------------ PROCESO SECUENCIAL --------------------------------


P_SEQ: Process (Reset, Clk)
begin
if Reset = '1' then
estado_actual <= INICIAL;
elsif Clk'event and Clk='1' then
estado_actual <= estado_siguiente;
end if;
end process;

------------------------ TEMPORIZADOR ------------------------------------------


P_Tempo: Process (Reset, Clk)
begin
if Reset = '1' then
cuenta <= (others => '0');
T1S <= '0';
elsif Clk'event and Clk='1' then
if enable = '1' then
if cuenta < cfincuenta then
cuenta <= cuenta + 1;
T1S <= '0';
else
cuenta <= (others => '0');
T1S <= '1';
end if;
else
cuenta <= (others => '0');
T1S <= '0';
end if;
end if;
end process;
end Behavioral;
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):
P+1SEG P se ha pulsado ms de 1 segundo
P-1SEG P se ha pulsado menos de 1 segundo

Temporizador MaqEstados
P+1S PLAY
P FW
P-1S
Clk Reset Clk Reset
Clk

Reset

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

Sinembargo,fjatequeelprimerbloque(elllamadotemporizador)esmuchomsqueun
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

MaqEstados1 MaqEstados2
P+1S PLAY
P
P-1S FW
Clk Reset P-1S Clk Reset

Temporizador
Enable F1S

Clk Reset
Clk

Reset
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

entradas

Por tanto, habra que definir las dos P F1s

mquinasdeestados.
Estado
Laprimeramquinadeestadossemuestra P+1S P-1S
en la figura 16.13. La interpretacin de las
entradas y salidas la tenemos en la figura Salidas
16.12. Figura 16.12: Orden de entradas y salidas en la
representacin de la primera mquina de estados

Nos mantenemos aqu


Imposible
hasta que suelte el
X 1 1 0 pulsador o pase un
0 0 segundo
1 0

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

EsimportantenotarquelasealP-1Sesactivaduranteunslociclodereloj,mientrasque
laseal P+1Sestactivatodoeltiempoqueestpulsado Papartirdequehapasadoun
segundo.

126 Universidad Rey Juan Carlos


16. Reproductor MP3

Lasegundamquinadeestadossemuestraenla entradas

figura 16.15. En la figura 16.14 tenemos la P+1S P-1s


interpretacin de las entradas y salidas. Esta
Estado2
mquina de estados fue propuesta por muchos
PLAY FF
alumnos, pero es necesario haber incluido la
primera,puescomopuedeapreciarse,laprimera Salidas
es algo ms complicada y no la segunda sola no Figura 16.14: Orden de entradas y salidas en la
funcionaracomoindicaelenunciado. representacin de la segunda mquina de estados

0 0
0 0
0 1

INIC 0 1 PLAY
0 0 1 0
0 0
La entrada 1 0 1 0
1 1 FF
es imposible
para todos 0 1
los estados 1 0


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 En Play En avance rpido
PAUS PLAY 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 A

prcticas.Estoes,tenemos4nodosquecontrolanelencendidode F G B

cadaunodelosdisplays:AN3,AN2,AN1,AN0.Recuerdaquefuncionana E C
D
nivelbajo.Ytenemos7puertosparalossietesegmentos(SA, SB, SC,
Figura 17.2:
SD,SE,SF,SG),yquetambinfuncionananivelbajo.
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(Clk)
vaa10MHz.
Display
4
estado_actual AN(3..0)
(PAUSA, PLAY,FF) 7
SEG(6..0)

Clk
Reset
(10MHz)
Reset
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
Codificacin de estados:
P.ej: "P" : Pausa 00
"0001100" Play 01
GFEDCBA FF 10

"P" 00 "A" 00 "U" 00 "S" 00


"0001100" "0001000" "1000001" "0010010"

"P" 01 "L" 01 "A" 01 "Y" 01


"0001100" 7 "1000111"
7 "0001000"
7 "0010001"
7

" " 10 SEG3 " " 10 SEG2 "F" 10 SEG1 "F" 10 SEG0
"1111111" "1111111" "0001110" "0001110"

no se usa 11 no se usa 11 no se usa 11 no se usa 11


"1111111" "1111111" "1111111" "1111111"

estado_actual

Conta1ms Conta4ms
SEG0 00
T1ms
Cuenta4ms(1..0)
4 SEG1 01
Clk 7 SEG
Reset
(10MHz) Reset
SEG2 10
Reset
Reset
SEG3 11

"1110" 00
Esto es un
decodificador "1101" 01
4 AN

"1011" 10

"0111" 11


Figura 17.4: Esquema del circuito de visualizacin

17.2.2. Modelo en VHDL

AcontinuacinsemuestraelcdigoVHDLqueimplementaelcircuitodelafigura17.4.
architecture Behavioral of temp_mux is
-- los 4 displays, preparados para ser mostrados segun la cuenta
signal SEG0, SEG1, SEG2, SEG3 : std_logic_vector (6 downto 0);
signal cuenta : unsigned (13 downto 0); -- para contar hasta 10.000
constant cfincuenta : natural := 10000;
signal fin1mili : std_logic;
signal cuenta4milis : unsigned (1 downto 0);
begin

130 Universidad Rey Juan Carlos


17. Visualizacin del reproductor MP3

--- proceso que segun el estado asigna a los 4 displays informacion diferente.
-- Si PAUSA muestra "PAUS" - Si PLAY muestra "PLAY" - Si FW muestra "FF"
P_QUE_MUESTRO: Process (estado_actual)
begin
case estado_actual is
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 process;
------ contamos un milisegundo, como el reloj va a 10 MHz, tenemos que contar 10000.
P_Conta_1mili: Process (Reset, Clk)
begin
if Reset = '1' then
cuenta <= (others => '0');
fin1mili <= '0';
elsif Clk'event and Clk='1' then
if cuenta < cfincuenta then
cuenta <= cuenta + 1;
fin1mili <= '0';
else
cuenta <= (others => '0');
fin1mili <= '1';
end if;
end if;
end process;
---- Ahora contamos cuatro cuentas de fin1mili
P_Conta_4milis: Process (Reset, Clk)
begin
if Reset = '1' then
cuenta4milis <= (others =>'0');
elsif Clk'event and Clk='1' then
if fin1mili = '1' then
if cuenta4milis = 3 then
cuenta4milis <= (others => '0');
else
cuenta4milis <= cuenta4milis + 1;
end if;
end if;
end if;
end process;
---- ahora, gobernados por cuenta4milis, cada milisegundo mostramos un display
-- diferente. Y a la vez, damos la orden de activar el anodo correspondiente
P_Muestra_display: Process (cuenta4milis, SEG3, SEG2, SEG1, SEG0)
begin
case cuenta4milis is
when "00" =>
SEG <= SEG0;
AN <= "1110";
when "01" =>
SEG <= SEG1;
AN <= "1101";
when "10" =>
SEG <= SEG2;
AN <= "1011";
when others =>
SEG <= SEG3;
AN <= "0111";
end case;
end process;
end Behavioral;
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 negrasobre un suelo blanco. RI: receptor RD: receptor
Para ello disponemos de un coche elctrico de juguete y izquierdo derecho
queremosrealizarelcircuitoelectrnicoquecontroleelgiro
delcoche(derechaoizquierda). Rueda
delantera
Para saber si el coche est sobre la lnea negra o no, se izquierda
ponendosdetectoresdeinfrarrojosenlapartedelanteradel
coche (ver figura de la derecha). Los detectores de
infrarrojos estn juntos y centrados en el alern delantero
delcoche.ElreceptorqueestalaizquierdaselellamarRI Rueda
yeldeladerechaRD. trasera
izquierda
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 Figura 18.1: Coche visto desde
arriba
unocuandoestnsobreelsueloblanco(porquesereflejala
luz).
As que usaremos las salidas de los detectores de infrarrojos como entradas de nuestro
sistemadecontrol.Porlotanto,nuestrosistemadecontroltendrdosentradas: RIy RD,
queindicanlosvaloresdevueltosporlosreceptoresizquierdoyderechorespectivamente.
Como se muestra en la figura de la derecha, nuestro RI GI
sistema tendr dos salidas: GI y GD, que dan la orden de
RD GD
girar a la izquierda o derecha, respectivamente. Por
ejemplo: GD='1'serlaordendegiraraladerecha.Silas Clk

dos estn a cero significa que el coche debe ir recto. Reset



Obviamente, nunca se deber dar la orden de girar a la Figura 18.2: Esquema de entradas
derechaeizquierdasimultneamente. 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

Se va del todo por la izquierda


A B C
Se va de la lnea RI='1' RD='1'
por la izquierda
Sobre la lnea
RI='1' RD='0'
giro derecha
RI='0' RD='0'
giro derecha
No giro


Figura 18.3: Distintas posiciones del coche respecto a la lnea

Datosadicionalesdelsistema:
Losdosreceptoresestnlomsjuntosposibleyelanchodelalneanegraesmayor
queelanchodelosdosreceptoresjuntos.Portantonuncasepodrpasardeestarsobre
solamenteunreceptoraestarsobresloelotroreceptor.Estoes,entremediassiempre
habrunmomentoenelqueseestarsobrelosdosreceptores
El reloj del circuito (Clk) es mucho ms rpido que la mecnica del coche y su
movimiento.
Porestoltimo,nuncapodremospasardeestarconlosdosreceptoressobrelalneaa
estartotalmentefueradelalnea.Entremediaselcocheestarconunreceptorsobrela
lneayelotrono.
Existeunpulsadorpararesetearasncronamente(Reset),peronosedebedepresionar
duranteelfuncionamientonormaldelcircuito.
Alempezarseponeelcochealineado.Estoes,losdosreceptoresestarnsobrelalnea
negra.
La velocidad del coche va a ser constante y para esta versin del coche no la
utilizaremosnilacontrolaremos,asquenonosimporta.
Sepide:
a) Especificar las entradas, salidas y estados del sistema de control de giro del coche
considerndolo como mquina de Moore. Realizar el diagrama de estados de la
mquinadeestadosquecontrolaelcircuito.

134 Universidad Rey Juan Carlos


18. Robot rastreador

b) Latabladeestadossiguientesysalidas
c) LatabladeexcitacindebiestablesparabiestablesJK
d) EcuacionessimplificadasparalassalidasyparalasentradasJdedosdelosbiestables
delcircuito(nosepidenlasentradasK)

18.2. Solucin
18.2.1. Entradas, salidas y estados. Diagrama de estados

Lasentradasysalidasdelsistemadecontrolsonlasmismasquelasdelafigura18.2que
sepusoenelenunciado.
Dosentradas(RI,RD):
RI:receptordeinfrarrojosdelaizquierda.

RD:receptordeinfrarrojosdeladerecha.

Paraambas,losvaloresson:
0:siestsobrelalnea
1:siestfueradelalnea
Lascuatrocombinacionessonposibles(verfigura18.4)
Dossalidas(GI,GD)
GI='1':Ordenparagiraralaizquierda.

GD='1':Ordenparagiraraladerecha.

Lasposiblessalidasson:
(GI,GD)= (1,0)Giroalaizquierda

(GI,GD)= (0,1) Giroaladerecha


(GI,GD)= (0,0)Recto

(GI,GD)= (1,1)Nosedebeponernunca

Ms all izquierda A la izquierda Centrado A la derecha Ms all derecha


RI='1' RD='1' RI='1' RD='0' RI='0' RD='0' RI='0' RD='1' RI='1' RD='1'

GI='0' GD='1' GI='0' GD='1' GI='0' GD='0' GI='1' GD='0' GI='1' GD='0'

A B C D E

Giro a la derecha No giro Giro a la izquierda



Figura 18.4: Posicin de los receptores respecto a la lnea y giro

Ahora hay que realizar el diagrama de transicin de estados. Recordamos que en este
apartadohayquerealizarlocomounamquinadeMoore.
Elordendelasentradasysalidaseneldiagramaserelsiguiente(figura18.5):

Departamento de Tecnologa Electrnica 135


Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10

entradas
RI RD

Estado
GI GD

Salidas
Figura 18.5: Orden de entradas y salidas en el diagrama de estados

FjatequeesunamquinadeMoore,porloquelassalidasestnenelpropioestado.
Inicialmentepartimosdelestado CENTRO,endonde RI='0'y RD='0',ya queelenunciado
dicequealprincipiosecolocaelcochesobrelalnea.Enesteestadosemantieneelcoche
singirar,hastaqueunodelosreceptorescambiea1.

En Centro:
Imposible
Imposibl e
Se sale por 1 1 Se sale por
la izquierda la derecha

0 0
1 0 0 1

CENTRO
0 0

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
izquierda(verfigura18.4.B).Yporlotanto,hayquegiraraladerecha.Locontrarioocurre
sieldetector RDseponea1.Loquenopuedeocurrirnuncaesqueestandosobre 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 IZQ al que vamos cuando desde CENTRO el
receptor RI se pone a 1. En este estado, el giro se hace a la derecha. Saldremos de este
estadocuandohayamoscorregidoladesviacinyvolvamosalcentro(ambosreceptoresa
0).Lomismoocurresielcochesedesvaaladerecha.

En Centro:
Imposible
1 1

1 0 0 0 0 1
1 0 0 1

IZQ CENTRO DCHA


0 1 0 0 1 0
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 IZQ o DCHA el coche se salga
totalmente de la lnea. Eso lo sabremos porque ambos receptores estn a 1. Para ello
crearemoslosestadosF_IZQyF_DCHA(deFueraIZQuierdayFueraDereCHA).

136 Universidad Rey Juan Carlos


18. Robot rastreador

En IZQ En Centro: En DCHA


Imposible Imposible Imposible
0 1 1 1 1 0

1 0 0 0 0 1
1 0 0 1

IZQ CENTRO DCHA


0 1 0 0 1 0
0 0 0 0

1 1 0 1
1 0 1 1

En F_IZQ F_IZQ F_DCHA En F_DCHA


Imposible 0 1 Imposible
1 0
0 1 1 0
0 0 1 1 1 1 0 0


Figura 18.8: Diagrama de estados final sin reducir

Eldiagramadelafigura18.8podrasereldefinitivo.Sinembargo,podemosfijarnosque
en realidad los estados F_IZQ y F_DCHA no son necesarios ya que tienen la misma salida
que IZQy DCHArespectivamente,yendichosestados,lasmismasentradasconducenalos
mismosestados(osonentradasimposibles).Asquesepodrasimplificarenelmostrado
enlafigura18.9.

En IZQ En Centro: En DCHA


Imposible Imposible Imposible
0 1 1 1 1 0

1 X 0 0 X 1
1 0 0 1

IZQ CENTRO DCHA


0 1 0 0 1 0
0 0 0 0


Figura 18.9: Diagrama de estados final reducido

Estediagramanosepuedesimplificarmsyaquecadaestadotieneunasalidadistinta.
DisendolocomomquinadeMealyssepodrasimplificarms(peronosepedaenel
examen).
18.2.2. Tabla de estados siguientes y salidas

Antesdenadatenemosquecalcularelnmerodebiestablesque Estado Q1 Q0
necesitamosyasignarlesunosvalores.Comotenemos3estados, CENTRO 0 0
nos vale con dos biestables. Asignaremos los mismos valores de IZQ 0 1
los estados que de las salidas, pero vale cualquier otra DCHA 1 0

combinacin.Laasignacinsemuestraenlatabla18.1. Tabla 18.1: Codificacin
de estados

Latabladeestadossiguientesysalidassemuestraenlatabla18.2.

Departamento de Tecnologa Electrnica 137


Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10

Moore: Slo
dependen del estado
Estado Estado
actual Entradas Salidas siguiente
t+1 t+1
Q1 Q0 RI RD GI GD Q1 Q0
0 0 0 0 0 0 0 0
0 0 0 1 0 0 1 0
CENTRO
0 0 1 0 0 0 0 1
0 0 1 1 0 0 X X condiciones imposibles
0 1 0 0 0 1 0 0
0 1 0 1 0 1 X X condiciones imposibles
IZQ
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
DCHA
1 0 1 0 1 0 X X condiciones imposibles
1 0 1 1 1 0 1 0
Sin usar (imposible) 1 1 X X X X X X

Tabla 18.2: Tabla de estados siguientes y salidas

18.2.3. Tabla de excitacin de biestables para biestables J-K

Latabladeexcitacindelosbiestableslapodramoshaberrellenadoenlatabla18.2.Para
saberlasecuacionesdelasentradasdelosbiestablesnecesitamossaberqunecesitamos
para lograr cada una de las transiciones. Como nos piden hacerlo con biestables JK,
ponemossutabla,yapartirdeellaobtenemoslasentradasJyKparalascuatroposibles
transiciones.

J K Q(t+1) Q(t) Q(t+1) J K


0 0 Q(t) 0 0 0 X
0 1 0 0 1 1 X
1 0 1 1 0 X 1
1 1 Q(t) 1 1 X 0

Tabla 18.3: Tabla de entradas necesarias para obtener una transicin en biestables J-K

Ahoranosfijamosenlatabladelosestadossiguientes(tabla18.2)paraverencadacaso
qutransicioneshayyquvaloresenlasentradasdelosbiestablesJKnecesitamos.

138 Universidad Rey Juan Carlos


18. Robot rastreador

Moore: Slo
dependen del estado Entradas en los
biestables para
Estado Estado conseguir las
t+1
actual Entradas Salidas siguiente transiciones QiQi

t+1 t+1
Q1 Q0 RI RD GI GD Q1 Q0 J1 K1 J0 K0
0 0 0 0 0 0 0 0 0 X 0 X
0 0 0 1 0 0 1 0 1 X 0 X
CENTRO
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 1 0 0 0 X X 1
0 1 0 1 0 1 X X X X X X
IZQ
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 0 1 0 0 0 X 1 0 X
1 0 0 1 1 0 1 0 X 0 0 X
DCHA
1 0 1 0 1 0 X X X X X X
1 0 1 1 1 0 1 0 X 0 0 X
Sin usar (imposible) 1 1 X X X X X X X X X X

Tabla 18.4: Tabla de excitacin de los necesarias para obtener una transicin en biestables J-K

18.2.4. Ecuaciones simplificadas

Las ecuaciones de las salidas son inmediatas porque las hemos hecho coincidir con los
biestablesdelosestados.Aspues:
GI = Q1
GD = Q0
ParalasentradasdelosbiestablesutilizamoslosmapasdeKarnaugh.Semuestranenla
figura18.10,seincluyenlasK,aunquenosepedan.
RI-RD
RI-RD J0
J1 00 01 11 10
00 01 11 10
00 0 0 X 1
00 0 1 X 0
01 X X X X
01 0 X 0 0 Q1-Q0
Q1-Q0 11 X X X X RIRD
11 X X X X
10 0 0 0 X
10 X X X X
J1= RIRD J0= RIRD
RIRD

RI-RD RI-RD
K1 K0
00 01 11 10 00 01 11 10
00 X X X X 00 X X X X
01 X X X X 01 1 X 0 0
Q1-Q0 Q1-Q0
11 X X X X 11 X X X X
10 1 0 0 X 10 X X X X
K0= RI
K1= RD RI
RD
Figura 18.10: Mapas de Karnaugh y ecuaciones de las entradas de los biestables

Departamento de Tecnologa Electrnica 139


19. Teclado de telfono mvil
Esteproblemasepusoenelexamendel9deseptiembrede2009.

19.1. Enunciado
Sequiererealizarelcircuitodeunatecladetelfonomvilquefuncionecomocuandose
escriben mensajes de texto (sms). Para simplificar, se va a realizar el circuito para una
nicateclaydichateclaservirparaescribirloscaracteres:A,B,2(parasimplificarhemos
eliminadolaletraCyotroscaracteres).
Elfuncionamientoresumidodelcircuitoeselsiguiente:
InicialmentenosemuestranadahastaquesepulsalateclaP.
SiquieroescribirlaletraA,debopulsarPunavez.
Si quiero escribir la letra B, debo pulsar P dos veces rpidamente. En la pantalla se
muestraAalpulsar laprimeravez,ycuandovuelvoapulsarsemuestraB.Sitardase
muchoenpulsarlasegundavez,sefijaraelvalordeA(ysevolveraaempezarpara
escribirenlasiguienteposicin).
SipulsoPtresvecesrpidamenteobtengoelnmero2(recuerdaquehemosquitadola
letra C para simplificar). Cada vez que he pulsado P, se habr mostrado el carcter
correspondientealasecuencia:AB2
Si pulsase P cuatro veces rpidamente obtendra de nuevo la letra A. Ya que la
secuenciaescircular:AB2AB2A....Obteniendoelcarctercorrespondientesegn
elnmerodevecesquepulse.
Si despus de haber pulsado P, no vuelvo a pulsar P durante un intervalo de un
segundo o ms, se fija el ltimo carcter que se tenga, y a continuacin se vuelve al
estadoinicial(paraescribirenlasiguienteposicin).
Encualquierestado,simantengoPpulsadoduranteunsegundooms,sefijaelvalor
numrico (2) y al soltar P se vuelve al estado inicial (para escribir en la siguiente
posicin).
Acontinuacinsemuestranlasentradasysalidasdelcircuito:
Entradas(ademsdelrelojyreset): A

B
P: Pulsador de la tecla del mvil (recuerda que en
P

estemvilparasimplificarslotenemosunatecla) DOS

LISTO
Salidas: Clk

A:MostrarelcarcterA Reset

Figura 19.1: Esquema de
B:MostrarelcarcterB
entradas y salidas del sistema
DOS:Mostrarelnmero2 de control

LISTO:Indicaqueelcarcterindicadoporunadelassalidas(A, B, DOS)estlistopara
fijarlo, y se deber pasar a la siguiente posicin. Slo est activa durante un ciclo de
reloj.

Departamento de Tecnologa Electrnica 141


Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10

Elfuncionamientodetalladocontiemposeselsiguiente:
Inicialmentenosemuestraningncarcter(lascuatrosalidasacero),enesteestadose
esperaaquesepulseP.
Sidesdeelestadoinicialsepulsa Pmantenindolapresionadadurantemenosdeun
segundo, se muestra el carcter A (A='1'). La salida A se pone a uno desde que se
comienzaapulsarP,lasotrassalidasB, DOS, LISTOsequedanacero.
SiunavezquehepulsadoP,novuelvoapulsarP,transcurridounsegundoelvalorse
fija.Estoes:LISTO='1'ysemantienelaltimasalidaqueestabaauno:A, BDOS.
En el caso anterior, la salida LISTO slo se debe mantener activa durante un ciclo de
reloj,traslocualelsistemavuelvealestadoinicial,dondetodaslassalidasseponena
cero(A, B, DOSyLISTO).
Sinembargo,sihepulsadoP,(haciendoque,porejemplo,sehayaactivadoA, A='1'),y
vuelvoapulsarPantesdequetranscurraunsegundo,seactivarlasiguientesalidaen
lasecuencia(porejemplo,siAestabaauno;sepondrA='0'yB='1').Elrestodesalidas
semantienenacero.
En cualquier estado, si pulso P durante un segundo o ms, se fija el 2: DOS='1' y
LISTO='1'.Estoocurreduranteunciclodereloj,luegoseponentodaslassalidasacero,
ynosehacenadahastaquesedejedepulsarP.AldejardepulsarPsevuelvealestado
inicial.
Consideraciones:
Lasealderelojvaa1MHz
La seal de reset es activa a nivel alto y no se usa en el funcionamiento normal del
circuito
De las salidas de caracteres: A, B y DOS, slo puede haber una de ellas activa
simultneamente.Spuedeserqueningunadeellasestactiva.
Laentrada Pnotienerebotes.Portanto,conlafrecuenciadelrelojquesetiene,ser
imposiblepulsarlatecla Pduranteunslociclodereloj,lospulsossernbastantems
largos.
Todas las entradas y salidas del circuito son de un bit, no se pide mostrar nada en
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
internos.
b) Encorrespondenciaconloanterior,dibujareldiagramadeestadosdelamquinade
Mealyquecontrolaelcircuito.
Nosepiderealizarlatabladeestados.

142 Universidad Rey Juan 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
mantienelateclapresionadadurantemsdeunsegundo.
Elcircuitotienedosbloques:lamquina
MaqEstados
deestadosyuntemporizador. A A
Delamquinadeestadossaleunaseal B B
P P
DOS DOS
intermedia E que va al temporizador. T LISTO LISTO
Esta seal funciona como habilitacin E
Clk Reset
(enable)demodoquecuandoEescero,el
T
contador se pone a cero y no cuenta, Temporizador
E
mientras que cuando E es uno, se
T E
habilitalacuenta.
Clk Clk Reset
LasealTindicacundohatranscurrido
Reset
un segundo desde que E se ha
Figura 19.2: Bloques internos del circuito
mantenidoactivo(E='1').
19.2.2. Diagrama de estados

Paraeldiagramadeestadosusaremoselsiguienteordendeentradasysalidas
entradas Salidas
entradas Salidas
P T / A B D L E
P T / A B DOS LISTO E

Estado
Estado

Figura 19.4: Orden de entradas y salidas en el
Figura 19.3: Orden de entradas y salidas en el
diagrama de estados. Salidas con iniciales para
diagrama de estados
simplificar

Como hay muchas salidas, para que el diagrama sea ms fcil de entender, en vez de
ponerunos,sevanaponerlasinicialesdelasseales(figura19.4).Loscerossepondrn
comoceros.FjatequeesunamquinadeMealy.
Empezamosahacerdeldiagramasegnlasinstrucciones:
PartimosdelestadoINICIAL,dondeesperamosaquese En INICIAL
pulse P, todas las salidas estn a cero, incluida la Imposible
habilitacin del contador, porque ahora no hay que T='1'
X 1
contarsegundos(elusuariopuedetardarloquequiera
enescribiruncarcter). 00/00000
Como la habilitacin del temporizador est a cero
(E='0'),serimposiblequeTseauno. P0/A000E
INICIAL
Nosquedamosenelestado INICIALhastaquesepulse
P,cuandoestoocurretenemosqueactivarlasalida Ay Figura 19.5: Estado inicial
eltemporizador(E='1')
CuandosehapulsadoP,tenemosqueverdurantecuntotiemposepulsaP:

Departamento de Tecnologa Electrnica 143


Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10

Sisepulsaduranteunsegundooms,indicaquetenemosquefijarelnmero2.
Sisepulsamenosdeunsegundo,hemoselegidolaletraA,perotenemosqueseguir
haciendocomprobaciones.Estoocurrecuandolasentradasson(P,T),estoes,latecla
siguepresionadayacabadellegarlasealdequehapasadounsegundo(T).
Sinosecumplenningunadeestasdos,seguimosesperando,ylasentradasparaesto
son(P,0)
Para comprobar esto, creamos un estado ESP_S_A (ESPera a Soltar, A) que indica que
estamos esperando a que se suelte la tecla y que recuerda que la letra que se est
mostrandoeslaA.

En INICIAL
Imposible
T='1'
X 1 se va mostrando A por pantalla

00/00000 P0/A000E

P0/A000E 00/A0000 ESP_S_A (ESPera a Soltar A)


INICIAL ESP_S_A esperamos a ver qu pasa antes:
- soltar P
PT/00DL0 - pasa un segundo

Figura 19.6: Estado de espera

Cuando se fija el nmero (se presiona T durante un segundo o ms), la salida LISTO, se
debeponeraunoduranteuncicloderelojyluegosedebeesperaraquesesueltelatecla
(estado ESP_S).Sinohacemosestaespera,enelestado INICIALconsideraramosquese ha
vueltoapresionarP,yesoseraunerrorporqueiramosdenuevoalestadoESP_S_A.

En INICIAL
Imposible
00/00000 P0/A000E
T='1'
X 1
P0/A000E 00/A0000
INICIAL ESP_S_A

PT/00DL0
00

P0/00000
se fija el dos (un slo ciclo)
/0

En ESP_S
00

Imposible salidas a cero,


00

T='1' ESP_S en espera de


X 1
se ha soltado P que se suelte P

Figura 19.7: Estado de espera a que suelte la tecla

En elenunciadoindicaquesisepulsaTporunsegundooms,sedebedefijarel2.Esto
incluyeel casoimprobable(aunquenoimposible)enelquesoltamoslateclajustoenel
instanteenelquellegaelavisodequehapasadounsegundo.Enestecasodebemosfijar
el2(loindicaelenunciado).Laentradaparaestosera(0,T).
En este caso no hara falta ir al estado ESP_S sino que se ira directamente al estado
INICIALDetodosmodos,iralestado ESP_Snoseraunerror,porqueinmediatamenteen
elcicloderelojsiguienteseiraalestado INICIAL,yesimposiblequeelusuarioconsiga

144 Universidad Rey Juan Carlos


19. Teclado de telfono mvil

presionar el pulsador con solo un ciclo de reloj entre medias (y las teclas no tienen
rebotes).

En INI
INICIAL
CIAL 00/00000 P0/A000E
Imposible
Im posible
T='1'
P0/A000E 00/A0000
X 1 INICIAL ESP_S_A

0T/00DL0 PT/00DL0
En ESP_S

00
P0/00000
Imposible

/0
Caso

00
improbable.
T='1'

00
X 1
ESP_S Se fija el dos
(un slo ciclo)
Figura 19.8: Se fija el dos en el caso improbable que suelte la tecla a la vez que termina la temporizacin

Ahora,estandoenelestado ESP_S_A,estoes,elpulsadorpresionadoymostrandolaletra
A.Sisesueltalateclaantesdequepaseunsegundo,entradas:(0,0).Tenemosque:
EsperaraversisevuelveapresionarPantesdeunsegundoestadoESP_P_A
Para contabilizar los segundos, tenemos que reiniciar el contador poniendo su
habilitacinaceroduranteelcambiodeestado(E='0').
Se ha soltado P antes de un segundo
A se sigue mostrando
E='0' para reiniciar el temporizador

00/00000 E='1' se vuelve a


En INICIAL P0/A000E 00/A000E habilitar la cuenta
Imposible
T='1'
P0/A000E 00/A0000
X 1 INICIAL ESP_S_A ESP_P_A

0T/00DL0 PT/00DL0
En ESP_S ESP_S_A (ESPera a Presionar, A)
00

P0/00000
Imposible esperamos a ver qu pasa antes:
/0
0

- se presiona P
00

T='1'
- pasa un segundo
0

X 1
ESP_S

Figura 19.9: Se suelta la tecla antes de que pase un segundo: nueva espera

Ahora, estando en el estado ESP_P_A, esto es, el pulsador sin presionar y mostrando la
letraA,puedepasar:
Queantesdequepaseunsegundosevuelvaapresionar P.Enestecasovolvemosal
estadoaESP_S_B(similaraESP_S_A)
Quepaseunsegundosinvolverapresionar P,entradas (0,T)enestecasosefijala
letraA
Enelcasoimprobablequeamboseventosocurransimultneamente,elenunciadodice
quesefijelaletraA.Lasentradasseran(P,T),paraestecaso,podemosirnosalestado
inicial(comoenelcasoanterior,ydeestenosiramosenelsiguienteciclodereloja
ESP_S_A(puesPvaaseguirpresionadayaquenolapodremospulsarduranteunnico
ciclodereloj),onospodemosirdirectamentealestado ESP_S_A (loquesuponeponer
unaflechams).Eneldiagramahemoselegidolaprimeraopcin(ambassonvlidas).

Departamento de Tecnologa Electrnica 145


Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10

Se fija A
0T/A00L0 Se reinicia
PT/A00L0 temporizador

En INICIAL 00/00000 P0/A000E 00/A000E


Imposible
T='1'
P0/A000E 00/A0000 Se reinicia
X 1 INICIAL ESP_S_A ESP_P_A temporizador
0T/00DL0 PT/00DL0
En ESP_S
00

P0/00000 P0/0B000
Imposible
/0
00

T='1'
Se muestra B
00

X 1
ESP_S ESP_S_B

ESP_S_B (ESPera a Soltar, B)


esperamos a ver qu pasa antes:
- soltar P
- pasa un segundo
Figura 19.10: Nueva espera a que se suelte B

Ahora,estandoenelestado ESP_S_B,estoes,elpulsadorpresionadoymostrandolaletra
B,puedepasar:
(P,0):NohapasadounsegundoysiguePpulsadaSeguimosenESP_S_B

0,0):Sesuelta PantesdeunsegundoEsperamosaversisevuelveapresionar 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,
peronosvamosalestado INICIAL(sifusemosalestado ESP_S,seravlidoporqueel
circuitofuncionaraigualdesdeelpuntodevistadelusuario)
Recuerdaqueparacontabilizarlossegundos,tenemosquereiniciarelcontadorponiendo
suhabilitacinaceroduranteelcambiodeestado(E='0'),yluegoponerlaauno.
0T/A00L0
PT/A00L0

En INICIAL 00/00000 P0/A000E 00/A000E


Imposible
T='1'
P0/A000E 00/A0000
X 1 INICIAL ESP_S_A ESP_P_A

0T/00DL0 PT/00DL0
En ESP_S
00

P0/00000 P0/0B000
Imposible
/0

0T/00DL0
00

T='1'
00

X 1 PT/00DL0
ESP_S ESP_S_B P0/0B00E

00/0B000 Se ha soltado
P antes de un
segundo
Figura 19.11: Se ha soltado P antes de que pase un segundo

146 Universidad Rey Juan Carlos


19. Teclado de telfono mvil

Ahora,estandoenelestadoESP_P_B,estoes,elpulsadorsinpulsarymostrandolaletraB,
puedepasar:
(P,0):Sehapulsadoantesdequepaseunsegundo:SemuestraeldosESP_S_2

(0,0):NohapasadounsegundoynosehapulsadoPSeguimosesperando

(0,T):HapasadounsegundoypulsadoP FijamoslaB,yvamosalestado:INICIAL
(P,T): Caso improbable de pulsar justo en el segundo, lo tratamos como el anterior
(tambinpodramosirnosaESP_S_A).
0T/A00L0
PT/A00L0

En INICIAL 00/00000 P0/A000E 00/A000E


Imposible
T='1'
P0/A000E 00/A0000
X 1 INICIAL ESP_S_A ESP_P_A
0T/00DL0
PT/00DL0
En ESP_S
00

P0/00000 P0/0B000
Imposible
/0

0T/00DL0
00

T='1'
00

X 1 PT/00DL0
ESP_S ESP_S_B P0/0B00E

00/0B000
0T/0B0L0
PT/0B0L0
ESP_P_B 00/0B00E
Ha pasado 1 segundo
sin pulsar P (o justo
se ha pulsado en el P0/00D00
segundo) Se ha pulsado
P antes de un
segundo
Figura 19.12: En la espera a ver si se vuelve a pulsar P mostrando la B

Ylosdosestadosquequedansehacendemanerasimilar.
Slohayquetenerencuentaquedespusdel2vienelaA.Yporeso,delestado ESP_P_2
vieneESP_S_A.
Eldiagramadeestadosfinalsemuestraenlafigura19.13.

Departamento de Tecnologa Electrnica 147


Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10

0T/A00L0
PT/A00L0

En INICIAL 00/00000 P0/A000E 00/A000E


Imposible
T='1'
P0/A000E 00/A0000
X 1 INICIAL ESP_S_A ESP_P_A
0T/00DL0
PT/00DL0
En ESP_S 00 P0/0B000
P0/00000
Imposible
/0 0T/00DL0
00
P0/A0000

T='1' 00
X 1 PT/00DL0
ESP_S ESP_S_B P0/0B00E

00/0B000
0T/0B0L0
PT/0B0L0
ESP_P_B 00/0B00E

PT
0T/00DL0

/0
PT/00DL0 0T
/0
0D
0D P0/00D00
L0
ESP_P_2 00/00D00 L0
ESP_S_2 P0/00D0E

00/00D0E
Figura 19.13: Diagrama de estados final

148 Universidad Rey Juan Carlos


20. Clculo de temporizacin de un circuito 1
Esteproblemasepusoenelexamendel30deenerode2009.

20.1. Enunciado
1. Explicarbrevementequeslametaestabilidadyporquseproduce
2. Calcularlafrecuenciamximaalaquepuedefuncionarelsiguientecircuito

A
D0 Q0 D1 Q1 S1

S0
Clk
Figura 20.1: Circuito para analizar

Teniendoencuentalassiguientescaractersticas:
TiempodepropagacinTiempodesetup Tiempodehold Frecuenciamxima
Biestables tpmax=20ns tsu=10ns th=5ns fmax=25MHz
tpmin=4ns
Puertas tpmax=10ns

lgicas tpmin=5ns
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 se produce por no cumplirse los parmetros temporales del
biestable.Cuandonoserespetanlostiemposdesetupydeholddelbiestable

20.2.2. Frecuencia mxima

Veamoslasentradasdelosbiestables(D0yD1)

Departamento de Tecnologa Electrnica 149


Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10

entradas D0 D1
salidas
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 109 1000
= Hz = 106 Hz = 20 MHz
50 ns 50 50
Como es una frecuencia menor que la frecuencia mxima de los biestables (25 MHz), la
frecuenciamximadeestecircuitoserde20MHz.

150 Universidad Rey Juan 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.

entrada
Ecuaciones Estado
Estados siguiente
D0 = A + Q1 S0 = Q0
Q1 Q0 A Q1' Q0'
S1 = Q1 0 0 0 1 1
D1 = Q0 Q1 0 0 1 1 1
0 1 0 1 1
0 1 1 1 1
A partir de las ecuaciones obtenemos el estado 1 0 0 1 0
siguiente. Como son biestables D, el valor de Q es 1 0 1 1 1
directamenteeldeldatodelbiestable(D) 1 1 0 0 0
1 1 1 0 1

Tabla 21.1: Tabla del estado siguiente

Organizamos la tabla de manera que sea ms fcil ver el estado siguiente segn la
entrada.

Estado siguiente
Estados A=0 A=1

Q1 Q0 Q1' Q0' Q1' Q0'


0 0 1 1 1 1
0 1 1 1 1 1
1 0 1 0 1 1
1 1 0 0 0 1

Tabla 21.2: Tabla de excitacin del autmata

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
1
X
00 0 10
00 10
0
1
X 11
11

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 Juan Carlos


22. Clculo de temporizacin de un circuito 2
Esteproblemasepusoenelexamendel11deseptiembrede2009.

22.1. Enunciado
Calcularlafrecuenciamximaalaquepuedefuncionarelsiguientecircuito
B

A
D0 Q0 D1 Q1 S1

Clk
Figura 22.1: Circuito para analizar

Teniendoencuentalassiguientescaractersticas:
Tiempodepropagacin Tiempodesetup Tiempodehold Frecuenciamxima
Biestables tpmax=25ns tsu=20ns th=10ns fmax=20MHz
tpmin=11ns
Puertaslgicas tpmax=15ns

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= tpmax(Q1)+2tpmax(puerta)+tsu(D1)=25+215+20=
60ns 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 109
= Hz = 10 MHz
100ns 100
Como 10 MHz es una frecuencia menor que la mxima fijada por los biestables, la
frecuenciamximadelcircuitoser10MHz.

154 Universidad Rey Juan Carlos


23. 24. Anlisis de un circuito 2
Esteproblemasepusoenelexamendel11deseptiembrede2009.

24.1. Enunciado
Delcircuitosiguiente:
B

A
D0 Q0 D1 Q1 S1

Clk
S0
Figura 24.1: Circuito para analizar

1) Obtenerlatabladeexcitacindelautmata
2) Eldiagramadetransicindeestados
3) EsunamquinadeMooreodeMealy?Porqu?

24.2. Solucin
24.2.1. Tabla de excitacin del autmata

Primeroobtenemoslasecuacionesdelasentradasdelosbiestablesylassalidas.Incluimos
latablasdeverdadparaqueluegonosseamsfcilrellenarlatabladelautmata.
Q1 A D0 Q0 B D1
D0 = A Q1 S0 = Q0 0 0 0 0 0 0
0 1 1 0 1 1
1 0 0 1 0 0
D1 = B Q0 S1 = Q1 1 1 0 1 1 0

Tabla 24.1: Tablas de verdad de las entradas de los
biestables

Apartirdelasecuacionesobtenemoslosestadossiguientessegnlasentradas:

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 Organizamoslatablaparapoderver mejor
0 0 0 1 1 0
0 0 1 0 0 1 loscambiosdeestadosconlasentradas
0 0 1 1 1 1 entradas
0 1 0 0 0 0
0 1 0 1 0 0
Estado AB
0 1 1 0 0 1
Q1 Q0 00 01 10 11
0 1 1 1 0 1
0 0 00 10 01 11
1 0 0 0 0 0
0 1 00 00 01 01
1 0 0 1 1 0
1 0 00 10 00 10
1 0 1 0 0 0
1 1 00 00 00 00
1 0 1 1 1 0
1 1 0 0 0 0
estado estado
1 1 0 1 0 0
actual siguiente
1 1 1 0 0 0
1 1 1 1 0 0 Tabla 24.3: Tabla de excitacin del autmata
Tabla 24.2: Tabla del estado siguiente

24.2.2. Diagrama de transicin de estados

Concualquieradeestastablasobtenemoslosestadossiguientesparadibujareldiagrama
deestados:
00

1X 10 01 X1
01 00 10
01 0X 00 X0 10

11 XX

11
11

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 Juan Carlos


Referencias
[1] AdeptdeDigilent.ProgramagratuitoparaprogramarlasFPGAsporUSB:
http://www.digilentinc.com/Products/Detail.cfm?Prod=ADEPT
H H

[2] Basys,tarjetaconFPGAfabricadaporDigilent.
ManualdereferenciadelaversinE:
http://www.digilentinc.com/Data/Products/BASYS/BASYS_E_RM.pdf
H H

Pginawebdelatarjeta:
http://www.digilentinc.com/Products/Detail.cfm?NavPath=2,400,791&Prod=BASYS
H H

[3] CreativeCommons.http://creativecommons.org/
H H

Licenciadeestemanual:http://creativecommons.org/licenses/byncnd/3.0/
H H

[4] D.Jones,Steppingmotortypes.http://www.cs.uiowa.edu/~jones/step/index.html
H H

[5] DepartamentodeTecnologaElectrnica,UniversidadReyJuanCarlos.http://gtebim.es H H

[6] DigilentInc.http://www.digilentinc.com/
H H

[7] E.Carletti,Motorespasoapaso,caractersticasbsicas.http://robots H

argentina.com.ar/MotorPP_basico.htm H

[8] ElectrnicaDigitalII.http://gtebim.es/docencia/EDII
H H

[9] Ericsson,IndustrialCircuitsApplicationNote:StepperMotorBasics
http://library.solarbotics.net/pdflib/pdf/motorbas.pdf
H H

[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.http://www.ieee.org H H

[14] IEEEStandardforVHDLRegisterTransferLevel(RTL)Synthesis,IEEEStd1076.6
[15] ISEWebPackdeXilinx.http://www.xilinx.com/tools/webpack.htm
H H

Paradescargarversionesantiguas:
http://www.xilinx.com/webpack/classics/wpclassic/index.htm
H H

[16] Minebea.http://www.minebea.co.jp/english/index.html
H H

[17] Mitsumi.http://www.mitsumi.co.jp/latest/Catalog/indexuse/index_e.html
H H

[18] Opencores.http://www.opencores.org
H H

[19] Pegasus,tarjetaconFPGAfabricadaporDigilent.Manualdereferencia:
http://www.digilentinc.com/Data/Products/PEGASUS/PEGASUSrm.pdf
H H

Pginawebdelatarjeta:
http://www.digilentinc.com/Products/Detail.cfm?NavPath=2,398,537&Prod=PEGASUS
H H

[20] SankenElectric,SemiconductorsGeneralCatalog.Abril2010.Disponible:
http://www.sankenele.co.jp/en/prod/library/lib_semicon_all.htm
H H

Elapartadodetransistoresestdisponibleen:
http://www.sankenele.co.jp/en/prod/library/images/get_pdf.gif
H H

[21] ShinanoKenshi.StepperMotors.http://www.shinano.com/xampp/steppermotors.php
H H

[22] Solarbotics.StepperMotors.
http://www.solarbotics.net/library/pieces/parts_mech_steppers.html
H H

[23] UniversidadReyJuanCarlos,http://www.urjc.es H H

[24] Wikipedia,Motorpasoapaso,http://es.wikipedia.org/wiki/Motor_paso_a_paso
H H

[25] Xilinx,http://www.xilinx.com
H H

Departamento de Tecnologa Electrnica 157


Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10

[26] XilinxUniversityProgramVirtexIIProDevelopmentSystem.Hardwarereferencemanual.UG069
v1.09marzo2005.http://www.xilinx.com/univ/xupv2p.html
H H

[27] XSTUserGuide9.2i.Xilinx,http://ww.xilinx.com/itp/xilinx92/books/docs/xst/xst.pdf
H H

158 Universidad Rey Juan Carlos

View publication stats

You might also like