Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Diseno de Circuitos Digitales Con VHDL v1.01
Diseno de Circuitos Digitales Con VHDL v1.01
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
DiseodecircuitosdigitalesconVHDL
LosAutores
ndice
ndice............................................................................................................................................................ 1
Lista de acrnimos ....................................................................................................................................... 5
ndice de figuras ........................................................................................................................................... 6
ndice de cdigo VHDL................................................................................................................................. 9
ndice de tablas .......................................................................................................................................... 11
1. Introduccin ............................................................................................................................................ 13
2. Encender un LED ................................................................................................................................... 15
2.1. Tarjetas Pegasus y Basys..................................................................................................................................... 15
2.1.1. La tarjeta Pegasus ....................................................................................................................................... 15
2.1.2. La tarjeta Basys ........................................................................................................................................... 16
2.2. Cmo encender un LED........................................................................................................................................ 17
2.3. Diseo del circuito ................................................................................................................................................. 18
2.4. Sntesis e implementacin del circuito .................................................................................................................. 24
2.5. Programacin de la FPGA .................................................................................................................................... 26
2.5.1. Programacin de la tarjeta Pegasus............................................................................................................ 26
2.5.2. Programacin de la tarjeta Basys ................................................................................................................ 29
2.6. Cambiar el tipo de FPGA de un proyecto.............................................................................................................. 31
2.7. Trabajar desde varios ordenadores con un mismo proyecto ................................................................................ 32
2.8. Conclusin............................................................................................................................................................. 33
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
8. Simulacin .............................................................................................................................................. 77
8.1. Ejemplo sencillo .................................................................................................................................................... 78
8.2. Ampliacin............................................................................................................................................................. 86
8.3. Conclusiones......................................................................................................................................................... 86
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
ndice de figuras
Figura6.7:Esquemadelprocesocontadordedcimas ..................................................................................................................... 66
Figura6.8:Codificadorparacontrolarlosnodosdelosdisplays.................................................................................................. 67
Figura6.9:MultiplexorqueseleccionalacifraBCDsegnlaconfiguracindeosinterruptores.............................................. 67
Figura6.10:Esquemacompletodelcronmetroconvisualizacinmanual ................................................................................... 68
Figura6.11:Cronogramadelasealdeunamilsimadesegundoquequeremosobtener ...................................................... 68
Figura6.12:Multiplexadoeneltiempoparamostrarlosdisplays .................................................................................................. 69
Figura6.13:Esquemacompletodelcronmetroconvisualizacinautomtica............................................................................. 70
Figura6.14:Otraalternativaalesquemadelafigura6.9 ................................................................................................................... 71
Figura6.15:Diagramadeestadosdelcontadorascendente/descendentequevamosarealizar ............................................... 71
Figura6.16:Esquemadelcontadorqueimplementaremos.............................................................................................................. 72
Figura7.1:Esquemadelregistrodedesplazamientoalaizquierdaconcargaparalelo ............................................................. 73
Figura7.2:Desplazamientoalaizquierda........................................................................................................................................... 74
Figura7.3:Rotacinalaizquierda........................................................................................................................................................ 75
Figura7.4:Esquemadelcircuitoderotacinautomtica ................................................................................................................. 76
Figura8.1:Esquemageneraldeunbancodepruebas....................................................................................................................... 78
Figura8.2:Puertosdeentradaysalidadelcontadorquevamosaprobar .................................................................................... 78
Figura8.3:SeleccindenuevafuentedetipoVHDLTestBench.................................................................................................... 79
Figura8.4:CdigocreadoautomticamenteporelISEparaelbancodepruebas....................................................................... 80
Figura8.5:Distintaspartesdelareferencia(instanciacin)auncomponente........................................................................... 81
Figura8.6:Periododelasealdereloj................................................................................................................................................. 81
Figura8.7:Seleccindelentronoparasimulacin ............................................................................................................................. 82
Figura8.8:Entronoparasimulacin..................................................................................................................................................... 83
Figura8.9:Cambiodelaspropiedadesdelproyecto......................................................................................................................... 84
Figura8.10:SeleccindelISESimulator .............................................................................................................................................. 84
Figura8.11:Arranquedelasimulacin ............................................................................................................................................... 85
Figura8.12:Resultadodelasimulacin............................................................................................................................................... 85
Figura8.13:Visualizacindecuentacomodecimalsinsigno....................................................................................................... 86
Figura9.1:Esquemageneraldelosprocesosdeunamquinadeestados .................................................................................... 87
Figura9.2:BloquesdelcircuitoparaencenderyapagarunLED.................................................................................................... 88
Figura9.3:DiagramadetransicindeestadosparaencenderunLEDconunpulsador............................................................ 88
Figura9.4:Diagramadeestadosdeldetectordeflancos(Moore)................................................................................................... 90
Figura9.5:Cronogramadecuandollegalasecuencia0101.............................................................................................................. 91
Figura9.6:Diagramadeestadosmodificado ...................................................................................................................................... 91
Figura9.7:EsquemadelcircuitodelmovimientoalternativodelosLED ..................................................................................... 92
Figura9.8:Diagramadetransicindeestados ................................................................................................................................... 93
Figura10.1:Esquemadelcircuitodelaclaveelectrnica ................................................................................................................. 96
Figura11.1:EsquemadelospulsadoresenlaplacaPegasusyenlaplacaBasys ........................................................................ 97
Figura11.2:Cronogramadelasalidadeldetectordeflancos(PULSO_BTN)cuandohayrebotesenlaentrada(BTN) ........ 97
Figura11.3:Cronogramadelasalidadelfiltroantirrebotes(FILTRO_BTN)cuandohayrebotesenlaentrada(BTN) ........ 98
Figura11.4:Esquemadelcircuitoquefiltralosrebotesdelaentrada............................................................................................ 98
Figura11.5:Diagramadeestadosdelcircuitoquefiltralospulsos ................................................................................................ 98
Figura12.1:Esquemadepuertosdeentradaysalidadelcontroldelamquinaexpendedora ................................................ 99
Figura12.2:Esquemainternodelcircuitodecontroldelamquinaexpendedorasimple ...................................................... 100
Figura12.3:Indicacionesdelosdisplayssegnelestado............................................................................................................... 100
Figura13.1:SealPWMqueselehacambiadoelciclodetrabajo................................................................................................ 101
Figura13.2:ControldevelocidadconelPWM ................................................................................................................................ 101
Figura13.3:Los8ciclosdetrabajoposiblesconunPWMde3bitsderesolucin..................................................................... 102
Figura13.4:CircuitodepotenciaparacontrolarelmotordesdelaFPGA................................................................................... 102
Figura14.1:Conexininternadeunmotorunipolar ...................................................................................................................... 106
Figura14.2:ElterminalAatierra ....................................................................................................................................................... 106
Figura14.3:Resultadodeponeratierracadaunodelosotrostresterminales,cuandoelmotorpierdeparindicaque
eselcorrespondiente ....................................................................................................................................................... 106
Figura14.4:IdentificacindelosterminalesennuestromotorPM55L048deMinebea .......................................................... 107
Figura14.5:Secuenciadeterminalesqueseponenatierraparaobtenerelgirodelmotor ..................................................... 107
Figura14.6:Secuenciadeterminalesqueseponenatierraparaobtenerelgirodelmotorenambossentidos ................... 107
Figura14.7:BloquedecontroldemotordelaFPGA ...................................................................................................................... 108
Figura14.8:EsquemadelamquinadeestadosparaelbloquedecontroldemotordelaFPGA.......................................... 109
Figura14.9:Posibleesquemadelaelectrnicadepotenciaparamanejarelmotor ................................................................... 110
Figura14.10:Esquemadelcircuitoconoptoacopladores ............................................................................................................... 110
Figura14.11:EsquemadelcircuitousandoelcircuitointegradoSN754410.............................................................................. 111
Figura15.1:Esquemadelcircuitodepianoelectrnicobsico ...................................................................................................... 113
Figura15.2:Esquemageneraldelcircuitodeamplificacin .......................................................................................................... 114
Figura16.1:Bloquesinternosdelcircuito .......................................................................................................................................... 118
Figura16.2:Ordendeentradasysalidasenlarepresentacindelamquinadeestados........................................................ 119
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
10
ndice de tablas
Tabla61:Displaysquesemuestransegnlaconfiguracindelosinterruptores....................................................................... 67
Tabla151:Frecuenciasdelasnotasendistintasoctavas ................................................................................................................ 113
Tabla16.1:Codificacindeestados .................................................................................................................................................... 121
Tabla16.2:Tabladeestadossiguientesysalidas ............................................................................................................................. 122
Tabla16.3:TabladeentradasnecesariasparaobtenerunatransicinenbiestablesJK ........................................................... 122
Tabla16.4:TabladeexcitacindelosnecesariasparaobtenerunatransicinenbiestablesJK ............................................ 123
Tabla18.1:Codificacindeestados .................................................................................................................................................... 137
Tabla18.2:Tabladeestadossiguientesysalidas ............................................................................................................................. 138
Tabla18.3:TabladeentradasnecesariasparaobtenerunatransicinenbiestablesJK ........................................................... 138
Tabla18.4:TabladeexcitacindelosnecesariasparaobtenerunatransicinenbiestablesJK ............................................ 139
Tabla20.1:Caractersticasdeloscomponentesdelcircuito ........................................................................................................... 149
Tabla20.2:Tiemposdepropagacinmximos ................................................................................................................................. 150
Tabla21.1:Tabladelestadosiguiente ................................................................................................................................................ 151
Tabla21.2:Tabladeexcitacindelautmata .................................................................................................................................... 151
Tabla22.1:Caractersticasdeloscomponentesdelcircuito ........................................................................................................... 153
Tabla22.2:Tiemposdepropagacinmximos ................................................................................................................................. 153
Tabla24.1:Tablasdeverdaddelasentradasdelosbiestables ...................................................................................................... 155
Tabla24.2:Tabladelestadosiguiente ................................................................................................................................................ 156
Tabla24.3:Tabladeexcitacindelautmata .................................................................................................................................... 156
11
1. Introduccin
Estemanualesunaguaprcticaparaaprenderadisearcircuitosdigitalesmedianteel
uso de VHDL y dispositivos lgicos programables (CPLD o FPGA). Este manual se ha
desarrollado en el Departamento de Tecnologa Electrnica [5] de la Universidad Rey
Juan Carlos para las prcticas de la asignatura Electrnica Digital II (ED2 [8]) de la
titulacin de Ingeniera de Telecomunicacin1. Previamente, los alumnos de esta carrera
hancursadolaasignaturaElectrnicaDigitalI(ED1).EnED1losalumnosadquirieronlos
conceptos bsicos de la electrnica digital y realizaron diseos tanto con componentes
discretoscomocondispositivoslgicosprogramables.LasprcticasrealizadasconFPGA
deED1estnguiadasenelmanualdelareferencia[12].Endichasprcticasseenseaa
disearcircuitoselectrnicosdigitalesconesquemticosyFPGA.
Por tanto para seguir este manual con una mayor comprensin se recomienda tener
conceptosbsicosdelossistemasdenumeracinyelectrnicadigital:diseoconpuertas
lgicas,bloquescombinacionales,elementosdememoria,registrosycontadores.Realizar
lasprcticasdeED1[12]esunabuenabaseparaseguirestemanual.
Adems de las prcticas de clase, en este manual se han incluido dos secciones
adicionales.Porunlado,apartirdelapgina103sehaaadidounaseccindecircuitos
digitalesyanalgicosenlaqueseincluyendoscaptulosconalgunasindicacionessobre
cmo realizar la parte analgica de los circuitos. Por otro lado, a partir de la 115 se ha
incluidolaresolucindeproblemastericos.Estosproblemasfueronejerciciosdeexamen
duranteelcurso20082009.
Aspues,comoyasehadicho,enestemanualaprenderemosadisearcircuitosdigitales
medianteVHDLyelusodedispositivoslgicosprogramables.ElVHDLesunlenguaje
de descripcin de hardware que permite modelar y disear circuitos electrnicos
digitales. Se pueden disear circuitos electrnicos digitales sin utilizar lenguajes de
descripcindehardware.Porejemplo,usandoesquemticospodemosdisearuncircuito
electrnico digital [12]. Disear mediante esquemticos es una manera ms intuitiva y
menosabstractadedisear,yporestocreemosqueeslaformamsrecomendablepara
aprender a disear. Si no tenemos unas bases slidas en el diseo con esquemticos, al
disear con VHDL podemos perder la nocin de lo que estamos haciendo y pensar que
estamosusandounlenguajedeprogramacinhabitual(C,Pascal,...).Notenerunaidea
aproximadadelhardware(esquemtico)quesegeneraapartirdelcdigoVHDLesuna
delaslimitacionesmsgrandesquepodemostenercomodiseadores.
Sinembargo,unavezquesabemosdisearconesquemticos,loslenguajesdedescripcin
dehardwarenosfacilitaneldiseoyaque,entreotrosbeneficios,nosproporcionan:
Unniveldeabstraccinmayor,ahorrndonosmuchosdetallesdelaimplementacin
Unamayorfacilidadparalareutilizacinyhacermodificaciones
Unamayorcapacidadparamanejarparamanejarcircuitosgrandes
Esteplandeestudiosempezaextinguirseapartirdelcurso20092010conlaimplantacindelosgradosde
Boloniaenelprimercurso
13
Posibilidadderealizarbancosdepruebasmscomplejosparasimularlafuncionalidad
denuestrodiseo.
Estos beneficios los podremos apreciar si comparamos el cdigo VHDL de los diseos
propuestosconsudiseoenesquemticos.Porejemplo,podremoscompararelcontador
realizadoconVHDL(captulo6) conelcontadorrealizadoenesquemticos(captulo19
delareferencia[12]).
ElVHDLesunestndardelInstitutodeIngenierosElctricosyElectrnicos2(IEEE[13]).
Existen otros lenguajes de descripcin de hardware como el Verilog o el SystemC.
Histricamente,elusodeVHDLoVeriloghadivididoalacomunidaddediseadores,lo
quehaprovocadodificultadesenelintercambiodediseosyalasempresasquefabrican
herramientasinformticasdeayudaaldiseo(CAD).
ElVHDLesunlenguajemuyamplioquefuecreadoparamodelarcircuitos.Mstardese
empez a utilizar para disear circuitos, utilizando para ello slo un conjunto reducido
del VHDL, lo que se llama VHDL para sntesis [14]. La transformacin de un circuito
descrito en VHDL a su esquema en puertas lgicas y biestables se llama sntesis. Esta
sntesislarealizanautomticamentelasherramientasCAD,graciasaestolosdiseadores
ahorranmuchotiempodediseo.Enestemanualnoaprenderemosautilizarlatotalidad
del VHDL, sino que usaremos un conjunto restringido del lenguaje orientado a sntesis.
Lo que es ms, tampoco usaremos todo el conjunto de VHDL para sntesis, sino que
utilizaremosloquevayamosnecesitando.Porsuerteopordesgracia,enVHDLunacosa
se puede describir de muchas maneras distintas. Por lo general, en este manual
aprenderemosslounadeellas.
Por ltimo, con el fin de que este manual pueda llegar al mayor nmero de personas y
conelobjetivodegenerarmaterialeducativoabierto,hemospublicadoestemanualbajo
licenciaCreativeCommons[3]quepermitecopiarloydistribuirlo.Esperamosquedisfrutes
desulecturayqueteayudeaaprenderadisearcircuitoselectrnicosdigitales.Parair
mejorando el manual, agradeceremos la comunicacin de comentarios, sugerencias y
correccionesalasdireccionesdecorreoelectrnicodelosautores.
felipe.machado@urjc.esysusana.borromeo@urjc.es.
InstituteofElectricalandElectronicsEngineers
14
2. Encender un LED
Enlasprcticasdeestemanualrealizaremosdiseosbastantemscomplejosquelosque
hicimosenElectrnicaDigitalI[12].Porunladoporqueyasabemosmsdeelectrnicay
porotroladoporquedisearemosconVHDL.ElVHDLesunlenguajededescripcinde
hardwarequenospermitirrealizardiseosavanzadosdemaneramsrpidayeficiente
quecuandousbamoslosesquemticos.
Como ya vimos en las prcticas de Electrnica Digital I, siempre que se introduzca una
novedadeneldiseodebemosrealizarundiseodepruebalomssencilloposiblepara
ver si todo funciona bien. En nuestro caso, en esta primera prctica queremos probar el
proceso de diseo en VHDL, as que vamos a realizar un diseo VHDL que sea muy
sencilloparaprobarquetodoloprocesovabien.Portanto,nuestrodiseodepruebaser
encenderunLEDdescribiendoelcircuitoenVHDLenvezdeenesquemticos.
EstaprcticanosservirpararepasarelentornodediseodeXilinx[25]:elISEWebPack3
[15].Enelrestodelasprcticasnoseharreferenciaalentornodedesarrollo.Asquesi
tienesdudasdecmoimplementarelcircuitoenlaFPGA,vuelveaestaprcticaorepasa
lasprcticasdelaopasado[12].
Herramientagratuitaquesepuededescargaren:
http://www.xilinx.com/webpack/classics/wpclassic/index.htm
15
FPGA
Conector JTAG
Conector
de expansin
Memoria
Flash
VGA
Alimentacin
Jumpers de
configuracin
PS/2
Display
7 segmentos
Puerto
accesorio
Pulsadores
Interruptores
LEDs
Amedidaquevayamosavanzandoconlaprcticairemosaprendiendolafuncionalidad
delaplaca.Anas,sitienescuriosidad,enlapginawebdeDigilentpuedesconsultarel
manualdelaplacaeningls[19].
2.1.2. La tarjeta Basys
La tarjeta Basys contiene una FPGA de Xilinx de modelo Spartan3E XC3S100E
XC3S250E con encapsulado TQ144. Estas FPGA tienen respectivamente 100000 250000
puertaslgicasequivalentesy108pinesdisponiblesparaelusuario.
La placa Basys tiene muchos perifricos similares a la Pegasus, por ejemplo: 8 LED, 4
displaysde7segmentos,4pulsadores,8interruptores,unpuertoPS/2yunpuertoVGA.
Los puertos de expansin son diferentes a la Pegasus, la tarjeta Basys tiene 4 puertos de
expansindetipoPMOD,conlosquepodemosconectarunagranvariedaddeperifricos
disponibles4 o incluso podemos hacrnoslos nosotros mismos. La Pegasus slo tiene un
puertoPMOD.Enlafigura2.2semuestralarevisinEdelaplacaBasys,enellasesealan
variosdesuscomponentes.
LosconectoresPMODsonmuyvariados:pantallasdecristallquido,circuitoscontroldemotores,antenas,
joysticks,amplificadoresdeaudio,micrfonos,etc.Sepuedenveren
http://www.digilentinc.com/Products/Catalog.cfm?NavPath=2,401&Cat=9
16
2. Encender un LED
FPGA
Jumpers de
configuracin
Conectores PMOD
Jumpers para
la frecuencia
del reloj
PS/2
VGA
USB
Displays
7 segmentos
Interruptor
para encender
la tarjeta
Interruptores
Pulsadores
LEDs
BASYS
Spartan-II
PIN
46
45
44
43
42
41
37
36
LED
LD0
LD1
LD2
LD3
LD4
LD5
LD6
LD7
'1' Encendido
'0' Apagado
390
Spartan-3E
PIN
15
14
08
07
05
04
03
02
LED
LD0
LD1
LD2
LD3
LD4
LD5
LD6
LD7
Figura 2.3: Conexin de los LED de la placa Pegasus (izquierda) y la Basys (derecha)
Viendoelesquemaelctricodelafigura2.3podemosdeducirquesiponemosun1lgico
enelpin46delaFPGAdelaPegasusencenderemoselLED,yaque conun1 lgicola
FPGApondrunatensinde3,3voltiosenesepin(queeselniveldetensindeesepin
de la FPGA). Por el contrario, si ponemos un 0 lgico en el pin 45, mantendremos
apagadoelLED1(LD1),puestoquenocircularcorrienteporl.
5
TencuidadoporquelaBasysvieneconundibujoconlacorrespondenciaconlospines,yalgunosdeellos
estnmal.Esmsseguroconsultarlosenelmanualdereferencia.
17
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.
Sieststrabajandoenellaboratorio,alterminarlasesinnoolvidescopiarlosficherosconextensin.vhdy
.ucfentumemoriaUSBoentucorreoelectrnico(ocupanmuypoco).Delocontrario,elprximoda
puedeserquelosficheroshayandesaparecido.
HDL:delingls:HardwareDescriptionLanguage
18
2. Encender un LED
Unavezquehemosrellenadolostresrecuadrospinchamosen Next.Ahoranosaparecela
ventana de seleccin del dispositivo (figura 2.7). En Product Category ponemos All. En la
familiaponemos:
Spartan2sitenemoslaPegasus
Spartan3EsiusamoslaBasys
Los siguientes datos los podemos obtener a partir de la observacin del texto del
encapsuladodelaFPGA,quesemuestranenlafigura2.5paralaPegasusylafigura2.6
para la Basys. Hay que observar los valores que tiene la FPGA de nuestra placa, ya que
por ejemplo, en la Pegasys en algunas el tipo es XC2S200 y en otras es XC2S50. Lo mismo
sucedeconlavelocidad,enalgunases5yotras6.
tipo de dispositivo
encapsulado
XC2S200
cdigo de fecha
PQ208
tipo de dispositivo
encapsulado
XC3S100E
cdigo de lote
velocidad
5C
rango de operacin
C: comercial
cdigo
TQG144
cdigo
velocidad
rango de operacin
C: comercial
4C
Paralaseleccindelaherramientadesntesisnotenemosalternativa,yparaelsimulador
en esta prctica no es importante y lo dejamos en ISE Simulator (VHDL/Verilog). En el
lenguajededescripcindehardwarepreferido(PreferredLanguage)sedejaelVHDL,quees
elqueusaremos.AlterminarpinchamosenNext.
19
Family
Device
Package
Speed
Pegasus
Basys
Spartan2
Spartan3E
Mirar en la FPGA
PQ208
TQ144
Mirar en la FPGA
Figura 2.7: Ventana para la seleccin del dispositivo del nuevo proyecto
En las dos siguientes ventanas pinchamos en Next sin rellenar nada y en la ltima
pinchamosenFinish.
Yatenemoselproyectocreadoyahoranosdisponemosacrearnuestrodiseo.Paraello
creamosunanuevafuente(fichero)paraelproyectopinchandoenProjectNew Source.
Estoharaparecerunanuevaventanaquenospedirqueseleccionemoseltipodefuente
quequeremoscrear.ComoestamostrabajandoenVHDL,seleccionamos VHDL Module,y
nombramos al fichero led0. Este paso se muestra en la figura 2.8. Posteriormente
pinchamosenNext..
Figura 2.8: Seleccin del tipo de la nueva fuente que vamos a crear
20
2. Encender un LED
Ahoranossaldrunaventanacomolamostradaenlafigura2.9.Pordefecto,elnombre
de la arquitectura (Architecture Name) es Behavioral (comportamental). ste se puede
cambiar,peroporahora,lodejamosas.Enestaventanapodemosindicarlospuertosde
nuestra entidad. En la figura 2.9 se han creado dos puertos de salida: led0 y led1. Otra
alternativaescrearlosnosotrosdirectamenteenVHDL.ParaterminarpinchamosNexty
luegoenFinish.
21
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
DespusdelacabeceraestnlasreferenciasalasbibliotecasdelIEEE8,quesonnecesarias
parapoderutilizarlostiposdedatosqueemplearemos.Paranuestrocaso,nosbastacon
utilizar la biblioteca IEEE.STD_LOGIC_1164. Las otras bibliotecas no son necesarias por
ahora.
Luegotenemosunoscomentariosquepodemoseliminar.Despusdestos,yatenemosla
entidad, que ha sido creada por el ISE con la informacin de los puertos que le hemos
dado,quesondospuertosdesalida:led0yled1.
EnVHDL,laentidaddefinelasentradasysalidasdelcircuito.Ynohacereferenciaala
estructuraofuncionalidadinterna.Escomodefinirunacajanegra.Ennuestroejemplo,la
entidadsepuederepresentarcomomuestralafigura2.12.
ElIEEE(InstituteofElectricalandElectronicsEngineers)eslaasociacinquehaestandarizadoelVHDL.
22
2. Encender un LED
LED0
LED0
LED1
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;
BEHAVIORAL
STRUCTURAL(oESTRUCTURAL)
FUNCTIONAL
DATAFLOW
(oCOMPORTAMENTAL)
(oFUNCIONAL)
(oFLUJO_DE_DATOS)
Yairemosviendoqusignificanestosdescriptores.
Despus del nombre de la arquitectura se indica a qu entidad pertenece dicha
arquitectura. En nuestro ejemplo: of LED0". Indica que pertenece a la entidad LED0.
Aunque no es obligatorio, la entidad y arquitectura se pueden describir en el mismo
fichero.
Porltimo,apartirdel BEGINseincluyenlassentenciasconcurrentesdenuestrocircuito.
En este caso, son dos asignaciones a dos valores constantes. La asignacin de seales se
realizaconeloperador<=.
23
Ahora incluye las sentencias del cdigo 21. Para mayor claridad de cdigo, indenta9 las
sentenciasconcurrentescondosespaciosaladerecha.Unavezquehemosterminadocon
eldiseodeejemplo,lograbamos(FileSave).
Ahora nos aparecer la herramienta Xilinx PACE. En ella podemos distinguir tres
subventanas,ladeladerecha,tiene2pestaasensuparteinferior,enunasemuestrala
arquitecturadelaFPGAyenlaotralaasignacindelospines(verfigura2.14).
Enlasubventanadelaparteinferiorizquierdahayunatablaconlosnombresdenuestros
puertos: led0 y led1. En una columna se indica la direccin de los puertos (ambos de
9
Indentaresinsertarespaciosotabuladoresparamoverunbloquedecdigoaladerechayfacilitarla
comprensindelcdigo.EltrminoindentarnoestreconocidoenlaRAEyparasercorrectoshabraque
utilizareltrminosangrado
24
2. Encender un LED
salida:output).Yenlasiguientecolumna(Loc)debemosindicarelpindelaFPGAconel
que queremos unir nuestros puertos. Ten cuidado porque aqu hay un fallo de la
herramienta, ya que si pinchas en las celdas de dicha columna aparece un men
desplegableconlosbancosdelaFPGA(lospinesseorganizanenbancos),peroenestas
celdas hay que indicar los pines y no los bancos. As que pinchamos en dichas celdas y
ponemosnosotrosmismoselpinquequeremosconectar.As,siusamoslaPegasus,parael
puertoled0conectamoselpin46,paraelloescribimosP46(elmismonmeroqueindicala
placaaadindoleuna P).Paraelpuerto LED1leasignamoselpin P45.Siusamoslaplaca
Basys,tendramosqueponerlospinesP15yP14,respectivamente.
P46
P45
Ledamosaguardarynossaldrunaventanaquenospreguntaporelformatodelfichero
que guardar esta informacin. Aunque nos es indiferente, seleccionamos la primera
opcin "XST Default <>", pinchamos en OK, cerramos la herramienta PACE y volvemos al
ISE.
Enlaventanade procesos,tenemosordenadoslospasosquedebemostomar: "SynthesizeXST", "Implement Design"y "Generate Programming File".Asqueconesteorden,vamosair
pinchandodosvecesencadaunodeelloshastaqueveamosqueseponeunasignoverde
decorrectoenellos.Cuandosepongaenverde,pinchamosenelsiguiente(puedesaliren
amarillosiindicandoquehayadvertenciaswarningsqueavecesnosonimportantes).En
realidad, si se ejecuta el ltimo paso sin haber ejecutado los anteriores, la herramienta
realizatodoelproceso.
Cuando tengamos todos los pasos correctamente ejecutados, la subventana de procesos
debera mostrar el aspecto de la figura 2.15. Si es as, ya estamos en disposicin de
programar la FPGA. Puede ser que aparezca algn warning y que el proceso de sntesis
tengaunsmboloamarillotriangular.Loswarningssepuedenverenlaventanadedesign
summary.Detodosmodos,enmuchasocasionesestasadvertenciasnosonrelevantes.
25
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
jumper desconectado
sin perder su caperuza
jumper
desconectado
su caperuza
est perdida y
pisoteada por el
suelo del labo
Representacin:
Cuandoestosjumpersestnconectados,laFPGAseprogramadesdelamemoriaflashdela
placa,enlaqueseguardaunficherodeconfiguracinparalaFPGA.LasSpartansonun
tipo de FPGA voltil, esto es, requiere estar alimentada a una fuente de tensin para
mantener su configuracin. Por tanto, cuando la apagamos se borra lo que hayamos
programado.ParaevitartenerqueprogramarlaFPGAdesdeelordenadorcadavezque
encendamos nuestro sistema electrnico, se utiliza una memoria flash que la programa
automticamente. Si esto no fuese posible, este tipo de FPGA perdera casi toda su
utilidad,yaquenoseranautnomasyprcticamenteslovaldranparahacerpruebasen
ellaboratorio.
26
2. Encender un LED
EstoarrancarlaherramientaiMPACT,quenosmostrarunventanaenlaqueseofrecen
variasopciones,dejamoslaopcinquehaypordefectoconfigure devices using BoundaryScan (JTAG)"y "Automatically connect to a cable and identify Boudary-Scan chain". Aceptamos
pinchandoenFinish.
Loquehemoshechoesdecirlealaherramientaqueidentifiqueloscomponentesquehay
en la placa por medio del protocolo BoundaryScan (JTAG). Despus de esto la
herramienta procede a identificar a la placa y debera encontrar dos componentes: la
FPGA y la memoria flash. La FPGA la identifica como xc2s200 xc2s50 y la memoria
como xcf02s.Acontinuacinnospedirlosficherosdeprogramacinparacadaunode
loscomponentes(figura2.17).
10
27
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).
DespusdelaordendeprogramarlaFPGA,apareceuncuadroquemuestralaevolucin
y, si todo ha salido bien, la herramienta nos avisar de que hemos tenido xito en la
programacinmostrandounavisocomoeldelafigura2.19.
28
2. Encender un LED
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.
29
SiconectamoslatarjetaBasysalordenadormedianteelcableUSByelinterruptoresten
laposicin VUSB,transcurridountiempoaparecerqueestconectadaunatarjeta,enla
partederechapondrOnboardUSB(verfigura2.21).Sinosaliesenada,pruebaapinchar
enelmenqueponeNoDevicesConnectedaversicambia.Sinocambiase,pruebaacerrar
el Adept y volverlo a arrancar. La primera vez que conectemos la tarjeta puede ser que
Windows haya detectado un nuevo hardware y tengamos que dar permiso para la
instalacindelosdriversquevienenconlatarjeta(notenemosqueintroducirundisco,la
propialeproporcionatienelosdrivers).
Figura 2.21: Pantalla del Adept que ha detectado algn dispositivos conectado
30
2. Encender un LED
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).
31
stospuedenserdistintosconelmodelodelaFPGA(inclusopuedenhabercambiadode
nombre).
32
2. Encender un LED
copiarelfichero .bit.QueeselficheroqueseusaparaprogramarlaFPGA,asnotienes
quevolverloagenerar.
Estosficheros .vhdy .ucfsonlosquevamosacopiarennuestramemoriaUSBonoslo
enviamosporcorreoelectrnico.
Cuandoqueramosimportarnuestroproyectoaunnuevoordenador,loquetenemosque
haceres:
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.
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.
33
3. Sentencias concurrentes
El diseo anterior era muy bsico, simplemente encenda un LED y no tenamos
posibilidad de interactuar con el circuito, por ejemplo, mediante los pulsadores e
interruptores.Ahora,enestaprcticatendremoslaposibilidaddecrearfuncioneslgicas
ybloquesqueestudiamoselaopasado.
A partir de ahora no se va a realizar explicaciones tan detallada como la del anterior
ejercicio, si durante la ejecucin de este ejercicio has olvidado algn paso, repasa lo
explicadoenelejercicioanterior.
Analizando las conexiones de los interruptores de la Pegasus (figura 3.1) vemos que
cuandoelinterruptoresthaciaarribatransmiteun1lgicoalaentradadelaFPGA.En
laplaca,aladerechadelinterruptor SW0seindicaquehaciaarribason3,3Vyhaciaabajo
son0V.
Spartan-II
3,3V
4,7k
PIN
89
88
87
86
84
83
82
81
Spartan-II
3,3V
interruptor
SW0
SW1
SW2
SW3
SW4
SW5
SW6
SW7
4,7k
4,7k
PIN pulsador
59
BTN0
58
BTN1
57
BTN2
154 BTN3
0,1F
Figura 3.1: Esquema elctrico de las conexiones de los interruptores y pulsadores en la placa Pegasus
Paralospulsadores,cuandoestnpulsadostransmitenun1lgicoalaentradaycuando
no estn pulsados ponen 0 voltios a la entrada. Observa que los pulsadores tienen un
pequeocircuitoconresistenciasyuncondensador,estoesparaeliminarlosrebotesque
seproducenalpulsaryasenviarunasealsinruido.Estecircuitoqueeliminarebotesno
lotienelaBasys,yporlotanto,lasealdeentradadelospulsadoresnoestanlimpia,y
puedeparecerquesehapulsadovariasveces(rebote).Elesquemaelctricosemuestraen
lafigura3.2,endondesepuedeobservarquelospulsadoresnotienenelcondensadorque
stienelatarjetaPegasus.
Spartan3E
3,3V
4,7k
PIN
38
36
29
24
18
12
10
6
interruptor
SW0
SW1
SW2
SW3
SW4
SW5
SW6
SW7
Spartan3E
3,3V
4,7k
PIN pulsador
69
BTN0
48
BTN1
47
BTN2
41 BTN3
4,7k
Figura 3.2: Esquema elctrico de las conexiones de los interruptores y pulsadores en la placa Basys
34
3. Sentencias concurrentes
Antesdeempezarconlaprctica,semuestranacontinuacinlaspalabrasreservadasdel
VHDL(figura3.3).Estaspalabrasnosepuedenusarparanombrarelementosdenuestro
circuito:seales,entidades,arquitecturas,....
Z
Z
35
Apartirdelcdigo31podemosobservarqueparaundiseoenelniveldepuertas,la
sintaxis es muy similar a la sintaxis utilizada en el lgebra de Boole (que estudiamos el
ao pasado). El uso de parntesis es muy importante para determinar que operador
booleanoseaplicaencadacaso.
Prueba a implementar el circuito en la placa haciendo que el puerto A sea el interruptor
SW0,elpuertoBseaelinterruptorSW1,yquelasealdeseleccinseaelpulsadorBTN0.Por
ltimo,asocialasalidaZconelLEDLD0.
Unavezimplementado,compruebaquefuncionacorrectamente,estoes,quesegnestel
pulsadorpresionado,lasalidatomaelvalordelprimerinterruptorodelsegundo.
3.1.2. Diseo usando varias sentencias concurrentes
Elcdigo31esperfectamentevlido.Sinembargo,cuandoelnmerodepuertaslgicas
eselevado,nospuedeinteresardividirlasentenciadeasignacinenvariassentenciasms
sencillas. Esto se hace creando seales intermedias. La figura 3.5 muestra el diseo en
puertasdelmultiplexorincluyendolassealesintermediasDyE.
A
D
Z
B
E
S
Antes de ser usadas, estas seales intermedias deben ser primero declaradas en la
arquitectura.Lassealessedeclaranantesdel begindelaarquitectura.Portanto,nuestro
diseoquedacomomuestraelcdigo32:
architecture GATE of GATE_MUX is
signal D, E : STD_LOGIC;
begin
D <= A and S;
E <= (not S) and B;
Z <= D or E;
end GATE;
Cdigo 3-2: Sentencias concurrentes que definen el multiplexor en puertas (equivalente al cdigo 3-1)
Ahorahemosusadotressentenciasconcurrentesquesonequivalentesalasentenciadel
cdigo31.Puedesprobar,siquieres,quefuncionaigual.
Una caracterstica fundamental de las sentencias concurrentes es que, como su nombre
indica,sonconcurrentes.Estoes,queseejecutantodasalavez.Queescomofuncionan
loscircuitos(elhardware):todoestejecutndosesimultneamente.Porlotanto,daigual
el orden en que se escriban, pues no hay unas que vayan antes o despus. As, las
sentenciasdelcdigo32sepodranponerencualquierotroorden.Porejemplo,elcdigo
33estotalmenteequivalentealdelcdigo32.
36
3. Sentencias concurrentes
Cdigo 3-3: Otra versin de las sentencias concurrentes que definen el multiplexor en puertas (equivalente a
los cdigos 3-1 y 3-2)
Pruebaaimplementarestediseoycompruebaquefuncionaigual.
3.1.4. Uso de procesos
Otraalternativaesusarprocesos,quelosveremosconmsdetallemsadelante.Dentro
del proceso, las sentencias se tratan secuencialmente y no de manera concurrente como
vimosqueocurreconlassentenciasconcurrentespuestasdirectamenteenlaarquitectura.
Asqueelordendelassentenciasdentrodeunprocesosesimportante.
Elprocesoempiezaconsunombre,aloquelesiguendospuntosylapalabrareservada
PROCESS.Despusdestaseponelalistadesensibilidad,dondesedebenponertodaslas
sealesqueseleenenelproceso.Lassealesqueseleenson:lassealesqueestndentro
de las condiciones (por ejemplo dentro de la sentencia if) y las seales que estn en la
partederechadelasasignaciones.
Elprocesoqueimplementanuestromultiplexorsemuestraenelcdigo35.
P_MUX: Process (A,
begin
if S='1' then
Z <= A;
else
Z <= B;
end if;
end process;
B, S)
-- lista de sensibilidad: A, B, S
-- S se lee
-- A se lee
-- B se lee
ElVHDLesunlenguajemuyamplio,yhayotrasmanerasconlasquesepuededescribir
el multiplexor. Sin embargo, por ahora no las veremos y pasaremos a describir otros
diseos.
37
MUX4ALT
A
00
01
10
11
S(1:0)
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.
Elresultadoeslaentidadmostradaenelcdigo36.
entity mux4alt
Port ( A :
B :
C :
D :
S :
Z :
end mux4alt;
is
in
in
in
in
in
out
STD_LOGIC;
STD_LOGIC;
STD_LOGIC;
STD_LOGIC;
STD_LOGIC_VECTOR (1 downto 0);
STD_LOGIC);
11
LSB:delinglsLeastSignificantBit
12
38
3. Sentencias concurrentes
Lasentenciaconcurrentequedescribeestemultiplexorsemuestraenelcdigo37.Esta
sentencia es una extensin para 4 alternativas del cdigo 34. Fjate que la comparacin
delvalordelasealSsehaceconcomillasdoblesporserunvector.
Z <= A when S="00" else
B when S="01" else
C when S="10" else
D;
Cdigo 3-7: Sentencia concurrente condicionada que define el multiplexor de cuatro alternativas
MUX4BITS
A(3:0)
Z(3:0)
B(3:0)
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;
39
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:
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.
40
MUX4BITS
CONV_7SEG
4
A(3:0)
B(3:0)
1
0
SEG(6:0)
Z(3:0)
Puertos
In
Out
A(3:0)
LED(3:0)
B(3:0)
SEG(6:0)
S
AN(3:0)
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).
41
F
E
4
F
G
D
B
C
G
D
B
C
G
D
B
C
9
F
B
C
As que para realizar el convertidor tenemos que examinar qu numero tenemos que
mostrar y encender los segmentos correspondientes a dicho nmero. En la figura 4.3 se
muestran los ejemplos para tres casos: los nmeros 0, 1 y 2. Como se puede ver,
arbitrariamentesehaasignadoelbitmssignificativode SEGalsegmentoAyelmenos
significativo (el bit 0) al segmento G. Otro orden se poda haber escogido, pero lo
importanteesquesecorrespondanadecuadamentealaasignacindepinesdelaFPGA.
En la figura se han mostrado tres ejemplos, ahora tienes t que deducir el resto (de
maneraparecidaacomolohicisteenlaprcticadelaopasado).
Si Z="0000" mostramos el cero
A
0
F
SEG(6)
SEG(5)
SEG(4)
SEG(3)
SEG(2)
SEG(1)
SEG(0)
segmento
segmento
segmento
segmento
segmento
segmento
segmento
A
B
C
D
E
F
G
Bit 0 correspondiente
con los segmentos F que
estar apagado
1
F
Bits correspondientes
con los segmentos B y C
que estarn luciendo
2
F
B
C
Figura 4.3: Valores del vector de los segmentos (SEG) para los nmeros 0, 1 y 2
LassentenciasconcurrentesVHDLdelaarquitecturadebentenerelaspectodelafigura
4.4.Sepuedeapreciarquehaycuatrosentenciasconcurrentes.Comoyahemosdicho,por
la concurrencia del hardware, el orden de estas sentencias es indiferentes. La ltima
sentencia,correspondientealconvertidorasietesegmentos,sehadejadoincompletapara
que la termines t. Puedes observar que en la sentencia del convertidor se han incluido
comentarios para facilitar la comprensin del cdigo. Esto es muy importante para
42
facilitarlacomprensindelcdigo,tantoparaotraspersonasquelolean,oparatimismo
cuando lo vuelvas a ver dentro de unas semanas y no te acuerdes de nada de lo que
hicisteensuda.
Fjate que se han incluido las dos ltimas alternativas. En la ltima no se ha incluido la
condicin (el when se ha comentado), por lo tanto, en cualquier otro caso, se asigna el
ltimovalor13
Z <= A when S='1' else B;
LED <= Z;
multiplexor
AN <= "1110";
Encendemos el nodo 0
when
when
when
when
Z="0000"
Z="0001"
Z="0010"
Z="0011"
else
else
else
else
-----
A,B,C,D,E,F
B,C
A,B,D,E,G
A,B,C,D,G
Primeros 4 nmeros
del convertidor a
siete segmentos
.....
..... contina t con el resto de casos
.....
"0110000" when Z="1110" else -- E(14): A,D,E,F,G
"0111000"; -- when Z="1111"; -- F(15): A,E,F,G
4.2. Decodificador de 2 a 4
Ahora haremos un decodificador de 2 a 4. Este ejercicio lo hicimos el ao pasado con
esquemticos. El bloque del circuito y su tabla de verdad se muestra en la figura 4.5.
Recuerdaqueundecodificadoractivalasalidacorrespondientealnmerocodificadoen
las entradas. Por ejemplo, si en la entrada hay un 2 codificado en binario, se activa la
salida nmero 2. Slo una salida puede estar activa en un decodificador. Adems, el
decodificadortieneunasealdehabilitacinEquehacequenoseactiveningunasealde
salidaencasodequevalgacero(suponiendoquelasealEseactivaanivelalto).
Aunquenohayningncasoms,esmejorponerlacondicinpordefecto.Tantoporsisenoshaolvidado
incluiralgunaotro,comoporsielsintetizadornosedacuentadequenohaymscondiciones,yentales
casos,nosgeneraraunelementodememoria(enestoscasosunlatch).
13
43
DECOD 2a4
S0
E
0
1
1
1
1
I0
S1
I1
S2
S3
I1
X
0
0
1
1
I0
X
0
1
0
1
S3
0
0
0
0
1
S2
0
0
0
1
0
S1
0
0
1
0
0
S0
0
1
0
0
0
Eldecodificadorsehacedemanerasimilaralconvertidordesietesegmentosdelejercicio
anterior,sloquecambianlassalidasqueseactivansegnelnmeroquesetengaenla
entrada.LamayornovedadeslasealdehabilitacinE.
Loquevamosahacerenestediseoesmostrareneldisplayelnmerocodificadoenlos
cuatroprimerosinterruptores(SW3, SW2, SW1, SW0).Elnmerotambinsemostrarenlos
cuatroprimerosLED(deLD3aLD0).Sinembargo,envezdemostrarloenelprimerdisplay,
los interruptores SW7 y SW6 indicarn el display por el que se mostrar. Para ello
necesitamos un decodificador, que decodifique el nmero representado por estos
interruptores active el nodo correspondiente. El esquema del circuito que queremos
realizarsemuestraenlafigura4.6.
LD3-LD0
LED(3:0)
CONV_7SEG
SW3-SW0
4
D_IN(3:0)
SW7-SW6
BTN0
SEG_A-SEG_G
SEG(6:0)
I0
DECOD_2a4
S0
AN(0)
I1
S1
AN(1)
S2
AN(2)
S3
AN(3)
AN3-AN0
Controlamos qu
display se va a
encender
Eneldibujopodemosverqueelcircuitotienedospartesdiferenciadas.Lapartedearriba
(en la figura) realiza la conversin de siete segmentos, esta parte ya la sabes hacer del
apartadoanterior.Lapartedeabajoseencargadecontrolarqudisplayvaalucir.Cuando
I="00"sedebeactivarelprimerdisplay,cuando I="01"sedebeactivarelsegundodisplay,
el tercero cuando I="10" y el cuarto cuando I="11". Todo esto siempre cuando no est
presionadoelpulsadorBTN0,yaquevaafuncionarcomohabilitacin.
Eldecodificadorconhabilitacinlopodemoshacerconsentenciasconcurrentes(cdigo4
1)oconunproceso(cdigo42).Ambasformasproducencircuitosequivalentes,incluso
haymsformasdehacerlo.
44
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.
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:
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:
45
Elnmerobinariotambinsemostrarporlos3primerosLED.
ElcodificadortendrunasealdehabilitacinEI,sistaestdeshabilitadasemostrar
unsignomenos(segmentoG)enloscuatrodisplays.
LasealdehabilitacinEIserelpulsadorBTN0.Cuandoestpulsado,sedeshabilitar
elcodificador.
Pararecordardelaopasado,elesquemaylatabladeverdaddelcodificadorsemuestra
enlafigura4.7.Unposibleesquemadelcircuitosemuestraenlafigura4.8,yenlafigura
4.9hayunadescripcinVHDL.
EI
0
1
1
1
1
1
1
1
1
1
CODIF
EO
I0
I1
I2
I3
I4
I5
I6
I7
S0
S1
S2
A
EI
I7
X
0
0
0
0
0
0
0
0
1
I6
X
0
0
0
0
0
0
0
1
X
I5
X
0
0
0
0
0
0
1
X
X
I4
X
0
0
0
0
0
1
X
X
X
I3
X
0
0
0
0
1
X
X
X
X
I2
X
0
0
0
1
X
X
X
X
X
I1
X
0
0
1
X
X
X
X
X
X
I0
X
0
1
X
X
X
X
X
X
X
S2
0
0
0
0
0
0
1
1
1
1
S1
0
0
0
0
1
1
0
0
1
1
S0
0
0
0
1
0
1
0
1
0
1
A EO
0 0
0 1
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
CODIF
SW0
SW1
SW2
SW3
SW4
SW5
SW6
SW7
BTN0
I0
I1
I2
I3
I4
I5
I6
I7
EO
CONV_7SEG
S0
S1
S2
numero(0)
numero(1)
numero(2)
SEG(6:0)
1
SEG_AUX(6:0)
D3
activo
A
"1111"
D0
D1
D2
EI
"1111110"
MUX6BITS
"1110"
0
1
1
4
"0000"
AN(3:0)
46
Para no ponerla en
todas las
condiciones, se
puede poner la
asignacin por
defecto al
principio
Codifica los
interruptores
en un nmero
binario
Y cuando haya
que asignar otro
valor se incluye
en esa condicin
<= numero;
seg_aux <= "0001111" when numero="111" else -"0100000" when numero="110" else -"0100100" when numero="101" else -"1001100" when numero="100" else -"0000110" when numero="011" else -"0010010" when numero="010" else -"1001111" when numero="001" else -"0000001"; -- when numero="000" -- 0
SEG <= seg_aux when BTN0='0' else "1111110";
AN <= "0000" when BTN0='1' else
"1111" when activo = '0' else
"1110"; -- BTN0 ='1' AND activo = '1'
7
6
5
4
3
2
1
Convierte el
nmero a siete
segmentos
Inhabilita los segmentos si se
pulsa BTN0 (pone un signo "-")
Controla qu
displays lucen
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.
47
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;
Cdigo 4-6: Otra alternativa al circuito de la figura 4.8, todo en un mismo proceso
4.4. Conclusiones
Resumiendo,losconceptosprincipalesdeestaprctica:
Lospuertosdesalidanosepuedenleer,siloquisisemosleertendramosque crear
unasealauxiliarqueluegolaasignaremosalpuerto.
Sepuedeninicializartodoslosbitsdeunvectoraunmismovalorusandolaexpresin
others => '1'"
48
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.
49
5. Elementos de memoria
Un elemento de memoria es un componente que es capaz de guardar (memorizar) un
valor. Existen muchas maneras de modelar un elemento de memoria en VHDL, sin
embargo,dentrodelsubconjuntodeVHDLsintetizableslohayunaspocasmaneras.El
subconjuntodeVHDLsintetizableesunestndardelVHDL[14]querestringeellenguaje
a un mnimo construcciones VHDL que los sintetizadores deben aceptar. Por tanto, no
todoelVHDLesaceptadoparasintetizarloeimplementarloenlaFPGA.Estosedebea
queelVHDLsurgiparamodelarysimularcircuitos,ynoparasintetizarlos.Porello,el
VHDL es mucho ms amplio que lo que se puede sintetizar. En la prctica, cada
sintetizadoraceptaunconjuntodeterminadoparasntesis,yporellosedebeconsultarel
manualantesdeempezarausarunsintetizadornuevo[27].
Acontinuacin,medianteejemplos,veremoscmoserealizanelementosdememoria.
K
0
1
0
1
Q(t+1)
Q(t)
0
1
Q(t)
BTN1
LD0
CLK
BTN0
Figura 5.1: Tabla de verdad del biestable J-K (izquierda) y circuito que queremos implementar (derecha)
Ahoracreaunproyectollamado biest_jkyunanuevafuenteVHDLdelmismonombre.
Pon los puertos sealados en la figura 5.1, asignndole los pines que se muestran en la
figura.Usacualquieradelosprocesosdeloscdigos5152.ImplemntaloenlaFPGA
ycompruebaquefuncionacorrectamente.
50
5. Elementos de memoria
51
Elprocesodebetenerunasentenciaqueindicasiesunelementodememoriaactivo
pornivel(latch)oporflanco(flipflop).Enelcdigo51,resaltadoennegrita,indicaque
esunflipflopactivoporflancodesubida.loscuatroposiblescasosson:
Siesunflipflopactivoporflancodesubidalasentenciaderelojdebeser:
if clk'event and clk='1' then
Siesunflipflopactivoporflancodebajadalasentenciaderelojdebeser:
if clk'event and clk='0' then
Siesunlatchactivopornivelaltolasentenciaderelojdebeser:
if enable='1' then
Siesunlatchactivopornivelbajolasentenciaderelojdebeser:
if enable='0' then
Lasentenciaderelojnodebedetenerningunacondicinmsapartedeladelreloj.
Otras condiciones se deben de poner en otras sentencias if de menor jerarqua. El
cdigo 53 muestra la sentencia de reloj correcta, mientras que el cdigo 54 es
incorrectoporquelacondicindeJ='1'estenlamismacondicindelreloj.
if clk'event and clk='1' then
if J='1' then
......
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
......
Fueradelasentenciaderelojnodebedehaberningunasentenciams.Solamentese
admiteantesdelasentenciaderelojunainicializacinasncrona(comoenelcdigo5
5), pero despus no debera de haber sentencias, ni tampoco sentencias fuera de la
inicializacin. En los cdigos 56 y 57 se muestran dos ejemplos en los que hay una
sentencia de asignacin antes de la inicializacin sncrona (cdigo 56), y una
asignacinfueradelasentenciadereloj(cdigo57).Lassentenciasincorrectasestnen
negrita.
Biest_proc: Process (Reset, Clk)
begin
H <= P; -- INCORRECTO
if Reset = '0' then
Q <= '0';
elsif Clk'event and Clk='1' then
-- aqu van sentencias sincronas
......
dentrodelasentenciadereloj(comoenelcdigo51ycdigo53),peronoalmismo
nivel.
52
5. Elementos de memoria
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;
Dentrodelacondicindelrelojpuedenirtodotipodesentencias.Estassentenciasson
secuencialesysimportaelordendeaparicin.Siseasignavaloraunasealmsde
unavez,laltimaasignacineslaqueledarvalor.As,loscdigos510y511son
equivalentes.Elcdigo510asigna Q<='0'cuando Inic='1'.Mientrasqueelcdigo5
11asigna Q<='0'siempre,peroessobrescritopor Q<=Datocuando Inic='0',portanto,
asignaQ<='0'cuandoInic='1'.
Biest_proc: Process (Reset, Clk)
begin
if Reset = '0' then
Q <= '0';
elsif Clk'event and Clk='1' then
if Inic = '0' then
Q <= Dato;
else
Q <= '0';
end if;
end if;
end process;
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.
53
Por ejemplo, el cdigo 512 no genera latch, porque con el else se cubren todas las
posibilidades. Sin embargo, el proceso 513 s genera latch. Aunque la seal Select
nuncapudieravaler"11"sedebedeponersegnelcdigo512.
CombProc: Process(Select,Dato1,Dato2)
begin
if Select = "00" then
Q <= '0';
elsif Select = "01" then
Q <= Dato1;
else
Q <= Dato2;
end if;
end process;
LatchProc: Process(Select,Dato1,Dato2)
begin
if Select = "00" then
Q <= '0';
elsif Select = "01" then
Q <= Dato1;
elsif Select = "10" then
Q <= Dato2;
end if;
end process;
Incluso,aunquesecubrantodaslasposibilidadessedebeterminarconunelseporque
lostipos std_logictienenmsvaloresposiblesapartede0y1.Elcdigo514esel
recomendadofrentealcdigo515.
CombProc: Process(Select,Dato1,Dato2)
begin
if Select = "00" then
Q <= '0';
elsif Select = "01" then
Q <= Dato1;
elsif Select = "10" then
Q <= Dato2;
else
Q <= '1';
end if;
end process;
LatchProc: Process(Select,Dato1,Dato2)
begin
if Select = "00" then
Q <= '0';
elsif Select = "01" then
Q <= Dato1;
elsif Select = "10" then
Q <= Dato2;
elsif Select ="11" then
Q <= '1';
end if;
end process;
Otra manera de asegurarse de que no se genera latch es incluir una asignacin por
defecto al principio. Esto vendra a ser equivalente a un else. El cdigo 516 es
equivalentealcdigo512,yelcdigo517esequivalenteal514.
CombProc: Process(Select,Dato1,Dato2)
begin
Q <= Dato2;
if Select = "00" then
Q <= '0';
elsif Select = "01" then
Q <= Dato1;
end if;
end process;
CombProc: Process(Select,Dato1,Dato2)
begin
Q <= '1';
if Select = "00" then
Q <= '0';
elsif Select = "01" then
Q <= Dato1;
elsif Select = "10" then
Q <= Dato2;
end if;
end process;
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.
54
5. Elementos de memoria
modoquesiestapagado,cuandopulsemosseencienda;ysiestencendido,alpulsarse
apague.
Sin mirar la solucin que se da a continuacin, intenta realizar el circuito t slo con la
informacindelaseccin5.1.
5.3.1. Primera solucin
LaprimeraaproximacinalproblemaserarealizarunbiestableT,igualquecomosehizo
enlaprctica17deED1[12].Pararecordar,enlafigura5.3semuestralatabladeverdad
delbiestableTysuesquema.
BTN0
T
0
1
Q(t+1)
Q(t)
Q(t)
CLK
BTN3
LD0
Reset
Loscdigos518y519muestranprocesosequivalentesparaimplementarunbiestableT
activoporflancodesubida.
P_T: Process (Reset, Clk)
begin
if Reset = '1' then
Q <= '0';
elsif Clk'event and Clk = '1' then
if T = '1' then
Q <= not Q;
end if;
end if;
end process;
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.
55
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
BTN0_RG1
Clk
Figura 5.5: Circuito detector de flanco sin registrar la entrada (Mealy: no recomendado para este caso)
56
5. Elementos de memoria
clk
Clk
BTN0
BTN0_RG1
PULSO_BTN0
Si el pulso llega muy cerca del flanco de subida del
reloj el pulso resultante puede ser muy pequeo, o
lo que es peor: puede haber metaestabilidad
Figura 5.6: Cronograma del detector de flanco realizado por Mealy (no recomendado para este caso)
BTN0
BTN0_RG1
D
BTN0_RG2
Clk
Figura 5.7: Circuito detector de flanco registrando la entrada (Moore: recomendado para este caso)
Ahora los pulsos resultantes siempre durarn un ciclo de reloj, como puedes ver en el
cronogramadelafigura5.8.
clk
Clk
BTN0
BTN0_RG1
BTN0_RG2
PULSO_BTN0
Ahora los pulsos siempre duran de un ciclo de reloj
Figura 5.8: Cronograma del detector de flanco realizado por Moore (recomendado para este caso)
Aspues,elcircuitoquetenemosquehacercontendrelbiestableTdelafigura5.3,pero
envezderecibirelpulsodirectamentedelpulsador,lorecibirfiltradoporeldetectorde
flancodelafigura5.7.Elcircuitofinalserelmostradoenlafigura5.9.
57
detector de flanco
biestable T
PULSO_BTN0
T
BTN0
BTN0_RG1
D
LD0
BTN0_RG2
Reset
Reset
Reset
Clk
BTN3
Figura 5.9: Circuito que enciende y apaga un LED con el mismo pulsador
EstecircuitosepuededescribirconelcdigoVHDLmostradoenlafigura5.10.
biest_D1: Process (Reset, Clk)
begin
if Reset = '1' then
BTN0_REG1 <= '0';
elsif Clk'event and Clk='1' then
BTN0_REG1 <= BTN0;
end if;
end process;
biest_D2: Process (Reset, Clk)
begin
if Reset = '1' then
BTN0_REG2 <= '0';
elsif Clk'event and Clk='1' then
BTN0_REG2 <= BTN0_REG1;
end if;
end process;
BTN0
BTN0_RG1
D
Primer
biestable D
Reset
Clk
BTN0_RG2
BTN0_RG1
D
Segundo
biestable D
Reset
Clk
Deteccin de
flanco de subida
PULSO_BTN0 <= '1' when (BTN0_REG1 = '1' and BTN0_REG2='0') else '0';
biest_T: Process (Reset, Clk)
begin
if Reset = '1' then
Q_T <= '0';
elsif Clk'event and Clk='1' then
if PULSO_BTN0 = '1' then
Q_T <= NOT Q_T;
end if;
end if;
end process;
LD0 <= Q_T;
biestable T cuya
entrada
PULSO_BTN0 se ha
transformado en
un pulso de un
ciclo de reloj
Q_T
PULSO_BTN0
T
Reset
Clk
Los dos primeros procesos de la figura 5.10 se pueden agrupar en uno, ya que en los
procesoselvalordelassealesnoseactualizainmediatamentesinoqueseactualizan
al terminar el proceso. As, en el cdigo 520, la seal BTNO_REG1 no toma el valor
inmediatamente de BTN0, y por lo tanto, la seal BTN0_REG2 no recibe el valor que se le
acaba de asignar a BTN0_REG1 (el que le da BTN0) sino el valor que tena BTN0_REG1. En
consecuencia, al salir e proceso, BTN0_REG1 tendr el valor de BTN0 y BTN_REG2 tendr el
antiguo valor de BTN0_REG1 y no el que se le acaba de asignar. Por tanto, BTN0_REG2 est
retrasadauncicloderelojrespectodeBTN0_REG1(queesloquequeremoshacer).
58
5. Elementos de memoria
Debido a esto, el proceso 521 es equivalente al proceso 520. Aunque las asignaciones
estncambiadasdeorden.
biest_Ds: Process (Reset, Clk)
begin
if Reset = '1' then
BTN0_REG1 <= '0';
BTN0_REG2 <= '0';
elsif Clk'event and Clk='1' then
BTN0_REG1 <= BTN0;
BTN0_REG2 <= BTN0_REG1;
end if;
end process;
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
59
6. Contadores
En esta prctica aprenderemos a describir contadores sintetizables en VHDL.
Afortunadamente veremos que es mucho ms sencillo que los contadores diseados
mediante esquemticos que realizamos el curso pasado en ED1 [12]. En esta prctica
veremosalgunasaplicacionesdeloscontadores.
6.1. Segundero
Elsegunderoquehicimoselaopasadoyquetantonoscost,esteaolopodremoshacer
enmuypocotiempo.
EnestaprcticaqueremosqueunLEDsemantengaencendidoduranteunsegundoyse
apagueduranteelsegundosiguiente,estecomportamientoserepetirperidicamente.
Recordando del ao pasado, lo que tenemos que hacer es un divisor de frecuencia.
Nuestro reloj tiene una frecuencia de 50 MHz y queremos una seal de 1 Hz (que
llamaremos S1seg).Elcronogramadeestassealessemuestraenlafigura6.1.Comose
puedeapreciar,laseal S1segestara1solamenteduranteuncicloderelojduranteun
segundo.
T=1 s
(f = 1Hz)
(no est a
escala)
T=20 ns
Clk
S1seg
La seal S1seg ser la entrada a un biestable T, y har que cada segundo, el biestable
cambiedevalor.Elesquemageneraldelcircuitosemuestraenlafigura6.2.
(no est a escala)
T=1 s
T=20 ns
P_Conta1seg
T=20 ns
Biestable T
S1seg
Clk
Clk
50 MHz
S1seg
Reset
1 Hz
LED
Clk
Cada segundo le llega un '1' y entonces
cambiar de estado (se encender y apagar)
Paraimplementarundivisordefrecuencianecesitamoscontaryparacontardebemosser
capaces de sumar (al menos sumar 1 cada vez). Por otro lado, necesitamos saber qu
rangotienenuestracuenta(hastaqunmerollega)paraquelasealqueutilicemospara
contartengaunnmeroadecuadodebits.
61
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;
-- de 0 a 255
14
62
6. Contadores
Ademsdelrangodelasealcuenta,fjateenlaconstantecfincuenta.Envezdeponerel
nmero directamente en la expresin condicional, se pone una constante que hace ms
entendibleelcdigo.
Losdosprocesosdelcdigo61sepuedenunirenunosolo(cdigo62).
P_conta1seg: Process (reset, clk)
begin
if reset = '1' then
cuenta <= 0;
ledaux <= '0';
elsif clk'event and clk = '1' then
if cuenta = fincuenta-1 then
cuenta <= 0;
ledaux <= not ledaux;
else
cuenta <= cuenta + 1;
end if;
end if;
end process;
Cdigo 6-2: Proceso equivalente a los dos procesos del cdigo 6-1
Asegrate que entiendes porqu son equivalentes. Implementa cualquiera de las dos
alternativas en la FPGA. Tendrs dos puertos de entrada (reset y clk) y uno de salida
(LD0).CompruebaqueelLEDluceduranteunsegundoyseapagaenelsiguiente.Yque
sigueassucesivamente.
P_Conta1seg
Clk
Clk
PConta10segs
S1seg
S1seg
conta10s
SEG(6:0)
Reset
Clk
PB3
A
Reset
(no est a escala)
T=20 ns
T=1 s
B
C
T=20 ns
Clk
50 MHz
1 Hz
63
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).
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;
Elprocesoqueseencargadecontarlosdiezsegundos(PConta10segs)vaacontarconla
seal conta10seg,queesdetipo unsigned (ver cdigo63).Elprocesosemuestraenel
cdigo 66. Fjate en la ltima sentencia: debido a que la seal conta10seg es de tipo
unsigned y el puerto de salida LED es de tipo std_logic_vector, hay que convertir
conta10sega std_logic_vector.Parahaceresto,esnecesarioqueambassealestenganel
mismonmerodebits(enestecaso 4:3 downto 0).
64
6. Contadores
AhoraimplementaestecircuitoenlaFPGA,lasentradasysalidasdelcircuitosemuestran
enlafigura6.4
CONTA_10SEGS
6
Clk
4
PB3
Reset
4
SEG(6:0)
LED(3:0)
AN(3:0)
6.3. Cronmetro
Ahora vamos a realizar un cronmetro digital que muestre dcimas de segundos,
unidadessegundo,decenasdesegundoyminutos.Paraello,haremosprimeroundivisor
defrecuenciaquenosobtengaunasealdedcimasdesegundo:S1decima,estedivisorde
frecuenciasersimilaralquegenerabaunadeunsegundo,perolacuentaser10veces
menor.Lasealresultante,envezdesercomoladelafigura6.1,sercomolamostrada
en la figura 6.5. Fjate que la seal S1decima est a uno enun slo ciclo de reloj durante
todosuperiododeunadcimadesegundo.
T=0,1 s (f = 10Hz)
T=20 ns
(no est a
escala)
Clk
S1decima
Figura 6.5: Cronograma de la seal de una dcima de segundo que queremos obtener
ElprocesoqueimplementalasealS1decimaessimilaralproceso P_Conta1segdelcdigo
61 (mira tambin la figura 6.2), pero la cuenta, en vez de ser de 50 millones ser de
5000000(diezvecesmenor).
Apartirdelasealdeunadcima,realizaremoslacuentade10dcimas,10segundos,60
segundos y 10 minutos. Utilizaremos cuatro procesos similares al PConta10segs (figura
65
6.3).DecadaprocesoobtendremoslacuentaenBCD(4bits)yunasealqueindicarel
findecuentaparahacercontaralsiguientecontador.
Elesquemainicialdelcronmetrosemuestraenlafigura6.6.Lefaltaraincluirlapartede
visualizacinporlosdisplaysqueladiscutiremosmsadelante.
P_Conta1decima
S1decima
Clk
PConta10decimas
S1seg
decimas
Clk
PConta60seg
PConta10seg
S1seg
S1decima
PConta10min
S60seg
S10seg
S1seg
segundos
S10seg
dec_segundos
minutos
Reset
PB3
Clk
Clk
Reset
Clk
Reset
decimas(3:0)
Clk
Reset
segundos(3:0)
Reset
dec_segundos(3:0)
minutos(3:0)
PConta10decimas
S1seg
S1decima
S1seg
decimas
Clk
Reset
Reset
decimas(3:0)
As que si has entendido todo lo que se ha explicado hasta aqu, no deberas de tener
muchasdificultadespararealizareldiseomostradoenlafigura6.6.Encasodequenolo
entiendas, repsate todas las prcticas, pregunta al profesor, o pide ayuda. Es
fundamental que entiendas lo que se ha explicado hasta aqu para poder seguir con las
prcticassiguientesquevanaumentandoencomplejidad.
Ahora lo que nos queda es mostrar las cuatro cifras BCD por los cuatro displays. Sin
embargo, hemos visto que en la placa slo tenemos un grupo de siete pines para los
cuatro displays. Tambin tenemos cuatro nodos para controlar qu display se tiene que
encender. Entonces, cmo podremos mostrar las cuatro cifras BCD? Veremos una
primeraaproximacinmanual(solucinmanual)yluegolasolucinautomtica.
66
6. Contadores
nodo
AN3
AN2
AN1
AN0
DISPLAY
dcimas
segundos
decenas de segundos
minutos
La figura 6.8 muestra el decodificador para activar los nodos. Este decodificador es
similaraldelapartado4.2(bloquedeabajodelafigura4.6).
SW6 I(0)
SW7 I(1)
DECOD_2a4
S0
AN(0)
S1
AN(1)
S2
AN(2)
S3
AN(3)
Lo hacemos sin
habilitacin
(siempre habilitado)
AN3-AN0
Controlamos
qu display
se enciende
Adems habr que seleccionar la cifra que se quiere mostrar (dcimas, unidades de
segundo, decenas de segundo o minutos). La seleccin de la cifra se har conforme a la
tabla 61. Como ya sabemos, para seleccionar necesitamos un multiplexor. Despus del
multiplexor, pondremos un conversor a siete segmentos para mostrarlo por los displays.
Lafigura6.9muestraelesquemadeestapartedeldiseo.
decimas(3:0)
segundos(3:0)
dec_segundos(3:0)
00
01
SEG_A-SEG_G
mostrar(3:0)
4
SEG(6:0)
10
4
11
minutos(3:0)
SW6
I(1:0)
SW7
CONV_7SEG
Figura 6.9: Multiplexor que selecciona la cifra BCD segn la configuracin de os interruptores.
Elesquemacompletodeldiseosemuestraenlafigura6.10.
67
P_Conta1decima
S1decima
Clk
PConta10decimas
S1seg
decimas
Clk
PConta60seg
PConta10seg
S1seg
S1decima
PConta10min
S60seg
S10seg
S1seg
segundos
S10seg
dec_segundos
minutos
Reset
Clk
Reset
decimas(3:0)
Clk
PB3
Clk
Clk
Reset
Reset
Reset
segundos(3:0)
dec_segundos(3:0)
minutos(3:0)
4
01
10
I(1:0)
SW6
SW7
AN3-AN0
DECOD_2a4
S0
I(1:0)
AN(0)
S1
AN(1)
S2
AN(2)
S3
AN(3)
00
11
CONV_7SEG
SW6
SW7
mostrar(3:0)
SEG_A-SEG_G
6
El nmero que se
muestra segn estn
los interruptores
SEG(6:0)
Ahoracreaunnuevoproyectollamado crono_manual,implementaeldiseodelafigura
6.10 en la FPGA y comprueba que funciona. Evidentemente, es un cronmetro de
prestacionesmuymalas,porquenopuedesvisualizarsimultneamentemsdeuncifra.
TienesqueseleccionarlaciframanualmenteconlosinterruptoresSW6ySW7.
6.3.2. Mostrar los dgitos. Solucin automtica
Hemos visto las limitaciones de la solucin anterior. Si quisieses ver dos cifras
simultneamente, podras probar a mover el interruptor manualmente lo ms
rpidamente posible. Es obvio que esta solucin no es muy cmoda, as que vamos a
intentarbuscarunaalternativa.
Lasolucinpodraserqueenvezdequenosotroscambiemoslaseal I(1:0)moviendo
los interruptores SW6 y SW7, hicisemos un circuito que haga como si los movisemos
peridicamentedemaneraautomtica.Lavelocidaddelcambiodebesertanrpidaque
no sea perceptible por nosotros los humanos. Por ejemplo, si cambiamos el display cada
milisegundoseguramentenonosdemoscuentadequeestcambiando,salvoquecomo
lucemenostiempo,loveremoslucirconmenorintensidad.
As que vamos a probar de esta manera: crearemos otro contador similar al que genera
una seal de peridica de un segundo (proceso P_conta1seg del cdigo 61) o similar al
que hemos creado en el cronmetro para contar una dcima de segundo (figura 6.6).
Nuestro contador crear una seal peridica de un milisegundo (s1mili) como la
mostradaenlafigura6.11.
T=1ms
(f = 1kHz)
Relacin:
T=20 ns
clk
50MHz
s1mili
1kHz
(no est a
escala)
frecuencia
50MHz
= 50000
1kHz
periodo
1ms
1000000ns
=
= 50000
20ns
20ns
Figura 6.11 : Cronograma de la seal de una milsima de segundo que queremos obtener
68
6. Contadores
s1mili
Segundos
CUENTA4MS
AN_0
AN_1
M
DS
US
AN_3
AN_2
AN_1
dec
AN_2
AN_0
AN_3
mostrar
dec
US
DS
4 x 1 ms
US
DS
UM
DM
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.
69
P_Conta1decima
S1decima
Clk
S1decima
Clk
PConta10decimas
S1seg
S1seg
4
decimas
PConta10seg
PConta60seg
PConta10min
S60seg
S10seg
S1seg
S10seg
dec_segundos
segundos
minutos
Reset
Clk
decimas(3:0)
Clk
BTN3
Reset
Clk
Reset
S1decima
cuenta4ms
Reset
Reset
dec_segundos(3:0)
minutos(3:0)
4
Clk
segundos(3:0)
PConta4milis
P_Conta1mili
S1mili
Clk
cuenta4ms
00
01
10
11
Clk
CONV_7SEG
SEG_A-SEG_G
Reset
Clk
BTN3
mostrar(3:0)
SEG(6:0)
Reset
Lo que antes era I
SW6
SW7
I(1:0)
DECOD_2a4
S0
I
AN(0)
S1
AN(1)
S2
AN(2)
S3
AN(3)
AN3-AN0
Muestraelpuntodecimalenelsegundoycuartodisplayparasepararlossegundosde
lasdcimasdesegundoylosminutos.
Hazqueelcircuitosepuedapararconuninterruptor.Elcronmetrosedebemantener
paradoeneltiempoenqueestaba.
Hazunrelojdeminutosyhoras,haciendoqueelpuntodecimaldelmedioparpadee
cadasegundo.
6.3.4. Optimizacin
Sabemos que hay muchas formas posibles de realizar un circuito. En concreto para este
circuitonospodemosplantearponerelmultiplexorantesodespusdehaberconvertido
elnmeroasietesegmentos.Qumaneracreesqueesmsptimaencuantoaahorrode
recursosdelafpga?
Enlafigura6.14semuestracmoseraestecircuito.Estecircuitoesunaalternativams
costosaentrminosderecursosrespectoalcircuitodelafigura6.9.Tantoporqueusams
convertidores,comoporqueelmultiplexortieneunanchodebusdelosdatosmayor(7
bits frente a 4). Al disear en VHDL debes tener muy presente qu circuito ests
generandoparaevitardesperdiciarrecursos.
70
6. Contadores
CONV_7SEG
4
decimas(3:0)
CONV_7SEG
6
00
segundos(3:0)
6
6
CONV_7SEG
01
SEG(6:0)
10
dec_segundos(3:0)
11
2
CONV_7SEG
minutos(3:0)
4
6
I(1:0)
P_UP
P_UP
P_UP
P_UP
P_UP
P_UP
P_UP
P_DOWN
1
P_DOWN
2
P_DOWN
3
P_DOWN
4
P_DOWN
5
P_DOWN
6
P_DOWN
7
P_DOWN
Figura 6.15: Diagrama de estados del contador ascendente/descendente que vamos a realizar
Para que cada vez que presionemos los pulsadores slo aumente una cifra la cuenta,
debemosrealizarundetectordeflancoparacadapulsador.Poreso,enlafigura6.15las
sealesnoson UPy DOWNsino P_UPy P_DOWN,paraindicarquesehaconvertidolaentrada
enunpulsoysloestactivaduranteunciclodereloj.Sitehasolvidadodecmosehace
eldetectordeflanco,consultaelapartado5.3.2.
La cuenta la vamos a mostrar por el display de la derecha. El esquema del circuito se
muestraenlafigura6.16.Elbloquedelaizquierda,podrestarformadoporunprocesoy
varias sentencias concurrentes, para simplificar, como ya sabemos cmo se hace, se ha
puestoenunslobloque.
71
Detecta_flanco
BTN0
UP
BTN1
DOWN
Clk
Clk
P_UP
P_DOWN
PConta
P_UP
CONV_7SEG
CUENTA
3
6
SEG(6:0)
P_DOWN
Clk
Reset
Reset
BTN3
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.
72
7. Registros de desplazamiento
En esta prctica aprenderemos a disear registros de desplazamiento en VHDL. Hay
variostiposderegistrosdedesplazamiento,segnsealaentradaenserieoparalelo,yla
salida en serie o paralelo. Tambin se pueden desplazar a la izquierda o a la derecha, o
tambinhacerrotaciones(elbitquesaleentraporelotroextremo).Vamosairlosviendo
conejemplos.
Elregistrotendr8bits
Desplazamientoalaizquierda.Laordendedesplazamientoladarelpulsador BTN2.
Habrquerealizarundetectordeflancoparaestepulsador.
Aldesplazaralaizquierda,loquehayaenelbit7delregistroseperder,yloquehaya
enelbitcerosemantendr(noseleasignaningnvalornuevo).
Con carga paralelo. La orden de cargar dato la dar el pulsador BTN0. Habr que
realizarundetectordeflancoparaestepulsador.
Con la orden de carga, el registro se cargar con los datos proporcionados por los
interruptores.Estoes,siSW0estauno,secargarun1enelbit0delregistro.
ElresetserelpulsadorBTN3.
ElvalordelosbitsdelregistrosemostrarnporlosLED.
Enlafigura7.1semuestraelesquemadelregistroquequeremosrealizar.
Lo que haya en los interruptores se
carga en el registro cuando CARGA='1'
SW7
BTN0
CARGA
BTN2
DESPL_IZQ
7
Clk
SW6
SW5
SW4
SW3
SW2
SW1
SW0
Lo que haya en el
registro se mueve a la
izquierda cuando
DESPL_IZQ='1'
Clk
Reset
BTN3
LD7
LD6
LD5
LD4
LD3
LD2
LD1
LD0
Figura 7.1: Esquema del registro de desplazamiento a la izquierda con carga paralelo
ElprocesoVHDLdelregistrodedesplazamientosemuestraenelcdigo71.
73
-- desplazamiento a izquierda
Sihasentendidolasprcticasanteriores,nodeberasdetenerproblemasparaentenderel
cdigo71,salvoparalasentenciaresaltadaennegrita.
Estasentenciaseraequivalentealassealadasennegritaenloscdigos72y73
P_registro: Process (reset, clk)
begin
if reset = '1' then
registro <= (others => '0');
elsif clk'event and clk='1' then
if pulso_carga = '1' then
registro <= dato;
elsif pulso_desplz_izq = '1' then
registro (7) <= registro (6);
registro (6) <= registro (5);
registro (5) <= registro (4);
registro (4) <= registro (3);
registro (3) <= registro (2);
registro (2) <= registro (1);
registro (1) <= registro (0);
end if;
end if;
end process;
Esmuyimportanterecordarquelassealesdentrodeunprocesonoseactualizanhastael
final del proceso, as que, a pesar de que en el cdigo 73 se podra pensar que el
registro(0) se propagara inmediatamente a todos los dems bits, no ocurre porque el
registro(1)notomaelvalorderegistro(0)hastaquesesaledelproceso.
Loqueocurrealdesplazaralaizquierdasemuestraenlafigura7.2.
7
Antes de
desplazar
bit 7 se
pierde
7
despus de
desplazar
bit 0 se
mantiene
y se
duplica
Ahoraimplementaelcircuitoycompruebaquefuncionacorrectamente.Realizalacargay
luego el desplazamiento. Realiza varias cargas en las que unas veces el bit 0 valga 0 y
otras1.Analizaloqueocurreyasegratedequeloentiendes.
74
7. Registros de desplazamiento
Antes de
desplazar
bit 7 va
al bit 0
despus de
desplazar
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;
AhoraimplementaestediseoenlaFPGAycompruebaquerotaaizquierdayderechael
datoquecargasenparalelo.
75
Clk
P_RotaReg
S1decima
rota_izq
registro
LED(7:0)
Clk
Reset
Clk
Reset
PB3
Implementaestecircuitoycompruebaquefuncionacorrectamente.
7.3.1. Variantes del circuito
Puedesrealizarvariantesdeestecircuito:
Elsegundointerruptorhacequehayarotacinosequedeelregistroquieto.
7.4. Conclusiones
Lo principal de este captulo es que hemos aprendido a implementar registros de
desplazamiento en VHDL, repasando el concepto de que el valor de las seales se
actualizaalsalirdelproceso.
76
8. Simulacin
Una aspecto fundamental en el diseo de circuitos es tener la capacidad de simularlos
para detectar errores en la descripcin del comportamiento. Rara vez diseamos un
circuito bien a la primera. En muchas ocasiones es fcil detectar, pero no siempre es as
(recuerdalasvecesquehasvistoqueeldiseonohaceloqueesperabasquehicieseyno
has sabido por qu lo hace mal). Para solucionar los errores en la descripcin, la
simulacindelcircuitoresultadeinestimableayuda.
En la simulacin se inserta el circuito a probar15 en un banco de pruebas. El banco de
pruebasesunmodeloenVHDLqueproporcionalosestmulosalcircuitoparaaspoder
ver si funciona como queremos. El modelo simula el funcionamiento real, y de ah su
nombre(simulacin).Ladescripcindelbancodepruebassueleincluir:
Unareferencia16(instanciacin)alcircuitoaprobar
Uno o varios procesos que generan los estmulos de entrada al circuito (tambin
conocidoscomovectoresdetest).Estosprocesossimulanlasentradasdelcircuitoen
funcionamientoreal.
Por ltimo, la entidad del banco de pruebas no tiene entradas y salidas, ya que se
generantodaslosestmulosenprocesosdentrodelaarquitectura.
Losprocesosdelbancodepruebasnosevanaimplementarenhardware,sonslopara
simulacin. Por tanto, no se necesita que sean descripciones sintetizables, y en
consecuencia,eltipodedescripcinpuedesermuchomslibre.
Elesquemageneraldeunbancodepruebassemuestraenlafigura8.1.
SesueleabreviarconUUT(Unidadbajopruebas:UnitUnderTest)
15
Eninglssediceinstantiation,quealgunostraducencomoinstanciacin(quenoexisteenespaol)yotros
comoreferencia(quesexiste)
16
77
banco de
pruebas
TB_UUT
P_Inputs
Proceso que simula
las entradas al
circuito
UUT
4
In1
Out1
In2
P_Clk
Clk
Proceso que
simula el reloj
Clk
Out2
Reset
P_Reset
Acontinuacinvamosaverlosbancosdepruebasylasimulacinconunejemplosencillo
CUENTA
Clk
Clk
Reset
Figura 8.2: Puertos de entrada y salida del contador que vamos a probar
78
8. Simulacin
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.
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)
79
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_unsigned.all;
USE ieee.numeric_std.ALL;
ENTITY tb_conta_vhd IS
END tb_conta_vhd;
Bibliotecas utilizadas
Quitamos la
std_logic_unsigned
--Inputs
SIGNAL Reset : std_logic := '0';
SIGNAL Clk : std_logic := '0';
--Outputs
SIGNAL cuenta :
cambiar a unsigned
BEGIN
-- Instantiate the Unit Under Test (UUT)
uut: conta10 PORT MAP(
Reset => Reset,
Clk
=> Clk,
cuenta => cuenta
);
tb : PROCESS
BEGIN
-- Wait 100 ns for global reset to finish
wait for 100 ns;
-- Place stimulus here
Figura 8.4: Cdigo creado automticamente por el ISE para el banco de pruebas
Ahrarealizamosloscambiosindicadosenlafigura8.4.
Antes de seguir con los cambios que tenemos que realizar, explicaremos la referencia al
componente(figura8.4F).Enlafigura8.5semuestralasdistintaspartesdelarefrenciaa
uncomponente.Lareferenciaauncomponenteesequivalenteainsertaruncomponente
ennuestraarquitectura.Alinsertarelcomponentetenemosqueindicarcmoseconectan
los puertos (port map). Como un mismo componente se puede insertar varias veces
(puedehabervariasreferenciasauncomponente),lareferenciaempiezaconunnombre
quela identificademaneranica.A continuacinseincluyeelnombredelcomponente
que se referencia. Este nombre debe de coincidir con el nombre de la entidad de dicho
componente.
Porltimo,enelmapeodelospuertos(portmap)alaizquierdaseponenlosnombresde
lospuertosdelcomponente,yaladerechalosnombresdelassealesdelaarquitectura
delbancodepruebas.Estosnombres,aunqueloshemospuestoiguales,notienenporqu
coincidir.Lafigura8.5muestrademaneramsgrficaestaexplicacin.
80
8. Simulacin
nombre de la
referencia
("instanciacin").
Debe ser nico
uut: conta
PORT MAP(
Reset => Reset,
Clk
=> Clk,
cuenta => cuenta
);
puertos del
componente
mapeo de puertos
seales de la
arquitectura
del banco de
pruebas
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
LosprocesosdelVHDLsontilesparagenerarsealesperidicasparasimulacin.Para
ello se utilizan procesos sin lista de sensibilidad pero con sentencias "wait for". Al
terminar un proceso, si no tiene lista de sensibilidad, el simulador vuelve a entrar
inmediatamenteenelprocesohastaencontrarunasentencia wait.Lasentenciadetienela
ejecucindelprocesohastaquetermineeltiempoindicadoporlasentencia "wait for".
Vemosloconunejemplo.Queremosrealizarelprocesoquegeneralasentenciadereloj.
Recuerdaqueestamoshablandoparasimulacin,estasentencianosepodrimplementar
en la FPGA. El cdigo 81 muestra cmo se genera una seal de reloj para simulacin.
Copiaesteprocesoenelbancodepruebas.
P_Clk: Process
begin
clk <= '1';
wait for 10 ns;
clk <= '0';
wait for 10 ns;
end process;
Cdigo 8-1: Cdigo que simula el funcionamiento del reloj de la placa Pegasus (50 MHz)
81
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;
Incluyeelprocesodelcdigo82enelbancodepruebas.Yahorapasaremosasimularlo.
ElprimerpasoesseleccionarelentornodelISEparasimulacin(figura8.7).
Seleccionamos
Behavioural
Simulation
82
8. Simulacin
El banco de
pruebas tiene
que estar
seleccionado
Debe aparecer
Xilinx ISE
Simulator
83
Si no tienes el
Xilinx ISE
Simulator
Properties...
Alpincharen Properties,tesaldrunaventanaconlaquepodrsseleccionarelXilinxISE
Simulator(figura8.10).LuegopinchaenOk.
Seleccionamos
ISE Simulator
Ahora,enlaventanadeSourcesvuelveaseleccionarelbancodepruebas:tb_conta_vhd.Y
dentro de la ventana de Processes, pincha dos veces en Simulate Behavioral Model (figura
8.11).
84
8. Simulacin
Selecciona el
banco de
pruebas
Pincha dos
veces para
simular
Acontinuacinversunaventanaconelcronogramadelasimulacin(figura8.12).
La seal cuenta no est en nmero decimal, para verlo ms claro, pincha en ella con el
botnderechoyseleccionaDecimal (unsigned).Miralafigura8.13.
85
Seleccionamos
Decimal (Unsigned)
para la seal cuenta
8.2. Ampliacin
Ahorarealizalasimulacindecircuitosmscomplicados,quetenganmsentradasqueel
reloj y el reset. Por ejemplo el contador manual del apartado 6.4 y los registros de
desplazamiento.Paraello,tendrsquecrearlosprocesosquegenerandichasentradas.
8.3. Conclusiones
Enestecaptulohemosvistocmopodemoscomprobarquenuestrodiseofuncionabien.
Aunqueavecessepuedenaveriguarloserroresconapartirdelassalidasdelcircuitos,
normalmenteesresultainmediato.
Lacomprobacindelosdiseosesunatareaqueenmuchoscasossuperaentiempode
desarrolloalapropiatareadeldiseo,portanto,nosedebedesestimarsuimportancia.
Enesoscasos,lacomplejidaddelosbancosdepruebapuedesermuyelevada.
As que en este captulo slo hemos hecho una primera aproximacin a la simulacin y
comprobacindecircuitos.Encursosposterioresveremosmtodosmsavanzadospara
ladeteccindeerrores[11].
86
Procesosecuencialqueguardaelestado
Procesocombinacionalqueobtieneelestadosiguienteapartirdelestadoactualydelas
entradas
Procesocombinacionalqueobtienelasalidasapartirdelestadoactualydelasentradas
encasodequeseadeMealy.
Estostresprocesosesesquematizanenlafigura9.1.Fjatequesloelprocesosecuencial
tienerelojyreset.
estado_siguiente
P_Comb_estado
P_Secuencial
estado_actual
D
Clk
Clk
Reset
Reset
P_Comb_salidas
Salidas
Entradas
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.
87
Detector de flanco
Mquina de estados
Pulso_BTN0
BTN0
LD0
Clk
Clk
Clk
Clk
Reset
Reset
Reset
Reset
Como el detector de flanco ya sabemos hacerlo (seccin 5.3.2), slo veremos la mquina
de estados suponiendo que ya tenemos la seal acondicionada (Pulso_BTN0). Al
implementarloenlaFPGAtendrsquecrearelboquededeteccindeflancos.
El diagrama de transicin de estados se muestra en la figura 9.3 (fjate que est hecho
como mquina de Moore). Cuando se presiona el pulsador se pasa de encendido a
apagado, o de apagado a encendido. Recuerda de la seccin 5.3.2 que necesitamos
acondicionarlasealdelpulsadorparaqueseconviertaenunpulsodeunnicociclode
reloj.Poreso,enlaleyendadeldiagramadelafigura9.3,laentradaes Pulso_BTN0yno
directamenteelpulsador:BTN0.
entrada
Leyenda
1
0
ON
1
OFF
0
Pulso_BTN0
estado
LD0
salida
Figura 9.3: Diagrama de transicin de estados para encender un LED con un pulsador
En las clases tericas hemos aprendido a implementar el diagrama de la figura 9.3 con
biestablesypuertaslgicas.AhoraloharemosenVHDL.
Loprimeroqueharemosesdeclararuntipoenumeradoquetendrlosestadosdenuestra
mquina. En nuestro caso sern LED_ON y LED_OFF (no pueden ser ON y OFF porque ON es
unapalabrareservadaenVHDL).
type estados_led is (LED_OFF, LED_ON);
Cdigo 9-2: Declaracin de las seales de estado de tipo estados_led anteriormente declarado
88
Como vemos en el cdigo 93, el proceso empieza con una sentencia CASE. Con esta
sentencia seleccionamos el estado actual (estado_actual) y segn las entradas,
obtendremoselestadosiguiente(estado_siguiente).Silocomparasconeldiagramadela
figura9.3,ambosdicenlomismo,unoencdigoyotrodeformagrfica.
Esmuyimportanteponertodoslosestadosenel CASE.Yqueentodaslasalternativasse
asigne el estado_siguiente, porque de lo contrario, se generara un latch para la seal
estado_siguiente. Y esta seal debe ser combinacional, ya que es en la seal
estado_actualdondesecreaunelementodememoriaparaguardarelvalor.
9.1.2. Proceso secuencial
Elprocesosecuencialactualizaelestadoactualencadaciclodereloj,yloguardaenunoo
varioselementosdememoria(flipflops).Encadaciclodereloj,elestadosiguientepasaa
ser el estado actual. Para ello, simplemente usa biestables D. Por lo tanto es un proceso
muysencillo.Elprocesoincluyeunasentenciaderesetqueindicaelestadodepartida.
P_SEQ_FSM: Process (reset, clk)
begin
if reset = '1' then
estado_actual <= LED_OFF;
elsif clk'event and clk='1' then
estado_actual <= estado_siguiente;
end if;
end process;
89
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
0
s0
0
BTN0
1
1
entrada
Leyenda
s01
1
estado
pulso_btn0
salida
Ahoracreaunnuevoproyecto,importalosficherosVHDLyUCFdelaprcticaanterior17
ymodificaeldetectordeflancodescribindolocomolamquinadeestadosdelafigura
9.4. Por tanto, creando otros tres procesos nuevos: uno secuencial, otro combinacional
paraelestadoyelltimocombinacionalparalassalidas.
Tienesquetenerencuentaquevasacreardosmquinasdeestadoenelmismodiseo,
por lo tanto, tendrs dos tipos enumerados para especificar los estados: uno para el
detector de flanco y otro para encender el LED. Por consiguiente, deben tener nombres
diferentes.Porejemplo,podrasdeclararloscomosemuestraenelcdigo96
-- Estados para encender el LED
type estados_led is (LED_OFF, LED_ON);
signal estado_actual, estado_siguiente : estados_led;
-- Estados para detectar el flanco
type estados_flanco is (INIC, S0, S01);
signal est_fl_act, est_fl_sig : estados_flanco;
Cdigo 9-6: Declaracin de tipos enumerados distintos para cada mquina de estados
Recuerda:ProjectAddCopyofSource....
17
90
Implementaelcircuitoycompruebaquefuncionaigualqueantes.
9.2.1. Variante
Sitefijasenlafigura9.4,unavezquesehadetectadoelflanco,sivieneuncerosignifica
quede BTN0vienelasecuencia0101,yporlotantosegenerarndospulsosseguidos.Sin
embargoesimposiblequepodamospulsardosvecesenunintervalode40ns.Portanto,
elnuevopulsosedebeaunrebotepulsadoryenrealidadesmejornoconsiderarlo.
20ns
clk
Clk
0 1 0 1
BTN0
Pulso_BTN0
As que es mejor realizar el diseo con el diagrama de estados de la figura 9.6, donde
siempre que estamos en el estado S01 volvemos al estado inicial. Por eso hay una X: en
todosloscasos,vuelvoaINIC.
0
0
s0
0
inic
0
1
X
s01
1
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).
91
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.
ElvalordelregistropasadirectamentealosLED.
Elregistrodedesplazamientosereseteaconunvaloriguala00000001.Estohaceque
alresetearsiempreseenciendaelprimerLEDdeladerecha:LD0.
Laordenderotacinalaizquierdaoderecha(dsplza_izq)laproduceunamquinade
estados.Apartedelrelojyelreset,susentradassondossealesqueindicansielLED
que est encendido es uno de los extremos. As, cuando el LED de la derecha est
encendido (registro(0)) se activar la seal tope_dcha, indicando que LD0 est
encendido.SiseenciendeelLEDdelaizquierda, registro(7)valdr1yportantose
activarlasealtope_izq.
Portanto,lamquinadeestadosindicarelsentidoderotacindelosLEDhastaque
lleguealtopedeesesentidoydarlaordendeirensentidocontrariohastallegaral
otrotope.
Elesquemadeestecircuitosemuestraenlafigura9.7,dondeesteldivisordefrecuencia,
elregistrodedesplazamientoylamquinadeestados.
P_Conta1decima
S1decima
Clk
P_Rota
Enable
Clk
rota_izq
Reset
PB3
Clk
Reset
registro
LED(7:0)
1
1
MaquinaEstados
registro(7)
registro(0)
tope_izq
tope_dcha
rota_izq
Clk
Clk
Reset
PB3
registro(0)
registro(7)
Figura 9.7: Esquema del circuito del movimiento alternativo de los LED
92
Delostres bloquesdelafigura9.7,slolamquinadeestadosesundiseototalmente
nuevo. Pues el divisor de frecuencia se ha hecho en el apartado 6.3 (figura 6.5). Y el
registrodedesplazamientoessimilaralosdelaprctica7.
Acontinuacinsemuestraeldiagramadeestadosdelamquinadeestados,sinembargo,
antesdeverla,intentadeducirlaportimismo.Puesenclasesehanrealizadoproblemas
similares18.
entradas
Leyenda
01
0X
IZQ
1
DCHA
0
X0
tope_izq, tope_dcha
estado
rota_izq
salida
10
PuedesobservarqueseharealizadocomomquinadeMoore.
Fjatequehayentradasimposibles,yentradasquedanigual.EnVHDLcomolasntesis
enbiestableslavaarealizarelISEWebpackynuestraFPGAtienetamaodesobrapara
nuestro circuito, por ahora no nos vamos a preocupar de la simplificacin. Por tanto,
podemosdisearelprocesocombinacionaldelestadosiguientedelamaneramscmoda
para nosotros. Por ejemplo, como muestra el siguiente cdigo, considerando slo una
sealdetope19:
P_COMB_ESTADO: Process (estado_act, tope_izq, tope_dcha)
begin
case estado_act is
when IZQ =>
if tope_izq = '1' then
estado_sig <= DCHA;
else
estado_sig <= IZQ;
end if;
when DCHA =>
if tope_dcha = '1' then
estado_sig <= IZQ;
else
estado_sig <= DCHA;
end if;
end case;
end process;
Cdigo 9-7: Cdigo del proceso combinacional que obtiene el estado siguiente
Paraterminar,implementaelcircuitoenteroenlaFPGAycompruebaquefuncionabien.
9.4. Conclusiones
HemosvistocmoimplementarmquinasdeestadosfinitosenVHDL.Alenfrentartecon
las especificaciones de un diseo, debes pensar cmo se transformarlas en una o varias
mquinas de estados. Esta es una de las funciones ms importantes del ingeniero.
Posteriormente,elpasodelamquinadeestadosalVHDLesmsomenosdirecto.
Elproblemadelcarritohechoenclaseessimilar,quizsunpocomscomplicado.
http://laimbio08.escet.urjc.es/assets/files/docencia/EDII/carrito.pdf
18
Sinembargo,silohicieseamano,squetengoqueconsiderarlasentradasimposiblesparapodersimplificar
almximoporKarnaugh
19
93
LaclavequeactivarlasalidaserACBA(podrasercualquierotra).
Una vez que se ha introducido la clave correcta se encendern los 8 LED durante 3
segundos.Traslocualseapagarn.
Durante el tiempo en que los LED estn encendidos (despus de introducir la clave
correcta),elcircuitoignorarsisepresionanlospulsadores.
DespusdehaberintroducidolaclavecorrectaydequesehayanapagadolosLED,se
aceptarsolapamientoparalasiguienteclave.Estoes,laltima Adelaclavecorrecta
podrserlaprimeraAdelasiguienteclaveintroducida(estonotienemuchosentidoen
unaclave,perosehaceascomoejercicio).
Paraesteejercicioslosedarnunasindicaciones:
Hazdetectoresdeflancoparatodoslospulsadores.SiusaslaplacaBasystendrsms
problemasparadetectarunanicapulsacinypodraserconvenienterealizarunfiltro
temporal: no aceptar pulsos durante los 300 ms despus de haber recibido un pulso
(miraelcaptulo11).
Hazeldiagramadeestadosamanoparaelcircuitodetectordelaclave
Un esquema posible del circuito se muestra en la figura 10.1. Aparte del bloque
detectordeflancos,esteesquemaesmuysimilaramuchosproblemasdeexamen,que
tienenunamquinadeestadosyuncircuitotemporizador(vercaptulo16figura16.1)
Comolamquinadeestadosrecibeentradassincronizadasdelmismoreloj:todaslas
entradas de este bloque provienen de bloques con el clk y no vienen del exterior; el
circuitolopuedeshacermedianteunamquinadeMealyodeMoore.
Lasealhabilita_cuentadelamquinadeestadosestaraunohastaquesellegueal
findelatemporizacin(fin_cuenta='1').Lasealfin_cuentavaldr1duranteunslo
ciclodereloj,alterminarlacuenta.Luegovolveracero.
Todoestosonrecomendaciones,peronotienesquehacerelcircuitoexactamentecomo
sepropone.Sitienesotraideadecmodisearlo,llvalaacabo.
95
Detector de flanco
Mquina de estados
8
Pulso_D
BTN0
BTN1
LD(7:1)
Pulso_C
BTN2
Pulso_B
BTN3
Pulso_A
Clk
habilita_cuenta
Temporizador
Enable
fin3seg
Clk
fin3seg
Reset
Clk
Clk
Reset
Reset
Clk
Reset
Reset
10.1. Variantes
PruebaahacerlamquinadeestadosconMealyyconMoore
HazquelosLEDparpadeendurantelostressegundosquesemantienenactivos
Hazelcircuitosinsolapamientodelaclave
Muestraordenadamenteporlosdisplayslasletrasqueintroduceelusuario:elltimo
carcterintroducidoeneldeladerecha,yelprimercarcter(deloscuatroltimos)en
eldelaizquierda.
96
BASYS
Spartan-II
3,3V
4,7k
4,7k
Spartan-3E
3,3V
PIN pulsador
59
BTN0
58
BTN1
57
BTN2
154 BTN3
0,1F
4,7k
PIN pulsador
69
BTN0
48
BTN1
47
BTN2
41
BTN3
4,7k
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.
97
4 flancos de subida
BTN
FILTRO_BTN
300 ms
Slo despus de 300 milisegundos podr haber un nuevo pulso
Figura 11.3: Cronograma de la salida del filtro antirrebotes (FILTRO_BTN) cuando hay rebotes en la
entrada (BTN)
Cmo podramos realizar este circuito? pues con una mquina de estados similar al
detectordeflancosperocontemporizador.Elesquemadelcircuitosemuestraenlafigura
11.4.Enesteesquemapropuesto,eltemporizadorsehabilitacuandosehadetectadoun
flancodesubida.Apartirdeentoncesnoseproducirningnpulsodesubidahastaque
eltemporizadordlasealdequehanpasado3milisegundos.Despusdeesto,sepodr
detectarunnuevoflancodesubida.
Mquina de estados
Filtro_BTN0
BTN0
Temporizador
enablecont
Enable
fin3ms
fin3ms
Clk
Clk
Reset
Clk
Reset
Reset
Figura 11.4: Esquema del circuito que filtra los rebotes de la entrada
0X
Leyenda
s0
00
inic
00
1X
entradas
BTN0,fin3ms
1X
estado
X1
s01
10
espera
01
X0
filtro_btn0
enablecont
salidas
XX
Figura 11.5: Diagrama de estados del circuito que filtra los pulsos
Paracadapulsadorhabraquerealizaruncircuitosimilar.
Implementaelcontadormanualdelaseccin6.4conestosfiltros.UtilizaunaplacaBasys
paracomprobarquerealmentefuncionabien.
98
entradas
BTN3
BTN2
BTN1
BTN0
LED(7:0)
SEG(7:0)
AN(3:0)
CLK
Reset
RESET
SW7
Figura 12.1: Esquema de puertos de entrada y salida del control de la mquina expendedora
Cmoharamosestecircuitopordentro?delasprcticasanterioresyapuedesteneruna
idea. El esquema es similar al de la clave electrnica (recuerda la figura 10.1). La figura
12.2muestraunesquemadeestecircuito.Comopuedesver,incluye:
99
Unbloquededeteccindeflancoparalospulsadores,haciendoquesloseconsidere
unamonedacadavezquesepresionaunpulsador.
Elbloquedelamquinadeestados,quedebesabercuntodinerosehaintroducidoy
controlarlassalidas.
Elbloquedetemporizacin,quedebeindicarelpasode2segundosdespusdehaber
introducidoeldinerosuficienteparadarunalata.
El bloque que convierte a siete segmentos la cantidad de dinero (en este caso un
nmero hexadecimal de una cifra: 4 bits) que se quiere mostrar por el display. Si
quisisemosmostrarunaLcuandodurantelatemporizacin,tendramosqueincluirla
sealenable_contcomoentradadeltemporizador.
Detectaflanco
Mq_estados
8
m1euro
BTN3
BTN2
LED(7:0)
m50cent
BTN1
conv7seg
m20cent
qdinero
BTN0
m10cent
cantidad
s7seg
Clk
Clk
SEG(6:0)
fin2seg
Temporizador
Reset
Clk
enable_cont
Clk
Enable
Reset
Reset
fin2seg
Reset
Clk
Reset
Figura 12.2: Esquema interno del circuito de control de la mquina expendedora simple
C060
100
D=50%
D=80%
D=20%
SielperiododelPWMessuficientementepequeo,eldispositivoqueestgobernado(por
ejemplo,elmotor)nonotarlasvariacionesdelatensinyelresultadoesqueelmotor
recibir una corriente promedio dada por el ciclo de trabajo. La figura 13.2 muestra dos
PWMconciclosdetrabajodistintos.
D=50%
D=50%
D=20%
D=50%
D=20%
D=50%
D=20%
D=20%
101
En los sistemas digitales los cambios en el ciclo de trabajo son discretos. Es decir, no se
puedeponercualquierciclodetrabajo,dependedelnmerodebitsqueutilice.
Porejemplo,paranuestroenunciado,siutilizo3bitsparaelPWM,puedocontarde0a7,
ypuedoutilizarunPWMconlosciclosdetrabajomostradosenlafigura13.3.
0/7 D=0%
4/7 D=57%
1/7 D=14%
5/7 D=71%
2/7 D=28%
6/7 D=86%
3/7 D=41%
7/7 D=100%
ciclo de trabajo: 3
Figura 13.3: Los 8 ciclos de trabajo posibles con un PWM de 3 bits de resolucin
Paralarealizacindelaprcticanecesitamos:
Generar la seal peridica que produzca una seal con periodo T (cuentaPWM). En
realidadseruncontador.Decuntoseraestecontador?Noestandirectosaberlo,te
recomiendodibujarelcronogramaosimularlo.
Compararlacuentadelasealperidicaconelvalordelciclodetrabajo,sielciclode
trabajoesmayorquelasealdelPWMseruno,ysino,sercero.
VCC
R1
FPGA_PWM
PMODHB3:http://www.digilentinc.com/Products/Detail.cfm?&Prod=PMODHB3
20
PMODHB5:http://www.digilentinc.com/Products/Detail.cfm?&Prod=PMODHB5
21
102
AcontinuacinveremosunasprcticasenlasqueademsdelaparterelativaalaFPGAy
elVHDL,realizaremosloscircuitosdepotenciayanalgicosnecesariosparainteractuar
conelmundoreal.Losconocimientosdeelectrnicaanalgicanoseexplicarnendetalle,
yaquesecorrespondenconlaasignaturadeElectrnicaAnalgica.
103
22
Informacinobtenidadehttp://www.doc.ic.ac.uk/~ih/doc/stepper/others/
23
105
Alimentacin
L
L
D
2. Identificarlosterminalesopuestos
Primero conectamos el terminal de alimentacin a la
fuente(Vcc)yponemoscualquierotroterminalatierra.A
este terminal que conectamos a tierra le llamaremos
terminal A. En la figura 14.2 se representa esta conexin.
Al hacer esto vemos que el motor se posiciona y que
cuestamsmoverlo.
A continuacin, manteniendo el terminal A a tierra y el
terminal de alimentacin conectado a la fuente, vamos
probando qu sucede al conectar cada uno de los dems
terminales a tierra. Esto lo hacemos por separado, es
decir,encadamomentohaycomomximodosterminales
atierra.
A
Motor se
posiciona
Aquel terminal que no haga girar un paso al motor sino que haga que pierda par
resistivoserelterminalopuestoa A,estoes,serelterminal C(segnlareferenciade
la figura 14.2). En los otros dos casos, habr un pequeo giro del motor en sentidos
opuestos.Enlafigura14.3semuestraesteconceptodemaneragrfica.
Giro a izquierda
medio paso
Giro a derecha
medio paso
Motor
pierde
par
Figura 14.3: Resultado de poner a tierra cada uno de los otros tres terminales, cuando el motor pierde par
indica que es el correspondiente
Unavezquetengamoslosterminalesidentificados,yapodemosgenerarlassecuenciasde
giro. En la figura 14.4 se muestra la identificacin de los terminales para el motor que
hemosobtenidodeimpresorasHewlettPackardmodelosDJ560CyDJ690c.Estemotoresel
modeloPM55L048deMinebea,cuyashojasdecaractersticassepuedenconsultarenla
pginawebdeMinebea[16].Detodosmodos,elfuncionamientoconotrosmotoresser
similar,aunquetendrsqueleerlascaractersticasdelmotorquetengasparaadaptarel
circuito.
106
Alimentacin
(comn)
A
B y C a tierra
C y D a tierra
D y A a tierra
Figura 14.5: Secuencia de terminales que se ponen a tierra para obtener el giro del motor
As que para girar el motor tenemos que poner a tierra de manera secuencial los
terminales.Delafigura14.5podemosobtenerlasecuenciadeterminalesqueseponena
tierraparaobtenerelgirodelmotor:ABBCCDDAAB...
Enlafigura14.6semuestralasecuenciadelosterminalesquesetienenqueponeratierra.
Semuestranlosdossentidosdegiro.
terminal a tierra
1
A
C
D
1
1
1
1
1
tiempo
6
1
1
1
1
1
terminal a tierra
tiempo
1
C
D
1
1
1
1
Figura 14.6: Secuencia de terminales que se ponen a tierra para obtener el giro del motor en ambos sentidos
107
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.
Basys
AC0 (P49)
JA1 (P81)
AC1 (P48)
JA2 (P91)
AC2 (P81)
JA3 (P82)
AC3 (P47)
JA4 (P92)
CONTROL_MOTOR
BTN3
BTN0
CLK
IZQ
DCHA
RESET
SW0
LassalidaslasconectaremosalosconectoresPMOD.LaPegasustieneunnicoconector
PMOD, que se ha llamado puerto accesorio (accesory port) en la figura 2.1. Los pines se
muestranenlatabladeladerechadelafigura14.7.
La Basys tiene cuatro conectores PMOD. Para esta prctica usaremos el conector de la
izquierda(JA).
Ahoratenemosquedisearelcircuitoylamquinadeestadosquegenerelassecuencias
apartirdelasentradasquesehandescrito.Intentadisearlosinayuda,ysivesquetienes
dudas,consultaeldiseopropuestomostradoenlafigura14.8.
Tambinseveinfluenciadoporeltipodeelectrnicadepotencia.Conunaelectrnicaespecficasepuede
aumentarlafrecuencia
24
108
11X
0XX
100
AB
1100
101
0XX
100
BC
0110
Leyenda
entradas
CTS,BTN0,BTN3
11X
11X
DA
1001
0XX
100
101
101
101
11X
estado
ABCD
CD
0011
salidas
0XX
100
Figura 14.8: Esquema de la mquina de estados para el bloque de control de motor de la FPGA
Observa en la figura 14.8 que hay una seal CTS que no est en las entradas del bloque
mostradoenlafigura14.7.Estaseallatendremosquegenerarnosotrosyserlaquenos
marquelafrecuenciadelmotor.Paraelmotordenuestrocaso,serunasealde100Hz
(unacentsimadesegundo).Estaseallatenemosquegenerardemodoqueestactiva
duranteunslocicloderelojencadacentsimadesegundo.
Otracosaquetienesquetenerencuentaesqueparaestapropuesta,lassealesdeentrada
delospulsadoresBTN0yBTN3nosetienenquepasarporundetectordeflanco,sinoquese
muestreancontinuamente,yaquequienhacedefiltroeslaseal CTS,puesestactivaun
slocicloderelojduranteunacentsimadesegundo.
Enlafigura14.8lasflechasquegeneranlasdossecuenciasdegirosehapuestodedistinto
color.Fjatequeladecolorazul,ladelBTN0tienepreferenciasobreladeBTN3.Enrealidad
esindiferenteculescojas,perotienesqueescogerunasecuenciasobrelaotra.
Ahora tendras que realizar el circuito en VHDL. Es recomendable que para que te sea
msfcildepurar,lassalidas A, B, Cy DtambinlassaquesporcuatroLED.Inclusopara
depurarelcircuitopodrasbajarlafrecuenciadegiroycomprobarqueefectivamentese
generanlassecuenciasdeseadas.
Una vez que tenemos el circuito y vemos que los LED se mueven como pensamos, nos
quedahacerquelassalidas A, B, CyDordenenalosterminalesdelmotorestaratierraoa
latensindealimentacinsegnsuvalor.Estoloveremosenelapartadosiguiente.
109
entrar en saturacin. Esto provocar que el terminal del motor TA est a una tensin
cercanaacero(segnlacadadetensinentrecolectoryemisordeltransistor).
Porotrolado,sihayuncerolgicoalasalidadelaFPGA,habrcerovoltiosenlabasedel
transistorynocircularcorrienteporlabase.Porlotantoeltransistorestarencorteyel
terminaldelmotorTAestaraVcc.
VCC
VCC
VCC
TA
R1
VCC
TB
R1
FPGA_A
VCC
TC
R1
FPGA_B
TD
R1
FPGA_D
FPGA_C
Estecircuitopodrafuncionarbien,sinembargohayquetenercuidadoporquelaFPGA
vaalimentadaconunafuentedetensindistintaqueladelmotor(3,3VlaFPGAy24Vel
motor).ParaevitarquecorrientesotensionesaltaslleguenalaFPGAdesdeelmotor,es
recomendable aislar la parte de la FPGA de la del motor. Para aislar ambas partes
podemosusaroptoacopladores.Losoptoacopladoresutilizanfotodiodosyfototransitores
paratransmitirinformacinproporcionandounaislamientoelctricoentreloscircuitosde
entradaysalida.Lafigura14.10muestrauncircuitoquesehaprobadoquefunciona.
VCC=24V
Mximo 24V,
pero puede
funcionar a
partir de 5V
VCC=24V
TA
PM55L-48
el resto de
terminales
tienen un
circuito igual
VCC=24V
optoacoplador
22k
220
STA471
FPGA_A
4N35
FPGA_GND
las tierras
son distintas
110
Losdiodosquehayentreelcolectordeltransistorylaalimentacin V2CCsonparaquela
corrientequecirculaporlosdevanadosdelmotortengauncaminodecirculacincuando
eltransistorentraencorte,evitandoconestosobretensiones.
El esquema muestra los valores concretos en las resistencias. El transistor que se ha
utilizadoeselSTA471deSanken[20].Estetransistoresundarlingtonysehausadoporque,
al igual que el motor, se ha reutilizado de la impresora. Este integrado tiene los cuatro
transistores. Con pocas modificaciones se podra haber utilizado otro similar como un
TIP120(darlington)ounIRL540(MOSFET).
El optoacoplador utilizado es el 4N35, pero se pueden utilizar otros similares como el
ACPL-847 que tiene como ventaja que tiene cuatro optoacopladores integrados en el
circuito integrado. Fjate que tal como est hecho el circuito con los optoacopladores, la
sealdelaFPGAseinvierte,asquehabraquenegarlassalidasdelaFPGA:invertirlas
salidas de la mquina de estados, o si no, saber que el motor va a girar en sentido
contrarioaloqueharasinoptoacopladores.
ComoeltransistorSTA471nonoshasidofcildeencontrarparacomprar(locogimosdela
propia impresora), hemos realizado una variante del circuito con un integrado SN754410
que incluye dos medios puentes en H. La variante del circuito se muestra en la figura
14.11. El driver del motor del SN754410 tiene una habilitacin que se pone a uno para
dejarlohabilitado.
habilitacin del
driver a '1'
Mximo 24V,
pero puede
funcionar a
partir de 5V
V1CC=5V
V1CC=5V
optoacoplador
10k
V2CC=24V
V2CC=24V
22k
220
PM55L-48
el resto de
terminales
tienen un
circuito igual
FPGA_A
TA
SN754410
ACPL_847
FPGA_GND
las tierras
son distintas
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.
111
re
mi
fa
sol
la
si
do
FPGA
interfaz
pulsadores
Amplificador de audio
Generador de
frecuencias
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
Realizar un circuito que genere una seal peridica lo hemos hecho en la prctica de
contadores(prctica6),asquenodeberamostenermuchoproblema.Lasealgenerada
nodeberaestarlamitaddetiempoaunoylaotramitadacero,estoes,nodeberaestara
unounnicociclodereloj.
FinalmentelasealsalidadelaFPGAservirdeentradaalaetapadeamplificacin,ya
suvez,lasalidadelamplificadorseconectaraunaresistenciadecarga,queennuestro
EstaprcticahasidodesarrolladaeneldepartamentodeTecnologaElectrnicademaneraconjuntaporlos
profesores:BelnArredondo,SusanaBorromeo,JoaqunVaquero,NorbertoMalpicayFelipeMachado.La
implantacindeestaprcticaenclasessehadetalladoenelartculo[10]
25
PmodAMP1:http://www.digilentinc.com/Products/Detail.cfm?&Prod=PMODAMP1
26
113
casounaltavoz.Lafiguramuestraelesquemamsgeneraldelamplificador.Laprimera
etapa del amplificador eleva los niveles de tensin y la segunda etapa amplifica la
corrientequeserentregadaalaltavoz.
3.3 V
0V
Ri
FPGA
Ve
Ri
Ro
+
_
Ave
ie
Ro
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.
114
Problemas tericos
115
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
117
Sepide:
a) Dibujarlosbloquesinternosdelcircuito,conentradas,salidasysealesintermedias
b) Dibujareldiagramadetransicindeestadosdelamquinadeestadosquecontrolael
circuito.RealizarlacomomquinadeMoore.
c) Latabladeestadossiguientesysalidas
d) LatabladeexcitacindelosbiestablesusandobiestablesJK
e) EcuacinsimplificadasloparalasalidaPLAY
f) RealizarelmodeloVHDLdelosprocesosdelamquinadeestados
16.2. Solucin
16.2.1. Bloques internos del circuito
Para realizar el circuito necesitamos una mquina de estados y un temporizador de un
segundoconhabilitacin(enable).Elesquemadeestecircuitosemuestraenlafigura16.1.
MaqEstados
T1s
PLAY
PLAY
T1s
Clk
FW
FW
Enable
Reset
Temporizador
Enable
T1s
Clk
Clk
Reset
Reset
EltemporizadorlonecesitamosparasabersisepresionaelpulsadorPdurantemsdeun
segundo.Porlotanto,lamquinadeestadostendrunaentradamsqueindicaelfinde
la cuenta (T1s). Tambin necesitamos una salida ms que va a habilitar el temporizador
(Enable).Cuandoeltemporizadorestdeshabilitadonopodrestaractivalasealdefin
decuentaT1s.
16.2.2. Diagrama de transicin de estados
NospidenrealizareldiagramadelamquinadeestadosporMoore.
Lamquinadeestadostienedosentradas:
ElpulsadorP
LasealqueindicaquehapasadounsegundoT1S(findelacuenta)
Ytressalidas
118
Ordendeplay(PLAY)
Ordendeavancerpido(FW).
Habilitacindeltemporizador(Enable)
Elordendelasentradasysalidaseneldiagramaserelsiguiente(figura16.2).
entradas
P T1s
Estado
Play FW Enable
Salidas
FjatequeesunamquinadeMoore,porloquelassalidasestnenelpropioestado.
Imposible
X 1
InicialmentepartimosdelestadoINICIAL,endondePLAY='0'y
FW='0',escomoestarenpause.Enesteestadoelcontadorest
deshabilitado,ynosmantendremosaquhastaquesepulse P
(figura16.3).
Comoelcontadorestdeshabilitado,nuncallegarlasealde
quehapasadounsegundo(T1s),porloquesiempresercero.
0 0
INICIAL
0 0 0
1 0
INICIAL
0 0 0
ESP1S
0 0 1
habilitamos la cuenta
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
Sinoocurrenadadeloanteriornosmantendremosendichoestado.Estoes,sinoseha
soltadoelpulsador(P='1')ynosehallegadoalfindecuenta(T1s='0').
119
En Inicial:
Imposible
1 0
X 1
0 0
1 0
ESP1S
0 0 1
1 1
INICIAL
0 0 0
0 X
FW
0 1 0
PLAY
1 0 0
Estandoen PLAYnopuedellegarelfindecuentaporqueestdeshabilitadoelcontador.Y
nosmantendremosenesteestadomientrasnosevuelvaapulsarP.
Estando en FW no puede llegar el fin de cuenta porque est deshabilitado el contador. Y
nosmantendremosenesteestadomientrasnosesuelte P.Estasdosposibilidadessehan
aadidoenlafigura16.6.
En INICIAL
imposible
1 0
X 1
0 0
1 0
ESP1S
0 0 1
En PLAY y FW:
Imposible
1 1
INICIAL
0 0 0
0 X
X 1
FW
0 1 0
PLAY
1 0 0
1 0
0 0
EstandoenFWcuandosesuelteelpulsadorP,elsistemavaalPLAY(figura16.7)
En INICIAL
imposible
1 0
X 1
0 0
1 0
INICIAL
0 0 0
ESP1S
0 0 1
En PLAY y FW:
Imposible
1 1
0 X
X 1
PLAY
1 0 0
0 0
FW
0 1 0
1 0
0 0
120
A este estado le llamamos ESP1S2 (espera un segundo, 2). Podemos decir tambin que es
prcticamenteimposiblequeenelmismoinstantequesoltemoselpulsador(P='0')haya
justoterminadolacuenta(T1S='1').EnestehipotticocasodecidimosiralestadoINICIAL
(haberidoalestadoFWhubiesesidoigualmentevlido).
Enlafigura16.8semuestraeldiagramafinaldelamquinadeestados.
En INICIAL
imposible
1 0
X 1
0 0
1 0
ESP1S
0 0 1
se suelta P
antes del
segundo
0 X
0 X
1 0
ESP1S2
1 0 1
PLAY
1 0 0
X 1
0 0
FW
0 1 0
1 0
0 0
1 1
se mantiene
el play
prcticamente imposible que
sean 0 1 en ese instante
En PLAY y FW:
Imposible
1 1
INICIAL
0 0 0
se mantiene
P pasado el
segundo
1 0
121
Moore: slo
dependen del
estado
Estado
actual
Inicial
Esp1s
Fw
Play
Esp1s2
Estados imposibles
Entradas
Q2 Q1 Q0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 1
0 0 1
0 0 1
0 0 1
0 1 0
0 1 0
0 1 0
0 1 0
0 1 1
0 1 1
0 1 1
0 1 1
1 0 0
1 0 0
1 0 0
1 0 0
1 X 1
1 1 0
P
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
X
X
T1s
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
X
X
Salidas
Pl
0
0
0
0
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
X
X
FW
0
0
0
0
0
0
0
0
1
1
1
1
0
0
0
0
0
0
0
0
X
X
Estado
siguiente
t+1
t+1
t+1
En Q2 Q1 Q0
0
0 0 0
0
X X X
0
0 0 1
0
X X X
1
0 1 1
1
0 1 1
1
0 0 1
1
0 1 0
0
0 1 1
0
X X X
0
0 1 0
0
X X X
0
0 1 1
0
X X X
0
1 0 0
0
X X X
1
0 0 0
1
0 0 0
1
1 0 0
1
0 1 0
X
X X X
X
X X X
condiciones imposibles
condiciones imposibles
condiciones imposibles
condiciones imposibles
condiciones imposibles
condiciones imposibles
K Q(t+1)
0 Q(t)
1
0
0
1
1 Q(t)
Q(t) Q(t+1) J K
0
0
0 X
0
1
1 X
1
0
X 1
1
1
X 0
Tabla 16.3: Tabla de entradas necesarias para obtener una transicin en biestables J-K
Ahora,nosfijamosenlatabladelatabla16.2paraverencadacasoqutransicioneshayy
enconsecuencia,quentradasnecesitamos.Enlatabla16.4tenemosloquenospideeste
apartado.
122
Estado
actual
Inicial
Esp1s
Fw
Play
Esp1s2
Estados imposibles
Entradas
Q2 Q1 Q0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 1
0 0 1
0 0 1
0 0 1
0 1 0
0 1 0
0 1 0
0 1 0
0 1 1
0 1 1
0 1 1
0 1 1
1 0 0
1 0 0
1 0 0
1 0 0
1 X 1
1 1 0
P
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
X
X
T1s
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
X
X
Estado
siguiente
Salidas
Pl
0
0
0
0
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
X
X
FW
0
0
0
0
0
0
0
0
1
1
1
1
0
0
0
0
0
0
0
0
X
X
t+1
t+1
t+1
En Q2 Q1 Q0
0
0 0 0
0
X X X
0
0 0 1
0
X X X
1
0 1 1
1
0 1 1
1
0 0 1
1
0 1 0
0
0 1 1
0
X X X
0
0 1 0
0
X X X
0
0 1 1
0
X X X
0
1 0 0
0
X X X
1
0 0 0
1
0 0 0
1
1 0 0
1
0 1 0
X
X X X
X
X X X
J2 K2 J1 K1 J0 K0
0 X 0 X 0 X
X X X X X X
0 X 0 X 1 X
X X X X X X
0 X 1 X X 0
0 X 1 X X 0
0 X 0 X X 0
0 X 1 X X 1
0 X X 0 1 X
X X X X X X
0 X X 0 0 X
X X X X X X
0 X X 0 X 0
X X X X X X
1 X X 1 X 1
X X X X X X
X 1 0 X 0 X
X 1 0 X 0 X
X 0 0 X 0 X
X 1 1 X 0 X
X X X X X X
X X X X X X
Tabla 16.4: Tabla de excitacin de los necesarias para obtener una transicin en biestables J-K
PLAY
00 01 11 10
0 0
1 1
PLAY = Q2 + Q1 Q0
Q2
Q2
Q1 Q0
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;
123
124
--------------------------------
Clk
Reset
P se ha pulsado ms de 1 segundo
P-1SEG
MaqEstados
Temporizador
P
P+1SEG
P+1S
PLAY
P-1S
FW
Clk
Reset
Clk
Reset
Sin embargo, esto no es un temporizador sino
otro mquina de estados que usa temporizador
Sinembargo,fjatequeelprimerbloque(elllamadotemporizador)esmuchomsqueun
temporizador. Es una mquina de estados. Por lo tanto, al hacerlo de esta manera se
debendefinirlasdosmquinasdeestados:
Elesquematendraqueserelmostradoenlafigura16.11(osimilar).
125
MaqEstados2
MaqEstados1
P
Clk
P+1S
PLAY
P-1S
FW
P-1S
Reset
Clk
Reset
Temporizador
Enable
Clk
F1S
Reset
Clk
Reset
Ha pasado un segundo con el pulsador presionado.
Si mantengo pulsado, cada segundo que pase
volver a activarse, pero me da igual
P F1s
Estado
P+1S P-1S
Salidas
Imposible
X 1
0 0
1 0
1 0
REPOSO
0 0
Slo estamos un ciclo de
reloj en MENOS1S (P1S='1'), nos vamos
directamente a reposo.
Podramos considerar que:
- F1S no puede ser 1
- P no puede ser 1 (no hay
rebotes y no es posibles
presionar tan rpido el
pulsador)
ESP1S
0 0
X X
0 X
MENOS1S
0 1
1 1
Ha soltado el pulsador. Si
lo suelta a la vez que ha
llegado el segundo,
tambin consideramos que
lo ha soltado, por eso 0 X
1 X
0 X
MAS1S
1 0
EsimportantenotarquelasealP-1Sesactivaduranteunslociclodereloj,mientrasque
laseal P+1Sestactivatodoeltiempoqueestpulsado Papartirdequehapasadoun
segundo.
126
Lasegundamquinadeestadossemuestraenla
figura 16.15. En la figura 16.14 tenemos la
interpretacin de las entradas y salidas. Esta
mquina de estados fue propuesta por muchos
alumnos, pero es necesario haber incluido la
primera,puescomopuedeapreciarse,laprimera
es algo ms complicada y no la segunda sola no
funcionaracomoindicaelenunciado.
entradas
P+1S P-1s
Estado2
PLAY FF
Salidas
0 0
0 1
INIC
0 0
0 1
PLAY
1 0
0 0
La entrada
1 1
es imposible
para todos
los estados
1 0
1 0
FF
0 1
1 0
Figura16.15:Diagramadelasegundamquinadeestadosdelasolucinalternativa
127
17.1. Enunciado
Paraelejerciciodelcaptulo16,ahoraqueremosmostrarpor4displaysdesietesegmentos
el estado en que estamos. Para simplificar, para este ejercicio suponemos que slo
tenemostresestados: PAUSA, PLAY, FW(avancerpido).Yqueremosmostrarlossiguientes
caracteresporlos4displayssegnelestadoenqueestemos.
En Play
En Pausa
PAUS
En avance rpido
FF
PLAY
Figura 17.1: Texto que deben de mostrar los displays de siete segmentos
A
El funcionamiento de los displays es igual que el de la placa de
F
prcticas.Estoes,tenemos4nodosquecontrolanelencendidode
B
G
cadaunodelosdisplays:AN3,AN2,AN1,AN0.Recuerdaquefuncionana
C
E
D
Recuerda que slo tenemos 7 puertos para todos los segmentos y no 7x4=28 segmentos.
Por lo tanto, debes usar el mismo segmento para los cuatro displays (tal como lo hemos
hechoenprcticas).
Lasentradasysalidasdelcircuitosemuestranenlafigura17.3.Elrelojdelcircuito(Clk)
vaa10MHz.
Display
estado_actual
(PAUSA, PLAY,FF)
Clk
(10MHz)
AN(3..0)
SEG(6..0)
Reset
Reset
Sepide:
a) Realizar el esquema interno del circuito, indicando los bloques y explicando su
funcionamiento.
b) RealizarelmodeloVHDLdelaarquitecturacircuito
129
17.2. Solucin
Laprcticadelcontadorautomticoylaexpendedora(apartado12.2)sonsimilaresaeste
circuito.Laexplicacindetalladadecmohacerestecircuito(multiplexareneltiempo)se
encuentraenlaprcticadelcontadorautomtico(apartado6.3.2).
17.2.1. Esquema interno del circuito
Elesquemadelcircuitosemuestraenlafigura17.4
Codificacin de estados:
Pausa 00
Play 01
FF
10
P.ej: "P" :
"0001100"
GFEDCBA
"P"
00
"A"
"0001100"
"U"
00
01
"P"
"L"
"0001100"
10
" "
01
SEG3
" "
10
SEG2
no se usa
no se usa
11
"1111111"
10
"F"
no se usa
11
"0010001"
SEG1
10
"F"
"0001110"
"1111111"
01
"Y"
"0001000"
"1111111"
00
"0010010"
01
"A"
"1000111"
"1111111"
"S"
00
"1000001"
"0001000"
SEG0
"0001110"
11
no se usa
11
"1111111"
"1111111"
estado_actual
Conta1ms
Conta4ms
T1ms
SEG0
00
SEG1
01
Cuenta4ms(1..0)
4
Clk
(10MHz)
Reset
Reset
SEG2
10
SEG3
11
"1110"
00
"1101"
01
SEG
AN
Reset
Reset
Esto es un
decodificador
"1011"
10
"0111"
11
130
--- 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;
131
18.1. Enunciado
Queremosrealizarelcontroldeunrobotrastreador,estoes,
un coche que sigue una lnea negrasobre un suelo blanco.
Para ello disponemos de un coche elctrico de juguete y
queremosrealizarelcircuitoelectrnicoquecontroleelgiro
delcoche(derechaoizquierda).
Para saber si el coche est sobre la lnea negra o no, se
ponendosdetectoresdeinfrarrojosenlapartedelanteradel
coche (ver figura de la derecha). Los detectores de
infrarrojos estn juntos y centrados en el alern delantero
delcoche.ElreceptorqueestalaizquierdaselellamarRI
yeldeladerechaRD.
Sinentraraexplicarelfuncionamientodelosdetectoresde
infrarrojos,lonicoquenosimportaparaesteproblemaes
que los detectores dan un cero cuando estn sobre la lnea
negra (ya que la luz emitida no se refleja) y devuelven un
unocuandoestnsobreelsueloblanco(porquesereflejala
luz).
RI: receptor
izquierdo
RD: receptor
derecho
Rueda
delantera
izquierda
Rueda
trasera
izquierda
As que usaremos las salidas de los detectores de infrarrojos como entradas de nuestro
sistemadecontrol.Porlotanto,nuestrosistemadecontroltendrdosentradas: RIy RD,
queindicanlosvaloresdevueltosporlosreceptoresizquierdoyderechorespectivamente.
Como se muestra en la figura de la derecha, nuestro
RI
GI
sistema tendr dos salidas: GI y GD, que dan la orden de
GD
RD
girar a la izquierda o derecha, respectivamente. Por
Clk
ejemplo: GD='1'serlaordendegiraraladerecha.Silas
Reset
dos estn a cero significa que el coche debe ir recto.
Obviamente, nunca se deber dar la orden de girar a la Figura 18.2: Esquema de entradas
y salidas del sistema de control
derechaeizquierdasimultneamente.
Elobjetivoesdirigirelgirodelcochedelasiguientemanera:
1. Cuandolosdosreceptoresestnsobrelalneanegra,elcocheestdondedebeestary
porlotantonosedebengirarlasruedas(GI='0'yGD='0').Verfigura18.3.A.
2. Cuando uno de los receptores no est sobre la lnea negra (se recibe un 1 de dicho
receptor),sedebegirardemodoquesecorrijaladesviacin.Estoes:
2.1. Si el receptor de la izquierda no est sobre la lnea negra pero el receptor de la
derecha s est, el coche se est saliendo por la izquierda y deber girar a la
derecha.Verfigura18.3.B.
133
B
Sobre la lnea
Se va de la lnea
por la izquierda
RI='1' RD='0'
RI='0' RD='0'
giro derecha
giro derecha
No giro
Datosadicionalesdelsistema:
Losdosreceptoresestnlomsjuntosposibleyelanchodelalneanegraesmayor
queelanchodelosdosreceptoresjuntos.Portantonuncasepodrpasardeestarsobre
solamenteunreceptoraestarsobresloelotroreceptor.Estoes,entremediassiempre
habrunmomentoenelqueseestarsobrelosdosreceptores
El reloj del circuito (Clk) es mucho ms rpido que la mecnica del coche y su
movimiento.
Porestoltimo,nuncapodremospasardeestarconlosdosreceptoressobrelalneaa
estartotalmentefueradelalnea.Entremediaselcocheestarconunreceptorsobrela
lneayelotrono.
Existeunpulsadorpararesetearasncronamente(Reset),peronosedebedepresionar
duranteelfuncionamientonormaldelcircuito.
Alempezarseponeelcochealineado.Estoes,losdosreceptoresestarnsobrelalnea
negra.
La velocidad del coche va a ser constante y para esta versin del coche no la
utilizaremosnilacontrolaremos,asquenonosimporta.
Sepide:
a) Especificar las entradas, salidas y estados del sistema de control de giro del coche
considerndolo como mquina de Moore. Realizar el diagrama de estados de la
mquinadeestadosquecontrolaelcircuito.
134
b) Latabladeestadossiguientesysalidas
c) LatabladeexcitacindebiestablesparabiestablesJK
d) EcuacionessimplificadasparalassalidasyparalasentradasJdedosdelosbiestables
delcircuito(nosepidenlasentradasK)
18.2. Solucin
18.2.1. Entradas, salidas y estados. Diagrama de estados
Lasentradasysalidasdelsistemadecontrolsonlasmismasquelasdelafigura18.2que
sepusoenelenunciado.
Dosentradas(RI,RD):
RI:receptordeinfrarrojosdelaizquierda.
RD:receptordeinfrarrojosdeladerecha.
Paraambas,losvaloresson:
0:siestsobrelalnea
1:siestfueradelalnea
Lascuatrocombinacionessonposibles(verfigura18.4)
Dossalidas(GI,GD)
GI='1':Ordenparagiraralaizquierda.
GD='1':Ordenparagiraraladerecha.
Lasposiblessalidasson:
(GI,GD)= (1,0)Giroalaizquierda
(GI,GD)= (0,1)
Giroaladerecha
(GI,GD)= (0,0)Recto
(GI,GD)= (1,1)Nosedebeponernunca
Ms all izquierda
A la izquierda
Centrado
A la derecha
Ms all derecha
RI='1' RD='1'
RI='1' RD='0'
RI='0' RD='0'
RI='0' RD='1'
RI='1' RD='1'
GI='0' GD='1'
GI='0' GD='1'
GI='0' GD='0'
GI='1' GD='0'
GI='1' GD='0'
B
Giro a la derecha
D
No giro
Giro a la izquierda
Ahora hay que realizar el diagrama de transicin de estados. Recordamos que en este
apartadohayquerealizarlocomounamquinadeMoore.
Elordendelasentradasysalidaseneldiagramaserelsiguiente(figura18.5):
135
entradas
RI RD
Estado
GI GD
Salidas
FjatequeesunamquinadeMoore,porloquelassalidasestnenelpropioestado.
Inicialmentepartimosdelestado CENTRO,endonde RI='0'y RD='0',ya queelenunciado
dicequealprincipiosecolocaelcochesobrelalnea.Enesteestadosemantieneelcoche
singirar,hastaqueunodelosreceptorescambiea1.
En Centro:
Imposible
Imposibl
e
Se sale por
la izquierda
Se sale por
la derecha
1 1
0 0
1 0
0 1
CENTRO
0 0
Estando en CENTRO, si el detector RI se pone a uno significa que nos salimos por la
izquierda(verfigura18.4.B).Yporlotanto,hayquegiraraladerecha.Locontrarioocurre
sieldetector RDseponea1.Loquenopuedeocurrirnuncaesqueestandosobre lalnea
ambos receptores se pongan a la vez los dos a uno, pues primero se debe poner uno y
luego el otro. Para ello creamos un estado IZQ al que vamos cuando desde CENTRO el
receptor RI se pone a 1. En este estado, el giro se hace a la derecha. Saldremos de este
estadocuandohayamoscorregidoladesviacinyvolvamosalcentro(ambosreceptoresa
0).Lomismoocurresielcochesedesvaaladerecha.
En Centro:
Imposible
1 1
0 0
1 0
1 0
IZQ
0 1
0 0
0 1
0 1
CENTRO
0 0
0 0
DCHA
1 0
Sin embargo, puede ocurrir, que estando en los estados IZQ o DCHA el coche se salga
totalmente de la lnea. Eso lo sabremos porque ambos receptores estn a 1. Para ello
crearemoslosestadosF_IZQyF_DCHA(deFueraIZQuierdayFueraDereCHA).
136
En IZQ
Imposible
0 1
En Centro:
Imposible
1 1
En DCHA
Imposible
1 0
0 0
0 1
1 0
1 0
IZQ
0 1
0 0
0 1
CENTRO
0 0
1 1
0 0
DCHA
1 0
0 1
1 0
En F_IZQ
Imposible
0 1
0 0
1 1
F_IZQ
0 1
En F_DCHA
Imposible
1 0
0 0
F_DCHA
1 0
1 1
1 1
Eldiagramadelafigura18.8podrasereldefinitivo.Sinembargo,podemosfijarnosque
en realidad los estados F_IZQ y F_DCHA no son necesarios ya que tienen la misma salida
que IZQy DCHArespectivamente,yendichosestados,lasmismasentradasconducenalos
mismosestados(osonentradasimposibles).Asquesepodrasimplificarenelmostrado
enlafigura18.9.
En IZQ
Imposible
0 1
1 X
En Centro:
Imposible
1 1
En DCHA
Imposible
1 0
0 0
X 1
1 0
IZQ
0 1
0 0
0 1
CENTRO
0 0
0 0
DCHA
1 0
Estediagramanosepuedesimplificarmsyaquecadaestadotieneunasalidadistinta.
DisendolocomomquinadeMealyssepodrasimplificarms(peronosepedaenel
examen).
18.2.2. Tabla de estados siguientes y salidas
Antesdenadatenemosquecalcularelnmerodebiestablesque
necesitamosyasignarlesunosvalores.Comotenemos3estados,
nos vale con dos biestables. Asignaremos los mismos valores de
los estados que de las salidas, pero vale cualquier otra
combinacin.Laasignacinsemuestraenlatabla18.1.
Estado
CENTRO
IZQ
DCHA
Q1
0
0
1
Q0
0
1
0
Latabladeestadossiguientesysalidassemuestraenlatabla18.2.
137
Moore: Slo
dependen del estado
CENTRO
IZQ
DCHA
Sin usar (imposible)
Estado
actual
Entradas
Q1
0
0
0
0
0
0
0
0
1
1
1
1
1
RI
0
0
1
1
0
0
1
1
0
0
1
1
X
Q0
0
0
0
0
1
1
1
1
0
0
0
0
1
RD
0
1
0
1
0
1
0
1
0
1
0
1
X
Salidas
GI
0
0
0
0
0
0
0
0
1
1
1
1
X
GD
0
0
0
0
1
1
1
1
0
0
0
0
X
Estado
siguiente
t+1
Q1
0
1
0
X
0
X
0
0
0
1
X
1
X
Q0
0
0
1
X
0
X
1
1
0
0
X
0
X
t+1
condiciones imposibles
condiciones imposibles
condiciones imposibles
K Q(t+1)
0 Q(t)
1
0
0
1
1 Q(t)
Q(t) Q(t+1) J K
0
0
0 X
0
1
1 X
1
0
X 1
1
1
X 0
Tabla 18.3: Tabla de entradas necesarias para obtener una transicin en biestables J-K
Ahoranosfijamosenlatabladelosestadossiguientes(tabla18.2)paraverencadacaso
qutransicioneshayyquvaloresenlasentradasdelosbiestablesJKnecesitamos.
138
Moore: Slo
dependen del estado
CENTRO
IZQ
DCHA
Sin usar (imposible)
Estado
actual
Entradas
Q1
0
0
0
0
0
0
0
0
1
1
1
1
1
RI
0
0
1
1
0
0
1
1
0
0
1
1
X
Q0
0
0
0
0
1
1
1
1
0
0
0
0
1
RD
0
1
0
1
0
1
0
1
0
1
0
1
X
Estado
siguiente
Salidas
GI
0
0
0
0
0
0
0
0
1
1
1
1
X
Entradas en los
biestables para
conseguir las
t+1
transiciones QiQi
t+1
GD
0
0
0
0
1
1
1
1
0
0
0
0
X
Q1
0
1
0
X
0
X
0
0
0
1
X
1
X
Q0
0
0
1
X
0
X
1
1
0
0
X
0
X
t+1
J1 K1
0 X
1 X
0 X
X X
0 X
X X
0 X
0 X
X 1
X 0
X X
X 0
X X
J0 K0
0 X
0 X
1 X
X X
X 1
X X
X 0
X 0
0 X
0 X
X X
0 X
X X
Tabla 18.4: Tabla de excitacin de los necesarias para obtener una transicin en biestables J-K
ParalasentradasdelosbiestablesutilizamoslosmapasdeKarnaugh.Semuestranenla
figura18.10,seincluyenlasK,aunquenosepedan.
J1
J0
RI-RD
00 01 11 10
00 0
01 0
11 X
10 X
RI-RD
00 01 11 10
00 0
01 X
11 X
10 0
Q1-Q0
Q1-Q0
RIRD
J0= RIRD
J1= RIRD
RIRD
K1
RI-RD
K0
00 01 11 10
00 X
01 X
Q1-Q0
RI-RD
00 01 11 10
00 X
01 1
Q1-Q0
11 X
11 X
10 1
10 X
RD
K1= RD
K0= RI
RI
139
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.
SipulsoPtresvecesrpidamenteobtengoelnmero2(recuerdaquehemosquitadola
letra C para simplificar). Cada vez que he pulsado P, se habr mostrado el carcter
correspondientealasecuencia:AB2
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
estemvilparasimplificarslotenemosunatecla)
Salidas:
A:MostrarelcarcterA
DOS
LISTO
Clk
Reset
B:MostrarelcarcterB
DOS:Mostrarelnmero2
LISTO:Indicaqueelcarcterindicadoporunadelassalidas(A, B, DOS)estlistopara
fijarlo, y se deber pasar a la siguiente posicin. Slo est activa durante un ciclo de
reloj.
141
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.
ynosehacenadahastaquesedejedepulsarP.AldejardepulsarPsevuelvealestado
inicial.
Consideraciones:
Lasealderelojvaa1MHz
De las salidas de caracteres: A, B y DOS, slo puede haber una de ellas activa
simultneamente.Spuedeserqueningunadeellasestactiva.
Laentrada Pnotienerebotes.Portanto,conlafrecuenciadelrelojquesetiene,ser
imposiblepulsarlatecla Pduranteunslociclodereloj,lospulsossernbastantems
largos.
Todas las entradas y salidas del circuito son de un bit, no se pide mostrar nada en
displaysdesietesegmentos.
Sepide:
a) Dibujar los bloques internos del circuito, con entradas, salidas y las seales
intermedias que se vayan a usar. Indicar la funcin de cada uno de los bloques
internos.
b) Encorrespondenciaconloanterior,dibujareldiagramadeestadosdelamquinade
Mealyquecontrolaelcircuito.
Nosepiderealizarlatabladeestados.
142
19.2. Solucin
19.2.1. Bloques internos del circuito
Para realizar este circuito necesitamos una mquina de estados y un temporizador que
nos permitir medir si ha transcurrido un segundo despus de pulsar la tecla P y si se
mantienelateclapresionadadurantemsdeunsegundo.
Elcircuitotienedosbloques:lamquina
deestadosyuntemporizador.
Delamquinadeestadossaleunaseal
intermedia E que va al temporizador.
Esta seal funciona como habilitacin
(enable)demodoquecuandoEescero,el
contador se pone a cero y no cuenta,
mientras que cuando E es uno, se
habilitalacuenta.
MaqEstados
A
B
P
DOS
T
LISTO
E
Clk
A
B
DOS
LISTO
Reset
T
Temporizador
E
T
Clk
Clk
Reset
LasealTindicacundohatranscurrido
Reset
un segundo desde que E se ha
Figura 19.2: Bloques internos del circuito
mantenidoactivo(E='1').
19.2.2. Diagrama de estados
Paraeldiagramadeestadosusaremoselsiguienteordendeentradasysalidas
entradas
entradas
Salidas
Salidas
P T / A B D L E
P T / A B DOS LISTO E
Estado
Estado
Como hay muchas salidas, para que el diagrama sea ms fcil de entender, en vez de
ponerunos,sevanaponerlasinicialesdelasseales(figura19.4).Loscerossepondrn
comoceros.FjatequeesunamquinadeMealy.
Empezamosahacerdeldiagramasegnlasinstrucciones:
PartimosdelestadoINICIAL,dondeesperamosaquese En INICIAL
pulse P, todas las salidas estn a cero, incluida la Imposible
T='1'
habilitacin del contador, porque ahora no hay que
X 1
contarsegundos(elusuariopuedetardarloquequiera
enescribiruncarcter).
00/00000
Como la habilitacin del temporizador est a cero
(E='0'),serimposiblequeTseauno.
P0/A000E
INICIAL
Nosquedamosenelestado INICIALhastaquesepulse
P,cuandoestoocurretenemosqueactivarlasalida Ay
eltemporizador(E='1')
CuandosehapulsadoP,tenemosqueverdurantecuntotiemposepulsaP:
143
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
00/00000
INICIAL
P0/A000E
P0/A000E
ESP_S_A
00/A0000
PT/00DL0
Cuando se fija el nmero (se presiona T durante un segundo o ms), la salida LISTO, se
debeponeraunoduranteuncicloderelojyluegosedebeesperaraquesesueltelatecla
(estado ESP_S).Sinohacemosestaespera,enelestado INICIALconsideraramosquese ha
vueltoapresionarP,yesoseraunerrorporqueiramosdenuevoalestadoESP_S_A.
En INICIAL
Imposible
T='1'
X 1
00/00000
P0/A000E
P0/A000E
INICIAL
ESP_S_A
00/A0000
PT/00DL0
00
/0
00
00
En ESP_S
Imposible
T='1'
X 1
P0/00000
ESP_S
se ha soltado P
En elenunciadoindicaquesisepulsaTporunsegundooms,sedebedefijarel2.Esto
incluyeel casoimprobable(aunquenoimposible)enelquesoltamoslateclajustoenel
instanteenelquellegaelavisodequehapasadounsegundo.Enestecasodebemosfijar
el2(loindicaelenunciado).Laentradaparaestosera(0,T).
En este caso no hara falta ir al estado ESP_S sino que se ira directamente al estado
INICIALDetodosmodos,iralestado ESP_Snoseraunerror,porqueinmediatamenteen
elcicloderelojsiguienteseiraalestado INICIAL,yesimposiblequeelusuarioconsiga
144
presionar el pulsador con solo un ciclo de reloj entre medias (y las teclas no tienen
rebotes).
00/00000
En INI
INICIAL
CIAL
Imposible
Im
posible
T='1'
X 1
P0/A000E
P0/A000E
INICIAL
ESP_S_A
0T/00DL0
00
En ESP_S
Imposible
T='1'
X 1
/0
P0/00000
00
00
ESP_S
00/A0000
PT/00DL0
Caso
improbable.
Se fija el dos
(un slo ciclo)
Figura 19.8: Se fija el dos en el caso improbable que suelte la tecla a la vez que termina la temporizacin
Ahora,estandoenelestado ESP_S_A,estoes,elpulsadorpresionadoymostrandolaletra
A.Sisesueltalateclaantesdequepaseunsegundo,entradas:(0,0).Tenemosque:
EsperaraversisevuelveapresionarPantesdeunsegundoestadoESP_P_A
En INICIAL
Imposible
T='1'
X 1
00/00000
P0/A000E
P0/A000E
INICIAL
0T/00DL0
00
0
/0
P0/00000
0
00
En ESP_S
Imposible
T='1'
X 1
ESP_S
ESP_S_A
00/A000E
00/A0000
PT/00DL0
E='1' se vuelve a
habilitar la cuenta
ESP_P_A
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)
Enelcasoimprobablequeamboseventosocurransimultneamente,elenunciadodice
quesefijelaletraA.Lasentradasseran(P,T),paraestecaso,podemosirnosalestado
inicial(comoenelcasoanterior,ydeestenosiramosenelsiguienteciclodereloja
ESP_S_A(puesPvaaseguirpresionadayaquenolapodremospulsarduranteunnico
ciclodereloj),onospodemosirdirectamentealestado ESP_S_A (loquesuponeponer
unaflechams).Eneldiagramahemoselegidolaprimeraopcin(ambassonvlidas).
145
Se fija A
0T/A00L0
PT/A00L0
En INICIAL
Imposible
T='1'
X 1
00/00000
P0/A000E
P0/A000E
INICIAL
ESP_S_A
0T/00DL0
00
En ESP_S
Imposible
T='1'
X 1
Se reinicia
temporizador
00/A000E
00/A0000
Se reinicia
temporizador
ESP_P_A
PT/00DL0
P0/0B000
/0
P0/00000
00
00
Se muestra B
ESP_S
ESP_S_B
ESP_S_B (ESPera a Soltar, B)
esperamos a ver qu pasa antes:
- soltar P
- pasa un segundo
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
En INICIAL
Imposible
T='1'
X 1
00/00000
INICIAL
P0/A000E
P0/A000E
0T/00DL0
00
00
/0
00
En ESP_S
Imposible
T='1'
X 1
P0/00000
ESP_S
ESP_S_A
00/A000E
00/A0000
ESP_P_A
PT/00DL0
P0/0B000
0T/00DL0
PT/00DL0
ESP_S_B
P0/0B00E
00/0B000 Se ha soltado
P antes de un
segundo
146
Ahora,estandoenelestadoESP_P_B,estoes,elpulsadorsinpulsarymostrandolaletraB,
puedepasar:
(P,0):Sehapulsadoantesdequepaseunsegundo:SemuestraeldosESP_S_2
(0,0):NohapasadounsegundoynosehapulsadoPSeguimosesperando
(0,T):HapasadounsegundoypulsadoP
FijamoslaB,yvamosalestado:INICIAL
0T/A00L0
PT/A00L0
En INICIAL
Imposible
T='1'
X 1
00/00000
P0/A000E
P0/A000E
INICIAL
ESP_S_A
00/A000E
00/A0000
ESP_P_A
0T/00DL0
PT/00DL0
00
P0/00000
/0
00
00
En ESP_S
Imposible
T='1'
X 1
ESP_S
P0/0B000
0T/00DL0
PT/00DL0
0T/0B0L0
PT/0B0L0
Ha pasado 1 segundo
sin pulsar P (o justo
se ha pulsado en el
segundo)
ESP_S_B
P0/0B00E
00/0B000
ESP_P_B
00/0B00E
P0/00D00
Se ha pulsado
P antes de un
segundo
Ylosdosestadosquequedansehacendemanerasimilar.
Slohayquetenerencuentaquedespusdel2vienelaA.Yporeso,delestado ESP_P_2
vieneESP_S_A.
Eldiagramadeestadosfinalsemuestraenlafigura19.13.
147
0T/A00L0
PT/A00L0
00/00000
En INICIAL
Imposible
T='1'
X 1
P0/A000E
P0/A000E
INICIAL
00/A000E
00/A0000
ESP_S_A
ESP_P_A
0T/00DL0
PT/00DL0
00
00
/0
00
P0/A0000
En ESP_S
Imposible
T='1'
X 1
P0/0B000
P0/00000
0T/00DL0
PT/00DL0
ESP_S
0T/0B0L0
PT/0B0L0
00/00D00
/0
0D
L0
L0
ESP_P_2
0T
0D
/0
PT
0T/00DL0
PT/00DL0
ESP_S_2
ESP_S_B
P0/0B00E
00/0B000
ESP_P_B
00/0B00E
P0/00D00
P0/00D0E
00/00D0E
148
20.1. Enunciado
1. Explicarbrevementequeslametaestabilidadyporquseproduce
2. Calcularlafrecuenciamximaalaquepuedefuncionarelsiguientecircuito
D0
Q0
D1
Q1
S1
S0
Clk
Teniendoencuentalassiguientescaractersticas:
Biestables
tpmax=20ns
tsu=10ns
th=5ns
fmax=25MHz
tpmin=4ns
Puertas
tpmax=10ns
lgicas
tpmin=5ns
Entradas
tpmax=10ns
tpmin=5ns
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
149
entradas D0
salidas
D1
tpmax(A)+tpmax(puerta)+tsu(D0)=30ns
Q0
tpmax(D0)+tpmax(puerta)+tsu(D1)=40ns
tpmax(D1)+tpmax(puerta)+tsu(D1)=40ns
Q1
tpmax(D1)+2tpmax(puerta)+tsu(D0)=50ns
Elcaminocrticotarda50ns,porlotantolafrecuenciamximaes:
1
=
50 ns
109
50
Hz =
1000
50
106 Hz = 20 MHz
Como es una frecuencia menor que la frecuencia mxima de los biestables (25 MHz), la
frecuenciamximadeestecircuitoserde20MHz.
150
21.1. Enunciado
Delcircuitodecaptulo20(figura20.1):
1) Obtenerlatabladeexcitacindelautmata
2) Dibujareldiagramadetransicindeestados
3) EsunamquinadeMooreodeMealy?Porqu?
21.2. Solucin
21.2.1. Tabla de excitacin del autmata
Primeroobtenemoslasecuacionesdelasentradasdelosbiestablesylassalidas.
Ecuaciones
D0 = A + Q1
S0 = Q0
D1 = Q0 Q1
S1 = Q1
Estados
entrada
Estado
siguiente
Q1 Q0
0 0
0 0
0 1
0 1
1 0
1 0
1 1
1 1
A
0
1
0
1
0
1
0
1
Q1' Q0'
1
1
1
1
1
1
1
1
1
0
1
1
0
0
0
1
Organizamos la tabla de manera que sea ms fcil ver el estado siguiente segn la
entrada.
Estado siguiente
Estados
A=0
A=1
Q1 Q0
0 0
0 1
1 0
1 1
Q1' Q0'
1
1
1
1
1
0
0
0
Q1' Q0'
1
1
1
1
1
1
0
1
151
10
10
1
X
11
11
El ltimo apartado: es una mquina de Moore porque las salidas no dependen de las
entradas.Estosepuedededucirdirectamenteobservandoelcircuito.
152
22.1. Enunciado
Calcularlafrecuenciamximaalaquepuedefuncionarelsiguientecircuito
B
A
D0
D1
Q0
S1
Q1
Clk
Teniendoencuentalassiguientescaractersticas:
Biestables
tpmax=25ns
tsu=20ns
th=10ns
fmax=20MHz
tpmin=11ns
Puertaslgicas
tpmax=15ns
tpmin=7ns
Entradas
tpmax=50ns
tpmin=16ns
22.2. Solucin
Veamosculeselcaminocrtico:
Salidas
Entradas
D0
D1
tpmax(A)+2tpmax(puerta)+tsu(D0)=50+215+20=
100ns
tpmax(B)+tpmax(puerta)+tsu(D1)=50+15+20=85ns
Q0
tpmax(Q0)+3tpmax(puerta)+tsu(D0)=25+315+20=
90ns
Q1
tpmax(Q0)+tpmax(puerta)+tsu(D0)=25+15+20=
60ns
tpmax(Q1)+2tpmax(puerta)+tsu(D1)=25+215+20=
75ns
ElcaminocrticovadelaentradaAalbiestableD0.Comoson100ns,lafrecuenciamxima
es
153
1
=
100ns
109
100
Hz = 10 MHz
Como 10 MHz es una frecuencia menor que la mxima fijada por los biestables, la
frecuenciamximadelcircuitoser10MHz.
154
24.1. Enunciado
Delcircuitosiguiente:
B
A
D0
Q0
D1
S1
Q1
Clk
S0
1) Obtenerlatabladeexcitacindelautmata
2) Eldiagramadetransicindeestados
3) EsunamquinadeMooreodeMealy?Porqu?
24.2. Solucin
24.2.1. Tabla de excitacin del autmata
Primeroobtenemoslasecuacionesdelasentradasdelosbiestablesylassalidas.Incluimos
latablasdeverdadparaqueluegonosseamsfcilrellenarlatabladelautmata.
D0 = A Q1
S0 = Q0
D1 = B Q0
S1 = Q1
Q1
0
0
1
1
A
0
1
0
1
D0
0
1
0
0
Q0
0
0
1
1
B
0
1
0
1
D1
0
1
0
0
Apartirdelasecuacionesobtenemoslosestadossiguientessegnlasentradas:
155
Q1
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
Q0
0
0
0
0
1
1
1
1
0
0
0
0
1
1
1
1
A
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
B
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
Q1' Q0'
0
0
1
0
0
1
1
1
0
0
0
0
0
1
0
1
0
0
1
0
0
0
1
0
0
0
0
0
0
0
0
0
Tabla 24.2: Tabla del estado siguiente
Organizamoslatablaparapoderver mejor
loscambiosdeestadosconlasentradas
entradas
Estado
Q1 Q0
0 0
0 1
1 0
1 1
00
00
00
00
00
AB
01 10
10 01
00 01
10 00
00 00
11
11
01
10
00
estado
actual
estado
siguiente
Tabla 24.3: Tabla de excitacin del autmata
10
1X
01
01
00
00
0X
11
X0
X1
10
10
XX
11
11
El ltimo apartado: es una mquina de Moore porque las salidas no dependen de las
entradas.Estosepuedededucirdirectamenteobservandoelcircuito).
156
Referencias
[1]
AdeptdeDigilent.ProgramagratuitoparaprogramarlasFPGAsporUSB:
http://www.digilentinc.com/Products/Detail.cfm?Prod=ADEPT
Basys,tarjetaconFPGAfabricadaporDigilent.
ManualdereferenciadelaversinE:
http://www.digilentinc.com/Data/Products/BASYS/BASYS_E_RM.pdf
Pginawebdelatarjeta:
http://www.digilentinc.com/Products/Detail.cfm?NavPath=2,400,791&Prod=BASYS
CreativeCommons.http://creativecommons.org/
Licenciadeestemanual:http://creativecommons.org/licenses/byncnd/3.0/
D.Jones,Steppingmotortypes.http://www.cs.uiowa.edu/~jones/step/index.html
DepartamentodeTecnologaElectrnica,UniversidadReyJuanCarlos.http://gtebim.es
DigilentInc.http://www.digilentinc.com/
E.Carletti,Motorespasoapaso,caractersticasbsicas.http://robots
argentina.com.ar/MotorPP_basico.htm
ElectrnicaDigitalII.http://gtebim.es/docencia/EDII
Ericsson,IndustrialCircuitsApplicationNote:StepperMotorBasics
http://library.solarbotics.net/pdflib/pdf/motorbas.pdf
F.Machado,N.Malpica,J.Vaquero,B.Arredondo,S.Borremeo,Aprojectorientedintegral
curriculumonElectronicsforTelecommunicationEngineers,EDUCONConference,
Madrid,abril2010
F.Machado,S.Borromeo,N.Malpica,DiseodigitalavanzadoconVHDL,Ed.Dykinson,
2009.
F.Machado,S.Borromeo,N.Malpica,DiseodigitalconesquemticosyFPGA,Ed.
Dykinson,2009.
IEEE,InstituteofElectricalandElectronicsEngineers.http://www.ieee.org
IEEEStandardforVHDLRegisterTransferLevel(RTL)Synthesis,IEEEStd1076.6
ISEWebPackdeXilinx.http://www.xilinx.com/tools/webpack.htm
Paradescargarversionesantiguas:
http://www.xilinx.com/webpack/classics/wpclassic/index.htm
Minebea.http://www.minebea.co.jp/english/index.html
Mitsumi.http://www.mitsumi.co.jp/latest/Catalog/indexuse/index_e.html
Opencores.http://www.opencores.org
Pegasus,tarjetaconFPGAfabricadaporDigilent.Manualdereferencia:
http://www.digilentinc.com/Data/Products/PEGASUS/PEGASUSrm.pdf
Pginawebdelatarjeta:
http://www.digilentinc.com/Products/Detail.cfm?NavPath=2,398,537&Prod=PEGASUS
SankenElectric,SemiconductorsGeneralCatalog.Abril2010.Disponible:
http://www.sankenele.co.jp/en/prod/library/lib_semicon_all.htm
Elapartadodetransistoresestdisponibleen:
http://www.sankenele.co.jp/en/prod/library/images/get_pdf.gif
ShinanoKenshi.StepperMotors.http://www.shinano.com/xampp/steppermotors.php
Solarbotics.StepperMotors.
http://www.solarbotics.net/library/pieces/parts_mech_steppers.html
UniversidadReyJuanCarlos,http://www.urjc.es
Wikipedia,Motorpasoapaso,http://es.wikipedia.org/wiki/Motor_paso_a_paso
Xilinx,http://www.xilinx.com
H
[2]
[3]
[4]
[5]
[6]
[7]
[8]
[9]
[10]
[11]
[12]
[13]
[14]
[15]
[16]
[17]
[18]
[19]
[20]
[21]
[22]
[23]
[24]
[25]
157
[26] XilinxUniversityProgramVirtexIIProDevelopmentSystem.Hardwarereferencemanual.UG069
v1.09marzo2005.http://www.xilinx.com/univ/xupv2p.html
[27] XSTUserGuide9.2i.Xilinx,http://ww.xilinx.com/itp/xilinx92/books/docs/xst/xst.pdf
H
158