You are on page 1of 166

DiseodecircuitosdigitalesconVHDL

FelipeMachado,SusanaBorromeo
Versin1.01creadael20dejuliode2010

EstaversindigitaldeDiseodecircuitosdigitalesconVHDLhasidocreadaylicenciada
porFelipeMachadoSnchezySusanaBorromeoLpezconunalicenciadeCreative
Commons.Estalicenciapermitelosusosnocomercialesdeestaobraentantoencuantose
atribuyaautoraoriginal.Estalicencianopermitealterar,transformarogenerarunaobra
derivadaapartirdeestaobra

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

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

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

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

ISBN:9788469346525

Diseo de circuitos digitales con VHDL


Versin1.01creadael20dejuliode2010

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

AmihermanoAle
FMS

DiseodecircuitosdigitalesconVHDL

Agradecimientos

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

DiseodecircuitosdigitalesconVHDL

LosAutores

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

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

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

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

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

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

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

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

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

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.

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.

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

Departamento de Tecnologa Electrnica

15

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

FPGA

Conector JTAG

Conector
de expansin

Memoria
Flash

VGA

Alimentacin
Jumpers de
configuracin
PS/2
Display
7 segmentos

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

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
configuracin

Conectores PMOD

Jumpers para
la frecuencia
del reloj
PS/2

VGA

USB

Displays
7 segmentos

Interruptor
para encender
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
'1' Encendido
'0' Apagado
390

BASYS

Spartan-II
PIN
46
45
44
43
42
41
37
36

LED
LD0
LD1
LD2
LD3
LD4
LD5
LD6
LD7

'1' Encendido
'0' Apagado
390

Spartan-3E
PIN
15
14
08
07
05
04
03
02

LED
LD0
LD1
LD2
LD3
LD4
LD5
LD6
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.

Sieststrabajandoenellaboratorio,alterminarlasesinnoolvidescopiarlosficherosconextensin.vhdy
.ucfentumemoriaUSBoentucorreoelectrnico(ocupanmuypoco).Delocontrario,elprximoda
puedeserquelosficheroshayandesaparecido.

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
encapsulado

XC2S200

cdigo de fecha

PQ208

tipo de dispositivo
encapsulado

XC3S100E

cdigo de lote
velocidad

5C

rango de operacin
C: comercial

Figura 2.5: Interpretacin del texto del encapsulado de


la FPGA de la Pegasus

cdigo

TQG144
cdigo

velocidad
rango de operacin
C: comercial

4C

Figura 2.6: Interpretacin del texto del


encapsulado de la FPGA de la Basys

Paralaseleccindelaherramientadesntesisnotenemosalternativa,yparaelsimulador
en esta prctica no es importante y lo dejamos en ISE Simulator (VHDL/Verilog). En el
lenguajededescripcindehardwarepreferido(PreferredLanguage)sedejaelVHDL,quees
elqueusaremos.AlterminarpinchamosenNext.

Departamento de Tecnologa Electrnica

19

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

Family
Device
Package
Speed

Pegasus

Basys

Spartan2

Spartan3E

Mirar en la FPGA
PQ208

TQ144

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.

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

STRUCTURAL(oESTRUCTURAL)

FUNCTIONAL

DATAFLOW

(oCOMPORTAMENTAL)
(oFUNCIONAL)

(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: led0Behavioral(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: "SynthesizeXST", "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
conectado

jumper desconectado
sin perder su caperuza

jumper
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 BoundaryScan (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


Cuandoestsenellaboratorioylodesenchufes,fjateenquenosequedeenchufadoeladaptadordela
clavijaplanaamericanaaclavijaredondaeuropea

10

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

3,3V
4,7k

PIN
89
88
87
86
84
83
82
81

Spartan-II

3,3V

interruptor
SW0
SW1
SW2
SW3
SW4
SW5
SW6
SW7

4,7k

4,7k

PIN pulsador
59
BTN0
58
BTN1
57
BTN2
154 BTN3

0,1F

Figura 3.1: Esquema elctrico de las conexiones de los interruptores y pulsadores en la placa Pegasus

Paralospulsadores,cuandoestnpulsadostransmitenun1lgicoalaentradaycuando
no estn pulsados ponen 0 voltios a la entrada. Observa que los pulsadores tienen un
pequeocircuitoconresistenciasyuncondensador,estoesparaeliminarlosrebotesque
seproducenalpulsaryasenviarunasealsinruido.Estecircuitoqueeliminarebotesno
lotienelaBasys,yporlotanto,lasealdeentradadelospulsadoresnoestanlimpia,y
puedeparecerquesehapulsadovariasveces(rebote).Elesquemaelctricosemuestraen
lafigura3.2,endondesepuedeobservarquelospulsadoresnotienenelcondensadorque
stienelatarjetaPegasus.
Spartan3E

3,3V
4,7k

PIN
38
36
29
24
18
12
10
6

interruptor
SW0
SW1
SW2
SW3
SW4
SW5
SW6
SW7

Spartan3E

3,3V
4,7k

PIN pulsador
69
BTN0
48
BTN1
47
BTN2
41 BTN3

4,7k

Figura 3.2: Esquema elctrico de las conexiones de los interruptores y pulsadores en la placa Basys

En la prctica de hoy utilizaremos los interruptores y pulsadores como entradas de los


circuitosquerealicemos.

Departamento de Tecnologa Electrnica

34

3. Sentencias concurrentes

Antesdeempezarconlaprctica,semuestranacontinuacinlaspalabrasreservadasdel
VHDL(figura3.3).Estaspalabrasnosepuedenusarparanombrarelementosdenuestro
circuito:seales,entidades,arquitecturas,....

Figura 3.3: Lista de palabras reservadas del VHDL

3.1. Diseo de un multiplexor


El primer ejercicio consistir en crear el diseo de un multiplexor de dos entradas de
datosdeunbit.Portanto,estemultiplexortendrunasealdeseleccin(unbit).
MUX
A
A

Z
Z

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

B
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,
begin
if S='1' then
Z <= A;
else
Z <= B;
end if;
end process;

B, S)

-- lista de sensibilidad: A, B, S

-- S se lee
-- A se lee
-- B se lee

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

ElVHDLesunlenguajemuyamplio,yhayotrasmanerasconlasquesepuededescribir
el multiplexor. Sin embargo, por ahora no las veremos y pasaremos a describir otros
diseos.

Departamento de Tecnologa Electrnica

37

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

3.2. Diseo de un multiplexor de 4 alternativas


El multiplexor anterior era demasiado sencillo. Ahora
queremos realizar un multiplexor con cuatro
alternativas. La figura 3.6 muestra el esquema de este
multiplexor.
Elaopasadovimoscmoserealizabaenpuertaseste
multiplexor y tambin cmo se realizaba con
multiplexoresdedosalternativas.Ahorasimplemente
veremoscmosedescribeenVHDL.
Para poder seleccionar 4 alternativas la seal de
seleccin (S) debe de ser de 2 bits. Por tanto
necesitamos definir un vector. Para esto se utiliza el
tipoSTD_LOGIC_VECTOR.

MUX4ALT
A

00

01

10

11

S(1:0)

Figura 3.6: Multiplexor de 4


alternativas

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
Port ( A :
B :
C :
D :
S :
Z :
end mux4alt;

is
in
in
in
in
in
out

STD_LOGIC;
STD_LOGIC;
STD_LOGIC;
STD_LOGIC;
STD_LOGIC_VECTOR (1 downto 0);
STD_LOGIC);

Cdigo 3-6:Entidad del multiplexor de 4 alternativas

Eltipo STD_LOGIC_VECTOResunvectorde STD_LOGICynormalmentesedefinenconrango


descendenteterminadoencero.Elrangodescendenteseespecificaconlapalabradownto.
MSB:delinglsMostSignificantBit

11

LSB:delinglsLeastSignificantBit

12

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)
begin
if S="00" then
Z <= A;
elsif S="01" then
Z <= B;
elsif S="10" then
Z <= C;
else
Z <= D;
end if;
end process;

Cdigo 3-8:Proceso con sentencia IF

P_MUX: Process (A,B,C,D,S)


begin
case S is
when "00" =>
Z <= A;
when "01" =>
Z <= B;
when "10" =>
Z <= C;
when others =>
Z <= D;
end case;
end process;

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


alternativas, pero cada alternativa tendr cuatro
bits.Portanto,lasalidatambintendr4bits.
Elesquemadeestemultiplexorsemuestraenla
figura3.8

A(3:0)

Z(3:0)

B(3:0)

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

A(3:0)

B(3:0)

1
0

SEG(6:0)

Z(3:0)

Puertos
In
Out
A(3:0)
LED(3:0)
B(3:0)
SEG(6:0)
S
AN(3:0)

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

F
E

4
F

G
D

B
C

G
D

B
C

G
D

B
C

9
F

B
C

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

0
F

Usamos un vector SEG(6:0) que contendr el valor de los segmento s


B
C

SEG(6)
SEG(5)
SEG(4)
SEG(3)
SEG(2)
SEG(1)
SEG(0)

segmento
segmento
segmento
segmento
segmento
segmento
segmento

A
B
C
D
E
F
G

Como para el cero (Z="0000") se encienden todos


los segmentos menos el G, la asignacin ser:
SEG <= "0000001"
Un cero enciende el segmento
por ser lgica negada

Bit 0 correspondiente
con los segmentos F que
estar apagado

Si Z="0001" mostramos el uno


A

1
F

Como para el uno (Z="0001") se encienden los


segmentos B y C, la asignacin ser:
SEG <= "1001111"

Bits correspondientes
con los segmentos B y C
que estarn luciendo

Si Z="0010" mostramos el dos


A

2
F

B
C

Como para el dos (Z="0010") se encienden todos


los segmentos menos el C y el F, la asignacin ser:
SEG <= "0010010"
Bits correspondientes
con los segmentos C y F
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;

LED <= Z;

multiplexor

Asignacin de las seal Z a los LED

(no se puede usar Z como puerto de salida)

AN <= "1110";

Encendemos el nodo 0

SEG <= "0000001"


"1001111"
"0010010"
"0000110"

when
when
when
when

Z="0000"
Z="0001"
Z="0010"
Z="0011"

else
else
else
else

-----

comentarios para ayudar a identificar


el nmero y los segmentos que lucen
0:
1:
2:
3:

A,B,C,D,E,F
B,C
A,B,D,E,G
A,B,C,D,G

Primeros 4 nmeros
del convertidor a
siete segmentos

.....
..... contina t con el resto de casos
.....
"0110000" when Z="1110" else -- E(14): A,D,E,F,G
"0111000"; -- when Z="1111"; -- F(15): A,E,F,G

Dos ltimos nmeros


del convertidor

En la ltima alternativa no se pone


condicin para evitar generar un latch

Figura 4.4: Sentencias concurrentes de la arquitectura

Ahora, termina de hacer el convertidor a siete segmentos e implementa el diseo en la


FPGA.Tenespecialcuidadodeasignarlospinesadecuadamente.Puedeserquetesalgan
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).

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

13

Departamento de Tecnologa Electrnica

43

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

DECOD 2a4
S0

E
0
1
1
1
1

I0
S1
I1
S2
S3

I1
X
0
0
1
1

I0
X
0
1
0
1

S3
0
0
0
0
1

S2
0
0
0
1
0

S1
0
0
1
0
0

S0
0
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

SW3-SW0
4

D_IN(3:0)

SW7-SW6

BTN0

SEG_A-SEG_G
SEG(6:0)

I0

DECOD_2a4
S0

AN(0)

I1

S1

AN(1)

S2

AN(2)

S3

AN(3)

Queremos que se habilite


cuando no est presionado
el pulsador BTN0

AN3-AN0

Controlamos qu
display se va a
encender

Negamos porque los displays se


controlan con lgica inversa

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.

E_NEG <= NOT E;


S_DECOD <= "0000" when E_NEG='0' else
"0001" when I="00" else
"0010" when I="01" else
"0100" when I="10" else
"1000"; -- when I="11"
-- invertimos para tener logica negada
AN <= NOT (S_DECOD);

Cdigo 4-1:Decodificador con sentencia


concurrente

P_DECOD: Process (E, I)


begin
if E='1' then
AN <= (others =>'1');
-- AN <= "1111";
else
case I is
when "00" =>
AN <= "1110";
when "01" =>
AN <= "1101";
when "10" =>
AN <= "1011";
when others => -- "11"
AN <= "0111";
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.
EI
0
1
1
1
1
1
1
1
1
1

CODIF
EO

I0
I1
I2
I3
I4
I5
I6
I7

S0
S1
S2
A

EI

I7
X
0
0
0
0
0
0
0
0
1

I6
X
0
0
0
0
0
0
0
1
X

I5
X
0
0
0
0
0
0
1
X
X

I4
X
0
0
0
0
0
1
X
X
X

I3
X
0
0
0
0
1
X
X
X
X

I2
X
0
0
0
1
X
X
X
X
X

I1
X
0
0
1
X
X
X
X
X
X

I0
X
0
1
X
X
X
X
X
X
X

S2
0
0
0
0
0
0
1
1
1
1

S1
0
0
0
0
1
1
0
0
1
1

S0
0
0
0
1
0
1
0
1
0
1

A EO
0 0
0 1
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0

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


LED0
LED1
LED2

Si est deshabilitado (EI='0')


muestro un "-" (segmento G)

CODIF
SW0
SW1
SW2
SW3
SW4
SW5
SW6
SW7
BTN0

I0
I1
I2
I3
I4
I5
I6
I7

EO

CONV_7SEG
S0
S1
S2

numero(0)
numero(1)
numero(2)

SEG(6:0)

1
SEG_AUX(6:0)

D3

activo
A

Como slo hay 3 bits, el cuarto


va a cero (nmero entre 0 y 7)

"1111"

Si hay alguna entrada activa


se enciende el primer display

D0
D1
D2

EI

Si no hay ninguna entrada


activa se apagan todos los
display (todos los nodos a 1)

"1111110"

MUX6BITS

"1110"

0
1

1
4

Si no est habilitado se encienden todos


los displays (todos los nodos a 0)

"0000"

AN(3: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
activo <= '1';
if SW(7) = '1' then
numero <= "111";
elsif SW(6) = '1' then
numero <= "110";
elsif SW(5) = '1' then
numero <= "101";
elsif SW(4) = '1' then
numero <= "100";
elsif SW(3) = '1' then
numero <= "011";
elsif SW(2) = '1' then
numero <= "010";
elsif SW(1) = '1' then
numero <= "001";
elsif SW(0) = '1' then
numero <= "000";
else
numero <= "000";
activo <= '0';
end if;
end if;
end process;
LED

Para no ponerla en
todas las
condiciones, se
puede poner la
asignacin por
defecto al
principio
Codifica los
interruptores
en un nmero
binario
Y cuando haya
que asignar otro
valor se incluye
en esa condicin

Lleva el nmero codificado a los LED

<= numero;

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" -- 0
SEG <= seg_aux when BTN0='0' else "1111110";
AN <= "0000" when BTN0='1' else
"1111" when activo = '0' else
"1110"; -- BTN0 ='1' AND activo = '1'

7
6
5
4
3
2
1

Convierte el
nmero a siete
segmentos
Inhabilita los segmentos si se
pulsa BTN0 (pone un signo "-")

Controla qu

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
0
0
1
1

K
0
1
0
1

Q(t+1)
Q(t)
0
1
Q(t)

BTN1

LD0

CLK
BTN0

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
if Clk'event and Clk='1' then
if J='1' and K='1' then
Q <= not Q;
elsif J='1' and K='0' then
Q <= '1';
elsif J='0' and K='1' then
Q <= '0';
else
Q <= Q;
end if;
end if;
end process;

Cdigo 5-1: Proceso que implementa un biestable J-K

P_JK2: Process (Clk)


begin
if Clk'event and Clk='1' then
if J='1' and K='1' then
Q <= not Q;
elsif J='1' and K='0' then
Q <= '1';
elsif J='0' and K='1' then
Q <= '0';
end if;
end if;
end process;

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 J='1' then
......

if clk'event and clk='1' and 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)
begin
H <= P; -- INCORRECTO
if Reset = '0' then
Q <= '0';
elsif Clk'event and Clk='1' then
-- aqu van sentencias sincronas
......

Cdigo 5-6: Asignacin antes de la


inicializacin. INCORRECTA

Biest_proc: Process (Reset, Clk)


begin
if Reset = '0' then
Q <= '0';
elsif Clk'event and Clk='1' then
Q <= Dato;
end if;
H <= P; -- INCORRECTO
end process;

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)
begin
if Reset = '0' then
Q <= '0';
elsif Clk'event and Clk='1' then
if Inic = '0' then
Q <= Dato;
else
Q <= '0';
end if;
end if;
end process;

Biest_proc: Process (Reset, Clk)


begin
if Reset = '0' then
Q <= '0';
elsif Clk'event and Clk='1' then
Q <= '0';
if Inic = '0' then
Q <= Dato;
end if;
end if;
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)
begin
if Select = "00" then
Q <= '0';
elsif Select = "01" then
Q <= Dato1;
else
Q <= Dato2;
end if;
end process;

Cdigo 5-12: Proceso combinacional (no genera


latch). Correcto

LatchProc: Process(Select,Dato1,Dato2)
begin
if Select = "00" then
Q <= '0';
elsif Select = "01" then
Q <= Dato1;
elsif Select = "10" then
Q <= Dato2;
end if;
end process;

Cdigo 5-13: Proceso que genera latch.


Posiblemente no lo quieras generar

Incluso,aunquesecubrantodaslasposibilidadessedebeterminarconunelseporque
lostipos std_logictienenmsvaloresposiblesapartede0y1.Elcdigo514esel
recomendadofrentealcdigo515.
CombProc: Process(Select,Dato1,Dato2)
begin
if Select = "00" then
Q <= '0';
elsif Select = "01" then
Q <= Dato1;
elsif Select = "10" then
Q <= Dato2;
else
Q <= '1';
end if;
end process;

Cdigo 5-14: Proceso combinacional (no genera


latch)

LatchProc: Process(Select,Dato1,Dato2)
begin
if Select = "00" then
Q <= '0';
elsif Select = "01" then
Q <= Dato1;
elsif Select = "10" then
Q <= Dato2;
elsif Select ="11" then
Q <= '1';
end if;
end process;

Cdigo 5-15: Proceso que es posible que genere


latch. No recomendado

Otra manera de asegurarse de que no se genera latch es incluir una asignacin por
defecto al principio. Esto vendra a ser equivalente a un else. El cdigo 516 es
equivalentealcdigo512,yelcdigo517esequivalenteal514.
CombProc: Process(Select,Dato1,Dato2)
begin
Q <= Dato2;
if Select = "00" then
Q <= '0';
elsif Select = "01" then
Q <= Dato1;
end if;
end process;

Cdigo 5-16: Proceso combinacional equivalente al


cdigo 5-12 (no genera latch)

CombProc: Process(Select,Dato1,Dato2)
begin
Q <= '1';
if Select = "00" then
Q <= '0';
elsif Select = "01" then
Q <= Dato1;
elsif Select = "10" then
Q <= Dato2;
end if;
end process;

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
0
1

Q(t+1)
Q(t)
Q(t)

CLK
BTN3

LD0

Reset

Figura 5.3: Tabla de verdad del biestable T y su esquema

Loscdigos518y519muestranprocesosequivalentesparaimplementarunbiestableT
activoporflancodesubida.
P_T: Process (Reset, Clk)
begin
if Reset = '1' then
Q <= '0';
elsif Clk'event and Clk = '1' then
if T = '1' then
Q <= not Q;
end if;
end if;
end process;

Cdigo 5-18: Proceso que implementa un biestable T

P_T: Process (Reset, Clk)


begin
if Reset = '1' then
Q <= '0';
elsif Clk'event and Clk = '1' then
if T = '1' then
Q <= not Q;
else
Q <= Q;
end if;
end if;
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

BTN0_RG1

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

BTN0_RG1
D

BTN0_RG2

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
BTN0

BTN0_RG1
D

LD0

BTN0_RG2

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)
begin
if Reset = '1' then
BTN0_REG1 <= '0';
elsif Clk'event and Clk='1' then
BTN0_REG1 <= BTN0;
end if;
end process;
biest_D2: Process (Reset, Clk)
begin
if Reset = '1' then
BTN0_REG2 <= '0';
elsif Clk'event and Clk='1' then
BTN0_REG2 <= BTN0_REG1;
end if;
end process;

BTN0

BTN0_RG1
D

Primer
biestable D

Reset
Clk

BTN0_RG2

BTN0_RG1
D

Segundo
biestable D

Reset
Clk

Deteccin de
flanco de subida

PULSO_BTN0 <= '1' when (BTN0_REG1 = '1' and BTN0_REG2='0') else '0';
biest_T: Process (Reset, Clk)
begin
if Reset = '1' then
Q_T <= '0';
elsif Clk'event and Clk='1' then
if PULSO_BTN0 = '1' then
Q_T <= NOT Q_T;
end if;
end if;
end process;
LD0 <= Q_T;

biestable T cuya
entrada
PULSO_BTN0 se ha
transformado en
un pulso de un
ciclo de reloj

Q_T

PULSO_BTN0
T

Reset
Clk

Asignacin al puerto de salida Q_T es necesario


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)
begin
if Reset = '1' then
BTN0_REG1 <= '0';
BTN0_REG2 <= '0';
elsif Clk'event and Clk='1' then
BTN0_REG1 <= BTN0;
BTN0_REG2 <= BTN0_REG1;
end if;
end process;

Cdigo 5-20: Proceso que implementa los 2


biestables D

biest_Ds: Process (Reset, Clk)


begin
if Reset = '1' then
BTN0_REG1 <= '0';
BTN0_REG2 <= '0';
elsif Clk'event and Clk='1' then
BTN0_REG2 <= BTN0_REG1;
BTN0_REG1 <= BTN0;
end if;
end process;

Cdigo 5-21: Proceso equivalente al 5-20

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
escala)

T=20 ns
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

P_Conta1seg

T=20 ns

Biestable T
S1seg

Clk

Clk

50 MHz

S1seg

Reset

1 Hz

LED

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


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

14

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
Clk

Clk

PConta10segs

S1seg

S1seg

conta10s

SEG(6:0)

Reset
Clk
PB3
A

Reset
(no est a escala)

T=20 ns

T=1 s

B
C

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;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

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

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

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
4

PB3

Reset
4

SEG(6:0)
LED(3:0)
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)
T=20 ns

(no est a
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
S1decima

Clk

PConta10decimas
S1seg
decimas

Clk

PConta60seg

PConta10seg
S1seg

S1decima

PConta10min
S60seg

S10seg
S1seg

segundos

S10seg
dec_segundos

minutos

Reset
PB3

Clk

Clk

Reset

Clk

Reset
decimas(3:0)

Clk

Reset

segundos(3:0)

Reset

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)
begin
if reset = '1' then
decimas <= (others => '0');
s1seg
<= '0';
elsif clk'event and clk='1' then
s1seg <= '0';
if s1decima = '1' then
if decimas = 9 then
decimas <= (others => '0');
s1seg <= '1';
else
decimas <= decimas + 1;
end if;
end if;
end if;
end process;

PConta10decimas
S1seg

S1decima

S1seg
decimas
Clk

Reset
Reset
decimas(3:0)

Figura 6.7: Esquema del proceso contador de dcimas

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
0
0
0
1
1
0
1
1

nodo
AN3
AN2
AN1
AN0

DISPLAY
dcimas
segundos
decenas de segundos
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).
SW6 I(0)
SW7 I(1)

DECOD_2a4
S0

AN(0)

S1

AN(1)

S2

AN(2)

S3

AN(3)

Lo hacemos sin
habilitacin
(siempre habilitado)

AN3-AN0
Controlamos
qu display
se enciende

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.
decimas(3:0)
segundos(3:0)
dec_segundos(3:0)

00
01

SEG_A-SEG_G

mostrar(3:0)
4

SEG(6:0)

10
4

11

minutos(3:0)

SW6
I(1:0)
SW7

CONV_7SEG

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
S1decima

Clk

PConta10decimas
S1seg
decimas

Clk

PConta60seg

PConta10seg
S1seg

S1decima

PConta10min
S60seg

S10seg
S1seg

segundos

S10seg
dec_segundos

minutos

Reset
Clk

Reset

decimas(3:0)

Clk

PB3

Clk

Clk

Reset

Reset

Reset

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

01

10

I(1:0)
SW6
SW7

AN3-AN0

DECOD_2a4
S0

I(1:0)
AN(0)

S1

AN(1)

S2

AN(2)

S3

AN(3)

00

11
CONV_7SEG

SW6
SW7

mostrar(3:0)

SEG_A-SEG_G
6

El nmero que se
muestra segn estn
los interruptores

SEG(6:0)

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:

T=20 ns
clk
50MHz
s1mili
1kHz

(no est a
escala)

frecuencia
50MHz
= 50000
1kHz
periodo
1ms
1000000ns
=
= 50000
20ns
20ns

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

minutos decenas unidades dcimas

AN_0
AN_1
M

DS

US

AN_3

AN_2

AN_1

dec

AN_2
AN_0

AN_3
mostrar

dec

US

DS

4 x 1 ms

US

DS

UM

DM

Segn el valor de CUENTA4MS


se selecciona las dcimas, las
unidades o decenas de segundos
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
S1decima

Clk

S1decima

Clk

PConta10decimas
S1seg
S1seg
4
decimas

PConta10seg

PConta60seg

PConta10min
S60seg

S10seg
S1seg

S10seg
dec_segundos

segundos

minutos

Reset
Clk
decimas(3:0)

Clk

BTN3

Reset

Clk

Reset

S1decima
cuenta4ms

Reset

Reset

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

Clk

segundos(3:0)

PConta4milis

P_Conta1mili
S1mili

Clk

cuenta4ms

00

01

10

11

Clk

CONV_7SEG

SEG_A-SEG_G

Reset
Clk

BTN3

mostrar(3:0)

SEG(6:0)

Reset
Lo que antes era I
SW6
SW7

I(1:0)

DECOD_2a4
S0
I

AN(0)

S1

AN(1)

S2

AN(2)

S3

AN(3)

AN3-AN0

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)

CONV_7SEG
6

00

segundos(3:0)

6
6

CONV_7SEG

01

SEG(6:0)

10

dec_segundos(3:0)

11
2

CONV_7SEG
minutos(3:0)

4
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

P_DOWN

1
P_DOWN

2
P_DOWN

3
P_DOWN

4
P_DOWN

5
P_DOWN

6
P_DOWN

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

UP

BTN1

DOWN

Clk

Clk

P_UP
P_DOWN

PConta
P_UP

CONV_7SEG
CUENTA

3
6

SEG(6:0)

P_DOWN
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

BTN0

CARGA

BTN2

DESPL_IZQ
7

Clk

SW6

SW5

SW4

SW3

SW2

SW1

SW0

Lo que haya en el
registro se mueve a la
izquierda cuando
DESPL_IZQ='1'

Clk
Reset
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);
end if;
end if;
end process;

-- desplazamiento a izquierda

Cdigo 7-1: Cdigo del proceso de registro de desplazamiento

Sihasentendidolasprcticasanteriores,nodeberasdetenerproblemasparaentenderel
cdigo71,salvoparalasentenciaresaltadaennegrita.
Estasentenciaseraequivalentealassealadasennegritaenloscdigos72y73
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) <= registro (6);
registro (6) <= registro (5);
registro (5) <= registro (4);
registro (4) <= registro (3);
registro (3) <= registro (2);
registro (2) <= registro (1);
registro (1) <= registro (0);
end if;
end if;
end process;

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 (1) <= registro (0);
registro (2) <= registro (1);
registro (3) <= registro (2);
registro (4) <= registro (3);
registro (5) <= registro (4);
registro (6) <= registro (5);
registro (7) <= registro (6);
end if;
end if;
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

Antes de
desplazar
bit 7 se
pierde
7

despus de
desplazar

bit 0 se
mantiene
y se
duplica

Figura 7.2: Desplazamiento a la izquierda

Ahoraimplementaelcircuitoycompruebaquefuncionacorrectamente.Realizalacargay
luego el desplazamiento. Realiza varias cargas en las que unas veces el bit 0 valga 0 y
otras1.Analizaloqueocurreyasegratedequeloentiendes.

74

Universidad Rey 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

Antes de
desplazar
bit 7 va
al bit 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
S1decima

Clk

P_RotaReg

S1decima
rota_izq

registro

LED(7:0)

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.

SesueleabreviarconUUT(Unidadbajopruebas:UnitUnderTest)

15

Eninglssediceinstantiation,quealgunostraducencomoinstanciacin(quenoexisteenespaol)yotros
comoreferencia(quesexiste)

16

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
funcionamiento

TB_UUT
P_Inputs
Proceso que simula
las entradas al
circuito

UUT
4

In1

Out1

In2

P_Clk

Clk

Proceso que
simula el reloj

Clk

Observamos si las salidas


son las que tiene que ser.

Out2
Reset

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
Clk

Clk

Definiremos CUENTA como unsigned

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;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_unsigned.all;
USE ieee.numeric_std.ALL;
ENTITY tb_conta_vhd IS
END tb_conta_vhd;

Bibliotecas utilizadas
Quitamos la
std_logic_unsigned

La entidad del banco de pruebas


B
no tiene puertas de entada/salida

ARCHITECTURE behavior OF tb_conta_vhd IS


-- Component Declaration for the Unit Under Test (UUT)
COMPONENT conta10
PORT(
Declaracin del
Reset : IN std_logic;
componente
que vamos
Clk : IN std_logic;
a probar (UUT)
cuenta : OUT std_logic_vector(3 downto 0)
);
END COMPONENT;
cambiar a unsigned

--Inputs
SIGNAL Reset : std_logic := '0';
SIGNAL Clk : std_logic := '0';

Seales que vamos a generar


(estmulos): entradas a conta, D

--Outputs
SIGNAL cuenta :

Seales que vamos a observar


si estn bien. Salidas del
E
componente conta

std_logic_vector(3 downto 0);

cambiar a unsigned

BEGIN
-- Instantiate the Unit Under Test (UUT)
uut: conta10 PORT MAP(
Reset => Reset,
Clk
=> Clk,
cuenta => cuenta
);
tb : PROCESS
BEGIN
-- Wait 100 ns for global reset to finish
wait for 100 ns;
-- Place stimulus here

Referencia (instanciacin) del


componente conta (a probar)

Patrn de ejemplo para generar


los estmulos: Generar los
G
valores de las seales de
entrada,
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").
Debe ser nico

nombre del componente que


estamos "instanciando".
Debe ser el mismo que el
nombre que le dimos a la
entidad

uut: conta
PORT MAP(
Reset => Reset,
Clk
=> Clk,
cuenta => cuenta
);
puertos del
componente

mapeo de puertos

Entidad del componente que estamos testeando


entity conta is
Port (
Reset : in STD_LOGIC;
Clk : in STD_LOGIC;
cuenta : out UNSIGNED (3 downto 0)
);
end conta;

seales de la
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;
end process;

-- al terminar aqui, vuele al principo

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 xc3s100e4tq144sieslaBasys)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_Comb_estado

P_Secuencial
estado_actual

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

Leyenda
1

0
ON
1

OFF
0

Pulso_BTN0

estado
LD0
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

inic
0

s0
0

BTN0

1
1

entrada

Leyenda

s01
1

estado
pulso_btn0

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
Recuerda:ProjectAddCopyofSource....

17

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

0 1 0 1

BTN0
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
s0
0

inic
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
S1decima

Clk

P_Rota
Enable

Clk
rota_izq

Reset
PB3

Clk

Reset

registro

LED(7:0)

1
1

MaquinaEstados
registro(7)
registro(0)

tope_izq
tope_dcha

rota_izq

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

Leyenda
01

0X
IZQ
1

DCHA
0

X0

tope_izq, tope_dcha
estado
rota_izq
salida

10

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.
Elproblemadelcarritohechoenclaseessimilar,quizsunpocomscomplicado.
http://laimbio08.escet.urjc.es/assets/files/docencia/EDII/carrito.pdf

18

Sinembargo,silohicieseamano,squetengoqueconsiderarlasentradasimposiblesparapodersimplificar
almximoporKarnaugh

19

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
8

Pulso_D

BTN0
BTN1

LD(7:1)
Pulso_C

BTN2

Pulso_B

BTN3

Pulso_A

Clk

habilita_cuenta

Temporizador
Enable

fin3seg

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

3,3V
4,7k

4,7k

Spartan-3E

3,3V

PIN pulsador
59
BTN0
58
BTN1
57
BTN2
154 BTN3

0,1F

4,7k

PIN pulsador
69
BTN0
48
BTN1
47
BTN2
41
BTN3

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
Filtro_BTN0

BTN0

Temporizador
enablecont
Enable

fin3ms

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
s0
00

inic
00

1X

entradas

BTN0,fin3ms
1X
estado

X1
s01
10

espera
01
X0

filtro_btn0
enablecont

salidas
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

BTN3
BTN2

BTN1
BTN0

LED(7:0)

BTN3 Moneda de 1 Euro


BTN2 Moneda de 50 cntimos

SEG(7:0)

BTN1 Moneda de 20 cntimos

AN(3:0)

BTN0 Moneda de 10 cntimos


SW7

CLK

Reset

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
8

m1euro

BTN3
BTN2

LED(7:0)
m50cent

BTN1

conv7seg

m20cent
qdinero

BTN0

m10cent

cantidad

s7seg

Clk

Clk

SEG(6:0)

fin2seg
Temporizador

Reset
Clk

enable_cont

Clk

Enable

Reset

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.

En el inicio indicamos el precio


P150

Mientras no haya introducido el


dinero suficiente, se indica la
cantidad que lleva (en decimal).
Por ejemplo:

Al haber introducido el dinero


suficiente escribiremos LATA
de la manera ms aproximada

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=80%

D=20%

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=20%

D=50%

D=20%

D=50%

D=20%

Equivale a una tensin


continua del 50% de la
nominal: el motor ir a un
50% de la velocidad mxima

Equivale a una tensin


continua del 20% de la
nominal: el motor ir a un
20% de la velocidad mxima

D=20%

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
de un circuito para controlar un motor paso a paso,
quesepodraadaptarparaestecaso.
Pero de manera ms sencilla, se puede utilizar un
transistor de potencia, como se hace en las prcticas
de la asignatura Sistemas Electrnicos Digitales del
prximo curso. El esquema bsico del circuito se
muestraenlafigura13.4.Segnelmotor,seescoger
latensin(Vcc),eltransistoryresistenciasadecuadas.

VCC

R1
FPGA_PWM

Figura 13.4: Circuito de potencia para


controlar el motor desde la FPGA

PMODHB3:http://www.digilentinc.com/Products/Detail.cfm?&Prod=PMODHB3

20

PMODHB5:http://www.digilentinc.com/Products/Detail.cfm?&Prod=PMODHB5

21

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.
Informacindelosmotorespasoapasoenespaol:[7,24]yeningls[4,9,21,22]

22

Informacinobtenidadehttp://www.doc.ic.ac.uk/~ih/doc/stepper/others/

23

Departamento de Tecnologa Electrnica

105

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

Alimentacin
L

L
D

Figura 14.1: Conexin interna de un motor unipolar

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

A
Motor se
posiciona

Figura 14.2: El terminal A a


tierra

Aquel terminal que no haga girar un paso al motor sino que haga que pierda par
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.
Giro a izquierda
medio paso

Giro a derecha
medio paso

Motor
pierde
par

Figura 14.3: Resultado de poner a tierra cada uno de los otros tres terminales, cuando el motor pierde par
indica que es el correspondiente

Unavezquetengamoslosterminalesidentificados,yapodemosgenerarlassecuenciasde
giro. En la figura 14.4 se muestra la identificacin de los terminales para el motor que
hemosobtenidodeimpresorasHewlettPackardmodelosDJ560CyDJ690c.Estemotoresel
modeloPM55L048deMinebea,cuyashojasdecaractersticassepuedenconsultarenla
pginawebdeMinebea[16].Detodosmodos,elfuncionamientoconotrosmotoresser
similar,aunquetendrsqueleerlascaractersticasdelmotorquetengasparaadaptarel
circuito.

106

Universidad Rey Juan Carlos

14. Control de motor paso a paso

Alimentacin
(comn)
A

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

B y C a tierra

C y D a tierra

D y A a tierra

Figura 14.5: Secuencia de terminales que se ponen a tierra para obtener el giro del motor

As que para girar el motor tenemos que poner a tierra de manera secuencial los
terminales.Delafigura14.5podemosobtenerlasecuenciadeterminalesqueseponena
tierraparaobtenerelgirodelmotor:ABBCCDDAAB...
Enlafigura14.6semuestralasecuenciadelosterminalesquesetienenqueponeratierra.
Semuestranlosdossentidosdegiro.

terminal a tierra

1
A

C
D

1
1

1
1
1

tiempo
6

1
1

1
1
1

terminal a tierra

tiempo
1

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

Basys

AC0 (P49)

JA1 (P81)

AC1 (P48)

JA2 (P91)

AC2 (P81)

JA3 (P82)

AC3 (P47)

JA4 (P92)

CONTROL_MOTOR
BTN3
BTN0

CLK

IZQ
DCHA

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.

Tambinseveinfluenciadoporeltipodeelectrnicadepotencia.Conunaelectrnicaespecficasepuede
aumentarlafrecuencia

24

108

Universidad Rey Juan Carlos

14. Control de motor paso a paso

11X

0XX
100
AB
1100

101

0XX
100
BC
0110

Leyenda

entradas

CTS,BTN0,BTN3
11X

11X

DA
1001
0XX
100

101

101
101

11X

estado
ABCD

CD
0011

salidas
0XX
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

TA

R1

VCC

TB

R1

FPGA_A

VCC

TC

R1

FPGA_B

TD

R1

FPGA_D

FPGA_C

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,
pero puede
funcionar a
partir de 5V

VCC=24V

TA

PM55L-48
el resto de
terminales
tienen un
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
driver a '1'

Mximo 24V,
pero puede
funcionar a
partir de 5V

Esta parte se pone


a 5V para que
consuma menos

V1CC=5V
V1CC=5V
optoacoplador

10k

V2CC=24V

V2CC=24V

22k
220

PM55L-48
el resto de
terminales
tienen un
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
interfaz
pulsadores

Amplificador de audio

Generador de
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
EstaprcticahasidodesarrolladaeneldepartamentodeTecnologaElectrnicademaneraconjuntaporlos
profesores:BelnArredondo,SusanaBorromeo,JoaqunVaquero,NorbertoMalpicayFelipeMachado.La
implantacindeestaprcticaenclasessehadetalladoenelartculo[10]

25

PmodAMP1:http://www.digilentinc.com/Products/Detail.cfm?&Prod=PMODAMP1

26

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

Ri

FPGA
Ve

Amplificador con dos etapas

Ri

Ro
+
_

Ave

Etapa1: Esquema general


amplificador tensin

ie

Ro
Aie

Etapa2: Esquema general


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

T1s

PLAY

PLAY

T1s
Clk

FW

FW
Enable
Reset

Temporizador

Enable

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

118

Ordendeplay(PLAY)

Ordendeavancerpido(FW).

Habilitacindeltemporizador(Enable)

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.
Imposible
X 1

InicialmentepartimosdelestadoINICIAL,endondePLAY='0'y
FW='0',escomoestarenpause.Enesteestadoelcontadorest
deshabilitado,ynosmantendremosaquhastaquesepulse P
(figura16.3).
Comoelcontadorestdeshabilitado,nuncallegarlasealde
quehapasadounsegundo(T1s),porloquesiempresercero.

0 0

INICIAL
0 0 0

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

ESP1S
0 0 1
habilitamos la cuenta

Figura 16.4: Transicin a un estado de espera

Enesteestadodeespera(ESP1S),esperaremosaque(figura16.5):

O bien llegue el final de cuenta sin haber soltado el pulsador (ha pasado ms de un
segundo)yentonceshayqueiralavancerpido(FW).

Obiensesuelteelpulsadorantesdelfindecuenta,yentonceshayqueiralPLAY

Podemos decir que es prcticamente imposible que se suelte el pulsador en el mismo


instante en el que se termina la cuenta. Sin embargo, en tal caso optaremos por darle
prioridadalplay(noestespecificado)

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:
Imposible

1 0

X 1
0 0

1 0

prcticamente imposible que


sean 0 1 en ese instante

ESP1S
0 0 1

1 1

INICIAL
0 0 0

0 X
FW
0 1 0

PLAY
1 0 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
imposible

1 0

X 1
0 0

1 0

ESP1S
0 0 1
En PLAY y FW:
Imposible

1 1

INICIAL
0 0 0

0 X

X 1
FW
0 1 0

PLAY
1 0 0

1 0

0 0

Figura 16.6: Estado de reproduccin y avance

EstandoenFWcuandosesuelteelpulsadorP,elsistemavaalPLAY(figura16.7)
En INICIAL
imposible

1 0

X 1
0 0

1 0
INICIAL
0 0 0

ESP1S
0 0 1
En PLAY y FW:
Imposible

1 1
0 X

X 1
PLAY
1 0 0

0 0

FW
0 1 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
imposible

1 0

X 1
0 0

1 0

ESP1S
0 0 1

se suelta P
antes del
segundo

0 X

0 X
1 0
ESP1S2
1 0 1

PLAY
1 0 0

X 1
0 0

FW
0 1 0

1 0

0 0
1 1

se mantiene
el play
prcticamente imposible que
sean 0 1 en ese instante

En PLAY y FW:
Imposible

1 1

INICIAL
0 0 0

se mantiene
P pasado el
segundo

1 0

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
0 1 1
codificacin cualquiera, por ejemplo la resultante de tomar PLAY
Esp2s
1 0 0

nmeros consecutivos. Seguramente habr codificaciones ms


Tabla
16.1:
ptimasquereduzcanlastransicionesdeunestadoaotro(perono
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
actual

Inicial

Esp1s

Fw

Play

Esp1s2

Estados imposibles

Entradas

Q2 Q1 Q0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 1
0 0 1
0 0 1
0 0 1
0 1 0
0 1 0
0 1 0
0 1 0
0 1 1
0 1 1
0 1 1
0 1 1
1 0 0
1 0 0
1 0 0
1 0 0
1 X 1
1 1 0

P
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
X
X

T1s
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
X
X

Salidas
Pl
0
0
0
0
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
X
X

FW
0
0
0
0
0
0
0
0
1
1
1
1
0
0
0
0
0
0
0
0
X
X

Estado
siguiente
t+1

t+1

t+1

En Q2 Q1 Q0
0
0 0 0
0
X X X
0
0 0 1
0
X X X
1
0 1 1
1
0 1 1
1
0 0 1
1
0 1 0
0
0 1 1
0
X X X
0
0 1 0
0
X X X
0
0 1 1
0
X X X
0
1 0 0
0
X X X
1
0 0 0
1
0 0 0
1
1 0 0
1
0 1 0
X
X X X
X
X X X

condiciones imposibles
condiciones imposibles

condiciones imposibles
condiciones imposibles
condiciones imposibles
condiciones imposibles

Tabla 16.2: Tabla de estados siguientes y salidas

16.2.4. Tabla de excitacin de los biestables para biestables J-K


Latabladeexcitacindelosbiestableslapodramoshaberrellenadoenlatablaanterior.
Para saber las ecuaciones de las entradas de los biestables necesitamos saber qu
necesitamos para lograr cada una de las transiciones. Como nos piden hacerlo con
biestablesJK,ponemossutabla,yapartirdeellaobtenemoslasentradasJyKparalas
cuatroposiblestransiciones(tabla16.3)
J
0
0
1
1

K Q(t+1)
0 Q(t)
1
0
0
1
1 Q(t)

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

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

Estado
actual

Inicial

Esp1s

Fw

Play

Esp1s2

Estados imposibles

Entradas

Q2 Q1 Q0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 1
0 0 1
0 0 1
0 0 1
0 1 0
0 1 0
0 1 0
0 1 0
0 1 1
0 1 1
0 1 1
0 1 1
1 0 0
1 0 0
1 0 0
1 0 0
1 X 1
1 1 0

P
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
X
X

T1s
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
X
X

Estado
siguiente

Salidas
Pl
0
0
0
0
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
X
X

FW
0
0
0
0
0
0
0
0
1
1
1
1
0
0
0
0
0
0
0
0
X
X

t+1

t+1

Entradas en los biestables


para conseguir las t+1
transiciones Qi Qi

t+1

En Q2 Q1 Q0
0
0 0 0
0
X X X
0
0 0 1
0
X X X
1
0 1 1
1
0 1 1
1
0 0 1
1
0 1 0
0
0 1 1
0
X X X
0
0 1 0
0
X X X
0
0 1 1
0
X X X
0
1 0 0
0
X X X
1
0 0 0
1
0 0 0
1
1 0 0
1
0 1 0
X
X X X
X
X X X

J2 K2 J1 K1 J0 K0
0 X 0 X 0 X
X X X X X X
0 X 0 X 1 X
X X X X X X
0 X 1 X X 0
0 X 1 X X 0
0 X 0 X X 0
0 X 1 X X 1
0 X X 0 1 X
X X X X X X
0 X X 0 0 X
X X X X X X
0 X X 0 X 0
X X X X X X
1 X X 1 X 1
X X X X X X
X 1 0 X 0 X
X 1 0 X 0 X
X 0 0 X 0 X
X 1 1 X 0 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

1 1

PLAY = Q2 + Q1 Q0

Q2
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):

Clk

Reset

P se ha pulsado ms de 1 segundo

P-1SEG

P se ha pulsado menos de 1 segundo

MaqEstados

Temporizador
P

P+1SEG

P+1S

PLAY

P-1S

FW
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

MaqEstados2

MaqEstados1
P
Clk

P+1S

PLAY

P-1S

FW

P-1S

Reset

Clk

Reset

Temporizador
Enable
Clk

F1S
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


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

P F1s
Estado
P+1S P-1S
Salidas

Imposible
X 1
0 0

1 0
1 0

REPOSO
0 0
Slo estamos un ciclo de
reloj en MENOS1S (P1S='1'), nos vamos
directamente a reposo.
Podramos considerar que:
- F1S no puede ser 1
- P no puede ser 1 (no hay
rebotes y no es posibles
presionar tan rpido el
pulsador)

Nos mantenemos aqu


hasta que suelte el
pulsador o pase un
segundo

ESP1S
0 0
X X

Figura 16.12: Orden de entradas y salidas en la


representacin de la primera mquina de estados

0 X

MENOS1S
0 1

1 1

Ha soltado el pulsador. Si
lo suelta a la vez que ha
llegado el segundo,
tambin consideramos que
lo ha soltado, por eso 0 X

1 X

0 X
MAS1S
1 0

Nos quedamos aqu hasta


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
figura 16.15. En la figura 16.14 tenemos la
interpretacin de las entradas y salidas. Esta
mquina de estados fue propuesta por muchos
alumnos, pero es necesario haber incluido la
primera,puescomopuedeapreciarse,laprimera
es algo ms complicada y no la segunda sola no
funcionaracomoindicaelenunciado.

entradas

P+1S P-1s
Estado2
PLAY FF
Salidas

Figura 16.14: Orden de entradas y salidas en la


representacin de la segunda mquina de estados
0 0

0 0

0 1
INIC
0 0

0 1

PLAY
1 0

0 0
La entrada
1 1
es imposible
para todos
los estados

1 0

1 0
FF
0 1
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 Play

En Pausa
PAUS

En avance rpido
FF

PLAY

Figura 17.1: Texto que deben de mostrar los displays de siete segmentos
A
El funcionamiento de los displays es igual que el de la placa de
F
prcticas.Estoes,tenemos4nodosquecontrolanelencendidode
B
G
cadaunodelosdisplays:AN3,AN2,AN1,AN0.Recuerdaquefuncionana
C
E
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
estado_actual
(PAUSA, PLAY,FF)
Clk
(10MHz)

AN(3..0)

SEG(6..0)

Reset
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:
Pausa 00
Play 01
FF
10

P.ej: "P" :
"0001100"
GFEDCBA
"P"

00

"A"

"0001100"

"U"

00

01

"P"

"L"

"0001100"

10

" "

01

SEG3

" "

10

SEG2

no se usa

no se usa

11

"1111111"

10

"F"
no se usa

11

"0010001"

SEG1

10

"F"

"0001110"

"1111111"

01

"Y"

"0001000"

"1111111"

00

"0010010"

01

"A"

"1000111"

"1111111"

"S"

00

"1000001"

"0001000"

SEG0

"0001110"

11

no se usa

11

"1111111"

"1111111"

estado_actual
Conta1ms

Conta4ms
T1ms

SEG0

00

SEG1

01

Cuenta4ms(1..0)
4

Clk
(10MHz)

Reset
Reset

SEG2

10

SEG3

11

"1110"

00

"1101"

01

SEG

AN

Reset
Reset

Esto es un
decodificador

"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.
Para ello disponemos de un coche elctrico de juguete y
queremosrealizarelcircuitoelectrnicoquecontroleelgiro
delcoche(derechaoizquierda).
Para saber si el coche est sobre la lnea negra o no, se
ponendosdetectoresdeinfrarrojosenlapartedelanteradel
coche (ver figura de la derecha). Los detectores de
infrarrojos estn juntos y centrados en el alern delantero
delcoche.ElreceptorqueestalaizquierdaselellamarRI
yeldeladerechaRD.
Sinentraraexplicarelfuncionamientodelosdetectoresde
infrarrojos,lonicoquenosimportaparaesteproblemaes
que los detectores dan un cero cuando estn sobre la lnea
negra (ya que la luz emitida no se refleja) y devuelven un
unocuandoestnsobreelsueloblanco(porquesereflejala
luz).

RI: receptor
izquierdo

RD: receptor
derecho

Rueda
delantera
izquierda

Rueda
trasera
izquierda

Figura 18.1: Coche visto desde


arriba

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
GD
RD
girar a la izquierda o derecha, respectivamente. Por
Clk
ejemplo: GD='1'serlaordendegiraraladerecha.Silas
Reset
dos estn a cero significa que el coche debe ir recto.

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

B
Sobre la lnea

Se va de la lnea
por la izquierda
RI='1' RD='0'

RI='0' RD='0'

Se va del todo por la izquierda


RI='1' RD='1'

giro derecha

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'

B
Giro a la derecha

D
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
la izquierda

Se sale por
la derecha

1 1

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

0 0

1 0
1 0
IZQ
0 1

0 0

0 1
0 1

CENTRO
0 0

0 0

DCHA
1 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
Imposible
0 1

En Centro:
Imposible
1 1

En DCHA
Imposible
1 0

0 0

0 1

1 0
1 0
IZQ
0 1

0 0

0 1
CENTRO
0 0

1 1

0 0

DCHA
1 0

0 1
1 0

En F_IZQ
Imposible
0 1
0 0

1 1

F_IZQ
0 1

En F_DCHA
Imposible
1 0
0 0

F_DCHA
1 0
1 1

1 1

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
Imposible
0 1

1 X

En Centro:
Imposible
1 1

En DCHA
Imposible
1 0

0 0

X 1

1 0
IZQ
0 1

0 0

0 1
CENTRO
0 0

0 0

DCHA
1 0

Figura 18.9: Diagrama de estados final reducido

Estediagramanosepuedesimplificarmsyaquecadaestadotieneunasalidadistinta.
DisendolocomomquinadeMealyssepodrasimplificarms(peronosepedaenel
examen).
18.2.2. Tabla de estados siguientes y salidas
Antesdenadatenemosquecalcularelnmerodebiestablesque
necesitamosyasignarlesunosvalores.Comotenemos3estados,
nos vale con dos biestables. Asignaremos los mismos valores de
los estados que de las salidas, pero vale cualquier otra
combinacin.Laasignacinsemuestraenlatabla18.1.

Estado
CENTRO
IZQ
DCHA

Q1
0
0
1

Q0
0
1
0

Tabla 18.1: Codificacin


de estados

Latabladeestadossiguientesysalidassemuestraenlatabla18.2.

Departamento de Tecnologa Electrnica

137

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

Moore: Slo
dependen del estado

CENTRO

IZQ

DCHA
Sin usar (imposible)

Estado
actual

Entradas

Q1
0
0
0
0
0
0
0
0
1
1
1
1
1

RI
0
0
1
1
0
0
1
1
0
0
1
1
X

Q0
0
0
0
0
1
1
1
1
0
0
0
0
1

RD
0
1
0
1
0
1
0
1
0
1
0
1
X

Salidas
GI
0
0
0
0
0
0
0
0
1
1
1
1
X

GD
0
0
0
0
1
1
1
1
0
0
0
0
X

Estado
siguiente
t+1

Q1
0
1
0
X
0
X
0
0
0
1
X
1
X

Q0
0
0
1
X
0
X
1
1
0
0
X
0
X

t+1

condiciones imposibles
condiciones imposibles

condiciones imposibles

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
0
0
1
1

K Q(t+1)
0 Q(t)
1
0
0
1
1 Q(t)

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

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

CENTRO

IZQ

DCHA
Sin usar (imposible)

Estado
actual

Entradas

Q1
0
0
0
0
0
0
0
0
1
1
1
1
1

RI
0
0
1
1
0
0
1
1
0
0
1
1
X

Q0
0
0
0
0
1
1
1
1
0
0
0
0
1

RD
0
1
0
1
0
1
0
1
0
1
0
1
X

Estado
siguiente

Salidas
GI
0
0
0
0
0
0
0
0
1
1
1
1
X

Entradas en los
biestables para
conseguir las
t+1
transiciones QiQi

t+1

GD
0
0
0
0
1
1
1
1
0
0
0
0
X

Q1
0
1
0
X
0
X
0
0
0
1
X
1
X

Q0
0
0
1
X
0
X
1
1
0
0
X
0
X

t+1

J1 K1
0 X
1 X
0 X
X X
0 X
X X
0 X
0 X
X 1
X 0
X X
X 0
X X

J0 K0
0 X
0 X
1 X
X X
X 1
X X
X 0
X 0
0 X
0 X
X X
0 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.
J1

J0

RI-RD
00 01 11 10

00 0

01 0

11 X

10 X

RI-RD
00 01 11 10

00 0

01 X

11 X

10 0

Q1-Q0

Q1-Q0

RIRD

J0= RIRD

J1= RIRD
RIRD

K1

RI-RD

K0

00 01 11 10

00 X

01 X

Q1-Q0

RI-RD
00 01 11 10

00 X

01 1

Q1-Q0
11 X

11 X

10 1

10 X

RD

K1= RD

K0= RI
RI

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):

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

A
B

estemvilparasimplificarslotenemosunatecla)
Salidas:

A:MostrarelcarcterA

DOS
LISTO

Clk
Reset

Figura 19.1: Esquema de


entradas y salidas del sistema
de control

B:MostrarelcarcterB

DOS:Mostrarelnmero2

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
deestadosyuntemporizador.
Delamquinadeestadossaleunaseal
intermedia E que va al temporizador.
Esta seal funciona como habilitacin
(enable)demodoquecuandoEescero,el
contador se pone a cero y no cuenta,
mientras que cuando E es uno, se
habilitalacuenta.

MaqEstados
A
B
P
DOS
T
LISTO
E
Clk

A
B
DOS
LISTO

Reset

T
Temporizador
E

T
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

entradas

Salidas

Salidas

P T / A B D L E

P T / A B DOS LISTO E

Estado

Estado

Figura 19.3: Orden de entradas y salidas en el


diagrama de estados

Figura 19.4: Orden de entradas y salidas en el


diagrama de estados. Salidas con iniciales para
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
T='1'
habilitacin del contador, porque ahora no hay que
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
eltemporizador(E='1')

Figura 19.5: Estado inicial

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

INICIAL

P0/A000E
P0/A000E

ESP_S_A

ESP_S_A (ESPera a Soltar A)


esperamos a ver qu pasa antes:
- soltar P
- pasa un segundo

00/A0000

PT/00DL0

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
T='1'
X 1

00/00000

P0/A000E
P0/A000E

INICIAL

ESP_S_A

00/A0000

PT/00DL0
00
/0
00
00

En ESP_S
Imposible
T='1'
X 1

P0/00000

ESP_S
se ha soltado P

se fija el dos (un slo ciclo)


salidas a cero,
en espera de
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).
00/00000

En INI
INICIAL
CIAL
Imposible
Im
posible
T='1'
X 1

P0/A000E
P0/A000E

INICIAL

ESP_S_A

0T/00DL0
00

En ESP_S
Imposible
T='1'
X 1

/0

P0/00000

00
00

ESP_S

00/A0000

PT/00DL0
Caso
improbable.
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

En INICIAL
Imposible
T='1'
X 1

00/00000

P0/A000E
P0/A000E

INICIAL

0T/00DL0
00
0
/0

P0/00000

0
00

En ESP_S
Imposible
T='1'
X 1

ESP_S

ESP_S_A

00/A000E
00/A0000

PT/00DL0

E='1' se vuelve a
habilitar la cuenta

ESP_P_A

ESP_S_A (ESPera a Presionar, A)


esperamos a ver qu pasa antes:
- se presiona P
- pasa un segundo

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
PT/A00L0

En INICIAL
Imposible
T='1'
X 1

00/00000

P0/A000E
P0/A000E

INICIAL

ESP_S_A
0T/00DL0

00

En ESP_S
Imposible
T='1'
X 1

Se reinicia
temporizador

00/A000E
00/A0000

Se reinicia
temporizador

ESP_P_A

PT/00DL0
P0/0B000

/0

P0/00000

00
00

Se muestra B

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
Imposible
T='1'
X 1

00/00000

INICIAL

P0/A000E
P0/A000E
0T/00DL0

00
00
/0
00

En ESP_S
Imposible
T='1'
X 1

P0/00000

ESP_S

ESP_S_A

00/A000E
00/A0000

ESP_P_A

PT/00DL0
P0/0B000
0T/00DL0
PT/00DL0

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

(P,T): Caso improbable de pulsar justo en el segundo, lo tratamos como el anterior


(tambinpodramosirnosaESP_S_A).

FijamoslaB,yvamosalestado:INICIAL

0T/A00L0
PT/A00L0

En INICIAL
Imposible
T='1'
X 1

00/00000

P0/A000E
P0/A000E

INICIAL

ESP_S_A

00/A000E
00/A0000

ESP_P_A

0T/00DL0

PT/00DL0
00

P0/00000

/0
00
00

En ESP_S
Imposible
T='1'
X 1

ESP_S

P0/0B000
0T/00DL0
PT/00DL0

0T/0B0L0
PT/0B0L0
Ha pasado 1 segundo
sin pulsar P (o justo
se ha pulsado en el
segundo)

ESP_S_B

P0/0B00E

00/0B000
ESP_P_B

00/0B00E

P0/00D00
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

00/00000

En INICIAL
Imposible
T='1'
X 1

P0/A000E
P0/A000E

INICIAL

00/A000E
00/A0000

ESP_S_A

ESP_P_A

0T/00DL0

PT/00DL0

00
00
/0
00

P0/A0000

En ESP_S
Imposible
T='1'
X 1

P0/0B000

P0/00000

0T/00DL0
PT/00DL0

ESP_S

0T/0B0L0
PT/0B0L0

00/00D00

/0

0D

L0

L0

ESP_P_2

0T

0D
/0
PT

0T/00DL0
PT/00DL0

ESP_S_2

ESP_S_B

P0/0B00E

00/0B000
ESP_P_B

00/0B00E

P0/00D00
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

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
salidas

D1

tpmax(A)+tpmax(puerta)+tsu(D0)=30ns

Q0

tpmax(D0)+tpmax(puerta)+tsu(D1)=40ns
tpmax(D1)+tpmax(puerta)+tsu(D1)=40ns

Q1

tpmax(D1)+2tpmax(puerta)+tsu(D0)=50ns

Tabla 20.2: Tiempos de propagacin mximos

Elcaminocrticotarda50ns,porlotantolafrecuenciamximaes:
1
=
50 ns

109
50

Hz =

1000
50

106 Hz = 20 MHz

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.
Ecuaciones
D0 = A + Q1

S0 = Q0

D1 = Q0 Q1

S1 = Q1

Estados

entrada

Estado
siguiente

Q1 Q0
0 0
0 0
0 1
0 1
1 0
1 0
1 1
1 1

A
0
1
0
1
0
1
0
1

Q1' Q0'
1
1
1
1
1
1
1
1
1
0
1
1
0
0
0
1

A partir de las ecuaciones obtenemos el estado


siguiente. Como son biestables D, el valor de Q es
directamenteeldeldatodelbiestable(D)

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
0 0
0 1
1 0
1 1

Q1' Q0'
1
1
1
1
1
0
0
0

Q1' Q0'
1
1
1
1
1
1
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
00
00

10
10

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

D1

Q0

S1

Q1

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

tpmax(A)+2tpmax(puerta)+tsu(D0)=50+215+20=
100ns

tpmax(B)+tpmax(puerta)+tsu(D1)=50+15+20=85ns

Q0

tpmax(Q0)+3tpmax(puerta)+tsu(D0)=25+315+20=
90ns

Q1

tpmax(Q0)+tpmax(puerta)+tsu(D0)=25+15+20=
60ns

tpmax(Q1)+2tpmax(puerta)+tsu(D1)=25+215+20=
75ns

Tabla 22.2: Tiempos de propagacin mximos

ElcaminocrticovadelaentradaAalbiestableD0.Comoson100ns,lafrecuenciamxima
es

Departamento de Tecnologa Electrnica

153

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

1
=
100ns

109
100

Hz = 10 MHz

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

S1

Q1

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.

D0 = A Q1

S0 = Q0

D1 = B Q0

S1 = Q1

Q1
0
0
1
1

A
0
1
0
1

D0
0
1
0
0

Q0
0
0
1
1

B
0
1
0
1

D1
0
1
0
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
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1

Q0
0
0
0
0
1
1
1
1
0
0
0
0
1
1
1
1

A
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1

B
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1

Q1' Q0'
0
0
1
0
0
1
1
1
0
0
0
0
0
1
0
1
0
0
1
0
0
0
1
0
0
0
0
0
0
0
0
0
Tabla 24.2: Tabla del estado siguiente

Organizamoslatablaparapoderver mejor
loscambiosdeestadosconlasentradas
entradas
Estado
Q1 Q0
0 0
0 1
1 0
1 1

00
00
00
00
00

AB
01 10
10 01
00 01
10 00
00 00

11
11
01
10
00

estado
actual

estado
siguiente
Tabla 24.3: Tabla de excitacin del autmata

24.2.2. Diagrama de transicin de estados


Concualquieradeestastablasobtenemoslosestadossiguientesparadibujareldiagrama
deestados:
00
01

10

1X
01
01

00
00

0X

11

X0

X1
10
10

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
Basys,tarjetaconFPGAfabricadaporDigilent.
ManualdereferenciadelaversinE:
http://www.digilentinc.com/Data/Products/BASYS/BASYS_E_RM.pdf
Pginawebdelatarjeta:
http://www.digilentinc.com/Products/Detail.cfm?NavPath=2,400,791&Prod=BASYS
CreativeCommons.http://creativecommons.org/
Licenciadeestemanual:http://creativecommons.org/licenses/byncnd/3.0/
D.Jones,Steppingmotortypes.http://www.cs.uiowa.edu/~jones/step/index.html
DepartamentodeTecnologaElectrnica,UniversidadReyJuanCarlos.http://gtebim.es
DigilentInc.http://www.digilentinc.com/
E.Carletti,Motorespasoapaso,caractersticasbsicas.http://robots
argentina.com.ar/MotorPP_basico.htm
ElectrnicaDigitalII.http://gtebim.es/docencia/EDII
Ericsson,IndustrialCircuitsApplicationNote:StepperMotorBasics
http://library.solarbotics.net/pdflib/pdf/motorbas.pdf
F.Machado,N.Malpica,J.Vaquero,B.Arredondo,S.Borremeo,Aprojectorientedintegral
curriculumonElectronicsforTelecommunicationEngineers,EDUCONConference,
Madrid,abril2010
F.Machado,S.Borromeo,N.Malpica,DiseodigitalavanzadoconVHDL,Ed.Dykinson,
2009.
F.Machado,S.Borromeo,N.Malpica,DiseodigitalconesquemticosyFPGA,Ed.
Dykinson,2009.
IEEE,InstituteofElectricalandElectronicsEngineers.http://www.ieee.org
IEEEStandardforVHDLRegisterTransferLevel(RTL)Synthesis,IEEEStd1076.6
ISEWebPackdeXilinx.http://www.xilinx.com/tools/webpack.htm
Paradescargarversionesantiguas:
http://www.xilinx.com/webpack/classics/wpclassic/index.htm
Minebea.http://www.minebea.co.jp/english/index.html
Mitsumi.http://www.mitsumi.co.jp/latest/Catalog/indexuse/index_e.html
Opencores.http://www.opencores.org
Pegasus,tarjetaconFPGAfabricadaporDigilent.Manualdereferencia:
http://www.digilentinc.com/Data/Products/PEGASUS/PEGASUSrm.pdf
Pginawebdelatarjeta:
http://www.digilentinc.com/Products/Detail.cfm?NavPath=2,398,537&Prod=PEGASUS
SankenElectric,SemiconductorsGeneralCatalog.Abril2010.Disponible:
http://www.sankenele.co.jp/en/prod/library/lib_semicon_all.htm
Elapartadodetransistoresestdisponibleen:
http://www.sankenele.co.jp/en/prod/library/images/get_pdf.gif
ShinanoKenshi.StepperMotors.http://www.shinano.com/xampp/steppermotors.php
Solarbotics.StepperMotors.
http://www.solarbotics.net/library/pieces/parts_mech_steppers.html
UniversidadReyJuanCarlos,http://www.urjc.es
Wikipedia,Motorpasoapaso,http://es.wikipedia.org/wiki/Motor_paso_a_paso
Xilinx,http://www.xilinx.com
H

[2]

[3]

[4]
[5]
[6]
[7]

[8]
[9]

[10]

[11]
[12]
[13]
[14]
[15]

[16]
[17]
[18]
[19]

[20]

[21]
[22]

[23]
[24]
[25]

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
[27] XSTUserGuide9.2i.Xilinx,http://ww.xilinx.com/itp/xilinx92/books/docs/xst/xst.pdf
H

158

Universidad Rey Juan Carlos

You might also like