Professional Documents
Culture Documents
discussions, stats, and author profiles for this publication at: https://www.researchgate.net/publication/45173506
CITATIONS READS
0 2,784
2 authors:
All content following this page was uploaded by Felipe Machado on 30 May 2014.
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
FelipeMachadoSnchez
SusanaBorromeoLpez
DepartamentodeTecnologaElectrnica
UniversidadReyJuanCarlos
Mstoles,Madrid,Espaa
http://gtebim.es/
http://gtebim.es/~fmachado
AmihermanoAle
FMS
DiseodecircuitosdigitalesconVHDL
Agradecimientos
QueremosagradeceralDepartamentodeTecnologaElectrnicadelaUniversidadReyJuanCarlos
porfomentarladocenciadecalidadysuapoyoconstanteennuestraslaboresdocentes.
Tambin queremos agradecer a los alumnos de Ingeniera de Telecomunicacin por su inters
generalizadoenaprenderysuscomentariossobrenuestradocenciayprcticas
LosAutores
DiseodecircuitosdigitalesconVHDL
ndice
ndice............................................................................................................................................................ 1
Lista de acrnimos ....................................................................................................................................... 5
ndice de figuras ........................................................................................................................................... 6
ndice de cdigo VHDL................................................................................................................................. 9
ndice de tablas .......................................................................................................................................... 11
1. Introduccin ............................................................................................................................................ 13
2. Encender un LED ................................................................................................................................... 15
2.1. Tarjetas Pegasus y Basys..................................................................................................................................... 15
2.1.1. La tarjeta Pegasus ....................................................................................................................................... 15
2.1.2. La tarjeta Basys ........................................................................................................................................... 16
2.2. Cmo encender un LED........................................................................................................................................ 17
2.3. Diseo del circuito ................................................................................................................................................. 18
2.4. Sntesis e implementacin del circuito .................................................................................................................. 24
2.5. Programacin de la FPGA .................................................................................................................................... 26
2.5.1. Programacin de la tarjeta Pegasus............................................................................................................ 26
2.5.2. Programacin de la tarjeta Basys ................................................................................................................ 29
2.6. Cambiar el tipo de FPGA de un proyecto.............................................................................................................. 31
2.7. Trabajar desde varios ordenadores con un mismo proyecto ................................................................................ 32
2.8. Conclusin............................................................................................................................................................. 33
3. Sentencias concurrentes ........................................................................................................................ 34
3.1. Diseo de un multiplexor....................................................................................................................................... 35
3.1.1. Diseo usando puertas lgicas.................................................................................................................... 35
3.1.2. Diseo usando varias sentencias concurrentes .......................................................................................... 36
3.1.3. Uso de sentencias condicionales................................................................................................................. 37
3.1.4. Uso de procesos .......................................................................................................................................... 37
3.2. Diseo de un multiplexor de 4 alternativas ........................................................................................................... 38
3.3. Diseo de un multiplexor de 4 bits de dato y dos alternativas .............................................................................. 39
3.4. Conclusiones......................................................................................................................................................... 40
4. Codificadores, decodificadores, convertidores de cdigo....................................................................... 41
4.1. Convertidor de binario a 7 segmentos .................................................................................................................. 41
4.2. Decodificador de 2 a 4 .......................................................................................................................................... 43
4.3. Codificador de 8 a 3 .............................................................................................................................................. 45
4.4. Conclusiones......................................................................................................................................................... 48
5. Elementos de memoria........................................................................................................................... 50
5.1. Biestable J-K ......................................................................................................................................................... 50
5.2. Descripcin de biestables en VHDL para sntesis ................................................................................................ 51
5.3. Encendido y apagado de LED con un pulsador .................................................................................................... 54
5.3.1. Primera solucin .......................................................................................................................................... 55
5.3.2. Detector de flanco........................................................................................................................................ 55
5.4. Conclusiones......................................................................................................................................................... 59
6. Contadores ............................................................................................................................................. 61
6.1. Segundero............................................................................................................................................................. 61
6.2. Contador de 10 segundos ..................................................................................................................................... 63
6.3. Cronmetro ........................................................................................................................................................... 65
6.3.1. Mostrar los dgitos. Solucin manual ........................................................................................................... 67
6.3.2. Mostrar los dgitos. Solucin automtica ..................................................................................................... 68
6.3.3. Mejoras del circuito ...................................................................................................................................... 70
6.3.4. Optimizacin ................................................................................................................................................ 70
6.4. Contador manual................................................................................................................................................... 71
6.5. Conclusiones......................................................................................................................................................... 72
7. Registros de desplazamiento ................................................................................................................. 73
7.1. Registro de desplazamiento con carga paralelo ................................................................................................... 73
7.2. Rotacin a la derecha y a la izquierda .................................................................................................................. 75
7.3. Rotacin automtica.............................................................................................................................................. 76
7.3.1. Variantes del circuito.................................................................................................................................... 76
7.4. Conclusiones......................................................................................................................................................... 76
8. Simulacin .............................................................................................................................................. 77
8.1. Ejemplo sencillo .................................................................................................................................................... 78
8.2. Ampliacin............................................................................................................................................................. 86
8.3. Conclusiones......................................................................................................................................................... 86
9. Mquinas de estados finitos ................................................................................................................... 87
9.1. Mquina de estados para encender y apagar un LED con pulsador .................................................................... 87
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
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
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
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
Cdigo95:Procesoqueproporcionalasalida................................................................................................................................... 90
Cdigo96:Declaracindetiposenumeradosdistintosparacadamquinadeestados ............................................................ 90
Cdigo97:Cdigodelprocesocombinacionalqueobtieneelestadosiguiente ......................................................................... 93
Cdigo161:EntidaddelcircuitoMP3 .............................................................................................................................................. 123
Cdigo162:ArquitecturadelcircuitoMP3...................................................................................................................................... 125
Cdigo171:ArquitecturadelcircuitodevisualizacindelMP3 ................................................................................................. 131
1 Esteplandeestudiosempezaextinguirseapartirdelcurso20092010conlaimplantacindelosgradosde
Boloniaenelprimercurso
Posibilidadderealizarbancosdepruebasmscomplejosparasimularlafuncionalidad
denuestrodiseo.
Estos beneficios los podremos apreciar si comparamos el cdigo VHDL de los diseos
propuestosconsudiseoenesquemticos.Porejemplo,podremoscompararelcontador
realizadoconVHDL(captulo6) conelcontadorrealizadoenesquemticos(captulo19
delareferencia[12]).
ElVHDLesunestndardelInstitutodeIngenierosElctricosyElectrnicos2(IEEE[13]).
Existen otros lenguajes de descripcin de hardware como el Verilog o el SystemC.
Histricamente,elusodeVHDLoVeriloghadivididoalacomunidaddediseadores,lo
quehaprovocadodificultadesenelintercambiodediseosyalasempresasquefabrican
herramientasinformticasdeayudaaldiseo(CAD).
ElVHDLesunlenguajemuyamplioquefuecreadoparamodelarcircuitos.Mstardese
empez a utilizar para disear circuitos, utilizando para ello slo un conjunto reducido
del VHDL, lo que se llama VHDL para sntesis [14]. La transformacin de un circuito
descrito en VHDL a su esquema en puertas lgicas y biestables se llama sntesis. Esta
sntesislarealizanautomticamentelasherramientasCAD,graciasaestolosdiseadores
ahorranmuchotiempodediseo.Enestemanualnoaprenderemosautilizarlatotalidad
del VHDL, sino que usaremos un conjunto restringido del lenguaje orientado a sntesis.
Lo que es ms, tampoco usaremos todo el conjunto de VHDL para sntesis, sino que
utilizaremosloquevayamosnecesitando.Porsuerteopordesgracia,enVHDLunacosa
se puede describir de muchas maneras distintas. Por lo general, en este manual
aprenderemosslounadeellas.
Por ltimo, con el fin de que este manual pueda llegar al mayor nmero de personas y
conelobjetivodegenerarmaterialeducativoabierto,hemospublicadoestemanualbajo
licenciaCreativeCommons[3]quepermitecopiarloydistribuirlo.Esperamosquedisfrutes
desulecturayqueteayudeaaprenderadisearcircuitoselectrnicosdigitales.Parair
mejorando el manual, agradeceremos la comunicacin de comentarios, sugerencias y
correccionesalasdireccionesdecorreoelectrnicodelosautores.
felipe.machado@urjc.esysusana.borromeo@urjc.es.
2 InstituteofElectricalandElectronicsEngineers
LatarjetaPegasuscontieneunaFPGAdeXilinxdemodeloSpartanIIXC2S50XC2S200
con encapsulado PQ208. Estas FPGA tienen respectivamente 50000 200000 puertas
lgicasequivalentesy140pinesdisponiblesparaelusuario.Conestacapacidadpodemos
hacerdiseosdigitalesbastantegrandes.
LaplacaPegasuscontienedistintosperifricosquenosfacilitarnlatareadeldiseo,como
porejemplo:8LED,4displaysde7segmentos,4botones,8interruptores,unpuertoPS/2
(para ratn o teclado), un puerto VGA (para conectar un monitor), y varios puertos de
expansin.Enlafigura2.1semuestralaplacaPegasus,yenlaquesesealanvariosdesus
componentes.Lafotodelaplacanocoincideexactamenteconlaversindelaplacaque
tenemos en el laboratorio y hay algunos componentes que no estn en el mismo lugar,
aunquestodoslosquesehansealado.
3 Herramientagratuitaquesepuededescargaren:
http://www.xilinx.com/webpack/classics/wpclassic/index.htm
VGA
Alimentacin
Jumpers de
configuracin
PS/2
Display
Puerto
7 segmentos
accesorio
Pulsadores Interruptores
LEDs
Figura 2.1: Placa Pegasus de Digilent
Amedidaquevayamosavanzandoconlaprcticairemosaprendiendolafuncionalidad
delaplaca.Anas,sitienescuriosidad,enlapginawebdeDigilentpuedesconsultarel
manualdelaplacaeningls[19].
2.1.2. La tarjeta Basys
4 LosconectoresPMODsonmuyvariados:pantallasdecristallquido,circuitoscontroldemotores,antenas,
joysticks,amplificadoresdeaudio,micrfonos,etc.Sepuedenveren
http://www.digilentinc.com/Products/Catalog.cfm?NavPath=2,401&Cat=9
FPGA Jumpers de
Conectores PMOD
configuracin
Jumpers para
la frecuencia
del reloj
PS/2
VGA
USB
Interruptor Displays
para encender 7 segmentos
la tarjeta
Interruptores Pulsadores
LEDs
Figura 2.2: Placa Basys de Digilent
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.
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.
Nos puede aparecer una ventana con el Tip of the day que son indicaciones que hace la
herramientas cada vez que la arrancamos. Si las leemos habitualmente podemos ir
aprendiendopocoapoco.PinchamosenOk,conloquesecierradichaventana.
Normalmente la herramienta abre el ltimo proyecto que se ha realizado. As que lo
cerramospinchandoen:FileClose Project.
Para empezar a crear nuestro nuevo proyecto, pinchamos en FileNew Project... y nos
saldr la ventana New Project Wizard Create New Project como la mostrada en la figura
2.4.Enellapondremoselnombredelproyecto,quelollamaremos led0,indicamoslaruta
donde guardaremos el proyecto, que ser C:/practicas/ed2/tunombre. Respecto al
nombreyalaruta,esconveniente:
NotrabajardesdeundispositivodememoriaUSB6.
Noincluirespaciosenlaruta,portanto,estoincluyenotrabajarenel "Escritorio"ni
en"Mis documentos"
Noincluirenlarutaoenelnombreacentosniees,nicaracteresextraos,ninombres
muylargos,lomsconvenienteeslimitarseacaracteresalfanumricos,yusarelguin
bajoenvezdelespacio.
Paraelltimorecuadrodelaventana,dondeponeTopLevelSourceTypeseleccionaremos
HDL,yaquenuestrodiseoloharemosmediantelenguajesdedescripcindehardware7.
6 Sieststrabajandoenellaboratorio,alterminarlasesinnoolvidescopiarlosficherosconextensin.vhdy
.ucfentumemoriaUSBoentucorreoelectrnico(ocupanmuypoco).Delocontrario,elprximoda
puedeserquelosficheroshayandesaparecido.
7 HDL:delingls:HardwareDescriptionLanguage
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.
Figura 2.5: Interpretacin del texto del encapsulado de Figura 2.6: Interpretacin del texto del
la FPGA de la Pegasus encapsulado de la FPGA de la Basys
Paralaseleccindelaherramientadesntesisnotenemosalternativa,yparaelsimulador
en esta prctica no es importante y lo dejamos en ISE Simulator (VHDL/Verilog). En el
lenguajededescripcindehardwarepreferido(PreferredLanguage)sedejaelVHDL,quees
elqueusaremos.AlterminarpinchamosenNext.
Pegasus Basys
Family Spartan2 Spartan3E
Device Mirar en la FPGA
Package PQ208 TQ144
Speed Mirar en la FPGA
Figura 2.7: Ventana para la seleccin del dispositivo del nuevo proyecto
En las dos siguientes ventanas pinchamos en Next sin rellenar nada y en la ltima
pinchamosenFinish.
Yatenemoselproyectocreadoyahoranosdisponemosacrearnuestrodiseo.Paraello
creamosunanuevafuente(fichero)paraelproyectopinchandoenProjectNew Source.
Estoharaparecerunanuevaventanaquenospedirqueseleccionemoseltipodefuente
quequeremoscrear.ComoestamostrabajandoenVHDL,seleccionamos VHDL Module,y
nombramos al fichero led0. Este paso se muestra en la figura 2.8. Posteriormente
pinchamosenNext..
Figura 2.8: Seleccin del tipo de la nueva fuente que vamos a crear
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
Figura 2.10: Apariencia de la herramienta al aadir la nueva fuente led0.vhd
Como podemos ver en la figura 2.11, el fichero VHDL contiene una cabecera aadida
automticamente por la herramienta. Esta cabecera consiste en comentarios que el
diseador debera de rellenar para identificar y ayudar a entender el diseo. Para este
ejemplo no es necesario, pero es interesante para diseos complejos. Observa que cada
lnea de la cabecera comienza por dos guiones -- que es la manera de comentar en
VHDL.Estoes,laherramientanoanalizalaslneasquecontienendosguionesypuedes
ponercualquiercomentario.
Cabecera
Bibliotecas
Entidad
Arquitectura
Figura 2.11: Apariencia de la herramienta para empezar a realizar la descripcin VHDL
DespusdelacabeceraestnlasreferenciasalasbibliotecasdelIEEE8,quesonnecesarias
parapoderutilizarlostiposdedatosqueemplearemos.Paranuestrocaso,nosbastacon
utilizar la biblioteca IEEE.STD_LOGIC_1164. Las otras bibliotecas no son necesarias por
ahora.
Luegotenemosunoscomentariosquepodemoseliminar.Despusdestos,yatenemosla
entidad, que ha sido creada por el ISE con la informacin de los puertos que le hemos
dado,quesondospuertosdesalida:led0yled1.
EnVHDL,laentidaddefinelasentradasysalidasdelcircuito.Ynohacereferenciaala
estructuraofuncionalidadinterna.Escomodefinirunacajanegra.Ennuestroejemplo,la
entidadsepuederepresentarcomomuestralafigura2.12.
8 ElIEEE(InstituteofElectricalandElectronicsEngineers)eslaasociacinquehaestandarizadoelVHDL.
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
FUNCTIONAL (oFUNCIONAL)
DATAFLOW (oFLUJO_DE_DATOS)
Yairemosviendoqusignificanestosdescriptores.
Despus del nombre de la arquitectura se indica a qu entidad pertenece dicha
arquitectura. En nuestro ejemplo: of LED0". Indica que pertenece a la entidad LED0.
Aunque no es obligatorio, la entidad y arquitectura se pueden describir en el mismo
fichero.
Porltimo,apartirdel BEGINseincluyenlassentenciasconcurrentesdenuestrocircuito.
En este caso, son dos asignaciones a dos valores constantes. La asignacin de seales se
realizaconeloperador<=.
Ahora incluye las sentencias del cdigo 21. Para mayor claridad de cdigo, indenta9 las
sentenciasconcurrentescondosespaciosaladerecha.Unavezquehemosterminadocon
eldiseodeejemplo,lograbamos(FileSave).
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
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.
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
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.
EstoarrancarlaherramientaiMPACT,quenosmostrarunventanaenlaqueseofrecen
variasopciones,dejamoslaopcinquehaypordefectoconfigure devices using Boundary-
Scan (JTAG)"y "Automatically connect to a cable and identify Boudary-Scan chain". Aceptamos
pinchandoenFinish.
Loquehemoshechoesdecirlealaherramientaqueidentifiqueloscomponentesquehay
en la placa por medio del protocolo BoundaryScan (JTAG). Despus de esto la
herramienta procede a identificar a la placa y debera encontrar dos componentes: la
FPGA y la memoria flash. La FPGA la identifica como xc2s200 xc2s50 y la memoria
como xcf02s.Acontinuacinnospedirlosficherosdeprogramacinparacadaunode
loscomponentes(figura2.17).
Figura 2.17: iMPACT: componentes detectados y asignacin de un fichero de configuracin
10Cuandoestsenellaboratorioylodesenchufes,fjateenquenosequedeenchufadoeladaptadordela
clavijaplanaamericanaaclavijaredondaeuropea
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.
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.
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
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).
stospuedenserdistintosconelmodelodelaFPGA(inclusopuedenhabercambiadode
nombre).
Figura 2.23: Procedimiento para cambiar las caractersticas de la FPGA
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.
Paralospulsadores,cuandoestnpulsadostransmitenun1lgicoalaentradaycuando
no estn pulsados ponen 0 voltios a la entrada. Observa que los pulsadores tienen un
pequeocircuitoconresistenciasyuncondensador,estoesparaeliminarlosrebotesque
seproducenalpulsaryasenviarunasealsinruido.Estecircuitoqueeliminarebotesno
lotienelaBasys,yporlotanto,lasealdeentradadelospulsadoresnoestanlimpia,y
puedeparecerquesehapulsadovariasveces(rebote).Elesquemaelctricosemuestraen
lafigura3.2,endondesepuedeobservarquelospulsadoresnotienenelcondensadorque
stienelatarjetaPegasus.
Spartan3E Spartan3E
3,3V 3,3V
PIN interruptor PIN pulsador
38 SW0 69 BTN0
4,7k 36 SW1 4,7k 48 BTN1
29 SW2 47 BTN2
24 SW3 41 BTN3
18 SW4 4,7k
12 SW5
10 SW6
6 SW7
Figura 3.2: Esquema elctrico de las conexiones de los interruptores y pulsadores en la placa Basys
Antesdeempezarconlaprctica,semuestranacontinuacinlaspalabrasreservadasdel
VHDL(figura3.3).Estaspalabrasnosepuedenusarparanombrarelementosdenuestro
circuito:seales,entidades,arquitecturas,....
Figura 3.3: Lista de palabras reservadas del VHDL
S S
Dentrodelaarquitectura,incluyelasentenciaconcurrentequedefineelesquemticoenel
niveldepuertasdelmultiplexor(derechaenlafigura3.4).Estasentenciasemuestraenel
cdigo31.
Apartirdelcdigo31podemosobservarqueparaundiseoenelniveldepuertas,la
sintaxis es muy similar a la sintaxis utilizada en el lgebra de Boole (que estudiamos el
ao pasado). El uso de parntesis es muy importante para determinar que operador
booleanoseaplicaencadacaso.
Prueba a implementar el circuito en la placa haciendo que el puerto A sea el interruptor
SW0,elpuertoBseaelinterruptorSW1,yquelasealdeseleccinseaelpulsadorBTN0.Por
ltimo,asocialasalidaZconelLEDLD0.
Unavezimplementado,compruebaquefuncionacorrectamente,estoes,quesegnestel
pulsadorpresionado,lasalidatomaelvalordelprimerinterruptorodelsegundo.
3.1.2. Diseo usando varias sentencias concurrentes
Elcdigo31esperfectamentevlido.Sinembargo,cuandoelnmerodepuertaslgicas
eselevado,nospuedeinteresardividirlasentenciadeasignacinenvariassentenciasms
sencillas. Esto se hace creando seales intermedias. La figura 3.5 muestra el diseo en
puertasdelmultiplexorincluyendolassealesintermediasDyE.
A D
Z
E
S
Figura 3.5: Esquema en puertas del multiplexor con seales intermedias
Antes de ser usadas, estas seales intermedias deben ser primero declaradas en la
arquitectura.Lassealessedeclaranantesdel begindelaarquitectura.Portanto,nuestro
diseoquedacomomuestraelcdigo32:
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.
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.
Pruebaaimplementarestediseoycompruebaquefuncionaigual.
3.1.4. Uso de procesos
Otraalternativaesusarprocesos,quelosveremosconmsdetallemsadelante.Dentro
del proceso, las sentencias se tratan secuencialmente y no de manera concurrente como
vimosqueocurreconlassentenciasconcurrentespuestasdirectamenteenlaarquitectura.
Asqueelordendelassentenciasdentrodeunprocesosesimportante.
Elprocesoempiezaconsunombre,aloquelesiguendospuntosylapalabrareservada
PROCESS.Despusdestaseponelalistadesensibilidad,dondesedebenponertodaslas
sealesqueseleenenelproceso.Lassealesqueseleenson:lassealesqueestndentro
de las condiciones (por ejemplo dentro de la sentencia if) y las seales que estn en la
partederechadelasasignaciones.
Elprocesoqueimplementanuestromultiplexorsemuestraenelcdigo35.
P_MUX: Process (A, B, S) -- lista de sensibilidad: A, B, S
begin
if S='1' then -- S se lee
Z <= A; -- A se lee
else
Z <= B; -- B se lee
end if;
end process;
Cdigo 3-5: Sentencia concurrente condicionada que define el multiplexor
ElVHDLesunlenguajemuyamplio,yhayotrasmanerasconlasquesepuededescribir
el multiplexor. Sin embargo, por ahora no las veremos y pasaremos a describir otros
diseos.
veremoscmosedescribeenVHDL. Figura 3.6: Multiplexor de 4
Para poder seleccionar 4 alternativas la seal de alternativas
seleccin (S) debe de ser de 2 bits. Por tanto
necesitamos definir un vector. Para esto se utiliza el
tipoSTD_LOGIC_VECTOR.
Para realizar el diseo, creamos un nuevo proyecto llamado mux4alt y al definir los
puertos debemos crear la entrada S como un vector. Para ello, al definir los puertos,
activamoselcampoBusdelpuertoS,eindicamosqueelMSB(bitmssignificativo11)esel
bit nmero 1, y el LSB (bit menos significativo12) es el 0. Por tanto, tendr dos bits de
anchodebus.Observalafigura3.7parasabercmodebescrearlo.
Figura 3.7: Definicin de los puertos de entrada y su ancho
Elresultadoeslaentidadmostradaenelcdigo36.
entity mux4alt is
Port ( A : in STD_LOGIC;
B : in STD_LOGIC;
C : in STD_LOGIC;
D : in STD_LOGIC;
S : in STD_LOGIC_VECTOR (1 downto 0);
Z : out STD_LOGIC);
end mux4alt;
Cdigo 3-6:Entidad del multiplexor de 4 alternativas
11MSB:delinglsMostSignificantBit
12LSB:delinglsLeastSignificantBit
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
Elesquemadeestemultiplexorsemuestraenla
figura3.8 S
Figura 3.8: Multiplexor de 4 bits de dato
Laentidadsercomolamostradaenelcdigo310.
entity mux4bits is
Port ( A : in STD_LOGIC_VECTOR (3 downto 0);
B : in STD_LOGIC_VECTOR (3 downto 0);
S : in STD_LOGIC;
Z : out STD_LOGIC_VECTOR (3 downto 0);
end mux4bits;
Cdigo 3-10:Entidad del multiplexor de 4 alternativas
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)
S
Figura 4.1: Multiplexor y salida a 7 segmentos
Asquecreaunnuevoproyectollamado mux7seg,ydentrodelcreaunnuevomdulo
VHDLquetengalospuertosmostradosenlatabladeladerechadelafigura4.1.
Dentrodelaarquitecturadebersdeclararlaseal Z,quelaasignarsalpuertodesalida
LEDyqueusarsparaconvertirlaenlossietesegmentos.Nopodrsusar Zcomopuerto:
estoesunconceptoimportanteenVHDLyaquelospuertosdesalidanosepuedenleer.
Por tanto, es necesario usar una variable intermedia Z distinta del puerto de salida LED.
ComolasealZlavamosautilizarenelconvertidordebinarioasietesegmentos,laseal
Z no podr ser un puerto de salida al contrario de como lo hicimos en el ejercicio del
apartado3.3.
Para hacer el convertidor de binario a siete segmentos tenemos que recordar la
visualizacindecadanmero.Enlafigura4.2semuestranlos16nmerosquepodemos
representarcon4bits(de0a15).
A A A A A A A A
0 F
1 F
2 F
3 4 5 F
6 F B
7 F B
G B G B G B F G B F G B G B G G
E C E C E C E C E C E C E C E C
D D D D D D D D
A A A A A A A A
8 F
9 F
A F
B C D E F F B
G B G B G B F G B F G B F G B F G B G
E C E C E C E C E C E C E C E C
D D D D D D D D
Figura 4.2: Los 16 nmeros representables con 4 bits
As que para realizar el convertidor tenemos que examinar qu numero tenemos que
mostrar y encender los segmentos correspondientes a dicho nmero. En la figura 4.3 se
muestran los ejemplos para tres casos: los nmeros 0, 1 y 2. Como se puede ver,
arbitrariamentesehaasignadoelbitmssignificativode SEGalsegmentoAyelmenos
significativo (el bit 0) al segmento G. Otro orden se poda haber escogido, pero lo
importanteesquesecorrespondanadecuadamentealaasignacindepinesdelaFPGA.
En la figura se han mostrado tres ejemplos, ahora tienes t que deducir el resto (de
maneraparecidaacomolohicisteenlaprcticadelaopasado).
Si Z="0000" mostramos el cero
A
Usamos un vector SEG(6:0) que contendr el valor de los segmento s
0 F G B SEG(6) segmento A
SEG(5) segmento B
C
E D SEG(4) segmento C Como para el cero (Z="0000") se encienden todos
SEG(3) segmento D los segmentos menos el G, la asignacin ser:
SEG(2) segmento E
SEG(1) segmento F SEG <= "0000001" Bit 0 correspondiente
SEG(0) segmento G con los segmentos F que
Un cero enciende el segmento estar apagado
por ser lgica negada
A
Como para el uno (Z="0001") se encienden los
1 F
segmentos B y C, la asignacin ser:
G B
C
SEG <= "1001111"
E D
Bits correspondientes
con los segmentos B y C
que estarn luciendo
A
2 Como para el dos (Z="0010") se encienden todos
F G B los segmentos menos el C y el F, la asignacin ser:
E D
C SEG <= "0010010"
Bits correspondientes
con los segmentos C y F
que estarn apagados
Figura 4.3: Valores del vector de los segmentos (SEG) para los nmeros 0, 1 y 2
LassentenciasconcurrentesVHDLdelaarquitecturadebentenerelaspectodelafigura
4.4.Sepuedeapreciarquehaycuatrosentenciasconcurrentes.Comoyahemosdicho,por
la concurrencia del hardware, el orden de estas sentencias es indiferentes. La ltima
sentencia,correspondientealconvertidorasietesegmentos,sehadejadoincompletapara
que la termines t. Puedes observar que en la sentencia del convertidor se han incluido
comentarios para facilitar la comprensin del cdigo. Esto es muy importante para
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
4.2. Decodificador de 2 a 4
Ahora haremos un decodificador de 2 a 4. Este ejercicio lo hicimos el ao pasado con
esquemticos. El bloque del circuito y su tabla de verdad se muestra en la figura 4.5.
Recuerdaqueundecodificadoractivalasalidacorrespondientealnmerocodificadoen
las entradas. Por ejemplo, si en la entrada hay un 2 codificado en binario, se activa la
salida nmero 2. Slo una salida puede estar activa en un decodificador. Adems, el
decodificadortieneunasealdehabilitacinEquehacequenoseactiveningunasealde
salidaencasodequevalgacero(suponiendoquelasealEseactivaanivelalto).
13Aunquenohayningncasoms,esmejorponerlacondicinpordefecto.Tantoporsisenoshaolvidado
incluiralgunaotro,comoporsielsintetizadornosedacuentadequenohaymscondiciones,yentales
casos,nosgeneraraunelementodememoria(enestoscasosunlatch).
DECOD 2a4
S0 E I1 I0 S3 S2 S1 S0
I0
S1 0 X X 0 0 0 0
I1 1 0 0 0 0 0 1
S2 1 0 1 0 0 1 0
1 1 0 0 1 0 0
E S3 1 1 1 1 0 0 0
Figura 4.5: Puertos del decodificador y tabla de verdad
Eldecodificadorsehacedemanerasimilaralconvertidordesietesegmentosdelejercicio
anterior,sloquecambianlassalidasqueseactivansegnelnmeroquesetengaenla
entrada.LamayornovedadeslasealdehabilitacinE.
Loquevamosahacerenestediseoesmostrareneldisplayelnmerocodificadoenlos
cuatroprimerosinterruptores(SW3, SW2, SW1, SW0).Elnmerotambinsemostrarenlos
cuatroprimerosLED(deLD3aLD0).Sinembargo,envezdemostrarloenelprimerdisplay,
los interruptores SW7 y SW6 indicarn el display por el que se mostrar. Para ello
necesitamos un decodificador, que decodifique el nmero representado por estos
interruptores active el nodo correspondiente. El esquema del circuito que queremos
realizarsemuestraenlafigura4.6.
LD3-LD0
LED(3:0)
CONV_7SEG SEG_A-SEG_G
SW3-SW0
4 6
D_IN(3:0) SEG(6:0)
DECOD_2a4
AN3-AN0
I0 S0 AN(0)
SW7-SW6
I1 S1 AN(1) Controlamos qu
display se va a
encender
S2 AN(2)
BTN0 E S3 AN(3)
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.
Eneldecodificadorrealizadoconlasentenciaconcurrente(cdigo41)sehautilizadouna
sealauxiliar S_DECODqueluegosevaainvertirdebidoaquelosnodosfuncionancon
lgica negada. En el cdigo del proceso las salidas se han codificado directamente con
lgicanegada.Algosimilarsehahechoconlasealdehabilitacin,enelcdigo41seha
negadoyluegosehacomprobadosivale0.Mientrasqueenelprocesodirectamentese
compruebasivaleuno.ElVHDLpermiteelegirlamaneraquemsteguste.Elcdigo41
usainversoresyseparecemsalesquemadelafigura4.6.Elcdigo42quizsseams
fcildeentender.
P_DECOD: Process (E, I)
begin
E_NEG <= NOT E; if E='1' then
AN <= (others =>'1');
S_DECOD <= "0000" when E_NEG='0' else -- AN <= "1111";
"0001" when I="00" else else
"0010" when I="01" else case I is
"0100" when I="10" else when "00" =>
"1000"; -- when I="11" AN <= "1110";
when "01" =>
-- invertimos para tener logica negada AN <= "1101";
AN <= NOT (S_DECOD); when "10" =>
AN <= "1011";
when others => -- "11"
Cdigo 4-1:Decodificador con sentencia AN <= "0111";
concurrente end case;
end if;
end process;
Cdigo 4-2:Decodificador con proceso
Porltimo,fjateenlaprimeraasignacindelcdigo42:
AN <= (others => '1');
Cdigo 4-3:Una forma de asignar el mismo valor a todos los bits de un vector
Esta expresin asigna un uno a todos los bits de la seal AN. Con ello nos ahorramos
contarelnmerodebitsquetenemosqueasignar.
Ya es hora de implementar el circuito propuesto: Crea un nuevo proyecto llamado
decod2a4ycreaunnuevomduloVHDLconlospuertosmostradosenlafigura4.6.Los
puertosquetenganmsdeunbit,craloscomovectores.Enlafigura4.6seindicaaqu
elementosdelaplacadebesasignarlospuertos.Porejemplo,laentrada I(1:0)laasocias
alosinterruptores SW7y SW6.Laentrada D_IN(3:0)laasociasalosinterruptores SW3, SW2,
SW1ySW0.Yastodoslosdems.
Unavezquelotengasimplementadocomprueba:
Que el display muestra correctamente el nmero codificado en los 4 primeros
interruptores(SW3-SW0)
QuealcambiarlosinterruptoresSW7ySW6secambiaeldisplayqueluce.
Quealpresionarelpulsadordelahabilitacin(BTN0)ningndisplayluce
Queelnmerocodificadoenlos4primerosinterruptorestambinsemuestraporlos4
primerosLED.
4.3. Codificador de 8 a 3
Ahoravamosarealizarlaoperacininversaaladecodificacin.Tendremos8entradassin
codificar (los 8 interruptores) y mostraremos en el primer display de siete segmentos el
nmerodeinterruptorqueestactivo.Hayciertascondiciones:
LED0
LED1
LED2 Si est deshabilitado (EI='0')
CODIF muestro un "-" (segmento G)
SW0 I0 EO MUX6BITS
SW1 I1 CONV_7SEG 6
SW2 I2 numero(0) "1111110" 0
S0 D0 6
SEG(6:0)
SW3 I3 numero(1) 6
S1 D1 1
SW4 I4 numero(2) SEG_AUX(6:0)
S2 D2
SW5 I5
activo D3
SW6 I6
A
SW7 I7
Como slo hay 3 bits, el cuarto
BTN0 EI
va a cero (nmero entre 0 y 7)
SEG <= seg_aux when BTN0='0' else "1111110"; Inhabilita los segmentos si se
pulsa BTN0 (pone un signo "-")
AN <= "0000" when BTN0='1' else
"1111" when activo = '0' else Controla qu
"1110"; -- BTN0 ='1' AND activo = '1' displays lucen
Figura 4.9: Sentencias VHDL del esquema de la figura 4.8
No existe una nica manera para describir el circuito. Por ejemplo, la sentencia que
convierte el nmero a siete segmentos y la de habilitacin de los segmentos se pueden
agrupar en una sola. Con esto nos ahorramos la seal intermedia seg_aux. Compara los
cdigos44y45,sonequivalentes.
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;
4.4. Conclusiones
Resumiendo,losconceptosprincipalesdeestaprctica:
Lospuertosdesalidanosepuedenleer,siloquisisemosleertendramosque crear
unasealauxiliarqueluegolaasignaremosalpuerto.
Sepuedeninicializartodoslosbitsdeunvectoraunmismovalorusandolaexpresin
others => '1'"
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.
Ahoracreaunproyectollamado biest_jkyunanuevafuenteVHDLdelmismonombre.
Pon los puertos sealados en la figura 5.1, asignndole los pines que se muestran en la
figura.Usacualquieradelosprocesosdeloscdigos5152.ImplemntaloenlaFPGA
ycompruebaquefuncionacorrectamente.
Figura 5.2: Editor de restricciones del ISE (Xilinx Constraints Editor)
Elprocesodebetenerunasentenciaqueindicasiesunelementodememoriaactivo
pornivel(latch)oporflanco(flipflop).Enelcdigo51,resaltadoennegrita,indicaque
esunflipflopactivoporflancodesubida.loscuatroposiblescasosson:
Siesunflipflopactivoporflancodesubidalasentenciaderelojdebeser:
if clk'event and clk='1' then
Siesunflipflopactivoporflancodebajadalasentenciaderelojdebeser:
if clk'event and clk='0' then
Siesunlatchactivopornivelaltolasentenciaderelojdebeser:
if enable='1' then
Siesunlatchactivopornivelbajolasentenciaderelojdebeser:
if enable='0' then
Lasentenciaderelojnodebedetenerningunacondicinmsapartedeladelreloj.
Otras condiciones se deben de poner en otras sentencias if de menor jerarqua. El
cdigo 53 muestra la sentencia de reloj correcta, mientras que el cdigo 54 es
incorrectoporquelacondicindeJ='1'estenlamismacondicindelreloj.
if clk'event and clk='1' then if clk'event and clk='1' and J='1' then
if J='1' then ....
......
Cdigo 5-4: sentencia de reloj INCORRECTA
Cdigo 5-3: Sentencia de reloj CORRECTA
Elbiestablepuedetenerinicializacionesasncronas(reset,clear,set,preset,...odiversos
nombres).Estainicializacinsedebeponerantesdelasentenciadereloj.Lasentencia
derelojseponeconunelsifquesiguealasentenciadeinicializacin(cdigo55).
Biest_proc: Process (Reset, Clk)
begin
if reset = '0' then
Q <= '0';
elsif clk'event and clk='1' then
-- ahora van sentencias sincronas
......
Cdigo 5-5: Inicializacin sncrona
Fueradelasentenciaderelojnodebedehaberningunasentenciams.Solamentese
admiteantesdelasentenciaderelojunainicializacinasncrona(comoenelcdigo5
5), pero despus no debera de haber sentencias, ni tampoco sentencias fuera de la
inicializacin. En los cdigos 56 y 57 se muestran dos ejemplos en los que hay una
sentencia de asignacin antes de la inicializacin sncrona (cdigo 56), y una
asignacinfueradelasentenciadereloj(cdigo57).Lassentenciasincorrectasestnen
negrita.
Biest_proc: Process (Reset, Clk) Biest_proc: Process (Reset, Clk)
begin begin
H <= P; -- INCORRECTO if Reset = '0' then
if Reset = '0' then Q <= '0';
Q <= '0'; elsif Clk'event and Clk='1' then
elsif Clk'event and Clk='1' then Q <= Dato;
-- aqu van sentencias sincronas end if;
...... H <= P; -- INCORRECTO
end process;
Cdigo 5-6: Asignacin antes de la
inicializacin. INCORRECTA Cdigo 5-7: Asignacin fuera del reloj. INCORRECTA
Enlalistadesensibilidaddelprocesodebeaparecerlasealderelojytodaslasseales
asncronasqueseleen(lasqueestnantesdelasealdereloj).Noesincorrectoincluir
las seales sncronas (las que estn despus de la sentencia de reloj), pero incluirlas
hace que la simulacin vaya ms lenta. El cdigo 59 muestra un ejemplo,. En l, la
sealDatonoseincluyeporserunasealsncrona:estdentrodelacondicindereloj.
Incluirlanoesincorrecto,perohacelasimulacinmslenta.
Biest_proc: Process (Reset, ValorInicial, Clk)
begin
if Reset = '0' then
Q <= ValorInicial; -- dato asincrono
elsif Clk'event and Clk='1' then
-- Aqui van las senales sincronas y no se ponen en la lista de sensibilidad
Q <= Dato;
end if;
end process;
Cdigo 5-9: Lista de sensibilidad con el reloj y las seales asncronas
Dentrodelacondicindelrelojpuedenirtodotipodesentencias.Estassentenciasson
secuencialesysimportaelordendeaparicin.Siseasignavaloraunasealmsde
unavez,laltimaasignacineslaqueledarvalor.As,loscdigos510y511son
equivalentes.Elcdigo510asigna Q<='0'cuando Inic='1'.Mientrasqueelcdigo5
11asigna Q<='0'siempre,peroessobrescritopor Q<=Datocuando Inic='0',portanto,
asignaQ<='0'cuandoInic='1'.
Biest_proc: Process (Reset, Clk) Biest_proc: Process (Reset, Clk)
begin begin
if Reset = '0' then if Reset = '0' then
Q <= '0'; Q <= '0';
elsif Clk'event and Clk='1' then elsif Clk'event and Clk='1' then
if Inic = '0' then Q <= '0';
Q <= Dato; if Inic = '0' then
else Q <= Dato;
Q <= '0'; end if;
end if; end if;
end if; end process;
end process;
Cdigo 5-11: Proceso equivalente al del cdigo 5-10
Cdigo 5-10: Proceso equivalente al del cdigo 5-11
Cuandoenuncaminonoseasignaningnvaloralbiestable,steguardaelvalorque
tena antes. Por ejemplo, en el cdigo 52, la seal Q no recibe valor cuando J='0' y
K='0', por tanto, la seal Q guarda su valor anterior. En consecuencia, el proceso del
cdigo 52 es equivalente al proceso del cdigo 51. Puesto que en el cdigo 51 se
asignaQ <= Q cuandoJ='0'yK='0'.
Estoltimoesmuyimportanteparaevitarcrearunelementodememoriacuandono
queremoscrearlo.Siqueremoscrearunprocesocombinacionaldebemosincluirtodas
las posibilidades, o terminar el proceso con un else o un when others". Otra
alternativaesincluirunaasignacinpordefectoalprincipio.
Por ejemplo, el cdigo 512 no genera latch, porque con el else se cubren todas las
posibilidades. Sin embargo, el proceso 513 s genera latch. Aunque la seal Select
nuncapudieravaler"11"sedebedeponersegnelcdigo512.
CombProc: Process(Select,Dato1,Dato2) LatchProc: Process(Select,Dato1,Dato2)
begin begin
if Select = "00" then if Select = "00" then
Q <= '0'; Q <= '0';
elsif Select = "01" then elsif Select = "01" then
Q <= Dato1; Q <= Dato1;
else elsif Select = "10" then
Q <= Dato2; Q <= Dato2;
end if; end if;
end process; end process;
Cdigo 5-12: Proceso combinacional (no genera Cdigo 5-13: Proceso que genera latch.
latch). Correcto Posiblemente no lo quieras generar
Incluso,aunquesecubrantodaslasposibilidadessedebeterminarconunelseporque
lostipos std_logictienenmsvaloresposiblesapartede0y1.Elcdigo514esel
recomendadofrentealcdigo515.
CombProc: Process(Select,Dato1,Dato2) LatchProc: Process(Select,Dato1,Dato2)
begin begin
if Select = "00" then if Select = "00" then
Q <= '0'; Q <= '0';
elsif Select = "01" then elsif Select = "01" then
Q <= Dato1; Q <= Dato1;
elsif Select = "10" then elsif Select = "10" then
Q <= Dato2; Q <= Dato2;
else elsif Select ="11" then
Q <= '1'; Q <= '1';
end if; end if;
end process; end process;
Cdigo 5-14: Proceso combinacional (no genera Cdigo 5-15: Proceso que es posible que genere
latch) latch. No recomendado
Otra manera de asegurarse de que no se genera latch es incluir una asignacin por
defecto al principio. Esto vendra a ser equivalente a un else. El cdigo 516 es
equivalentealcdigo512,yelcdigo517esequivalenteal514.
CombProc: Process(Select,Dato1,Dato2) CombProc: Process(Select,Dato1,Dato2)
begin begin
Q <= Dato2; Q <= '1';
if Select = "00" then if Select = "00" then
Q <= '0'; Q <= '0';
elsif Select = "01" then elsif Select = "01" then
Q <= Dato1; Q <= Dato1;
end if; elsif Select = "10" then
end process; Q <= Dato2;
end if;
Cdigo 5-16: Proceso combinacional equivalente al end process;
cdigo 5-12 (no genera latch)
Cdigo 5-17: Proceso combinacional equivalente al
cdigo 5-14 (no genera latch)
Por ltimo, se recomienda indentar (incluir espacios o tabuladores) con cada sentencia
anidada.Estofacilitamucholacomprensindelcdigo.Serecomiendaindentarcondos
espacios.ParadeterminarlaindentacinconelISEWebPack,veteaEditPreferences,yall
buscalacategoraISETextEditor.EnellaponTabWidth=2.Yponquecuandoinserteun
tabulador(WhenYouPresstheTabKey)seponganespacios:Insertspaces.
modoquesiestapagado,cuandopulsemosseencienda;ysiestencendido,alpulsarse
apague.
Sin mirar la solucin que se da a continuacin, intenta realizar el circuito t slo con la
informacindelaseccin5.1.
5.3.1. Primera solucin
LaprimeraaproximacinalproblemaserarealizarunbiestableT,igualquecomosehizo
enlaprctica17deED1[12].Pararecordar,enlafigura5.3semuestralatabladeverdad
delbiestableTysuesquema.
BTN0 T Q LD0
T Q(t+1)
0 Q(t)
1 Q(t) CLK Reset
BTN3
Figura 5.3: Tabla de verdad del biestable T y su esquema
Loscdigos518y519muestranprocesosequivalentesparaimplementarunbiestableT
activoporflancodesubida.
P_T: Process (Reset, Clk) P_T: Process (Reset, Clk)
begin begin
if Reset = '1' then if Reset = '1' then
Q <= '0'; Q <= '0';
elsif Clk'event and Clk = '1' then elsif Clk'event and Clk = '1' then
if T = '1' then if T = '1' then
Q <= not Q; Q <= not Q;
end if; else
end if; Q <= Q;
end process; end if;
end if;
Cdigo 5-18: Proceso que implementa un biestable T end process;
Cdigo 5-19: Alternativa que describe el biestable T
AhoraimplementaestediseoenlaFPGA,asociandoelbotndeencendido/apagadoal
pulsadorBTN0,elResetalpulsadorBTN3,ylasalidaalLEDLD0.
Comprueba varias veces si funciona bien y comprueba que sucede si mantienes
presionadoelbotndeencendido/apagado.Qusucede?funcionacorrectamente?por
qu?
5.3.2. Detector de flanco
Qusucede?Porquavecesfuncionaelbotndeencendido/apagadoyotrasvecesse
quedaenelmismoestadoenelqueestaba?Qupasasidejoelbotnpulsadodemanera
continuada?
En la figura 5.4 se muestra el cronograma de lo que sucede al pulsar el botn. Como la
frecuencia del reloj es muy alta respecto a la velocidad humana, por muy rpido que
pulsemosysoltemoselpulsador,eltiempodepulsacindurarmuchosciclosdereloj.Y
portanto,elestadodelbiestable(Q)cambiarentodoslosciclosderelojmientrasestel
pulsador presionado. Al soltar el pulsador, el estado final ser aleatorio, segn se haya
mantenidopulsadoduranteunnmeroparoimpardeciclos.
T='0' Q
guarda valor
'1' cambio en Q
BTN0-T
CLK
50 MHz
LED0-Q
Para evitar este efecto, lo que tenemos que hacer es un circuito detector de flancos, que
transformarnuestropulsohumanoenpulsodelperiododelreloj.Podramospensaren
utilizarlaexpresin T'event and T='1'paradetectarelflancodesubida.Yseguramente
funcione, sin embargo hemos visto que slo debemos utilizar dicha expresin para la
seal de reloj. Porque si no, estaremos usando la seal T como reloj del biestable, y en
diseossncronosnoesrecomendable.Asquetenemosquepensarenotraalternativa.
El detector de flanco se puede realizar con una mquina de estados que detecte la
secuencia01paraflancosdesubidaylasecuencia10paraflancosdebajada.
Lamquinadeestadospodemoshacerlamediantediagramadeestadosobienmediante
registrosdedesplazamiento(usandobiestablesD).Ambosmtodossehanvistoenclase.
Por ser una secuencia pequea, la haremos mediante registros de desplazamiento. No
usaremosdirectamentelaentradadebidoaqueelpulsadoresunaentradaasncrona,sino
que la registraremos (la pasaremos por un biestable) para evitar metaestabilidad y para
evitarqueelpulsoresultanteduremuypoco.Elcircuitodetectordeflancosinregistrarla
entrada se muestra en la figura 5.5 (realizado con registro de desplazamiento). Es una
mquinadeMealyporquelasalidadependedelaentrada(BTN0).
PULSO_BTN0
BTN0_RG1
BTN0 D Q
Clk
Figura 5.5: Circuito detector de flanco sin registrar la entrada (Mealy: no recomendado para este caso)
clk
Clk
BTN0
BTN0_RG1
PULSO_BTN0
PULSO_BTN0
BTN0_RG1 BTN0_RG2
BTN0 D Q D Q
Clk
Figura 5.7: Circuito detector de flanco registrando la entrada (Moore: recomendado para este caso)
Ahora los pulsos resultantes siempre durarn un ciclo de reloj, como puedes ver en el
cronogramadelafigura5.8.
clk
Clk
BTN0
BTN0_RG1
BTN0_RG2
PULSO_BTN0
Aspues,elcircuitoquetenemosquehacercontendrelbiestableTdelafigura5.3,pero
envezderecibirelpulsodirectamentedelpulsador,lorecibirfiltradoporeldetectorde
flancodelafigura5.7.Elcircuitofinalserelmostradoenlafigura5.9.
PULSO_BTN0
T Q LD0
BTN0_RG1 BTN0_RG2
BTN0 D Q D Q
Reset
Reset Reset
Clk
BTN3
Figura 5.9: Circuito que enciende y apaga un LED con el mismo pulsador
EstecircuitosepuededescribirconelcdigoVHDLmostradoenlafigura5.10.
biest_D1: Process (Reset, Clk)
BTN0_RG1
begin BTN0 D Q
if Reset = '1' then
BTN0_REG1 <= '0'; Primer
elsif Clk'event and Clk='1' then biestable D Reset
BTN0_REG1 <= BTN0; Clk
end if;
end process;
PULSO_BTN0 <= '1' when (BTN0_REG1 = '1' and BTN0_REG2='0') else '0';
Deteccin de
flanco de subida
biest_T: Process (Reset, Clk)
begin
if Reset = '1' then biestable T cuya PULSO_BTN0 Q_T
Q_T <= '0'; entrada T Q
elsif Clk'event and Clk='1' then PULSO_BTN0 se ha
if PULSO_BTN0 = '1' then transformado en Reset
Q_T <= NOT Q_T; un pulso de un
end if; Clk
ciclo de reloj
end if;
end process;
Asignacin al puerto de salida Q_T es necesario
LD0 <= Q_T;
porque los puertos de salida no se pueden leer
Figura 5.10: Cdigo VHDL del circuito completo
Los dos primeros procesos de la figura 5.10 se pueden agrupar en uno, ya que en los
procesoselvalordelassealesnoseactualizainmediatamentesinoqueseactualizan
al terminar el proceso. As, en el cdigo 520, la seal BTNO_REG1 no toma el valor
inmediatamente de BTN0, y por lo tanto, la seal BTN0_REG2 no recibe el valor que se le
acaba de asignar a BTN0_REG1 (el que le da BTN0) sino el valor que tena BTN0_REG1. En
consecuencia, al salir e proceso, BTN0_REG1 tendr el valor de BTN0 y BTN_REG2 tendr el
antiguo valor de BTN0_REG1 y no el que se le acaba de asignar. Por tanto, BTN0_REG2 est
retrasadauncicloderelojrespectodeBTN0_REG1(queesloquequeremoshacer).
Debido a esto, el proceso 521 es equivalente al proceso 520. Aunque las asignaciones
estncambiadasdeorden.
biest_Ds: Process (Reset, Clk) biest_Ds: Process (Reset, Clk)
begin begin
if Reset = '1' then if Reset = '1' then
BTN0_REG1 <= '0'; BTN0_REG1 <= '0';
BTN0_REG2 <= '0'; BTN0_REG2 <= '0';
elsif Clk'event and Clk='1' then elsif Clk'event and Clk='1' then
BTN0_REG1 <= BTN0; BTN0_REG2 <= BTN0_REG1;
BTN0_REG2 <= BTN0_REG1; BTN0_REG1 <= BTN0;
end if; end if;
end process; end process;
Cdigo 5-20: Proceso que implementa los 2 Cdigo 5-21: Proceso equivalente al 5-20
biestables D
Ahora,creaunnuevoproyectoeimplementaenlaFPGAestecircuitoycompruebaque
funciona bien. En caso de que ests trabajando con la placa Basys, el diseo funcionar
mejor que el diseo de la figura 5.3, sin embargo, todava no funcionar del todo bien
porquelospulsadoresdelaBasysnotienenelcircuitodeeliminacinderebotes(figura
3.2)quesestpresenteenlaPegasus(figura3.1).Msadelante,enelcaptulo11veremos
cmosolucionaresteproblema.
EncualquiercasoqupasasienestecircuitomantienespresionadoelpulsadorBTN0?se
comportaigualqueantes?
5.4. Conclusiones
Losconceptosmsimportantesdeestaprctica:
No todas las maneras que tiene el VHDL para modelar elementos de memoria son
vlidasparasntesis.
En esta prctica sehan establecido unas reglas para describir elementos de memoria
parasntesis.
Cuandodescribimoslgicacombinacional,hayquetenercuidadodenocrearlatches
no deseados, para evitarlo, las seales se deben asignar en todas las condiciones
posibles.LascondicionesdebenterminarenELSEynoELSIF.
Enlosprocesos,lassealesnoseactualizaninmediatamentesinoqueseactualizanal
terminarelproceso.
Lasentradasasncronassedebenregistrarparaevitarmetaestabilidad.
Los detectores de flancos suelen ser necesarios para realiza interfaces humanos con
diseossncronos
6.1. Segundero
Elsegunderoquehicimoselaopasadoyquetantonoscost,esteaolopodremoshacer
enmuypocotiempo.
EnestaprcticaqueremosqueunLEDsemantengaencendidoduranteunsegundoyse
apagueduranteelsegundosiguiente,estecomportamientoserepetirperidicamente.
Recordando del ao pasado, lo que tenemos que hacer es un divisor de frecuencia.
Nuestro reloj tiene una frecuencia de 50 MHz y queremos una seal de 1 Hz (que
llamaremos S1seg).Elcronogramadeestassealessemuestraenlafigura6.1.Comose
puedeapreciar,laseal S1segestara1solamenteduranteuncicloderelojduranteun
segundo.
T=1 s (f = 1Hz)
(no est a
T=20 ns escala)
Clk
S1seg
Figura 6.1: Cronograma de la seal que queremos obtener
La seal S1seg ser la entrada a un biestable T, y har que cada segundo, el biestable
cambiedevalor.Elesquemageneraldelcircuitosemuestraenlafigura6.2.
(no est a escala)
T=1 s
T=20 ns
T=20 ns
P_Conta1seg Biestable T
S1seg
Clk Clk S1seg T Q LED
Paraimplementarundivisordefrecuencianecesitamoscontaryparacontardebemosser
capaces de sumar (al menos sumar 1 cada vez). Por otro lado, necesitamos saber qu
rangotienenuestracuenta(hastaqunmerollega)paraquelasealqueutilicemospara
contartengaunnmeroadecuadodebits.
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
14Paracalcularelnmerodebitsquenecesitas,obtnelenterosuperioralresultadodellogaritmoenbase2
delnmero.Porejemplo,log2(50106) = 25,75 26 bits.Paracalcularellogaritmoenbasedosy
notienesenlacalculadora,lopuedescalcularconellogaritmoenbase10:log2(X)=log10(X)/log10(2).Otra
forma(menoselegante)dehacerloesircalculandolaspotenciassucesivasdedoshastaencontrarlaprimera
queseamayorqueelnmero.
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.
CONV_7SEG
P_Conta1seg PConta10segs
4 6
S1seg conta10s
Clk Clk S1seg
Reset SEG(6:0)
Clk
PB3
Reset A
50 MHz
1 Hz
Figura 6.3: Esquema del contador de 10 segundos
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:
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).
Cdigo 6-4: Bibliotecas por defecto que pone el ISE Cdigo 6-5: Bibliotecas recomendadas
Elprocesoqueseencargadecontarlosdiezsegundos(PConta10segs)vaacontarconla
seal conta10seg,queesdetipo unsigned (ver cdigo63).Elprocesosemuestraenel
cdigo 66. Fjate en la ltima sentencia: debido a que la seal conta10seg es de tipo
unsigned y el puerto de salida LED es de tipo std_logic_vector, hay que convertir
conta10sega std_logic_vector.Parahaceresto,esnecesarioqueambassealestenganel
mismonmerodebits(enestecaso 4:3 downto 0).
AhoraimplementaestecircuitoenlaFPGA,lasentradasysalidasdelcircuitosemuestran
enlafigura6.4
CONTA_10SEGS
6
Clk SEG(6:0)
4
LED(3:0)
PB3 Reset
4
AN(3:0)
Figura 6.4: Entradas y salidas del circuito
6.3. Cronmetro
Ahora vamos a realizar un cronmetro digital que muestre dcimas de segundos,
unidadessegundo,decenasdesegundoyminutos.Paraello,haremosprimeroundivisor
defrecuenciaquenosobtengaunasealdedcimasdesegundo:S1decima,estedivisorde
frecuenciasersimilaralquegenerabaunadeunsegundo,perolacuentaser10veces
menor.Lasealresultante,envezdesercomoladelafigura6.1,sercomolamostrada
en la figura 6.5. Fjate que la seal S1decima est a uno enun slo ciclo de reloj durante
todosuperiododeunadcimadesegundo.
T=0,1 s (f = 10Hz)
(no est a
T=20 ns escala)
Clk
S1decima
Figura 6.5: Cronograma de la seal de una dcima de segundo que queremos obtener
ElprocesoqueimplementalasealS1decimaessimilaralproceso P_Conta1segdelcdigo
61 (mira tambin la figura 6.2), pero la cuenta, en vez de ser de 50 millones ser de
5000000(diezvecesmenor).
Apartirdelasealdeunadcima,realizaremoslacuentade10dcimas,10segundos,60
segundos y 10 minutos. Utilizaremos cuatro procesos similares al PConta10segs (figura
6.3).DecadaprocesoobtendremoslacuentaenBCD(4bits)yunasealqueindicarel
findecuentaparahacercontaralsiguientecontador.
Elesquemainicialdelcronmetrosemuestraenlafigura6.6.Lefaltaraincluirlapartede
visualizacinporlosdisplaysqueladiscutiremosmsadelante.
P_Conta1decima PConta10decimas PConta10seg PConta60seg PConta10min
S1decima S1seg S10seg S60seg
Clk S1decima S1seg S1seg S10seg
4 4 4 4
Clk decimas segundos dec_segundos minutos
Reset
Clk Clk Clk Clk
PB3
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.
Para ver los cuatro dgitos podemos hacer un decodificador como lo hicimos en el
apartado4.2(prctica4).SegnlacodificacindelosinterruptoresSW6ySW7seencender
undisplaydistinto.Estoes,seactivarunnododistinto.Serparecidoalcdigo41pero
sinlahabilitacin.Latabla61muestralosdisplaysqueseenciendenyelnmeroquese
muestrasegnlosinterruptoresqueestnactivados.
SW7 SW6 nodo DISPLAY
0 0 AN3 dcimas
0 1 AN2 segundos
1 0 AN1 decenas de segundos
1 1 AN0 minutos
Tabla 6-1: Displays que se muestran segn la configuracin de los interruptores
La figura 6.8 muestra el decodificador para activar los nodos. Este decodificador es
similaraldelapartado4.2(bloquedeabajodelafigura4.6).
DECOD_2a4
AN3-AN0
SW6 I(0) S0 AN(0)
SW7 I(1) S1 AN(1) Controlamos
qu display
S2 AN(2) se enciende
Lo hacemos sin
habilitacin S3 AN(3)
(siempre habilitado)
Negamos porque los
displays se controlan
con lgica inversa
Figura 6.8: Codificador para controlar los nodos de los displays
Adems habr que seleccionar la cifra que se quiere mostrar (dcimas, unidades de
segundo, decenas de segundo o minutos). La seleccin de la cifra se har conforme a la
tabla 61. Como ya sabemos, para seleccionar necesitamos un multiplexor. Despus del
multiplexor, pondremos un conversor a siete segmentos para mostrarlo por los displays.
Lafigura6.9muestraelesquemadeestapartedeldiseo.
4
decimas(3:0) 00
CONV_7SEG SEG_A-SEG_G
4
segundos(3:0) 01 mostrar(3:0)
4 6
4 SEG(6:0)
dec_segundos(3:0) 10
4
minutos(3:0) 11
SW6 2
I(1:0)
SW7
Figura 6.9: Multiplexor que selecciona la cifra BCD segn la configuracin de os interruptores.
Elesquemacompletodeldiseosemuestraenlafigura6.10.
decimas(3:0)
Reset Reset Reset Reset
segundos(3:0)
dec_segundos(3:0)
minutos(3:0)
4 4 4 4
AN3-AN0
DECOD_2a4 I(1:0) 00 01 10 11
I(1:0) S0 AN(0) CONV_7SEG SEG_A-SEG_G
SW6
SW6 S1 AN(1) SW7
4 mostrar(3:0) 6
SW7 S2 AN(2) SEG(6:0)
El nmero que se
S3 AN(3)
muestra segn estn
los interruptores
Figura 6.10:Esquema completo del cronmetro con visualizacin manual
Ahoracreaunnuevoproyectollamado crono_manual,implementaeldiseodelafigura
6.10 en la FPGA y comprueba que funciona. Evidentemente, es un cronmetro de
prestacionesmuymalas,porquenopuedesvisualizarsimultneamentemsdeuncifra.
TienesqueseleccionarlaciframanualmenteconlosinterruptoresSW6ySW7.
6.3.2. Mostrar los dgitos. Solucin automtica
Hemos visto las limitaciones de la solucin anterior. Si quisieses ver dos cifras
simultneamente, podras probar a mover el interruptor manualmente lo ms
rpidamente posible. Es obvio que esta solucin no es muy cmoda, as que vamos a
intentarbuscarunaalternativa.
Lasolucinpodraserqueenvezdequenosotroscambiemoslaseal I(1:0)moviendo
los interruptores SW6 y SW7, hicisemos un circuito que haga como si los movisemos
peridicamentedemaneraautomtica.Lavelocidaddelcambiodebesertanrpidaque
no sea perceptible por nosotros los humanos. Por ejemplo, si cambiamos el display cada
milisegundoseguramentenonosdemoscuentadequeestcambiando,salvoquecomo
lucemenostiempo,loveremoslucirconmenorintensidad.
As que vamos a probar de esta manera: crearemos otro contador similar al que genera
una seal de peridica de un segundo (proceso P_conta1seg del cdigo 61) o similar al
que hemos creado en el cronmetro para contar una dcima de segundo (figura 6.6).
Nuestro contador crear una seal peridica de un milisegundo (s1mili) como la
mostradaenlafigura6.11.
T=1ms (f = 1kHz)
Relacin:
(no est a
T=20 ns frecuencia
escala)
50MHz
= 50000
clk 1kHz
50MHz periodo
1ms 1000000ns
s1mili = = 50000
20ns 20ns
1kHz
Figura 6.11 : Cronograma de la seal de una milsima de segundo que queremos obtener
s1mili
Segundos
CUENTA4MS 0 1 2 3 0 1 2 3
minutos decenas unidades dcimas
AN_0
AN_1
M DS US dec
AN_2
AN_3 AN_2 AN_1 AN_0
AN_3
Segn el valor de CUENTA4MS
mostrar dec US DS M US DS UM DM se selecciona las dcimas, las
unidades o decenas de segundos
4 x 1 ms o los minutos
Figura 6.12:Multiplexado en el tiempo para mostrar los displays
Elesquemadelcircuitofinalsemuestraenlafigura6.13.Creaunnuevoproyectollamado
crono_autoeimplemntaloenlaFPGA.Compruebaquetesalebien.
Comoconclusin,hemosaprendidoahacerunrelojdigital.Hemosvistocmopodemos
multiplexareneltiempounavariasseales.Conestoreducimoselnmerodepinesdela
FPGA para manejar los displays. Con esta solucin tenemos los siete segmentos ms el
punto decimal (8 pines) ms los cuatro nodos, en total 12 pines. De la otra forma, si
necesitsemos los 8 pines por cada display sera 8x4=32 pines ms los cuatro nodos: 36
pines.
decimas(3:0)
Reset Reset Reset Reset
segundos(3:0)
dec_segundos(3:0)
minutos(3:0)
P_Conta1mili PConta4milis 4 4 4 4
S1decima 2
Clk S1mili cuenta4ms cuenta4ms
00 01 10 11
Clk
CONV_7SEG SEG_A-SEG_G
Reset
Clk 4 mostrar(3:0) 6
BTN3 SEG(6:0)
Reset
DECOD_2a4
Lo que antes era I 2
I S0 AN(0)
SW6 I(1:0)
S1 AN(1) AN3-AN0
SW7
S2 AN(2)
S3 AN(3)
Figura 6.13:Esquema completo del cronmetro con visualizacin automtica
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.
CONV_7SEG
4
decimas(3:0) 6
CONV_7SEG
6
4
segundos(3:0) 00
6
6
01 7
SEG(6:0)
CONV_7SEG 6
4
10
dec_segundos(3:0) 6
11
2
CONV_7SEG
4
minutos(3:0) 6
I(1:0)
Figura 6.14:Otra alternativa al esquema de la figura 6.9
0 1 2 3 4 5 6 7
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.
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,...
BTN0 CARGA
BTN2 DESPL_IZQ
7 6 5 4 3 2 1 0
ElprocesoVHDLdelregistrodedesplazamientosemuestraenelcdigo71.
Sihasentendidolasprcticasanteriores,nodeberasdetenerproblemasparaentenderel
cdigo71,salvoparalasentenciaresaltadaennegrita.
Estasentenciaseraequivalentealassealadasennegritaenloscdigos72y73
P_registro: Process (reset, clk) P_registro: Process (reset, clk)
begin begin
if reset = '1' then if Reset = '1' then
registro <= (others => '0'); registro <= (others => '0');
elsif clk'event and clk='1' then elsif clk'event and clk='1' then
if pulso_carga = '1' then if pulso_carga = '1' then
registro <= dato; registro <= dato;
elsif pulso_desplz_izq = '1' then elsif pulso_desplz_izq = '1' then
registro (7) <= registro (6); registro (1) <= registro (0);
registro (6) <= registro (5); registro (2) <= registro (1);
registro (5) <= registro (4); registro (3) <= registro (2);
registro (4) <= registro (3); registro (4) <= registro (3);
registro (3) <= registro (2); registro (5) <= registro (4);
registro (2) <= registro (1); registro (6) <= registro (5);
registro (1) <= registro (0); registro (7) <= registro (6);
end if; end if;
end if; end if;
end process; end process;
Cdigo 7-2: Cdigo equivalente al cdigo 7-1 Cdigo 7-3: Cdigo equivalente al cdigo 7-1
Esmuyimportanterecordarquelassealesdentrodeunprocesonoseactualizanhastael
final del proceso, as que, a pesar de que en el cdigo 73 se podra pensar que el
registro(0) se propagara inmediatamente a todos los dems bits, no ocurre porque el
registro(1)notomaelvalorderegistro(0)hastaquesesaledelproceso.
Loqueocurrealdesplazaralaizquierdasemuestraenlafigura7.2.
7 6 5 4 3 2 1 0
Antes de
desplazar
bit 0 se
bit 7 se mantiene
pierde y se
7 6 5 4 3 2 1 0 duplica
despus de
desplazar
Figura 7.2: Desplazamiento a la izquierda
Ahoraimplementaelcircuitoycompruebaquefuncionacorrectamente.Realizalacargay
luego el desplazamiento. Realiza varias cargas en las que unas veces el bit 0 valga 0 y
otras1.Analizaloqueocurreyasegratedequeloentiendes.
7 6 5 4 3 2 1 0
Antes de
desplazar
bit 7 va
al bit 0
7 6 5 4 3 2 1 0
despus de
desplazar
Figura 7.3: Rotacin a la izquierda
Esteprocesosemuestraenelcdigo74.
P_registro: Process (reset, clk)
begin
if reset = '1' then
registro <= (others => '0');
elsif clk'event and clk='1' then
if pulso_carga = '1' then
registro <= dato;
elsif pulso_desplz_izq = '1' then
registro <= registro (6 downto 0) & registro(7); -- rotacion izquierda
elsif pulso_desplz_dcha = '1' then
registro <= registro(0) & registro (7 downto 1); -- rotacin derecha
end if;
end if;
end process;
Cdigo 7-4: Cdigo del proceso que rota a izquierda y derecha
AhoraimplementaestediseoenlaFPGAycompruebaquerotaaizquierdayderechael
datoquecargasenparalelo.
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.
15 SesueleabreviarconUUT(Unidadbajopruebas:UnitUnderTest)
16 Eninglssediceinstantiation,quealgunostraducencomoinstanciacin(quenoexisteenespaol)yotros
comoreferencia(quesexiste)
banco de
pruebas Unidad que se quiere
comprobar su correcto
TB_UUT funcionamiento
P_Inputs
Proceso que
simula el reloj P_Reset
Acontinuacinvamosaverlosbancosdepruebasylasimulacinconunejemplosencillo
Conta
4
CUENTA Definiremos CUENTA como unsigned
Clk Clk
Reset
Figura 8.2: Puertos de entrada y salida del contador que vamos a probar
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)
tb : PROCESS
BEGIN
Patrn de ejemplo para generar
-- Wait 100 ns for global reset to finish los estmulos: Generar los
wait for 100 ns; valores de las seales de G
entrada,
-- Place stimulus here En este caso de Reset y Clk
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.
nombre de la
referencia
("instanciacin"). nombre del componente que
Debe ser nico estamos "instanciando".
Debe ser el mismo que el
nombre que le dimos a la Entidad del componente que estamos testeando
entidad entity conta is
uut: conta Port (
PORT MAP( Reset : in STD_LOGIC;
Reset => Reset,
Clk : in STD_LOGIC;
Clk => Clk, mapeo de puertos cuenta : out UNSIGNED (3 downto 0)
cuenta => cuenta );
); end conta;
Ahoraslonosquedaexplicarcmosegeneranlosestmulos:elbloqueGdelafigura8.4.
En esta figura, el ISE incluye un proceso genrico que tenemos que rellenar con los
estmulos que consideremos adecuados para comprobar nuestro circuito. Nosotros
borraremoseseprocesoparaincluirlosnuestros.
TenemosdosentradasanuestrocircuitoConta:elrelojyelreset.Generaremosunproceso
independienteparacadaunadeellas:
Elprocesodelrelojdebedegenerarunasealderelojperidicade20ns(50MHz).Dicha
sealderelojestarlamitaddeltiempoaceroylaotramitadauno(figura8.6).
20 ns
10 ns
CLK
Figura 8.6: Periodo de la seal de reloj
LosprocesosdelVHDLsontilesparagenerarsealesperidicasparasimulacin.Para
ello se utilizan procesos sin lista de sensibilidad pero con sentencias "wait for". Al
terminar un proceso, si no tiene lista de sensibilidad, el simulador vuelve a entrar
inmediatamenteenelprocesohastaencontrarunasentencia wait.Lasentenciadetienela
ejecucindelprocesohastaquetermineeltiempoindicadoporlasentencia "wait for".
Vemosloconunejemplo.Queremosrealizarelprocesoquegeneralasentenciadereloj.
Recuerdaqueestamoshablandoparasimulacin,estasentencianosepodrimplementar
en la FPGA. El cdigo 81 muestra cmo se genera una seal de reloj para simulacin.
Copiaesteprocesoenelbancodepruebas.
P_Clk: Process
begin
clk <= '1';
wait for 10 ns;
clk <= '0';
wait for 10 ns; -- al terminar aqui, vuele al principo
end process;
Cdigo 8-1: Cdigo que simula el funcionamiento del reloj de la placa Pegasus (50 MHz)
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
El banco de
pruebas tiene
que estar
seleccionado
Debe aparecer
Xilinx ISE
Simulator
Figura 8.8: Entrono para simulacin
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).
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.
Seleccionamos
Decimal (Unsigned)
para la seal cuenta
Figura 8.13: Visualizacin de cuenta como decimal sin signo
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].
P_Secuencial P_Comb_estado
D estado_actual
Clk
Clk
Reset
Reset
P_Comb_salidas
Salidas
Entradas
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.
Reset Reset
Figura 9.2: Bloques del circuito para encender y apagar un LED
Como el detector de flanco ya sabemos hacerlo (seccin 5.3.2), slo veremos la mquina
de estados suponiendo que ya tenemos la seal acondicionada (Pulso_BTN0). Al
implementarloenlaFPGAtendrsquecrearelboquededeteccindeflancos.
El diagrama de transicin de estados se muestra en la figura 9.3 (fjate que est hecho
como mquina de Moore). Cuando se presiona el pulsador se pasa de encendido a
apagado, o de apagado a encendido. Recuerda de la seccin 5.3.2 que necesitamos
acondicionarlasealdelpulsadorparaqueseconviertaenunpulsodeunnicociclode
reloj.Poreso,enlaleyendadeldiagramadelafigura9.3,laentradaes Pulso_BTN0yno
directamenteelpulsador:BTN0.
Leyenda entrada
1
0
Pulso_BTN0
OFF ON
0 1 estado
LD0
0 1 salida
Figura 9.3: Diagrama de transicin de estados para encender un LED con un pulsador
En las clases tericas hemos aprendido a implementar el diagrama de la figura 9.3 con
biestablesypuertaslgicas.AhoraloharemosenVHDL.
Loprimeroqueharemosesdeclararuntipoenumeradoquetendrlosestadosdenuestra
mquina. En nuestro caso sern LED_ON y LED_OFF (no pueden ser ON y OFF porque ON es
unapalabrareservadaenVHDL).
type estados_led is (LED_OFF, LED_ON);
Cdigo 9-1: Declaracin de un tipo enumerado para la mquina de estados
Cdigo 9-2: Declaracin de las seales de estado de tipo estados_led anteriormente declarado
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.
Esteprocesocombinacionalproporcionalassalidasenfuncindelestadoactualy,encaso
dequeseaunamquinadeMealy,tambinenfuncindelasentradas.Ennuestrocaso,
comoesunamquinadeMoore,solodependerdelestadoactual.Elprocesosemuestra
enelcdigo95
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.
inic s0 BTN0
0 0 0
1
1 estado
pulso_btn0
1 s01
1 salida
Figura 9.4: Diagrama de estados del detector de flancos (Moore)
Ahoracreaunnuevoproyecto,importalosficherosVHDLyUCFdelaprcticaanterior17
ymodificaeldetectordeflancodescribindolocomolamquinadeestadosdelafigura
9.4. Por tanto, creando otros tres procesos nuevos: uno secuencial, otro combinacional
paraelestadoyelltimocombinacionalparalassalidas.
Tienesquetenerencuentaquevasacreardosmquinasdeestadoenelmismodiseo,
por lo tanto, tendrs dos tipos enumerados para especificar los estados: uno para el
detector de flanco y otro para encender el LED. Por consiguiente, deben tener nombres
diferentes.Porejemplo,podrasdeclararloscomosemuestraenelcdigo96
-- Estados para encender el LED
type estados_led is (LED_OFF, LED_ON);
signal estado_actual, estado_siguiente : estados_led;
17Recuerda:ProjectAddCopyofSource....
Implementaelcircuitoycompruebaquefuncionaigualqueantes.
9.2.1. Variante
Sitefijasenlafigura9.4,unavezquesehadetectadoelflanco,sivieneuncerosignifica
quede BTN0vienelasecuencia0101,yporlotantosegenerarndospulsosseguidos.Sin
embargoesimposiblequepodamospulsardosvecesenunintervalode40ns.Portanto,
elnuevopulsosedebeaunrebotepulsadoryenrealidadesmejornoconsiderarlo.
20ns
clk
Clk
BTN0 0 1 0 1
Pulso_BTN0
As que es mejor realizar el diseo con el diagrama de estados de la figura 9.6, donde
siempre que estamos en el estado S01 volvemos al estado inicial. Por eso hay una X: en
todosloscasos,vuelvoaINIC.
0
0
inic s0
1 0 0
1
X s01
1
Figura 9.6: Diagrama de estados modificado
Realizaestavarianteycompruebaquefuncionaigual.
Comentario:
Los rebotes de los pulsadores es un aspecto muy importante en el diseo de circuitos
electrnicosdigitales.EnlaplacaPegasusestnsolucionadospormediodeuncircuitode
condensadoresyresistencias(figura3.1).Sinembargo,laplacaBasysnotieneestecircuito
(figura3.2)yportantotenemosquesolucionarlomedianteunamquinadeestadosyun
temporizadordemodoquenoseconsiderenlospulsosdeentradasirecientementeyaha
habido un pulso (suele ser durante unos 300 milisegundos). En el captulo 11
aprenderemosaimplementarestecircuito,aunqueestaramuybienquefuesespensando
en cmo lo haras. Mientras tanto, si usas la Basys tendrs que intentar presionar los
pulsadores intentando que no haya rebotes (cogindole el truquillo algo se puede
conseguir).
Haymuchasmanerasposiblesdeplantearesteproblema.Nosotroslosplantearemosdela
siguientemanera:
Usaremosunregistrodedesplazamientoquepuederotaralaizquierdayaladerecha
segnelvalordeunasealdsplza_izq.Sivale1desplazaralaizquierda,sivale0a
la derecha. Haremos rotacin y no desplazamiento porque si no, en una vuelta, el
registrosellenaradeunos(tambinsepuededesplazar,peroasignandocerosalbitdel
extremo).
Elregistrodedesplazamientotendrunahabilitacin(enable).Siestaceronohabr
rotacinenningnsentido.
El habilitacin (enable) del registro de desplazamiento vendr dada por un seal
generadaenundivisordefrecuencia.Lasealtendrunafrecuenciade1dcimade
segundo.Unasealigualquelaquegeneramosenelcronmetro(apartado6.3,figura
6.5).Siquisisemosquefuesemsrpidoodespacio,cambiaramoslafrecuenciadeesa
seal.
ElvalordelregistropasadirectamentealosLED.
Elregistrodedesplazamientosereseteaconunvaloriguala00000001.Estohaceque
alresetearsiempreseenciendaelprimerLEDdeladerecha:LD0.
Laordenderotacinalaizquierdaoderecha(dsplza_izq)laproduceunamquinade
estados.Apartedelrelojyelreset,susentradassondossealesqueindicansielLED
que est encendido es uno de los extremos. As, cuando el LED de la derecha est
encendido (registro(0)) se activar la seal tope_dcha, indicando que LD0 est
encendido.SiseenciendeelLEDdelaizquierda, registro(7)valdr1yportantose
activarlasealtope_izq.
Portanto,lamquinadeestadosindicarelsentidoderotacindelosLEDhastaque
lleguealtopedeesesentidoydarlaordendeirensentidocontrariohastallegaral
otrotope.
Elesquemadeestecircuitosemuestraenlafigura9.7,dondeesteldivisordefrecuencia,
elregistrodedesplazamientoylamquinadeestados.
P_Conta1decima P_Rota
Clk S1decima Enable
Clk 8
rota_izq registro LED(7:0)
Reset
PB3
Clk Reset 1
1
MaquinaEstados
registro(7)
tope_izq
registro(0) rota_izq
tope_dcha
Clk
Clk
Reset
PB3
registro(0)
registro(7)
Figura 9.7: Esquema del circuito del movimiento alternativo de los LED
Delostres bloquesdelafigura9.7,slolamquinadeestadosesundiseototalmente
nuevo. Pues el divisor de frecuencia se ha hecho en el apartado 6.3 (figura 6.5). Y el
registrodedesplazamientoessimilaralosdelaprctica7.
Acontinuacinsemuestraeldiagramadeestadosdelamquinadeestados,sinembargo,
antesdeverla,intentadeducirlaportimismo.Puesenclasesehanrealizadoproblemas
similares18.
Leyenda entradas
01
0X
tope_izq, tope_dcha
DCHA IZQ
0 1 estado
rota_izq
X0 10 salida
PuedesobservarqueseharealizadocomomquinadeMoore.
Fjatequehayentradasimposibles,yentradasquedanigual.EnVHDLcomolasntesis
enbiestableslavaarealizarelISEWebpackynuestraFPGAtienetamaodesobrapara
nuestro circuito, por ahora no nos vamos a preocupar de la simplificacin. Por tanto,
podemosdisearelprocesocombinacionaldelestadosiguientedelamaneramscmoda
para nosotros. Por ejemplo, como muestra el siguiente cdigo, considerando slo una
sealdetope19:
P_COMB_ESTADO: Process (estado_act, tope_izq, tope_dcha)
begin
case estado_act is
when IZQ =>
if tope_izq = '1' then
estado_sig <= DCHA;
else
estado_sig <= IZQ;
end if;
when DCHA =>
if tope_dcha = '1' then
estado_sig <= IZQ;
else
estado_sig <= DCHA;
end if;
end case;
end process;
Cdigo 9-7: Cdigo del proceso combinacional que obtiene el estado siguiente
Paraterminar,implementaelcircuitoenteroenlaFPGAycompruebaquefuncionabien.
9.4. Conclusiones
HemosvistocmoimplementarmquinasdeestadosfinitosenVHDL.Alenfrentartecon
las especificaciones de un diseo, debes pensar cmo se transformarlas en una o varias
mquinas de estados. Esta es una de las funciones ms importantes del ingeniero.
Posteriormente,elpasodelamquinadeestadosalVHDLesmsomenosdirecto.
18Elproblemadelcarritohechoenclaseessimilar,quizsunpocomscomplicado.
http://laimbio08.escet.urjc.es/assets/files/docencia/EDII/carrito.pdf
19Sinembargo,silohicieseamano,squetengoqueconsiderarlasentradasimposiblesparapodersimplificar
almximoporKarnaugh
Figura 10.1: Esquema del circuito de la clave electrnica
10.1. Variantes
PruebaahacerlamquinadeestadosconMealyyconMoore
HazquelosLEDparpadeendurantelostressegundosquesemantienenactivos
Hazelcircuitosinsolapamientodelaclave
Muestraordenadamenteporlosdisplayslasletrasqueintroduceelusuario:elltimo
carcterintroducidoeneldeladerecha,yelprimercarcter(deloscuatroltimos)en
eldelaizquierda.
PEGASUS BASYS
Spartan-II Spartan-3E
3,3V 3,3V
PIN pulsador PIN pulsador
59 BTN0 69 BTN0
4,7k 58 BTN1 4,7k 48 BTN1
57 BTN2 47 BTN2
154 BTN3 41 BTN3
4,7k 0,1F 4,7k
Figura 11.1: Esquema de los pulsadores en la placa Pegasus y en la placa Basys
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.
4 flancos de subida
BTN
FILTRO_BTN
300 ms
Slo despus de 300 milisegundos podr haber un nuevo pulso
Figura 11.3: Cronograma de la salida del filtro antirrebotes (FILTRO_BTN) cuando hay rebotes en la
entrada (BTN)
Cmo podramos realizar este circuito? pues con una mquina de estados similar al
detectordeflancosperocontemporizador.Elesquemadelcircuitosemuestraenlafigura
11.4.Enesteesquemapropuesto,eltemporizadorsehabilitacuandosehadetectadoun
flancodesubida.Apartirdeentoncesnoseproducirningnpulsodesubidahastaque
eltemporizadordlasealdequehanpasado3milisegundos.Despusdeesto,sepodr
detectarunnuevoflancodesubida.
Mquina de estados
BTN0 Filtro_BTN0
Temporizador
enablecont
fin3ms Enable
fin3ms
Clk Clk
Reset Clk Reset
Reset
Figura 11.4: Esquema del circuito que filtra los rebotes de la entrada
X1 estado
filtro_btn0
s01
espera enablecont
10
01
salidas
X0 XX
Figura 11.5: Diagrama de estados del circuito que filtra los pulsos
Paracadapulsadorhabraquerealizaruncircuitosimilar.
Implementaelcontadormanualdelaseccin6.4conestosfiltros.UtilizaunaplacaBasys
paracomprobarquerealmentefuncionabien.
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:
Unbloquededeteccindeflancoparalospulsadores,haciendoquesloseconsidere
unamonedacadavezquesepresionaunpulsador.
Elbloquedelamquinadeestados,quedebesabercuntodinerosehaintroducidoy
controlarlassalidas.
Elbloquedetemporizacin,quedebeindicarelpasode2segundosdespusdehaber
introducidoeldinerosuficienteparadarunalata.
El bloque que convierte a siete segmentos la cantidad de dinero (en este caso un
nmero hexadecimal de una cifra: 4 bits) que se quiere mostrar por el display. Si
quisisemosmostrarunaLcuandodurantelatemporizacin,tendramosqueincluirla
sealenable_contcomoentradadeltemporizador.
Detectaflanco Mq_estados
m1euro 8
BTN3 LED(7:0)
BTN2 m50cent
conv7seg
BTN1 m20cent
qdinero
BTN0 m10cent 7
cantidad s7seg
4
SEG(6:0)
Clk Clk fin2seg
Reset Temporizador
Clk Clk enable_cont
Reset Enable
Reset
fin2seg
Reset
Clk Reset
Figura 12.2: Esquema interno del circuito de control de la mquina expendedora simple
Figura 12.3: Indicaciones de los displays segn el estado
T T T
Figura 13.1: Seal PWM que se le ha cambiado el ciclo de trabajo
SielperiododelPWMessuficientementepequeo,eldispositivoqueestgobernado(por
ejemplo,elmotor)nonotarlasvariacionesdelatensinyelresultadoesqueelmotor
recibir una corriente promedio dada por el ciclo de trabajo. La figura 13.2 muestra dos
PWMconciclosdetrabajodistintos.
D=50% D=50% D=50% D=50%
Equivale a una tensin
continua del 50% de la
nominal: el motor ir a un
T T T T 50% de la velocidad mxima
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.
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.
20 PMODHB3:http://www.digilentinc.com/Products/Detail.cfm?&Prod=PMODHB3
21 PMODHB5:http://www.digilentinc.com/Products/Detail.cfm?&Prod=PMODHB5
AcontinuacinveremosunasprcticasenlasqueademsdelaparterelativaalaFPGAy
elVHDL,realizaremosloscircuitosdepotenciayanalgicosnecesariosparainteractuar
conelmundoreal.Losconocimientosdeelectrnicaanalgicanoseexplicarnendetalle,
yaquesecorrespondenconlaasignaturadeElectrnicaAnalgica.
Unavezquehemosconseguidounmotorunipolar,tenemosqueencontrarlosdevanados
opuestosyelterminaldealimentacin.Elprocedimientoparadescubrirquterminales
cadaunoeselsiguiente23:
1. Averiguarculeselterminaldealimentacin
Segnlafigura14.1,detectarelterminaldealimentacinesfcil,puessimedimoslas
resistencias con un polmetro, la resistencia del terminal de alimentacin respecto a
cualquier otro terminal es la mitad que la resistencia que hay entre dos terminales
cualesquiera que no sean el de alimentacin. En caso de que haya 6 terminales,
posiblemente dos de ellos correspondan al dealimentacin y por tanto la resistencia
entreellossercero.
22Informacindelosmotorespasoapasoenespaol:[7,24]yeningls[4,9,21,22]
23Informacinobtenidadehttp://www.doc.ic.ac.uk/~ih/doc/stepper/others/
L Alimentacin
L L
D B
C
Figura 14.1: Conexin interna de un motor unipolar
2. Identificarlosterminalesopuestos
Primero conectamos el terminal de alimentacin a la A
Motor se
fuente(Vcc)yponemoscualquierotroterminalatierra.A posiciona
este terminal que conectamos a tierra le llamaremos
terminal A. En la figura 14.2 se representa esta conexin.
B D
Al hacer esto vemos que el motor se posiciona y que
cuestamsmoverlo.
A continuacin, manteniendo el terminal A a tierra y el
terminal de alimentacin conectado a la fuente, vamos C
probando qu sucede al conectar cada uno de los dems Figura 14.2: El terminal A a
terminales a tierra. Esto lo hacemos por separado, es tierra
decir,encadamomentohaycomomximodosterminales
atierra.
Aquel terminal que no haga girar un paso al motor sino que haga que pierda par
resistivoserelterminalopuestoa A,estoes,serelterminal C(segnlareferenciade
la figura 14.2). En los otros dos casos, habr un pequeo giro del motor en sentidos
opuestos.Enlafigura14.3semuestraesteconceptodemaneragrfica.
A A Giro a derecha A Motor
Giro a izquierda
medio paso pierde
medio paso
par
B D B D B D
C C C
Figura 14.3: Resultado de poner a tierra cada uno de los otros tres terminales, cuando el motor pierde par
indica que es el correspondiente
Unavezquetengamoslosterminalesidentificados,yapodemosgenerarlassecuenciasde
giro. En la figura 14.4 se muestra la identificacin de los terminales para el motor que
hemosobtenidodeimpresorasHewlettPackardmodelosDJ560CyDJ690c.Estemotoresel
modeloPM55L048deMinebea,cuyashojasdecaractersticassepuedenconsultarenla
pginawebdeMinebea[16].Detodosmodos,elfuncionamientoconotrosmotoresser
similar,aunquetendrsqueleerlascaractersticasdelmotorquetengasparaadaptarel
circuito.
Alimentacin
(comn)
A
C
B D
Para hacer girar al motor tenemos que ir poniendo a tierra algunos terminales en una
secuenciaconcreta.Poneratierraunterminalhacequecirculecorrienteporeldevanado
correspondiente,yestohacequesemuevaelrotordelmotor.Delafigura14.3podemos
intuircmopodemosobtenerlasecuenciaconlaquepodemoshacerqueelmotorgire.La
figura 14.5 aclara cmo obtener esa secuencia. La flecha del centro indica de manera
esquemticalaposicindelrotor.Detodosmodos,esslounesquema,noseproducen
giros de 90 con cada paso, sino que son giros mucho menores (suelen ser menores de
10).
A y B a tierra A B y C a tierra A C y D a tierra A D y A a tierra A
B D B D B D B D
C C C C
Figura 14.5: Secuencia de terminales que se ponen a tierra para obtener el giro del motor
As que para girar el motor tenemos que poner a tierra de manera secuencial los
terminales.Delafigura14.5podemosobtenerlasecuenciadeterminalesqueseponena
tierraparaobtenerelgirodelmotor:ABBCCDDAAB...
Enlafigura14.6semuestralasecuenciadelosterminalesquesetienenqueponeratierra.
Semuestranlosdossentidosdegiro.
tiempo tiempo
1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9
A 1 1 1 1 1 A 1 1 1 1 1
terminal a tierra
terminal a tierra
B 1 1 1 1 1 B 1 1 1 1 1
C 1 1 1 1 C 1 1 1 1
D 1 1 1 1 D 1 1 1 1
Figura 14.6: Secuencia de terminales que se ponen a tierra para obtener el giro del motor en ambos sentidos
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.
CLK
RESET
SW0
Figura 14.7: Bloque de control de motor de la FPGA
LassalidaslasconectaremosalosconectoresPMOD.LaPegasustieneunnicoconector
PMOD, que se ha llamado puerto accesorio (accesory port) en la figura 2.1. Los pines se
muestranenlatabladeladerechadelafigura14.7.
La Basys tiene cuatro conectores PMOD. Para esta prctica usaremos el conector de la
izquierda(JA).
Ahoratenemosquedisearelcircuitoylamquinadeestadosquegenerelassecuencias
apartirdelasentradasquesehandescrito.Intentadisearlosinayuda,ysivesquetienes
dudas,consultaeldiseopropuestomostradoenlafigura14.8.
24Tambinseveinfluenciadoporeltipodeelectrnicadepotencia.Conunaelectrnicaespecficasepuede
aumentarlafrecuencia
11X 0XX
0XX
100 100 Leyenda entradas
AB BC
1100 101 0110 CTS,BTN0,BTN3
11X
11X 101 101
estado
ABCD
DA 101 CD
1001 0011
salidas
0XX
0XX 11X 100
100
Figura 14.8: Esquema de la mquina de estados para el bloque de control de motor de la FPGA
Observa en la figura 14.8 que hay una seal CTS que no est en las entradas del bloque
mostradoenlafigura14.7.Estaseallatendremosquegenerarnosotrosyserlaquenos
marquelafrecuenciadelmotor.Paraelmotordenuestrocaso,serunasealde100Hz
(unacentsimadesegundo).Estaseallatenemosquegenerardemodoqueestactiva
duranteunslocicloderelojencadacentsimadesegundo.
Otracosaquetienesquetenerencuentaesqueparaestapropuesta,lassealesdeentrada
delospulsadoresBTN0yBTN3nosetienenquepasarporundetectordeflanco,sinoquese
muestreancontinuamente,yaquequienhacedefiltroeslaseal CTS,puesestactivaun
slocicloderelojduranteunacentsimadesegundo.
Enlafigura14.8lasflechasquegeneranlasdossecuenciasdegirosehapuestodedistinto
color.Fjatequeladecolorazul,ladelBTN0tienepreferenciasobreladeBTN3.Enrealidad
esindiferenteculescojas,perotienesqueescogerunasecuenciasobrelaotra.
Ahora tendras que realizar el circuito en VHDL. Es recomendable que para que te sea
msfcildepurar,lassalidas A, B, Cy DtambinlassaquesporcuatroLED.Inclusopara
depurarelcircuitopodrasbajarlafrecuenciadegiroycomprobarqueefectivamentese
generanlassecuenciasdeseadas.
Una vez que tenemos el circuito y vemos que los LED se mueven como pensamos, nos
quedahacerquelassalidas A, B, CyDordenenalosterminalesdelmotorestaratierraoa
latensindealimentacinsegnsuvalor.Estoloveremosenelapartadosiguiente.
entrar en saturacin. Esto provocar que el terminal del motor TA est a una tensin
cercanaacero(segnlacadadetensinentrecolectoryemisordeltransistor).
Porotrolado,sihayuncerolgicoalasalidadelaFPGA,habrcerovoltiosenlabasedel
transistorynocircularcorrienteporlabase.Porlotantoeltransistorestarencorteyel
terminaldelmotorTAestaraVcc.
VCC
R1 R1 R1 R1
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
VCC=24V
optoacoplador
22k
220
STA471
FPGA_A
4N35
FPGA_GND
las tierras
son distintas
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).
V1CC=5V PM55L-48
10k M
optoacoplador V2CC=24V
el resto de
terminales
22k
tienen un
220 circuito igual
FPGA_A
TA
SN754410
ACPL_847
FPGA_GND
las tierras
son distintas
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.
do re mi fa sol la si do
interfaz Generador de
pulsadores frecuencias
Figura 15.1: Esquema del circuito de piano electrnico bsico
Lafrecuenciadelassealesquequeremosgenerardependerdelaoctavaqueescojamos,
lo que har que sean ms o menos graves los sonidos que generemos. La tabla 151
muestradistintasfrecuenciasdelasnotas.
Lafrecuenciadelassealesquequeremosgenerardependerdelaoctavaqueescojamos,
lo que har que sean ms o menos graves los sonidos que generemos. La tabla 151
muestradistintasfrecuenciasdelasnotas.
Nota LA SI DO RE MI FA SOL LA
Hz
220,00 246,94 261,63 293,67 329,63 349,23 392,00 440,00
440,00 493,88 523,25 587,33 659,26 698,46 783,99 880,00
880,00 987,77 1046,5 1174,7 1318,5 1396,9 1568,0 1760,0
Tabla 15-1:Frecuencias de las notas en distintas octavas
Realizar un circuito que genere una seal peridica lo hemos hecho en la prctica de
contadores(prctica6),asquenodeberamostenermuchoproblema.Lasealgenerada
nodeberaestarlamitaddetiempoaunoylaotramitadacero,estoes,nodeberaestara
unounnicociclodereloj.
FinalmentelasealsalidadelaFPGAservirdeentradaalaetapadeamplificacin,ya
suvez,lasalidadelamplificadorseconectaraunaresistenciadecarga,queennuestro
25 EstaprcticahasidodesarrolladaeneldepartamentodeTecnologaElectrnicademaneraconjuntaporlos
profesores:BelnArredondo,SusanaBorromeo,JoaqunVaquero,NorbertoMalpicayFelipeMachado.La
implantacindeestaprcticaenclasessehadetalladoenelartculo[10]
26 PmodAMP1:http://www.digilentinc.com/Products/Detail.cfm?&Prod=PMODAMP1
casounaltavoz.Lafiguramuestraelesquemamsgeneraldelamplificador.Laprimera
etapa del amplificador eleva los niveles de tensin y la segunda etapa amplifica la
corrientequeserentregadaalaltavoz.
3.3 V
0V
Amplificador con dos etapas
Ri Ro Ri Ro
FPGA +
Ve _
Ave ie Aie
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.
Problemas tericos
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
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
MaqEstados
P P PLAY PLAY
T1s FW FW
T1s
Enable
Clk Reset
Enable
Temporizador
T1s
Clk Clk Reset
Reset
Figura 16.1: Bloques internos del circuito
EltemporizadorlonecesitamosparasabersisepresionaelpulsadorPdurantemsdeun
segundo.Porlotanto,lamquinadeestadostendrunaentradamsqueindicaelfinde
la cuenta (T1s). Tambin necesitamos una salida ms que va a habilitar el temporizador
(Enable).Cuandoeltemporizadorestdeshabilitadonopodrestaractivalasealdefin
decuentaT1s.
16.2.2. Diagrama de transicin de estados
NospidenrealizareldiagramadelamquinadeestadosporMoore.
Lamquinadeestadostienedosentradas:
ElpulsadorP
LasealqueindicaquehapasadounsegundoT1S(findelacuenta)
Ytressalidas
Ordendeplay(PLAY)
Ordendeavancerpido(FW).
Habilitacindeltemporizador(Enable)
Elordendelasentradasysalidaseneldiagramaserelsiguiente(figura16.2).
entradas
P T1s
Estado
Play FW Enable
Salidas
Figura 16.2: Orden de entradas y salidas en la representacin de la mquina de estados
FjatequeesunamquinadeMoore,porloquelassalidasestnenelpropioestado.
InicialmentepartimosdelestadoINICIAL,endondePLAY='0'y Imposible
X 1
FW='0',escomoestarenpause.Enesteestadoelcontadorest
0 0
deshabilitado,ynosmantendremosaquhastaquesepulse P
(figura16.3).
INICIAL
Comoelcontadorestdeshabilitado,nuncallegarlasealde 0 0 0
quehapasadounsegundo(T1s),porloquesiempresercero.
Figura 16.3: Estado inicial
0 0
1 0
INICIAL ESP1S
0 0 0 0 0 1
habilitamos la cuenta
Figura 16.4: Transicin a un estado de espera
Enesteestadodeespera(ESP1S),esperaremosaque(figura16.5):
O bien llegue el final de cuenta sin haber soltado el pulsador (ha pasado ms de un
segundo)yentonceshayqueiralavancerpido(FW).
Obiensesuelteelpulsadorantesdelfindecuenta,yentonceshayqueiralPLAY
Podemos decir que es prcticamente imposible que se suelte el pulsador en el mismo
instante en el que se termina la cuenta. Sin embargo, en tal caso optaremos por darle
prioridadalplay(noestespecificado)
Sinoocurrenadadeloanteriornosmantendremosendichoestado.Estoes,sinoseha
soltadoelpulsador(P='1')ynosehallegadoalfindecuenta(T1s='0').
En Inicial: 1 0
Imposible
X 1
0 0
1 0 ESP1S prcticamente imposible que
0 0 1 sean 0 1 en ese instante
INICIAL 1 1
0 0 0 0 X
PLAY FW
1 0 0 0 1 0
Figura 16.5: Transicin a estado de reproduccin o avance
Estandoen PLAYnopuedellegarelfindecuentaporqueestdeshabilitadoelcontador.Y
nosmantendremosenesteestadomientrasnosevuelvaapulsarP.
Estando en FW no puede llegar el fin de cuenta porque est deshabilitado el contador. Y
nosmantendremosenesteestadomientrasnosesuelte P.Estasdosposibilidadessehan
aadidoenlafigura16.6.
En INICIAL 1 0
imposible
X 1
0 0
1 0 ESP1S
0 0 1
INICIAL 1 1 En PLAY y FW:
0 0 0 0 X Imposible
X 1
PLAY FW
1 0
1 0 0 0 1 0
0 0
Figura 16.6: Estado de reproduccin y avance
EstandoenFWcuandosesuelteelpulsadorP,elsistemavaalPLAY(figura16.7)
En INICIAL 1 0
imposible
X 1
0 0
1 0 ESP1S
0 0 1
INICIAL 1 1 En PLAY y FW:
0 0 0 0 X Imposible
X 1
PLAY 0 0 FW
1 0
1 0 0 0 1 0
0 0
Figura 16.7: Transicin desde el estado de avance al estado de reproduccin
A este estado le llamamos ESP1S2 (espera un segundo, 2). Podemos decir tambin que es
prcticamenteimposiblequeenelmismoinstantequesoltemoselpulsador(P='0')haya
justoterminadolacuenta(T1S='1').EnestehipotticocasodecidimosiralestadoINICIAL
(haberidoalestadoFWhubiesesidoigualmentevlido).
Enlafigura16.8semuestraeldiagramafinaldelamquinadeestados.
En INICIAL 1 0
imposible
X 1
0 0
1 0 ESP1S
0 0 1
En PLAY y FW:
INICIAL 1 1 Imposible
0 0 0 0 X X 1
se suelta P PLAY 0 0 FW
1 0
0 X
antes del 1 0 0 0 1 0
segundo 1 0
ESP1S2
0 0
1 0 1
se mantiene
1 1
se mantiene P pasado el
el play segundo
1 0
prcticamente imposible que
sean 0 1 en ese instante
Figura 16.8: Diagrama final de la mquina de estados
Moore: slo
dependen del
estado
Estado Estado
actual Entradas Salidas siguiente
t+1 t+1 t+1
Q2 Q1 Q0 P T1s Pl FW En Q2 Q1 Q0
0 0 0 0 0 0 0 0 0 0 0
Inicial 0 0 0 0 1 0 0 0 X X X condiciones imposibles
0 0 0 1 0 0 0 0 0 0 1
0 0 0 1 1 0 0 0 X X X condiciones imposibles
0 0 1 0 0 0 0 1 0 1 1
Esp1s 0 0 1 0 1 0 0 1 0 1 1
0 0 1 1 0 0 0 1 0 0 1
0 0 1 1 1 0 0 1 0 1 0
0 1 0 0 0 0 1 0 0 1 1
0 1 0 0 1 0 1 0 X X X condiciones imposibles
Fw
0 1 0 1 0 0 1 0 0 1 0
0 1 0 1 1 0 1 0 X X X condiciones imposibles
0 1 1 0 0 1 0 0 0 1 1
0 1 1 0 1 1 0 0 X X X condiciones imposibles
Play 0 1 1 1 0 1 0 0 1 0 0
0 1 1 1 1 1 0 0 X X X condiciones imposibles
1 0 0 0 0 1 0 1 0 0 0
1 0 0 0 1 1 0 1 0 0 0
Esp1s2 1 0 0 1 0 1 0 1 1 0 0
1 0 0 1 1 1 0 1 0 1 0
1 X 1 X X X X X X X X
Estados imposibles 1 1 0 X X X X X X X X
Tabla 16.2: Tabla de estados siguientes y salidas
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)
Ahora,nosfijamosenlatabladelatabla16.2paraverencadacasoqutransicioneshayy
enconsecuencia,quentradasnecesitamos.Enlatabla16.4tenemosloquenospideeste
apartado.
De toda la tabla 16.4 nos piden la ecuacin simplificada para la salida PLAY. Para ello
realizamosKarnaugh.PorserdeMoore,lasentradasnohacenfalta(sesimplificaran).En
lafigura16.9semuestraeldiagramadeKarnaughylaecuacindelasalidaPLAY.
Q1-Q0
PLAY
00 01 11 10
0 0 0 1 0 PLAY = Q2 + Q1 Q0
Q2
1 1 X X X
Q2
Q1 Q0
Figura 16.9: Diagrama de Karnaugh y ecuacin de la salida Play
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;
Temporizador MaqEstados
P+1S PLAY
P FW
P-1S
Clk Reset Clk Reset
Clk
Reset
Sinembargo,fjatequeelprimerbloque(elllamadotemporizador)esmuchomsqueun
temporizador. Es una mquina de estados. Por lo tanto, al hacerlo de esta manera se
debendefinirlasdosmquinasdeestados:
Elesquematendraqueserelmostradoenlafigura16.11(osimilar).
MaqEstados1 MaqEstados2
P+1S PLAY
P
P-1S FW
Clk Reset P-1S Clk Reset
Temporizador
Enable F1S
Clk Reset
Clk
Reset
Ha pasado un segundo con el pulsador presionado.
Si mantengo pulsado, cada segundo que pase
volver a activarse, pero me da igual
Figura 16.11: Diagrama de bloques ms detallado de la solucin alternativa
entradas
mquinasdeestados.
Estado
Laprimeramquinadeestadossemuestra P+1S P-1S
en la figura 16.13. La interpretacin de las
entradas y salidas la tenemos en la figura Salidas
16.12. Figura 16.12: Orden de entradas y salidas en la
representacin de la primera mquina de estados
REPOSO ESP1S
0 0 0 0 Ha soltado el pulsador. Si
lo suelta a la vez que ha
Slo estamos un ciclo de
X X 0 X llegado el segundo,
reloj en MENOS1S (P- tambin consideramos que
MENOS1S
1S='1'), nos vamos 1 1 lo ha soltado, por eso 0 X
directamente a reposo. 0 1
Podramos considerar que:
- F1S no puede ser 1 1 X
- P no puede ser 1 (no hay 0 X
rebotes y no es posibles
MAS1S
presionar tan rpido el 1 0 Nos quedamos aqu hasta
pulsador)
que suelte el pulsador. Nos
da igual recibir F1S
Figura 16.13: Diagrama de la primera mquina de estados de la solucin alternativa
EsimportantenotarquelasealP-1Sesactivaduranteunslociclodereloj,mientrasque
laseal P+1Sestactivatodoeltiempoqueestpulsado Papartirdequehapasadoun
segundo.
Lasegundamquinadeestadossemuestraenla entradas
0 0
0 0
0 1
INIC 0 1 PLAY
0 0 1 0
0 0
La entrada 1 0 1 0
1 1 FF
es imposible
para todos 0 1
los estados 1 0
Figura16.15:Diagramadelasegundamquinadeestadosdelasolucinalternativa
17.1. Enunciado
Paraelejerciciodelcaptulo16,ahoraqueremosmostrarpor4displaysdesietesegmentos
el estado en que estamos. Para simplificar, para este ejercicio suponemos que slo
tenemostresestados: PAUSA, PLAY, FW(avancerpido).Yqueremosmostrarlossiguientes
caracteresporlos4displayssegnelestadoenqueestemos.
En Pausa En Play En avance rpido
PAUS PLAY FF
Figura 17.1: Texto que deben de mostrar los displays de siete segmentos
prcticas.Estoes,tenemos4nodosquecontrolanelencendidode F G B
cadaunodelosdisplays:AN3,AN2,AN1,AN0.Recuerdaquefuncionana E C
D
nivelbajo.Ytenemos7puertosparalossietesegmentos(SA, SB, SC,
Figura 17.2:
SD,SE,SF,SG),yquetambinfuncionananivelbajo.
Segmentos del display
Recuerda que slo tenemos 7 puertos para todos los segmentos y no 7x4=28 segmentos.
Por lo tanto, debes usar el mismo segmento para los cuatro displays (tal como lo hemos
hechoenprcticas).
Lasentradasysalidasdelcircuitosemuestranenlafigura17.3.Elrelojdelcircuito(Clk)
vaa10MHz.
Display
4
estado_actual AN(3..0)
(PAUSA, PLAY,FF) 7
SEG(6..0)
Clk
Reset
(10MHz)
Reset
Figura 17.3: Esquema del circuito
Sepide:
a) Realizar el esquema interno del circuito, indicando los bloques y explicando su
funcionamiento.
b) RealizarelmodeloVHDLdelaarquitecturacircuito
17.2. Solucin
Laprcticadelcontadorautomticoylaexpendedora(apartado12.2)sonsimilaresaeste
circuito.Laexplicacindetalladadecmohacerestecircuito(multiplexareneltiempo)se
encuentraenlaprcticadelcontadorautomtico(apartado6.3.2).
17.2.1. Esquema interno del circuito
Elesquemadelcircuitosemuestraenlafigura17.4
Codificacin de estados:
P.ej: "P" : Pausa 00
"0001100" Play 01
GFEDCBA FF 10
" " 10 SEG3 " " 10 SEG2 "F" 10 SEG1 "F" 10 SEG0
"1111111" "1111111" "0001110" "0001110"
estado_actual
Conta1ms Conta4ms
SEG0 00
T1ms
Cuenta4ms(1..0)
4 SEG1 01
Clk 7 SEG
Reset
(10MHz) Reset
SEG2 10
Reset
Reset
SEG3 11
"1110" 00
Esto es un
decodificador "1101" 01
4 AN
"1011" 10
"0111" 11
Figura 17.4: Esquema del circuito de visualizacin
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
--- 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
18.1. Enunciado
Queremosrealizarelcontroldeunrobotrastreador,estoes,
un coche que sigue una lnea negrasobre un suelo blanco. RI: receptor RD: receptor
Para ello disponemos de un coche elctrico de juguete y izquierdo derecho
queremosrealizarelcircuitoelectrnicoquecontroleelgiro
delcoche(derechaoizquierda). Rueda
delantera
Para saber si el coche est sobre la lnea negra o no, se izquierda
ponendosdetectoresdeinfrarrojosenlapartedelanteradel
coche (ver figura de la derecha). Los detectores de
infrarrojos estn juntos y centrados en el alern delantero
delcoche.ElreceptorqueestalaizquierdaselellamarRI Rueda
yeldeladerechaRD. trasera
izquierda
Sinentraraexplicarelfuncionamientodelosdetectoresde
infrarrojos,lonicoquenosimportaparaesteproblemaes
que los detectores dan un cero cuando estn sobre la lnea
negra (ya que la luz emitida no se refleja) y devuelven un Figura 18.1: Coche visto desde
arriba
unocuandoestnsobreelsueloblanco(porquesereflejala
luz).
As que usaremos las salidas de los detectores de infrarrojos como entradas de nuestro
sistemadecontrol.Porlotanto,nuestrosistemadecontroltendrdosentradas: RIy RD,
queindicanlosvaloresdevueltosporlosreceptoresizquierdoyderechorespectivamente.
Como se muestra en la figura de la derecha, nuestro RI GI
sistema tendr dos salidas: GI y GD, que dan la orden de
RD GD
girar a la izquierda o derecha, respectivamente. Por
ejemplo: GD='1'serlaordendegiraraladerecha.Silas Clk
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.
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.
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)= (1,1)Nosedebeponernunca
GI='0' GD='1' GI='0' GD='1' GI='0' GD='0' GI='1' GD='0' GI='1' GD='0'
A B C D E
Ahora hay que realizar el diagrama de transicin de estados. Recordamos que en este
apartadohayquerealizarlocomounamquinadeMoore.
Elordendelasentradasysalidaseneldiagramaserelsiguiente(figura18.5):
entradas
RI RD
Estado
GI GD
Salidas
Figura 18.5: Orden de entradas y salidas en el diagrama de estados
FjatequeesunamquinadeMoore,porloquelassalidasestnenelpropioestado.
Inicialmentepartimosdelestado CENTRO,endonde RI='0'y RD='0',ya queelenunciado
dicequealprincipiosecolocaelcochesobrelalnea.Enesteestadosemantieneelcoche
singirar,hastaqueunodelosreceptorescambiea1.
En Centro:
Imposible
Imposibl e
Se sale por 1 1 Se sale por
la izquierda la derecha
0 0
1 0 0 1
CENTRO
0 0
Figura 18.6: Estado inicial y sus transiciones
Estando en CENTRO, si el detector RI se pone a uno significa que nos salimos por la
izquierda(verfigura18.4.B).Yporlotanto,hayquegiraraladerecha.Locontrarioocurre
sieldetector RDseponea1.Loquenopuedeocurrirnuncaesqueestandosobre lalnea
ambos receptores se pongan a la vez los dos a uno, pues primero se debe poner uno y
luego el otro. Para ello creamos un estado IZQ al que vamos cuando desde CENTRO el
receptor RI se pone a 1. En este estado, el giro se hace a la derecha. Saldremos de este
estadocuandohayamoscorregidoladesviacinyvolvamosalcentro(ambosreceptoresa
0).Lomismoocurresielcochesedesvaaladerecha.
En Centro:
Imposible
1 1
1 0 0 0 0 1
1 0 0 1
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).
1 0 0 0 0 1
1 0 0 1
1 1 0 1
1 0 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.
1 X 0 0 X 1
1 0 0 1
Figura 18.9: Diagrama de estados final reducido
Estediagramanosepuedesimplificarmsyaquecadaestadotieneunasalidadistinta.
DisendolocomomquinadeMealyssepodrasimplificarms(peronosepedaenel
examen).
18.2.2. Tabla de estados siguientes y salidas
Antesdenadatenemosquecalcularelnmerodebiestablesque Estado Q1 Q0
necesitamosyasignarlesunosvalores.Comotenemos3estados, CENTRO 0 0
nos vale con dos biestables. Asignaremos los mismos valores de IZQ 0 1
los estados que de las salidas, pero vale cualquier otra DCHA 1 0
combinacin.Laasignacinsemuestraenlatabla18.1. Tabla 18.1: Codificacin
de estados
Latabladeestadossiguientesysalidassemuestraenlatabla18.2.
Moore: Slo
dependen del estado
Estado Estado
actual Entradas Salidas siguiente
t+1 t+1
Q1 Q0 RI RD GI GD Q1 Q0
0 0 0 0 0 0 0 0
0 0 0 1 0 0 1 0
CENTRO
0 0 1 0 0 0 0 1
0 0 1 1 0 0 X X condiciones imposibles
0 1 0 0 0 1 0 0
0 1 0 1 0 1 X X condiciones imposibles
IZQ
0 1 1 0 0 1 0 1
0 1 1 1 0 1 0 1
1 0 0 0 1 0 0 0
1 0 0 1 1 0 1 0
DCHA
1 0 1 0 1 0 X X condiciones imposibles
1 0 1 1 1 0 1 0
Sin usar (imposible) 1 1 X X X X X X
Tabla 18.2: Tabla de estados siguientes y salidas
Latabladeexcitacindelosbiestableslapodramoshaberrellenadoenlatabla18.2.Para
saberlasecuacionesdelasentradasdelosbiestablesnecesitamossaberqunecesitamos
para lograr cada una de las transiciones. Como nos piden hacerlo con biestables JK,
ponemossutabla,yapartirdeellaobtenemoslasentradasJyKparalascuatroposibles
transiciones.
Ahoranosfijamosenlatabladelosestadossiguientes(tabla18.2)paraverencadacaso
qutransicioneshayyquvaloresenlasentradasdelosbiestablesJKnecesitamos.
Moore: Slo
dependen del estado Entradas en los
biestables para
Estado Estado conseguir las
t+1
actual Entradas Salidas siguiente transiciones QiQi
t+1 t+1
Q1 Q0 RI RD GI GD Q1 Q0 J1 K1 J0 K0
0 0 0 0 0 0 0 0 0 X 0 X
0 0 0 1 0 0 1 0 1 X 0 X
CENTRO
0 0 1 0 0 0 0 1 0 X 1 X
0 0 1 1 0 0 X X X X X X
0 1 0 0 0 1 0 0 0 X X 1
0 1 0 1 0 1 X X X X X X
IZQ
0 1 1 0 0 1 0 1 0 X X 0
0 1 1 1 0 1 0 1 0 X X 0
1 0 0 0 1 0 0 0 X 1 0 X
1 0 0 1 1 0 1 0 X 0 0 X
DCHA
1 0 1 0 1 0 X X X X X X
1 0 1 1 1 0 1 0 X 0 0 X
Sin usar (imposible) 1 1 X X X X X X X X X X
Tabla 18.4: Tabla de excitacin de los necesarias para obtener una transicin en biestables J-K
Las ecuaciones de las salidas son inmediatas porque las hemos hecho coincidir con los
biestablesdelosestados.Aspues:
GI = Q1
GD = Q0
ParalasentradasdelosbiestablesutilizamoslosmapasdeKarnaugh.Semuestranenla
figura18.10,seincluyenlasK,aunquenosepedan.
RI-RD
RI-RD J0
J1 00 01 11 10
00 01 11 10
00 0 0 X 1
00 0 1 X 0
01 X X X X
01 0 X 0 0 Q1-Q0
Q1-Q0 11 X X X X RIRD
11 X X X X
10 0 0 0 X
10 X X X X
J1= RIRD J0= RIRD
RIRD
RI-RD RI-RD
K1 K0
00 01 11 10 00 01 11 10
00 X X X X 00 X X X X
01 X X X X 01 1 X 0 0
Q1-Q0 Q1-Q0
11 X X X X 11 X X X X
10 1 0 0 X 10 X X X X
K0= RI
K1= RD RI
RD
Figura 18.10: Mapas de Karnaugh y ecuaciones de las entradas de los biestables
19.1. Enunciado
Sequiererealizarelcircuitodeunatecladetelfonomvilquefuncionecomocuandose
escriben mensajes de texto (sms). Para simplificar, se va a realizar el circuito para una
nicateclaydichateclaservirparaescribirloscaracteres:A,B,2(parasimplificarhemos
eliminadolaletraCyotroscaracteres).
Elfuncionamientoresumidodelcircuitoeselsiguiente:
InicialmentenosemuestranadahastaquesepulsalateclaP.
SiquieroescribirlaletraA,debopulsarPunavez.
Si quiero escribir la letra B, debo pulsar P dos veces rpidamente. En la pantalla se
muestraAalpulsar laprimeravez,ycuandovuelvoapulsarsemuestraB.Sitardase
muchoenpulsarlasegundavez,sefijaraelvalordeA(ysevolveraaempezarpara
escribirenlasiguienteposicin).
SipulsoPtresvecesrpidamenteobtengoelnmero2(recuerdaquehemosquitadola
letra C para simplificar). Cada vez que he pulsado P, se habr mostrado el carcter
correspondientealasecuencia:AB2
Si pulsase P cuatro veces rpidamente obtendra de nuevo la letra A. Ya que la
secuenciaescircular:AB2AB2A....Obteniendoelcarctercorrespondientesegn
elnmerodevecesquepulse.
Si despus de haber pulsado P, no vuelvo a pulsar P durante un intervalo de un
segundo o ms, se fija el ltimo carcter que se tenga, y a continuacin se vuelve al
estadoinicial(paraescribirenlasiguienteposicin).
Encualquierestado,simantengoPpulsadoduranteunsegundooms,sefijaelvalor
numrico (2) y al soltar P se vuelve al estado inicial (para escribir en la siguiente
posicin).
Acontinuacinsemuestranlasentradasysalidasdelcircuito:
Entradas(ademsdelrelojyreset): A
B
P: Pulsador de la tecla del mvil (recuerda que en
P
estemvilparasimplificarslotenemosunatecla) DOS
LISTO
Salidas: Clk
A:MostrarelcarcterA Reset
Figura 19.1: Esquema de
B:MostrarelcarcterB
entradas y salidas del sistema
DOS:Mostrarelnmero2 de control
LISTO:Indicaqueelcarcterindicadoporunadelassalidas(A, B, DOS)estlistopara
fijarlo, y se deber pasar a la siguiente posicin. Slo est activa durante un ciclo de
reloj.
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.
19.2. Solucin
19.2.1. Bloques internos del circuito
Para realizar este circuito necesitamos una mquina de estados y un temporizador que
nos permitir medir si ha transcurrido un segundo despus de pulsar la tecla P y si se
mantienelateclapresionadadurantemsdeunsegundo.
Elcircuitotienedosbloques:lamquina
MaqEstados
deestadosyuntemporizador. A A
Delamquinadeestadossaleunaseal B B
P P
DOS DOS
intermedia E que va al temporizador. T LISTO LISTO
Esta seal funciona como habilitacin E
Clk Reset
(enable)demodoquecuandoEescero,el
T
contador se pone a cero y no cuenta, Temporizador
E
mientras que cuando E es uno, se
T E
habilitalacuenta.
Clk Clk Reset
LasealTindicacundohatranscurrido
Reset
un segundo desde que E se ha
Figura 19.2: Bloques internos del circuito
mantenidoactivo(E='1').
19.2.2. Diagrama de estados
Paraeldiagramadeestadosusaremoselsiguienteordendeentradasysalidas
entradas Salidas
entradas Salidas
P T / A B D L E
P T / A B DOS LISTO E
Estado
Estado
Figura 19.4: Orden de entradas y salidas en el
Figura 19.3: Orden de entradas y salidas en el
diagrama de estados. Salidas con iniciales para
diagrama de estados
simplificar
Como hay muchas salidas, para que el diagrama sea ms fcil de entender, en vez de
ponerunos,sevanaponerlasinicialesdelasseales(figura19.4).Loscerossepondrn
comoceros.FjatequeesunamquinadeMealy.
Empezamosahacerdeldiagramasegnlasinstrucciones:
PartimosdelestadoINICIAL,dondeesperamosaquese En INICIAL
pulse P, todas las salidas estn a cero, incluida la Imposible
habilitacin del contador, porque ahora no hay que T='1'
X 1
contarsegundos(elusuariopuedetardarloquequiera
enescribiruncarcter). 00/00000
Como la habilitacin del temporizador est a cero
(E='0'),serimposiblequeTseauno. P0/A000E
INICIAL
Nosquedamosenelestado INICIALhastaquesepulse
P,cuandoestoocurretenemosqueactivarlasalida Ay Figura 19.5: Estado inicial
eltemporizador(E='1')
CuandosehapulsadoP,tenemosqueverdurantecuntotiemposepulsaP:
Sisepulsaduranteunsegundooms,indicaquetenemosquefijarelnmero2.
Sisepulsamenosdeunsegundo,hemoselegidolaletraA,perotenemosqueseguir
haciendocomprobaciones.Estoocurrecuandolasentradasson(P,T),estoes,latecla
siguepresionadayacabadellegarlasealdequehapasadounsegundo(T).
Sinosecumplenningunadeestasdos,seguimosesperando,ylasentradasparaesto
son(P,0)
Para comprobar esto, creamos un estado ESP_S_A (ESPera a Soltar, A) que indica que
estamos esperando a que se suelte la tecla y que recuerda que la letra que se est
mostrandoeslaA.
En INICIAL
Imposible
T='1'
X 1 se va mostrando A por pantalla
00/00000 P0/A000E
Cuando se fija el nmero (se presiona T durante un segundo o ms), la salida LISTO, se
debeponeraunoduranteuncicloderelojyluegosedebeesperaraquesesueltelatecla
(estado ESP_S).Sinohacemosestaespera,enelestado INICIALconsideraramosquese ha
vueltoapresionarP,yesoseraunerrorporqueiramosdenuevoalestadoESP_S_A.
En INICIAL
Imposible
00/00000 P0/A000E
T='1'
X 1
P0/A000E 00/A0000
INICIAL ESP_S_A
PT/00DL0
00
P0/00000
se fija el dos (un slo ciclo)
/0
En ESP_S
00
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
presionar el pulsador con solo un ciclo de reloj entre medias (y las teclas no tienen
rebotes).
En INI
INICIAL
CIAL 00/00000 P0/A000E
Imposible
Im posible
T='1'
P0/A000E 00/A0000
X 1 INICIAL ESP_S_A
0T/00DL0 PT/00DL0
En ESP_S
00
P0/00000
Imposible
/0
Caso
00
improbable.
T='1'
00
X 1
ESP_S Se fija el dos
(un slo ciclo)
Figura 19.8: Se fija el dos en el caso improbable que suelte la tecla a la vez que termina la temporizacin
Ahora,estandoenelestado ESP_S_A,estoes,elpulsadorpresionadoymostrandolaletra
A.Sisesueltalateclaantesdequepaseunsegundo,entradas:(0,0).Tenemosque:
EsperaraversisevuelveapresionarPantesdeunsegundoestadoESP_P_A
Para contabilizar los segundos, tenemos que reiniciar el contador poniendo su
habilitacinaceroduranteelcambiodeestado(E='0').
Se ha soltado P antes de un segundo
A se sigue mostrando
E='0' para reiniciar el temporizador
0T/00DL0 PT/00DL0
En ESP_S ESP_S_A (ESPera a Presionar, A)
00
P0/00000
Imposible esperamos a ver qu pasa antes:
/0
0
- se presiona P
00
T='1'
- pasa un segundo
0
X 1
ESP_S
Figura 19.9: Se suelta la tecla antes de que pase un segundo: nueva espera
Ahora, estando en el estado ESP_P_A, esto es, el pulsador sin presionar y mostrando la
letraA,puedepasar:
Queantesdequepaseunsegundosevuelvaapresionar P.Enestecasovolvemosal
estadoaESP_S_B(similaraESP_S_A)
Quepaseunsegundosinvolverapresionar P,entradas (0,T)enestecasosefijala
letraA
Enelcasoimprobablequeamboseventosocurransimultneamente,elenunciadodice
quesefijelaletraA.Lasentradasseran(P,T),paraestecaso,podemosirnosalestado
inicial(comoenelcasoanterior,ydeestenosiramosenelsiguienteciclodereloja
ESP_S_A(puesPvaaseguirpresionadayaquenolapodremospulsarduranteunnico
ciclodereloj),onospodemosirdirectamentealestado ESP_S_A (loquesuponeponer
unaflechams).Eneldiagramahemoselegidolaprimeraopcin(ambassonvlidas).
Se fija A
0T/A00L0 Se reinicia
PT/A00L0 temporizador
P0/00000 P0/0B000
Imposible
/0
00
T='1'
Se muestra B
00
X 1
ESP_S ESP_S_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
0T/00DL0 PT/00DL0
En ESP_S
00
P0/00000 P0/0B000
Imposible
/0
0T/00DL0
00
T='1'
00
X 1 PT/00DL0
ESP_S ESP_S_B P0/0B00E
00/0B000 Se ha soltado
P antes de un
segundo
Figura 19.11: Se ha soltado P antes de que pase un segundo
Ahora,estandoenelestadoESP_P_B,estoes,elpulsadorsinpulsarymostrandolaletraB,
puedepasar:
(P,0):Sehapulsadoantesdequepaseunsegundo:SemuestraeldosESP_S_2
(0,0):NohapasadounsegundoynosehapulsadoPSeguimosesperando
(0,T):HapasadounsegundoypulsadoP FijamoslaB,yvamosalestado:INICIAL
(P,T): Caso improbable de pulsar justo en el segundo, lo tratamos como el anterior
(tambinpodramosirnosaESP_S_A).
0T/A00L0
PT/A00L0
P0/00000 P0/0B000
Imposible
/0
0T/00DL0
00
T='1'
00
X 1 PT/00DL0
ESP_S ESP_S_B P0/0B00E
00/0B000
0T/0B0L0
PT/0B0L0
ESP_P_B 00/0B00E
Ha pasado 1 segundo
sin pulsar P (o justo
se ha pulsado en el P0/00D00
segundo) Se ha pulsado
P antes de un
segundo
Figura 19.12: En la espera a ver si se vuelve a pulsar P mostrando la B
Ylosdosestadosquequedansehacendemanerasimilar.
Slohayquetenerencuentaquedespusdel2vienelaA.Yporeso,delestado ESP_P_2
vieneESP_S_A.
Eldiagramadeestadosfinalsemuestraenlafigura19.13.
0T/A00L0
PT/A00L0
T='1' 00
X 1 PT/00DL0
ESP_S ESP_S_B P0/0B00E
00/0B000
0T/0B0L0
PT/0B0L0
ESP_P_B 00/0B00E
PT
0T/00DL0
/0
PT/00DL0 0T
/0
0D
0D P0/00D00
L0
ESP_P_2 00/00D00 L0
ESP_S_2 P0/00D0E
00/00D0E
Figura 19.13: Diagrama de estados final
20.1. Enunciado
1. Explicarbrevementequeslametaestabilidadyporquseproduce
2. Calcularlafrecuenciamximaalaquepuedefuncionarelsiguientecircuito
A
D0 Q0 D1 Q1 S1
S0
Clk
Figura 20.1: Circuito para analizar
Teniendoencuentalassiguientescaractersticas:
TiempodepropagacinTiempodesetup Tiempodehold Frecuenciamxima
Biestables tpmax=20ns tsu=10ns th=5ns fmax=25MHz
tpmin=4ns
Puertas tpmax=10ns
lgicas tpmin=5ns
Entradas tpmax=10ns
tpmin=5ns
Tabla 20.1: Caractersticas de los componentes del circuito
20.2. Solucin
20.2.1. Metaestabilidad
Metaestabilidadesunestadoinestabledeunbiestable,enelqueelbiestablenoestaun
valor 0 1. Este estado se produce por no cumplirse los parmetros temporales del
biestable.Cuandonoserespetanlostiemposdesetupydeholddelbiestable
Veamoslasentradasdelosbiestables(D0yD1)
entradas D0 D1
salidas
A tpmax(A)+tpmax(puerta)+tsu(D0)=30ns
Q0 tpmax(D0)+tpmax(puerta)+tsu(D1)=40ns
tpmax(D1)+tpmax(puerta)+tsu(D1)=40ns
Q1 tpmax(D1)+2tpmax(puerta)+tsu(D0)=50ns
Tabla 20.2: Tiempos de propagacin mximos
Elcaminocrticotarda50ns,porlotantolafrecuenciamximaes:
1 109 1000
= Hz = 106 Hz = 20 MHz
50 ns 50 50
Como es una frecuencia menor que la frecuencia mxima de los biestables (25 MHz), la
frecuenciamximadeestecircuitoserde20MHz.
21.1. Enunciado
Delcircuitodecaptulo20(figura20.1):
1) Obtenerlatabladeexcitacindelautmata
2) Dibujareldiagramadetransicindeestados
3) EsunamquinadeMooreodeMealy?Porqu?
21.2. Solucin
21.2.1. Tabla de excitacin del autmata
Primeroobtenemoslasecuacionesdelasentradasdelosbiestablesylassalidas.
entrada
Ecuaciones Estado
Estados siguiente
D0 = A + Q1 S0 = Q0
Q1 Q0 A Q1' Q0'
S1 = Q1 0 0 0 1 1
D1 = Q0 Q1 0 0 1 1 1
0 1 0 1 1
0 1 1 1 1
A partir de las ecuaciones obtenemos el estado 1 0 0 1 0
siguiente. Como son biestables D, el valor de Q es 1 0 1 1 1
directamenteeldeldatodelbiestable(D) 1 1 0 0 0
1 1 1 0 1
Tabla 21.1: Tabla del estado siguiente
Organizamos la tabla de manera que sea ms fcil ver el estado siguiente segn la
entrada.
Estado siguiente
Estados A=0 A=1
01
01
1
X
00 0 10
00 10
0
1
X 11
11
Figura 21.1: Diagrama de transicin de estados
El ltimo apartado: es una mquina de Moore porque las salidas no dependen de las
entradas.Estosepuedededucirdirectamenteobservandoelcircuito.
22.1. Enunciado
Calcularlafrecuenciamximaalaquepuedefuncionarelsiguientecircuito
B
A
D0 Q0 D1 Q1 S1
Clk
Figura 22.1: Circuito para analizar
Teniendoencuentalassiguientescaractersticas:
Tiempodepropagacin Tiempodesetup Tiempodehold Frecuenciamxima
Biestables tpmax=25ns tsu=20ns th=10ns fmax=20MHz
tpmin=11ns
Puertaslgicas tpmax=15ns
tpmin=7ns
Entradas tpmax=50ns
tpmin=16ns
Tabla 22.1: Caractersticas de los componentes del circuito
22.2. Solucin
Veamosculeselcaminocrtico:
Salidas
Entradas D0 D1
A tpmax(A)+2tpmax(puerta)+tsu(D0)=50+215+20=
100ns
B tpmax(B)+tpmax(puerta)+tsu(D1)=50+15+20=85ns
Q0 tpmax(Q0)+3tpmax(puerta)+tsu(D0)=25+315+20=
90ns
Q1 tpmax(Q0)+tpmax(puerta)+tsu(D0)=25+15+20= tpmax(Q1)+2tpmax(puerta)+tsu(D1)=25+215+20=
60ns 75ns
ElcaminocrticovadelaentradaAalbiestableD0.Comoson100ns,lafrecuenciamxima
es
1 109
= Hz = 10 MHz
100ns 100
Como 10 MHz es una frecuencia menor que la mxima fijada por los biestables, la
frecuenciamximadelcircuitoser10MHz.
24.1. Enunciado
Delcircuitosiguiente:
B
A
D0 Q0 D1 Q1 S1
Clk
S0
Figura 24.1: Circuito para analizar
1) Obtenerlatabladeexcitacindelautmata
2) Eldiagramadetransicindeestados
3) EsunamquinadeMooreodeMealy?Porqu?
24.2. Solucin
24.2.1. Tabla de excitacin del autmata
Primeroobtenemoslasecuacionesdelasentradasdelosbiestablesylassalidas.Incluimos
latablasdeverdadparaqueluegonosseamsfcilrellenarlatabladelautmata.
Q1 A D0 Q0 B D1
D0 = A Q1 S0 = Q0 0 0 0 0 0 0
0 1 1 0 1 1
1 0 0 1 0 0
D1 = B Q0 S1 = Q1 1 1 0 1 1 0
Tabla 24.1: Tablas de verdad de las entradas de los
biestables
Apartirdelasecuacionesobtenemoslosestadossiguientessegnlasentradas:
Q1 Q0 A B Q1' Q0'
0 0 0 0 0 0 Organizamoslatablaparapoderver mejor
0 0 0 1 1 0
0 0 1 0 0 1 loscambiosdeestadosconlasentradas
0 0 1 1 1 1 entradas
0 1 0 0 0 0
0 1 0 1 0 0
Estado AB
0 1 1 0 0 1
Q1 Q0 00 01 10 11
0 1 1 1 0 1
0 0 00 10 01 11
1 0 0 0 0 0
0 1 00 00 01 01
1 0 0 1 1 0
1 0 00 10 00 10
1 0 1 0 0 0
1 1 00 00 00 00
1 0 1 1 1 0
1 1 0 0 0 0
estado estado
1 1 0 1 0 0
actual siguiente
1 1 1 0 0 0
1 1 1 1 0 0 Tabla 24.3: Tabla de excitacin del autmata
Tabla 24.2: Tabla del estado siguiente
Concualquieradeestastablasobtenemoslosestadossiguientesparadibujareldiagrama
deestados:
00
1X 10 01 X1
01 00 10
01 0X 00 X0 10
11 XX
11
11
Figura 24.2: Diagrama de transicin de estados
El ltimo apartado: es una mquina de Moore porque las salidas no dependen de las
entradas.Estosepuedededucirdirectamenteobservandoelcircuito).
[2] Basys,tarjetaconFPGAfabricadaporDigilent.
ManualdereferenciadelaversinE:
http://www.digilentinc.com/Data/Products/BASYS/BASYS_E_RM.pdf
H H
Pginawebdelatarjeta:
http://www.digilentinc.com/Products/Detail.cfm?NavPath=2,400,791&Prod=BASYS
H H
[3] CreativeCommons.http://creativecommons.org/
H H
Licenciadeestemanual:http://creativecommons.org/licenses/byncnd/3.0/
H H
[4] D.Jones,Steppingmotortypes.http://www.cs.uiowa.edu/~jones/step/index.html
H H
[5] DepartamentodeTecnologaElectrnica,UniversidadReyJuanCarlos.http://gtebim.es H H
[6] DigilentInc.http://www.digilentinc.com/
H H
[7] E.Carletti,Motorespasoapaso,caractersticasbsicas.http://robots H
argentina.com.ar/MotorPP_basico.htm H
[8] ElectrnicaDigitalII.http://gtebim.es/docencia/EDII
H H
[9] Ericsson,IndustrialCircuitsApplicationNote:StepperMotorBasics
http://library.solarbotics.net/pdflib/pdf/motorbas.pdf
H H
[10] F.Machado,N.Malpica,J.Vaquero,B.Arredondo,S.Borremeo,Aprojectorientedintegral
curriculumonElectronicsforTelecommunicationEngineers,EDUCONConference,
Madrid,abril2010
[11] F.Machado,S.Borromeo,N.Malpica,DiseodigitalavanzadoconVHDL,Ed.Dykinson,
2009.
[12] F.Machado,S.Borromeo,N.Malpica,DiseodigitalconesquemticosyFPGA,Ed.
Dykinson,2009.
[13] IEEE,InstituteofElectricalandElectronicsEngineers.http://www.ieee.org H H
[14] IEEEStandardforVHDLRegisterTransferLevel(RTL)Synthesis,IEEEStd1076.6
[15] ISEWebPackdeXilinx.http://www.xilinx.com/tools/webpack.htm
H H
Paradescargarversionesantiguas:
http://www.xilinx.com/webpack/classics/wpclassic/index.htm
H H
[16] Minebea.http://www.minebea.co.jp/english/index.html
H H
[17] Mitsumi.http://www.mitsumi.co.jp/latest/Catalog/indexuse/index_e.html
H H
[18] Opencores.http://www.opencores.org
H H
[19] Pegasus,tarjetaconFPGAfabricadaporDigilent.Manualdereferencia:
http://www.digilentinc.com/Data/Products/PEGASUS/PEGASUSrm.pdf
H H
Pginawebdelatarjeta:
http://www.digilentinc.com/Products/Detail.cfm?NavPath=2,398,537&Prod=PEGASUS
H H
[20] SankenElectric,SemiconductorsGeneralCatalog.Abril2010.Disponible:
http://www.sankenele.co.jp/en/prod/library/lib_semicon_all.htm
H H
Elapartadodetransistoresestdisponibleen:
http://www.sankenele.co.jp/en/prod/library/images/get_pdf.gif
H H
[21] ShinanoKenshi.StepperMotors.http://www.shinano.com/xampp/steppermotors.php
H H
[22] Solarbotics.StepperMotors.
http://www.solarbotics.net/library/pieces/parts_mech_steppers.html
H H
[23] UniversidadReyJuanCarlos,http://www.urjc.es H H
[24] Wikipedia,Motorpasoapaso,http://es.wikipedia.org/wiki/Motor_paso_a_paso
H H
[25] Xilinx,http://www.xilinx.com
H H
[26] XilinxUniversityProgramVirtexIIProDevelopmentSystem.Hardwarereferencemanual.UG069
v1.09marzo2005.http://www.xilinx.com/univ/xupv2p.html
H H
[27] XSTUserGuide9.2i.Xilinx,http://ww.xilinx.com/itp/xilinx92/books/docs/xst/xst.pdf
H H