Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Diseno de Circuitos Digitales Con VHDL v1.01 PDF
Diseno de Circuitos Digitales Con VHDL v1.01 PDF
FelipeMachado,SusanaBorromeo
Versin1.01creadael20dejuliode2010
EstaversindigitaldeDiseodecircuitosdigitalesconVHDLhasidocreadaylicenciada
porFelipeMachadoSnchezySusanaBorromeoLpezconunalicenciadeCreative
Commons.Estalicenciapermitelosusosnocomercialesdeestaobraentantoencuantose
atribuyaautoraoriginal.Estalicencianopermitealterar,transformarogenerarunaobra
derivadaapartirdeestaobra
Conestalicenciaereslibredecopiar,distribuirycomunicarpblicamente
estaobrabajolascondicionessiguientes:
Reconocimiento:debesreconocerycitaralosautoresdeestaobra
Nocomercial:nopuedesutilizarestaobraparafinescomerciales
Sinobrasderivadas:Nosepuedealterar,transformarogeneraruna
obraderivadaapartirdeestaobra
Paramsinformacinsobrelalicencia,visitaelsiguienteenlace:
http://creativecommons.org/licenses/byncnd/3.0/
EstaobraestdisponibleenelarchivoabiertodelaUniversidadReyJuanCarlos:
http://eciencia.urjc.es/dspace/handle/10115/4045
http://hdl.handle.net/10115/4045
Paramsinformacinsobrelosautores:
http://gtebim.es/~fmachado
http://gtebim.es/
ISBN:9788469346525
Diseo de circuitos digitales con VHDL
Versin1.01creadael20dejuliode2010
FelipeMachadoSnchez
SusanaBorromeoLpez
DepartamentodeTecnologaElectrnica
UniversidadReyJuanCarlos
Mstoles,Madrid,Espaa
http://gtebim.es/
http://gtebim.es/~fmachado
AmihermanoAle
FMS
DiseodecircuitosdigitalesconVHDL
Agradecimientos
QueremosagradeceralDepartamentodeTecnologaElectrnicadelaUniversidadReyJuanCarlos
porfomentarladocenciadecalidadysuapoyoconstanteennuestraslaboresdocentes.
Tambin queremos agradecer a los alumnos de Ingeniera de Telecomunicacin por su inters
generalizadoenaprenderysuscomentariossobrenuestradocenciayprcticas
LosAutores
DiseodecircuitosdigitalesconVHDL
ndice
ndice............................................................................................................................................................ 1
Lista de acrnimos ....................................................................................................................................... 5
ndice de figuras ........................................................................................................................................... 6
ndice de cdigo VHDL................................................................................................................................. 9
ndice de tablas .......................................................................................................................................... 11
1. Introduccin............................................................................................................................................ 13
2. Encender un LED................................................................................................................................... 15
2.1. Tarjetas Pegasus y Basys..................................................................................................................................... 15
2.1.1. La tarjeta Pegasus....................................................................................................................................... 15
2.1.2. La tarjeta Basys ........................................................................................................................................... 16
2.2. Cmo encender un LED........................................................................................................................................ 17
2.3. Diseo del circuito................................................................................................................................................. 18
2.4. Sntesis e implementacin del circuito.................................................................................................................. 24
2.5. Programacin de la FPGA .................................................................................................................................... 26
2.5.1. Programacin de la tarjeta Pegasus............................................................................................................ 26
2.5.2. Programacin de la tarjeta Basys................................................................................................................ 29
2.6. Cambiar el tipo de FPGA de un proyecto.............................................................................................................. 31
2.7. Trabajar desde varios ordenadores con un mismo proyecto................................................................................ 32
2.8. Conclusin............................................................................................................................................................. 33
3. Sentencias concurrentes........................................................................................................................ 34
3.1. Diseo de un multiplexor....................................................................................................................................... 35
3.1.1. Diseo usando puertas lgicas.................................................................................................................... 35
3.1.2. Diseo usando varias sentencias concurrentes .......................................................................................... 36
3.1.3. Uso de sentencias condicionales................................................................................................................. 37
3.1.4. Uso de procesos.......................................................................................................................................... 37
3.2. Diseo de un multiplexor de 4 alternativas ........................................................................................................... 38
3.3. Diseo de un multiplexor de 4 bits de dato y dos alternativas.............................................................................. 39
3.4. Conclusiones......................................................................................................................................................... 40
4. Codificadores, decodificadores, convertidores de cdigo....................................................................... 41
4.1. Convertidor de binario a 7 segmentos .................................................................................................................. 41
4.2. Decodificador de 2 a 4.......................................................................................................................................... 43
4.3. Codificador de 8 a 3.............................................................................................................................................. 45
4.4. Conclusiones......................................................................................................................................................... 48
5. Elementos de memoria........................................................................................................................... 50
5.1. Biestable J -K ......................................................................................................................................................... 50
5.2. Descripcin de biestables en VHDL para sntesis ................................................................................................ 51
5.3. Encendido y apagado de LED con un pulsador.................................................................................................... 54
5.3.1. Primera solucin.......................................................................................................................................... 55
5.3.2. Detector de flanco........................................................................................................................................ 55
5.4. Conclusiones......................................................................................................................................................... 59
6. Contadores............................................................................................................................................. 61
6.1. Segundero............................................................................................................................................................. 61
6.2. Contador de 10 segundos..................................................................................................................................... 63
6.3. Cronmetro ........................................................................................................................................................... 65
6.3.1. Mostrar los dgitos. Solucin manual........................................................................................................... 67
6.3.2. Mostrar los dgitos. Solucin automtica..................................................................................................... 68
6.3.3. Mejoras del circuito...................................................................................................................................... 70
6.3.4. Optimizacin................................................................................................................................................ 70
6.4. Contador manual................................................................................................................................................... 71
6.5. Conclusiones......................................................................................................................................................... 72
7. Registros de desplazamiento................................................................................................................. 73
7.1. Registro de desplazamiento con carga paralelo................................................................................................... 73
7.2. Rotacin a la derecha y a la izquierda.................................................................................................................. 75
7.3. Rotacin automtica.............................................................................................................................................. 76
7.3.1. Variantes del circuito.................................................................................................................................... 76
7.4. Conclusiones......................................................................................................................................................... 76
8. Simulacin.............................................................................................................................................. 77
8.1. Ejemplo sencillo .................................................................................................................................................... 78
8.2. Ampliacin............................................................................................................................................................. 86
8.3. Conclusiones......................................................................................................................................................... 86
9. Mquinas de estados finitos................................................................................................................... 87
9.1. Mquina de estados para encender y apagar un LED con pulsador.................................................................... 87
Departamento de Tecnologa Electrnica 1
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
9.1.1. Proceso combinacional que obtiene el estado siguiente............................................................................. 89
9.1.2. Proceso secuencial...................................................................................................................................... 89
9.1.3. Proceso combinacional que proporciona las salidas................................................................................... 89
9.2. Detector de flanco con mquinas de estados....................................................................................................... 90
9.2.1. Variante........................................................................................................................................................ 91
9.3. Desplazamiento alternativo de los LED................................................................................................................ 91
9.4. Conclusiones......................................................................................................................................................... 93
10. Clave electrnica.................................................................................................................................. 95
10.1. Variantes ............................................................................................................................................................. 96
11. Circuito antirrebotes ............................................................................................................................. 97
12. Mquina expendedora.......................................................................................................................... 99
12.1. Versin sencilla................................................................................................................................................... 99
12.2. Versin decimal................................................................................................................................................. 100
13. Control con PWM............................................................................................................................... 101
13.1. Funcionamiento del PWM................................................................................................................................. 101
13.2. Control de la intensidad de un LED................................................................................................................... 101
13.3. Ampliacin a control de motores....................................................................................................................... 102
Circuitos digitales y analgicos................................................................................................................. 103
14. Control de motor paso a paso ............................................................................................................ 105
14.1. Motores paso a paso......................................................................................................................................... 105
14.1.1. Identificacin de terminales ..................................................................................................................... 105
14.1.2. Secuencia del motor paso a paso............................................................................................................ 107
14.2. Generacin de la secuencia de control con la FPGA........................................................................................ 108
14.3. Circuito de potencia para gobernar el motor..................................................................................................... 109
14.4. Conclusiones..................................................................................................................................................... 111
15. Piano electrnico................................................................................................................................ 113
15.1. Ampliaciones..................................................................................................................................................... 114
Problemas tericos................................................................................................................................... 115
16. Reproductor MP3............................................................................................................................... 117
16.1. Enunciado ......................................................................................................................................................... 117
16.2. Solucin............................................................................................................................................................. 118
16.2.1. Bloques internos del circuito.................................................................................................................... 118
16.2.2. Diagrama de transicin de estados ......................................................................................................... 118
16.2.3. Tabla de estados siguientes y salidas ..................................................................................................... 121
16.2.4. Tabla de excitacin de los biestables para biestables J -K ...................................................................... 122
16.2.5. Ecuacin simplificada para la salida Play................................................................................................ 123
16.2.6. Modelo VHDL........................................................................................................................................... 123
16.3. Solucin alternativa........................................................................................................................................... 125
17. Visualizacin del reproductor MP3..................................................................................................... 129
17.1. Enunciado ......................................................................................................................................................... 129
17.2. Solucin............................................................................................................................................................. 130
17.2.1. Esquema interno del circuito.................................................................................................................... 130
17.2.2. Modelo en VHDL...................................................................................................................................... 130
18. Robot rastreador................................................................................................................................. 133
18.1. Enunciado ......................................................................................................................................................... 133
18.2. Solucin............................................................................................................................................................. 135
18.2.1. Entradas, salidas y estados. Diagrama de estados................................................................................. 135
18.2.2. Tabla de estados siguientes y salidas ..................................................................................................... 137
18.2.3. Tabla de excitacin de biestables para biestables J -K............................................................................ 138
18.2.4. Ecuaciones simplificadas......................................................................................................................... 139
19. Teclado de telfono mvil................................................................................................................... 141
19.1. Enunciado ......................................................................................................................................................... 141
19.2. Solucin............................................................................................................................................................. 143
19.2.1. Bloques internos del circuito.................................................................................................................... 143
19.2.2. Diagrama de estados............................................................................................................................... 143
20. Clculo de temporizacin de un circuito 1.......................................................................................... 149
20.1. Enunciado ......................................................................................................................................................... 149
20.2. Solucin............................................................................................................................................................. 149
20.2.1. Metaestabilidad........................................................................................................................................ 149
20.2.2. Frecuencia mxima.................................................................................................................................. 149
21. Anlisis de un circuito 1...................................................................................................................... 151
21.1. Enunciado ......................................................................................................................................................... 151
21.2. Solucin............................................................................................................................................................. 151
21.2.1. Tabla de excitacin del autmata............................................................................................................ 151
21.2.2. Diagrama de transicin de estados ......................................................................................................... 152
22. Clculo de temporizacin de un circuito 2.......................................................................................... 153
22.1. Enunciado ......................................................................................................................................................... 153
22.2. Solucin............................................................................................................................................................. 153
2 Universidad Rey J uan Carlos
23. 24. Anlisis de un circuito 2................................................................................................................ 155
24.1. Enunciado ......................................................................................................................................................... 155
24.2. Solucin............................................................................................................................................................. 155
24.2.1. Tabla de excitacin del autmata............................................................................................................ 155
24.2.2. Diagrama de transicin de estados ......................................................................................................... 156
Referencias .............................................................................................................................................. 157
Departamento de Tecnologa Electrnica 3
Departamento de Tecnologa Electrnica
Lista de acrnimos
ALU ArithmeticLogicUnit
UnidadAritmticoLgica
CAD ComputerAidedDesgin
Diseoasistidoporordenador
CPLD ComplexProgrammableLogicDevice
Dispositivodelgicaprogramablecomplejo
DTE DepartamentodeTecnologaElectrnica
ED1 ElectrnicaDigitalI
AsignaturadelatitulacindeIngenieradeTelecomunicacindelaURJC
ED2 ElectrnicaDigitalII
AsignaturadelatitulacindeIngenieradeTelecomunicacindelaURJC
ETSIT EscuelaTcnicaSuperiordeIngenieradeTelecomunicacin
EscueladelaUniversidadReyJuanCarlos
FPGA FieldProgramableGateArray
Dispositivodelgicaprogramable,demayoresprestacionesquelosCPLD
FSM FiniteStateMachine
Mquinadeestadosfinitos
IEEE InstituteofElectricalandElectronicsEngineers
InstitutodeIngenierosElctricosyElectrnicos
LED LightEmittingDiode
Diodoemisordeluz
LSB LeastSignificantBit
Bitmenossignificativo
MSB MostSignificantBit
Bitmssignificativo
PWM PulseWidthModulation
Modulacinporanchodepulso
URJC UniversidadReyJuanCarlos
UniversidadpblicadeMadrid,Espaa
UUT UnitUnderTest
Unidadbajoprueba
VHDL VHSICHardwareDescriptionLanguage
Untipodelenguajededescripcindehardware
VHSIC VeryHighSpeedIntegratedCircuit
Circuitointegradodemuyaltavelocidad
Por ltimo, con el fin de que este manual pueda llegar al mayor nmero de personas y
con el objetivo de generar material educativo abierto, hemos publicado este manual bajo
licenciaCreativeCommons[3]quepermitecopiarloydistribuirlo.Esperamosquedisfrutes
de su lectura y que te ayude a aprender a disear circuitos electrnicos digitales. Para ir
mejorando el manual, agradeceremos la comunicacin de comentarios, sugerencias y
correccionesalasdireccionesdecorreoelectrnicodelosautores.
felipe.machado@urjc.esysusana.borromeo@urjc.es.
2
InstituteofElectricalandElectronicsEngineers
14 Universidad Rey J uan Carlos
2. Encender un LED
Enlasprcticasdeestemanualrealizaremosdiseosbastantemscomplejosquelosque
hicimosenElectrnicaDigitalI[12].Porunladoporqueyasabemosmsdeelectrnicay
porotroladoporquedisearemosconVHDL.ElVHDLesunlenguajededescripcinde
hardwarequenospermitirrealizardiseosavanzadosdemaneramsrpidayeficiente
quecuandousbamoslosesquemticos.
Como ya vimos en las prcticas de Electrnica Digital I, siempre que se introduzca una
novedadeneldiseodebemosrealizarundiseodepruebalomssencilloposiblepara
ver si todo funciona bien. En nuestro caso, en esta primera prctica queremos probar el
proceso de diseo en VHDL, as que vamos a realizar un diseo VHDL que sea muy
sencilloparaprobarquetodoloprocesovabien.Portanto,nuestrodiseodepruebaser
encenderunLEDdescribiendoelcircuitoenVHDLenvezdeenesquemticos.
EstaprcticanosservirpararepasarelentornodediseodeXilinx[25]:elISEWebPack
3
[15].Enelrestodelasprcticasnoseharreferenciaalentornodedesarrollo.Asquesi
tienesdudasdecmoimplementarelcircuitoenlaFPGA,vuelveaestaprcticaorepasa
lasprcticasdelaopasado[12].
2.1. Tarjetas Pegasus y Basys
La tarjeta que utilizaremos en prcticas es la Pegasus [19] de la empresa Digilent [6]. Esta
tarjetayanoseproduce,perosepodrutilizarsinmuchadificultadcualquierotrotipode
placasquetengancaractersticassimilares,comolaBasys[2]olaNexys,...
Como hay algunas diferencias en la programacin de la Pegasus y la Basys, en los
siguientessubapartadosseexplicarncadaunadeellas.
2.1.1. La tarjeta Pegasus
La tarjeta Pegasus contiene una FPGA de Xilinx de modelo SpartanII XC2S50 XC2S200
con encapsulado PQ208. Estas FPGA tienen respectivamente 50000 200000 puertas
lgicasequivalentesy140pinesdisponiblesparaelusuario.Conestacapacidadpodemos
hacerdiseosdigitalesbastantegrandes.
LaplacaPegasuscontienedistintosperifricosquenosfacilitarnlatareadeldiseo,como
porejemplo:8LED,4displaysde7segmentos,4botones,8interruptores,unpuertoPS/2
(para ratn o teclado), un puerto VGA (para conectar un monitor), y varios puertos de
expansin.Enlafigura2.1semuestralaplacaPegasus,yenlaquesesealanvariosdesus
componentes. La foto de la placa no coincide exactamentecon la versin de la placa que
tenemos en el laboratorio y hay algunos componentes que no estn en el mismo lugar,
aunquestodoslosquesehansealado.
3
Herramientagratuitaquesepuededescargaren:
http://www.xilinx.com/webpack/classics/wpclassic/index.htm
Departamento de Tecnologa Electrnica 15
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
FPGA Memoria
Flash
Display
7 segmentos
Puerto
accesorio
Pulsadores Interruptores
Conector J TAG
J umpers de
configuracin
Alimentacin
VGA
PS/2
Conector
de expansin
LEDs
FPGA Memoria
Flash
Display
7 segmentos
Puerto
accesorio
Pulsadores Interruptores
Conector J TAG
J umpers de
configuracin
Alimentacin
VGA
PS/2
Conector
de expansin
LEDs
Figura 2.1: Placa Pegasus de Digilent
A medida que vayamos avanzando con la prctica iremos aprendiendo la funcionalidad
delaplaca.Anas,sitienescuriosidad,enlapginawebdeDigilentpuedesconsultarel
manualdelaplacaeningls[19].
2.1.2. La tarjeta Basys
La tarjeta Basys contiene una FPGA de Xilinx de modelo Spartan3E XC3S100E
XC3S250E con encapsulado TQ144. Estas FPGA tienen respectivamente 100000 250000
puertaslgicasequivalentesy108pinesdisponiblesparaelusuario.
La placa Basys tiene muchos perifricos similares a la Pegasus, por ejemplo: 8 LED, 4
displaysde7segmentos,4pulsadores,8interruptores,unpuertoPS/2yunpuertoVGA.
Los puertos de expansin son diferentes a la Pegasus, la tarjeta Basys tiene 4 puertos de
expansindetipoPMOD,conlosquepodemosconectarunagranvariedaddeperifricos
disponibles
4
o incluso podemos hacrnoslos nosotros mismos. La Pegasus slo tiene un
puertoPMOD.Enlafigura2.2semuestralarevisinEdelaplacaBasys,enellasesealan
variosdesuscomponentes.
4
LosconectoresPMODsonmuyvariados:pantallasdecristallquido,circuitoscontroldemotores,antenas,
joysticks,amplificadoresdeaudio,micrfonos,etc.Sepuedenveren
http://www.digilentinc.com/Products/Catalog.cfm?NavPath=2,401&Cat=9
16 Universidad Rey J uan Carlos
2. Encender un LED
FPGA
Displays
7 segmentos
Interruptor
para encender
la tarjeta
Pulsadores
Interruptores
J umpers de
configuracin
USB
VGA
PS/2
Conectores PMOD
LEDs
J umpers para
la frecuencia
del reloj
FPGA
Displays
7 segmentos
Interruptor
para encender
la tarjeta
Pulsadores
Interruptores
J umpers de
configuracin
USB
VGA VGA
PS/2 PS/2
Conectores PMOD
LEDs
J umpers para
la frecuencia
del reloj
Figura 2.3: Conexin de los LED de la placa Pegasus (izquierda) y la Basys (derecha)
Viendoelesquemaelctricodelafigura2.3podemosdeducirquesiponemosun1lgico
en el pin 46 de la FPGA de la Pegasus encenderemos el LED, ya que con un 1 lgico la
FPGApondrunatensinde3,3voltiosenesepin(queeselniveldetensindeesepin
de la FPGA). Por el contrario, si ponemos un 0 lgico en el pin 45, mantendremos
apagadoelLED1(LD1),puestoquenocircularcorrienteporl.
5
TencuidadoporquelaBasysvieneconundibujoconlacorrespondenciaconlospines,yalgunosdeellos
estnmal.Esmsseguroconsultarlosenelmanualdereferencia.
Departamento de Tecnologa Electrnica 17
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
As pues, ste ser el objetivo del primer ejercicio, poner un1 enel pin46 y un 0 en el
pin45(paralaBasyslospondremosenlospines15y14respectivamente).Sidespusde
programar la FPGA el LED 0 se enciende y el LED 1 se apaga habremos cumplido el
objetivo. Con el resto de pines que van a los otros LED no haremos nada, en teora,
hacindolo as no deberan lucir, ya que por defecto la FPGA pone resistencias de pull
downenlospinesnoconfigurados,yunaresistenciadepulldownponelasalidaatierra.
2.3. Diseo del circuito
EldiseodelcircuitoloharemosconlaherramientaISEFoundationoconISEWebPackde
Xilinx, esta ltima es la versin gratuita que se puede descargar en la pgina web de
Xilinx.Estaprcticaestreferidaalaversin9.2,debidoaqueexistennuevasversiones,
puedesdescargarestaversinen:http://www.xilinx.com/ise/logic_design_prod/classics.htm
ParaarrancarelprogramapincharemoseneliconodeXilinxobien,desde:
InicioTodos los programasXilinx ISE 9.2iProject Navigator
Nos puede aparecer una ventana con el Tip of the day que son indicaciones que hace la
herramientas cada vez que la arrancamos. Si las leemos habitualmente podemos ir
aprendiendopocoapoco.PinchamosenOk,conloquesecierradichaventana.
Normalmente la herramienta abre el ltimo proyecto que se ha realizado. As que lo
cerramospinchandoen:FileClose Project.
Para empezar a crear nuestro nuevo proyecto, pinchamos en FileNew Project... y nos
saldr la ventana New Project Wizard Create New Project como la mostrada en la figura
2.4.Enellapondremoselnombredelproyecto,quelollamaremosled0,indicamoslaruta
donde guardaremos el proyecto, que ser C: / pr act i cas/ ed2/ tunombre. Respecto al
nombreyalaruta,esconveniente:
NotrabajardesdeundispositivodememoriaUSB
6
.
Noincluirespaciosenlaruta,portanto,estoincluyenotrabajarenel"Escritorio"ni
en"Mis documentos"
Noincluirenlarutaoenelnombreacentosniees,nicaracteresextraos,ninombres
muylargos,lomsconvenienteeslimitarseacaracteresalfanumricos,yusarelguin
bajoenvezdelespacio.
Paraelltimorecuadrodelaventana,dondeponeTopLevelSourceTypeseleccionaremos
HDL,yaquenuestrodiseoloharemosmediantelenguajesdedescripcindehardware
7
.
6
Sieststrabajandoenellaboratorio,alterminarlasesinnoolvidescopiarlosficherosconextensin. vhdy
. ucf entumemoriaUSBoentucorreoelectrnico(ocupanmuypoco).Delocontrario,elprximoda
puedeserquelosficheroshayandesaparecido.
7
HDL:delingls:HardwareDescriptionLanguage
18 Universidad Rey J uan Carlos
2. Encender un LED
XC2S200
PQ208
5C
tipo de dispositivo
encapsulado
velocidad
rango de operacin
C: comercial
cdigo de lote
cdigo de fecha XC2S200
PQ208
5C
tipo de dispositivo
encapsulado
velocidad
rango de operacin
C: comercial
cdigo de lote
cdigo de fecha
Figura 2.5: Interpretacin del texto del encapsulado de
la FPGA de la Pegasus
XC3S100E
TQG144
4C
tipo de dispositivo
encapsulado
velocidad
rango de operacin
C: comercial
cdigo
cdigo XC3S100E
TQG144
4C
tipo de dispositivo
encapsulado
velocidad
rango de operacin
C: comercial
cdigo
cdigo
Figura 2.7: Ventana para la seleccin del dispositivo del nuevo proyecto
En las dos siguientes ventanas pinchamos en Next sin rellenar nada y en la ltima
pinchamosenFinish.
Ya tenemosel proyecto creado y ahora nos disponemosa crear nuestrodiseo. Para ello
creamosunanuevafuente(fichero)paraelproyectopinchandoenProjectNew Source.
Estoharaparecerunanuevaventanaquenospedirqueseleccionemoseltipodefuente
que queremos crear. Como estamos trabajando en VHDL, seleccionamos VHDL Module, y
nombramos al fichero led0. Este paso se muestra en la figura 2.8. Posteriormente
pinchamosenNext..
Figura 2.8: Seleccin del tipo de la nueva fuente que vamos a crear
20 Universidad Rey J uan Carlos
2. Encender un LED
Ahora nos saldr una ventana como la mostrada en la figura 2.9. Por defecto, el nombre
de la arquitectura (Architecture Name) es Behavioral (comportamental). ste se puede
cambiar,peroporahora,lodejamosas.Enestaventanapodemosindicarlospuertosde
nuestra entidad. En la figura 2.9 se han creado dos puertos de salida: l ed0 y l ed1. Otra
alternativa es crearlos nosotros directamente en VHDL. Para terminar pinchamos Next y
luegoenFinish.
Figura 2.21: Pantalla del Adept que ha detectado algn dispositivos conectado
30 Universidad Rey J uan Carlos
2. Encender un LED
Ahora pinchamos en Initialize Chain y, como se ve en la figura 2.22, aparecern dos
componentes: uno es la FPGA y otro la memoria (PROM). Indicar tambin el modelo,
queennuestrocasolaFPGAeslaXC3S100E.
Figura 2.22: Pantalla del Adept que ha detectado la cadena JTAG de dispositivos (FPGA y PROM)
AcontinuacinpinchamosenelbotnbrowsecorrespondientealaFPGA,ybuscamosel
fichero l ed0. bi t que hemos generado en nuestro proyecto. Aparecer un warning
indicando el mensaje : Startup clock for this file is CCLK instead of JTAG CLK. Problems
willlikelyoccur.Associateconfigfilewithdeviceanyway?.AestemensajecontestamosS.
Otra cosa es que salga un mensaje de error indicando: Unable to associate file with device
duetoIDCODEconflict.EstoesunerrorqueindicaquelaFPGAquehemosescogidono
es la misma que la que est en la placa. En este caso, tendremos que verificar que el
modelo de FPGA sea el mismo. Si no fuese as, lo tendremos que cambiar. Consulta el
apartado2.6sinosabescmosehace.
Sitodohasalidobien,slotenemosquepincharenProgramyseprogramarlaFPGA.El
resultadoserqueseencenderelLEDLD0,ytambinseencenderotroLEDqueindica
quesehaprogramadolaFPGA(LD- D).
2.6. Cambiar el tipo de FPGA de un proyecto
SienunproyectoqueremosmodificareltipodeFPGA,yaseaporquevamosacambiarde
placa o porque nos hemos equivocado al principio poniendo las caractersticas (figura
2.7), en cualquier momento podemos realizar el cambio. Para ello, tenemos que
seleccionarlaFPGAenlasubventanaSources,ypincharconelbotnizquierdodelratn.
En el men desplegable que aparece tendremos que pinchar en Properties (figura 2.23).
Tras esta operacin aparecer la ventana de la figura 2.7 que nos permitir cambiar el
modeloylascaractersticasdelaFPGA.Tenencuentaquesegnelcambioquehagamos,
quiz tambin tengamos que cambiar el fichero . ucf , pues en l se indican los pines, y
Departamento de Tecnologa Electrnica 31
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
stospuedenserdistintosconelmodelodelaFPGA(inclusopuedenhabercambiadode
nombre).
Figura 3.1: Esquema elctrico de las conexiones de los interruptores y pulsadores en la placa Pegasus
Paralospulsadores,cuandoestnpulsadostransmitenun1lgicoalaentradaycuando
no estn pulsados ponen 0 voltios a la entrada. Observa que los pulsadores tienen un
pequeocircuitoconresistenciasyuncondensador,estoesparaeliminarlosrebotesque
seproducenalpulsaryasenviarunasealsinruido.Estecircuitoqueeliminarebotesno
lo tiene la Basys, y por lo tanto, la seal de entrada de los pulsadores no es tan limpia, y
puedeparecerquesehapulsadovariasveces(rebote).Elesquemaelctricosemuestraen
lafigura3.2,endondesepuedeobservarquelospulsadoresnotienenelcondensadorque
stienelatarjetaPegasus.
4,7k
PI N interruptor
38 SW0
36 SW1
29 SW2
24 SW3
18 SW4
12 SW5
10 SW6
6 SW7
Spartan3E
3,3V
4,7k
PI N pul sador
69 BTN0
48 BTN1
47 BTN2
41 BTN3
Spartan3E
3,3V
4,7k
4,7k
PI N interruptor
38 SW0
36 SW1
29 SW2
24 SW3
18 SW4
12 SW5
10 SW6
6 SW7
Spartan3E
3,3V
4,7k
PI N interruptor
38 SW0
36 SW1
29 SW2
24 SW3
18 SW4
12 SW5
10 SW6
6 SW7
Spartan3E
3,3V
4,7k
PI N pul sador
69 BTN0
48 BTN1
47 BTN2
41 BTN3
Spartan3E
3,3V
4,7k
4,7k
PI N pul sador
69 BTN0
48 BTN1
47 BTN2
41 BTN3
Spartan3E
3,3V
4,7k
Figura 3.2: Esquema elctrico de las conexiones de los interruptores y pulsadores en la placa Basys
En la prctica de hoy utilizaremos los interruptores y pulsadores como entradas de los
circuitosquerealicemos.
Departamento de Tecnologa Electrnica 34
3. Sentencias concurrentes
Antesdeempezarconlaprctica,semuestranacontinuacinlaspalabrasreservadasdel
VHDL(figura3.3).Estaspalabrasnosepuedenusarparanombrarelementosdenuestro
circuito:seales,entidades,arquitecturas,....
Laentidadsercomolamostradaenelcdigo310.
ent i t y mux4bi t s i s
Por t ( A : i n STD_LOGI C_VECTOR ( 3 downt o 0) ;
B : i n STD_LOGI C_VECTOR ( 3 downt o 0) ;
S : i n STD_LOGI C;
Z : out STD_LOGI C_VECTOR ( 3 downt o 0) ;
end mux4bi t s;
Cdigo 3-10:Entidad del multiplexor de 4 alternativas
Departamento de Tecnologa Electrnica 39
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
Laarquitecturaserigualquelausadaparaelmultiplexor dedosalternativascondatos
deunbit,yaquelaasignacindesealesutilizalamismaexpresinindependientemente
dequelassealesseanvectoresobits.Loquessedebecumpliresquelasealasignada
tengaelmismonmerodebitsquelaasignaelvalor.
Portanto,sepodrutilizarlamismasentenciaqueseutilizenelcdigo34oelproceso
delcdigo35.Esos,sabiendoqueahoralassealesA,ByZsonde4bitsynodeunbit.
Implementa este multiplexor asociando el puerto A a los cuatro primeros interruptores
(SW3,SW2,SW1ySW0),elpuertoBalrestodeinterruptores(SW7,SW6,SW5ySW4).Lasealde
seleccinalprimerpulsador(BTN0),ylasalidaZaloscuatroprimerosLED.
Se deja como ejercicio implementar un multiplexor de cuatro alternativas, con datos de
cuatrobits.
3.4. Conclusiones
Resumiendo,losconceptosprincipalesdeestaprctica:
Existe un grupo de palabras reservadas en VHDL que no se pueden utilizar para
nombrarelementosdelcircuito:seales,entidades,arquitecturas,componentes,
Lassentenciasconcurrentes,dentrodelaarquitectura,seejecutanalavez.Porlotanto,
noimportaelordenenqueaparezcan.
Dentro de los procesos, el orden de las sentencias s importa. Por lo tanto, se tratan
secuencialmente.
ElVHDLesunlenguajemuyamplioyexistenmuchasmanerasdedescribirlamisma
cosa
EnVHDLlosvaloresvectorialesvanencomillasdobles,porejemploS=00.
Al implementar un multiplexor es importante que la ltima condicin sea una
condicin por defecto que cubra el resto de los casos, como lo son "when ot her s" o
"el se".Conestoevitamosgenerarunelementodememoria(severenelcaptulo5)
Figura 4.3: Valores del vector de los segmentos (SEG) para los nmeros 0, 1 y 2
Las sentencias concurrentes VHDL de la arquitectura deben tener el aspecto de la figura
4.4.Sepuedeapreciarquehaycuatrosentenciasconcurrentes.Comoyahemosdicho,por
la concurrencia del hardware, el orden de estas sentencias es indiferentes. La ltima
sentencia,correspondientealconvertidorasietesegmentos,sehadejadoincompletapara
que la termines t. Puedes observar que en la sentencia del convertidor se han incluido
comentarios para facilitar la comprensin del cdigo. Esto es muy importante para
42 Universidad Rey J uan Carlos
4. Codificadores, decodificadores, convertidores de cdigo
facilitarlacomprensindelcdigo,tantoparaotraspersonasquelolean,oparatimismo
cuando lo vuelvas a ver dentro de unas semanas y no te acuerdes de nada de lo que
hicisteensuda.
Fjate que se han incluido las dos ltimas alternativas. En la ltima no se ha incluido la
condicin (el when se ha comentado), por lo tanto, en cualquier otro caso, se asigna el
ltimovalor
13
seg_aux <= " 0001111" when numer o=" 111" el se
" 0100000" when numer o=" 110" el se
" 0100100" when numer o=" 101" el se
" 1001100" when numer o=" 100" el se
" 0000110" when numer o=" 011" el se
" 0010010" when numer o=" 010" el se
" 1001111" when numer o=" 001" el se
" 0000001" ; - - when numer o=" 000"
SEG <= seg_aux when BTN0=' 0' el se " 1111110" ;
Cdigo 4-4: Habilitacin con seal auxiliar
Figura 5.1: Tabla de verdad del biestable J-K (izquierda) y circuito que queremos implementar (derecha)
El cdigo 51 muestra el proceso que implementa un biestable JK activo por flanco de
subida.
P_J K1: Pr ocess ( Cl k)
begi n
i f Clk'event and Clk='1' t hen
i f J =' 1' and K=' 1' t hen
Q <= not Q;
el si f J =' 1' and K=' 0' t hen
Q <= ' 1' ;
el si f J =' 0' and K=' 1' t hen
Q <= ' 0' ;
el se
Q <= Q;
end i f ;
end i f ;
end pr ocess;
Cdigo 5-1: Proceso que implementa un biestable J-K
P_J K2: Pr ocess ( Cl k)
begi n
i f Clk'event and Clk='1' t hen
i f J =' 1' and K=' 1' t hen
Q <= not Q;
el si f J =' 1' and K=' 0' t hen
Q <= ' 1' ;
el si f J =' 0' and K=' 1' t hen
Q <= ' 0' ;
end i f ;
end i f ;
end pr ocess;
Cdigo 5-2: Otra alternativa para el biestable J-K
Ahoracreaunproyectollamadobi est _j kyunanuevafuenteVHDLdelmismonombre.
Pon los puertos sealados en la figura 5.1, asignndole los pines que se muestran en la
figura.Usacualquieradelosprocesosdeloscdigos5152.ImplemntaloenlaFPGA
ycompruebaquefuncionacorrectamente.
Departamento de Tecnologa Electrnica 50
5. Elementos de memoria
Al implementarlo, no te olvides de indicar la frecuencia de reloj: En la ventana de
Processes,dentrodeUserConstraints,pinchaenCreateTimingConstraints.Yallsaldrla
ventanadeXilinxConstraintsEditor,pinchaenlapestaadeGlobal.
SiestsusandolatarjetaPegasusalrelojpon20enelperiodo,queson20ns(50MHz).El
textonsseaadeautomticamente.
Si usas la tarjeta Basys el reloj se puede configurar a 100, 50 y 25 MHz segn cmo
coloqueseljumperJ4,eldeconfiguracindelreloj(figura2.2).
GuardaycierraelXilinxConstraintsEditor.Lafigura5.2muestralaventanadelEditorde
Restricciones de Xilinx (Xilinx Constraints Editor), donde tenemos que indicar el periodo
derelojdelaplaca.
Una vez que lo tengas implementado, comprueba que funciona correctamente.
CompruebaademsqusucedecuandomantienespresionadoslosdospulsadoresPB0 y
PB1simultneamente.Quocurre?sabesporqu?
Figura 5.5: Circuito detector de flanco sin registrar la entrada (Mealy: no recomendado para este caso)
Sin embargo, el circuito de la figura 5.5 no es aconsejable porque la entrada BTN0 es
asncrona, pues el pulsador puede ser presionado en cualquier momento. Esto puede
ocasionar metaestabilidad o anchos de pulsos muy pequeo. El cronograma de este
circuito para dos pulsaciones se muestra en la figura 5.6. En ella se puede ver que el
segundopulsoestmuycercadelflancodelreloj,estoproduceunasalidamuyestrecha,y
ademspodraprovocarmetaestabilidad.
56 Universidad Rey J uan Carlos
5. Elementos de memoria
BTN0
BTN0_RG1
PULSO_BTN0
clk
Cl k
BTN0
BTN0_RG1
PULSO_BTN0
clk
Cl k
Si el pulso llega muy cerca del flanco de subida del
reloj el pulso resultante puede ser muy pequeo, o
lo que es peor: puede haber metaestabilidad
Si el pulso llega muy cerca del flanco de subida del
reloj el pulso resultante puede ser muy pequeo, o
lo que es peor: puede haber metaestabilidad
Figura 5.6: Cronograma del detector de flanco realizado por Mealy (no recomendado para este caso)
Para evitar estos inconvenientes se hace el registro de desplazamiento con la entrada
registrada (mquina de Moore). La figura 5.7 muestra la versin Moore del circuito de
detectordeflancorealizadaconregistrosdedesplazamiento.
Cl k
BTN0 D Q D Q
BTN0_RG1 BTN0_RG2
PULSO_BTN0
Cl k
BTN0 D Q D Q
BTN0_RG1 BTN0_RG2
PULSO_BTN0
Figura 5.7: Circuito detector de flanco registrando la entrada (Moore: recomendado para este caso)
Ahora los pulsos resultantes siempre durarn un ciclo de reloj, como puedes ver en el
cronogramadelafigura5.8.
BTN0
BTN0_RG1
PULSO_BTN0
clk
Cl k
Ahora los pulsos siempre duran de un ciclo de reloj
BTN0_RG2
BTN0
BTN0_RG1
PULSO_BTN0
clk
Cl k
Ahora los pulsos siempre duran de un ciclo de reloj
BTN0_RG2
Figura 5.8: Cronograma del detector de flanco realizado por Moore (recomendado para este caso)
Aspues,elcircuitoquetenemosquehacercontendrelbiestableTdelafigura5.3,pero
envezderecibirelpulsodirectamentedelpulsador,lorecibirfiltradoporeldetectorde
flancodelafigura5.7.Elcircuitofinalserelmostradoenlafigura5.9.
Departamento de Tecnologa Electrnica 57
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
detector de flanco detector de flanco
Cl k
BTN0 D Q D Q
BTN0_RG1 BTN0_RG2
T Q LD0
Reset
BTN3
Reset Reset
PULSO_BTN0
biestable T
Cl k
BTN0 D Q D Q
BTN0_RG1 BTN0_RG2
T Q LD0
Reset
BTN3
Reset Reset
PULSO_BTN0
biestable T
Figura 5.9: Circuito que enciende y apaga un LED con el mismo pulsador
EstecircuitosepuededescribirconelcdigoVHDLmostradoenlafigura5.10.
bi est _D1: Pr ocess ( Reset , Cl k)
begi n
i f Reset = ' 1' t hen
BTN0_REG1 <= ' 0' ;
el si f Cl k' event and Cl k=' 1' t hen
BTN0_REG1 <= BTN0;
end i f ;
end pr ocess;
bi est _D2: Pr ocess ( Reset , Cl k)
begi n
i f Reset = ' 1' t hen
BTN0_REG2 <= ' 0' ;
el si f Cl k' event and Cl k=' 1' t hen
BTN0_REG2 <= BTN0_REG1;
end i f ;
end pr ocess;
PULSO_BTN0 <= ' 1' when ( BTN0_REG1 = ' 1' and BTN0_REG2=' 0' ) el se ' 0' ;
bi est _T: Pr ocess ( Reset , Cl k)
begi n
i f Reset = ' 1' t hen
Q_T <= ' 0' ;
el si f Cl k' event and Cl k=' 1' t hen
i f PULSO_BTN0 = ' 1' t hen
Q_T <= NOT Q_T;
end i f ;
end i f ;
end pr ocess;
LD0 <= Q_T;
Primer
biestable D
Asignacin al puerto de salida Q_T es necesario
porque los puertos de salida no se pueden leer
Segundo
biestable D
biestable T cuya
entrada
PULSO_BTN0 se ha
transformado en
un pulso de un
ciclo de reloj
Deteccin de
flanco de subida
Cl k
BTN0 D Q
BTN0_RG1
Reset
Cl k
D Q
BTN0_RG2
Reset
BTN0_RG1
Cl k
T Q
Q_T
Reset
PULSO_BTN0
bi est _D1: Pr ocess ( Reset , Cl k)
begi n
i f Reset = ' 1' t hen
BTN0_REG1 <= ' 0' ;
el si f Cl k' event and Cl k=' 1' t hen
BTN0_REG1 <= BTN0;
end i f ;
end pr ocess;
bi est _D2: Pr ocess ( Reset , Cl k)
begi n
i f Reset = ' 1' t hen
BTN0_REG2 <= ' 0' ;
el si f Cl k' event and Cl k=' 1' t hen
BTN0_REG2 <= BTN0_REG1;
end i f ;
end pr ocess;
PULSO_BTN0 <= ' 1' when ( BTN0_REG1 = ' 1' and BTN0_REG2=' 0' ) el se ' 0' ;
bi est _T: Pr ocess ( Reset , Cl k)
begi n
i f Reset = ' 1' t hen
Q_T <= ' 0' ;
el si f Cl k' event and Cl k=' 1' t hen
i f PULSO_BTN0 = ' 1' t hen
Q_T <= NOT Q_T;
end i f ;
end i f ;
end pr ocess;
LD0 <= Q_T;
Primer
biestable D
Asignacin al puerto de salida Q_T es necesario
porque los puertos de salida no se pueden leer
Segundo
biestable D
biestable T cuya
entrada
PULSO_BTN0 se ha
transformado en
un pulso de un
ciclo de reloj
Deteccin de
flanco de subida
Cl k
BTN0 D Q
BTN0_RG1
Reset
Cl k
BTN0 D Q
BTN0_RG1
Reset
Cl k
BTN0 D Q
BTN0_RG1
Reset
Cl k
D Q
BTN0_RG2
Reset
BTN0_RG1
Cl k
D Q
BTN0_RG2
Reset
BTN0_RG1
Cl k
T Q
Q_T
Reset
PULSO_BTN0
Cl k
T Q
Q_T
Reset
PULSO_BTN0
Los dos primeros procesos de la figura 5.10 se pueden agrupar en uno, ya que en los
procesos el valor de las seales nose actualiza inmediatamente sinoque se actualizan
al terminar el proceso. As, en el cdigo 520, la seal BTNO_REG1 no toma el valor
inmediatamente de BTN0, y por lo tanto, la seal BTN0_REG2 no recibe el valor que se le
acaba de asignar a BTN0_REG1 (el que le da BTN0) sino el valor que tena BTN0_REG1. En
consecuencia, al salir e proceso, BTN0_REG1 tendr el valor de BTN0 y BTN_REG2 tendr el
antiguo valor de BTN0_REG1 y no el que se le acaba de asignar. Por tanto, BTN0_REG2 est
retrasadauncicloderelojrespectodeBTN0_REG1(queesloquequeremoshacer).
58 Universidad Rey J uan Carlos
5. Elementos de memoria
Debido a esto, el proceso 521 es equivalente al proceso 520. Aunque las asignaciones
estncambiadasdeorden.
bi est _Ds: Pr ocess ( Reset , Cl k)
begi n
i f Reset = ' 1' t hen
BTN0_REG1 <= ' 0' ;
BTN0_REG2 <= ' 0' ;
el si f Cl k' event and Cl k=' 1' t hen
BTN0_REG1 <= BTN0;
BTN0_REG2 <= BTN0_REG1;
end i f ;
end pr ocess;
Cdigo 5-20: Proceso que implementa los 2
biestables D
bi est _Ds: Pr ocess ( Reset , Cl k)
begi n
i f Reset = ' 1' t hen
BTN0_REG1 <= ' 0' ;
BTN0_REG2 <= ' 0' ;
el si f Cl k' event and Cl k=' 1' t hen
BTN0_REG2 <= BTN0_REG1;
BTN0_REG1 <= BTN0;
end i f ;
end pr ocess;
Cdigo 5-21: Proceso equivalente al 5-20
Ahora, crea un nuevo proyecto e implementa en la FPGA este circuito y comprueba que
funciona bien. En caso de que ests trabajando con la placa Basys, el diseo funcionar
mejor que el diseo de la figura 5.3, sin embargo, todava no funcionar del todo bien
porque los pulsadores de la Basys no tienen el circuito de eliminacin de rebotes (figura
3.2)quesestpresenteenlaPegasus(figura3.1).Msadelante,enelcaptulo11veremos
cmosolucionaresteproblema.
EncualquiercasoqupasasienestecircuitomantienespresionadoelpulsadorBTN0?se
comportaigualqueantes?
5.4. Conclusiones
Losconceptosmsimportantesdeestaprctica:
No todas las maneras que tiene el VHDL para modelar elementos de memoria son
vlidasparasntesis.
En esta prctica se han establecido unas reglas para describir elementos de memoria
parasntesis.
Cuandodescribimoslgicacombinacional,hayquetenercuidadodenocrearlatches
no deseados, para evitarlo, las seales se deben asignar en todas las condiciones
posibles.LascondicionesdebenterminarenELSEynoELSI F.
Enlosprocesos,lassealesnoseactualizaninmediatamentesinoqueseactualizanal
terminarelproceso.
Lasentradasasncronassedebenregistrarparaevitarmetaestabilidad.
Los detectores de flancos suelen ser necesarios para realiza interfaces humanos con
diseossncronos
Departamento de Tecnologa Electrnica 59
6. Contadores
En esta prctica aprenderemos a describir contadores sintetizables en VHDL.
Afortunadamente veremos que es mucho ms sencillo que los contadores diseados
mediante esquemticos que realizamos el curso pasado en ED1 [12]. En esta prctica
veremosalgunasaplicacionesdeloscontadores.
6.1. Segundero
Elsegunderoquehicimoselaopasadoyquetantonoscost,esteaolopodremoshacer
enmuypocotiempo.
EnestaprcticaqueremosqueunLEDsemantengaencendidoduranteunsegundoyse
apagueduranteelsegundosiguiente,estecomportamientoserepetirperidicamente.
Recordando del ao pasado, lo que tenemos que hacer es un divisor de frecuencia.
Nuestro reloj tiene una frecuencia de 50 MHz y queremos una seal de 1 Hz (que
llamaremos S1seg). El cronograma de estas seales se muestra en la figura 6.1. Como se
puedeapreciar,lasealS1segestara1solamenteduranteunciclode relojduranteun
segundo.
T=1 s (f =1Hz)
T=20 ns
(no est a
escala)
Cl k
S1seg
T=1 s (f =1Hz)
T=20 ns
(no est a
escala)
Cl k
S1seg
si gnal cont a10seg : unsi gned ( 3 downt o 0) ;
Cdigo 6-3: Declaracin de seal unsigned
Conestadeclaracin,especificamosunnmerobinariodecuatrobitssinsigno.Yaqueel
rango de un nmero de cuatro bits sin signo va de 0 a 15. Con tres bits no nos valdra
porqueslopodramoscontarhastasiete,yportanto,noseraunnmeroBCD.
Para utilizar los tipos unsi gned y si gned es recomendable cambiar de bibliotecas, en vez
de utilizar las predeterminadas por el ISEWebpack (ver cdigo 64), se recomiendan las
delcdigo65.EstoestenlacabeceradetodoslosdiseosquecreaelISEWebpack.As
queapartirdeahora,siemprequecreesunanuevafuente,quitalasqueestnenelcdigo
64(lassealadasennegrita)ycmbialasporladelcdigo65(labibliotecaNUMERI C_STD).
l i br ar y I EEE;
use I EEE. STD_LOGI C_1164. ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
Cdigo 6-4: Bibliotecas por defecto que pone el ISE
l i br ar y I EEE;
use I EEE. STD_LOGI C_1164. ALL;
use IEEE.NUMERIC_STD.ALL;
Cdigo 6-5: Bibliotecas recomendadas
El proceso que se encarga de contar los diez segundos (PCont a10segs) va a contar con la
seal cont a10seg, que es de tipo unsi gned (ver cdigo 63). El proceso se muestra en el
cdigo 66. Fjate en la ltima sentencia: debido a que la seal cont a10seg es de tipo
unsi gned y el puerto de salida LED es de tipo st d_l ogi c_vect or , hay que convertir
cont a10segast d_l ogi c_vect or .Parahaceresto,esnecesarioqueambassealestenganel
mismonmerodebits(enestecaso 4: 3 downt o 0).
Figura 6.5: Cronograma de la seal de una dcima de segundo que queremos obtener
ElprocesoqueimplementalasealS1deci maessimilaralprocesoP_Cont a1segdelcdigo
61 (mira tambin la figura 6.2), pero la cuenta, en vez de ser de 50 millones ser de
5000000(diezvecesmenor).
Apartirdelasealdeunadcima,realizaremoslacuentade10dcimas,10segundos,60
segundos y 10 minutos. Utilizaremos cuatro procesos similares al PCont a10segs (figura
Departamento de Tecnologa Electrnica 65
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
6.3). De cada proceso obtendremos la cuenta en BCD (4 bits) y una seal que indicar el
findecuentaparahacercontaralsiguientecontador.
Elesquemainicialdelcronmetrosemuestraenlafigura6.6.Lefaltaraincluirlapartede
visualizacinporlosdisplaysqueladiscutiremosmsadelante.
P_Cont a1deci ma
S1deci ma
Cl k
Reset
Cl k
PCont a10deci mas
Cl k
Reset
PB3
PCont a10seg
S1seg
Cl k
Reset
S1seg
deci mas
4
S1seg
segundos
4
S10seg
PCont a60seg
Cl k
Reset
PCont a10mi n
Cl k
Reset
S10seg
dec_segundos
4
S60seg
mi nut os
4
deci mas( 3: 0) segundos( 3: 0) dec_segundos( 3: 0) mi nut os( 3: 0)
S1deci ma
P_Cont a1deci ma
S1deci ma
Cl k
Reset
Cl k
PCont a10deci mas
Cl k
Reset
PB3
PCont a10seg
S1seg
Cl k
Reset
S1seg
deci mas
44
S1seg
segundos
44
S10seg
PCont a60seg
Cl k
Reset
PCont a10mi n
Cl k
Reset
S10seg
dec_segundos
44
S60seg
mi nut os
44
deci mas( 3: 0) segundos( 3: 0) dec_segundos( 3: 0) mi nut os( 3: 0)
S1deci ma
Figura 6.9: Multiplexor que selecciona la cifra BCD segn la configuracin de os interruptores.
Elesquemacompletodeldiseosemuestraenlafigura6.10.
Departamento de Tecnologa Electrnica 67
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
P_Cont a1deci ma
S1deci ma
Cl k
Reset
Cl k
PCont a10deci mas
Cl k
Reset
PB3
PCont a10seg
S1seg
Cl k
Reset
S1seg
deci mas
4
S1seg
segundos
4
S10seg
PCont a60seg
Cl k
Reset
PCont a10mi n
Cl k
Reset
S10seg
dec_segundos
4
S60seg
mi nut os
4
d
e
c
i
m
a
s
(
3
:
0
)
segundos( 3: 0)
dec_segundos( 3: 0)
mi nut os( 3: 0)
S1deci ma
4 4 4 4
00 01 10 11
4
most r ar (3:0)
CONV_7SEG
6
SEG( 6: 0)
SEG_A- SEG_G
El nmero que se
muestra segn estn
los interruptores
I ( 1: 0)
SW6
SW7
I ( 1: 0)
SW6
SW7
AN( 0)
AN( 1)
AN( 2)
AN( 3)
DECOD_2a4
S0
S1
S2
S3
AN3- AN0
P_Cont a1deci ma
S1deci ma
Cl k
Reset
Cl k
PCont a10deci mas
Cl k
Reset
PB3
PCont a10seg
S1seg
Cl k
Reset
S1seg
deci mas
44
S1seg
segundos
44
S10seg
PCont a60seg
Cl k
Reset
PCont a10mi n
Cl k
Reset
S10seg
dec_segundos
44
S60seg
mi nut os
44
d
e
c
i
m
a
s
(
3
:
0
)
segundos( 3: 0)
dec_segundos( 3: 0)
mi nut os( 3: 0)
S1deci ma
44 4 4 4
00 01 10 11
44
most r ar (3:0)
CONV_7SEG
66
SEG( 6: 0)
SEG_A- SEG_G
I ( 1: 0)
SW6
SW7
I ( 1: 0)
SW6
SW7
AN( 0)
AN( 1)
AN( 2)
AN( 3)
DECOD_2a4
S0
S1
S2
S3
AN3- AN0
I ( 1: 0)
SW6
SW7
AN( 0)
AN( 1)
AN( 2)
AN( 3)
DECOD_2a4
S0
S1
S2
S3
AN3- AN0
El nmero que se
muestra segn estn
los interruptores
Figura 6.10:Esquema completo del cronmetro con visualizacin manual
Ahora crea un nuevo proyecto llamado cr ono_manual , implementa el diseo de la figura
6.10 en la FPGA y comprueba que funciona. Evidentemente, es un cronmetro de
prestaciones muy malas, porque no puedes visualizar simultneamente ms de un cifra.
TienesqueseleccionarlaciframanualmenteconlosinterruptoresSW6ySW7.
6.3.2. Mostrar los dgitos. Solucin automtica
Hemos visto las limitaciones de la solucin anterior. Si quisieses ver dos cifras
simultneamente, podras probar a mover el interruptor manualmente lo ms
rpidamente posible. Es obvio que esta solucin no es muy cmoda, as que vamos a
intentarbuscarunaalternativa.
La solucin podra ser que en vez de que nosotros cambiemos la seal I ( 1: 0) moviendo
los interruptores SW6 y SW7, hicisemos un circuito que haga como si los movisemos
peridicamente de manera automtica. La velocidad del cambio debe ser tan rpida que
no sea perceptible por nosotros los humanos. Por ejemplo, si cambiamos el display cada
milisegundo seguramente no nos demos cuenta de que est cambiando, salvo que como
lucemenostiempo,loveremoslucirconmenorintensidad.
As que vamos a probar de esta manera: crearemos otro contador similar al que genera
una seal de peridica de un segundo (proceso P_cont a1seg del cdigo 61) o similar al
que hemos creado en el cronmetro para contar una dcima de segundo (figura 6.6).
Nuestro contador crear una seal peridica de un milisegundo (s1mi l i ) como la
mostradaenlafigura6.11.
T=1ms (f =1kHz)
T=20 ns
(no est a
escala)
cl k
s1mi l i
50MHz
Rel aci n:
50MHz
1kHz
= 50000
1ms
20ns
= = 50000
1000000ns
20ns
frecuencia
periodo
1kHz
T=1ms (f =1kHz)
T=20 ns
(no est a
escala)
cl k
s1mi l i
T=1ms (f =1kHz)
T=20 ns
(no est a
escala)
cl k
s1mi l i
50MHz
Rel aci n:
50MHz
1kHz
= 50000
1ms
20ns
= = 50000
1000000ns
20ns
frecuencia
periodo
Rel aci n:
50MHz
1kHz
= 50000
50MHz
1kHz
= 50000
50MHz
1kHz
= 50000
1ms
20ns
= = 50000
1000000ns
20ns
1ms
20ns
= = 50000
1000000ns
20ns
1000000ns
20ns
frecuencia
periodo
1kHz
Figura 6.11 : Cronograma de la seal de una milsima de segundo que queremos obtener
68 Universidad Rey J uan Carlos
6. Contadores
A partir de la seal de un milisegundo (s1mi l i ) realizaremos una cuenta de cuatro (de
ceroatres)paraseleccionareldisplayquevaaluciryelnmeroquesevaamostrar.Esta
seal (cuent a4ms) tendr una funcionalidad equivalente a la seal I que antes era
gobernadaporlosinterruptores(verfiguras6.8,6.9y6.10).
Enlafigura6.12semuestraelmultiplexadoeneltiempo.Encadamilisegundosemuestra
un display distinto (slo hay un nodo activo). La frecuencia de refresco del display es de
250Hz(T=4ms).Esmuyimportanteseleccionarelnmerocorrespondientealnodoque
sevaaseleccionar.
4 x 1 ms
0 1 3 0 1 2 3
s1mi l i
CUENTA4MS
AN_0
T=1 ms
2
AN_1
AN_2
AN_3
dec US M most r ar DS US DS DM UM
M DS US dec
minutos decenas
Segundos
unidades dcimas
Segn el valor de CUENTA4MS
se selecciona las dcimas, las
unidades o decenas de segundos
o los minutos
AN_3 AN_2 AN_1 AN_0
4 x 1 ms
0 1 3 0 1 2 3
s1mi l i
CUENTA4MS
AN_0
T=1 ms
2
AN_1
AN_2
AN_3
dec US M most r ar DS US DS DM UM
M DS US dec
minutos decenas
Segundos
unidades dcimas
Segn el valor de CUENTA4MS
se selecciona las dcimas, las
unidades o decenas de segundos
o los minutos
AN_3 AN_2 AN_1 AN_0
Figura 7.1: Esquema del registro de desplazamiento a la izquierda con carga paralelo
ElprocesoVHDLdelregistrodedesplazamientosemuestraenelcdigo71.
Departamento de Tecnologa Electrnica 73
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
P_r egi st r o: Pr ocess ( r eset , cl k)
begi n
i f r eset = ' 1' t hen
r egi st r o <= ( ot her s => ' 0' ) ;
el si f cl k' event and cl k=' 1' t hen
i f pul so_car ga = ' 1' t hen
r egi st r o <= dat o;
el si f pul so_despl z_i zq = ' 1' t hen
registro (7 downto 1) <= registro (6 downto 0); - - despl azami ent o a i zqui er da
end i f ;
end i f ;
end pr ocess;
Cdigo 7-1: Cdigo del proceso de registro de desplazamiento
Sihasentendidolasprcticasanteriores,nodeberasdetenerproblemasparaentenderel
cdigo71,salvoparalasentenciaresaltadaennegrita.
Estasentenciaseraequivalentealassealadasennegritaenloscdigos72y73
P_r egi st r o: Pr ocess ( r eset , cl k)
begi n
i f r eset = ' 1' t hen
r egi st r o <= ( ot her s => ' 0' ) ;
el si f cl k' event and cl k=' 1' t hen
i f pul so_car ga = ' 1' t hen
r egi st r o <= dat o;
el si f pul so_despl z_i zq = ' 1' t hen
registro (7) <= registro (6);
registro (6) <= registro (5);
registro (5) <= registro (4);
registro (4) <= registro (3);
registro (3) <= registro (2);
registro (2) <= registro (1);
registro (1) <= registro (0);
end i f ;
end i f ;
end pr ocess;
Cdigo 7-2: Cdigo equivalente al cdigo 7-1
P_r egi st r o: Pr ocess ( r eset , cl k)
begi n
i f Reset = ' 1' t hen
r egi st r o <= ( ot her s => ' 0' ) ;
el si f cl k' event and cl k=' 1' t hen
i f pul so_car ga = ' 1' t hen
r egi st r o <= dat o;
el si f pul so_despl z_i zq = ' 1' t hen
registro (1) <= registro (0);
registro (2) <= registro (1);
registro (3) <= registro (2);
registro (4) <= registro (3);
registro (5) <= registro (4);
registro (6) <= registro (5);
registro (7) <= registro (6);
end i f ;
end i f ;
end pr ocess;
Cdigo 7-3: Cdigo equivalente al cdigo 7-1
Esmuyimportanterecordarquelassealesdentrodeunprocesonoseactualizanhastael
final del proceso, as que, a pesar de que en el cdigo 73 se podra pensar que el
r egi st r o( 0) se propagara inmediatamente a todos los dems bits, no ocurre porque el
r egi st r o( 1) notomaelvalorder egi st r o( 0) hastaquesesaledelproceso.
Loqueocurrealdesplazaralaizquierdasemuestraenlafigura7.2.
4 5 6 7 0 1 2 3
4 5 6 7 0 1 2 3
Antes de
desplazar
despus de
desplazar
bit 7 se
pierde
bit 0 se
mantiene
y se
duplica
4 5 6 7 0 1 2 3
4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3
Antes de
desplazar
despus de
desplazar
bit 7 se
pierde
bit 0 se
mantiene
y se
duplica
Figura 8.2: Puertos de entrada y salida del contador que vamos a probar
Asquecreaunproyectonuevollamadosi mul _cont aycreaelcomponenteVHDLcont a.
Esteseruncontadorde0a15ascendente.Contarciclosdereloj.Sinoteacuerdascmo
sehacenloscontadores,repasaelcaptulo6.
Unavezquelotengashechoyhayascomprobadoquelasintaxisestbien,procederemos
asimularlo.Paraellocrearemosunbancodepruebas:
CreamosunanuevafuenteProject New Source
IndicamosquelafuentevaaserdeltipobancodepruebasdeVHDL: seleccionaVHDL
Test BenchynmbralaTB_CONTA (verfigura8.3).
78 Universidad Rey J uan Carlos
8. Simulacin
Figura 8.4: Cdigo creado automticamente por el ISE para el banco de pruebas
Ahrarealizamosloscambiosindicadosenlafigura8.4.
Antes de seguir con los cambios que tenemos que realizar, explicaremos la referencia al
componente(figura8.4F).Enlafigura8.5semuestralasdistintaspartesdelarefrenciaa
uncomponente.Lareferenciaauncomponenteesequivalenteainsertaruncomponente
ennuestraarquitectura.Alinsertarelcomponentetenemosqueindicarcmoseconectan
los puertos (port map). Como un mismo componente se puede insertar varias veces
(puede haber varias referencias a un componente), la referencia empieza con un nombre
que la identifica de manera nica. A continuacin se incluye el nombre del componente
que se referencia. Este nombre debe de coincidir con el nombre de la entidad de dicho
componente.
Porltimo,enelmapeodelospuertos(portmap)alaizquierdaseponenlosnombresde
los puertos del componente, y a la derecha los nombres de las seales de la arquitectura
delbancodepruebas.Estosnombres,aunqueloshemospuestoiguales,notienenporqu
coincidir.Lafigura8.5muestrademaneramsgrficaestaexplicacin.
80 Universidad Rey J uan Carlos
8. Simulacin
uut : cont a
PORT MAP(
Reset => Reset ,
Cl k => Cl k,
cuent a => cuent a
) ;
nombre de la
referencia
("instanc acin").
Debe ser nico
i
nombre del componente que
estamos " nstanciando".
Debe ser el mismo que el
nombre que le dimos a la
entidad
i
mapeo de puertos
puertos del
componente
seales de la
arquitectura
del banco de
pruebas
ent i t y cont a i s
Por t (
Reset : i n STD_LOGI C;
Cl k : i n STD_LOGI C;
cuent a : out UNSI GNED ( 3 downt o 0)
) ;
end cont a;
Entidad del componente que estamos testeando
uut : cont a
PORT MAP(
Reset => Reset ,
Cl k => Cl k,
cuent a => cuent a
) ;
nombre de la
referencia
("instanc acin").
Debe ser nico
i
nombre del componente que
estamos " nstanciando".
Debe ser el mismo que el
nombre que le dimos a la
entidad
i
mapeo de puertos
puertos del
componente
seales de la
arquitectura
del banco de
pruebas
ent i t y cont a i s
Por t (
Reset : i n STD_LOGI C;
Cl k : i n STD_LOGI C;
cuent a : out UNSI GNED ( 3 downt o 0)
) ;
end cont a;
Entidad del componente que estamos testeando
Figura 9.3: Diagrama de transicin de estados para encender un LED con un pulsador
En las clases tericas hemos aprendido a implementar el diagrama de la figura 9.3 con
biestablesypuertaslgicas.AhoraloharemosenVHDL.
Loprimeroqueharemosesdeclararuntipoenumeradoquetendrlosestadosdenuestra
mquina. En nuestro caso sern LED_ON y LED_OFF (no pueden ser ON y OFF porque ON es
unapalabrareservadaenVHDL).
t ype est ados_l ed i s ( LED_OFF, LED_ON) ;
Cdigo 9-1: Declaracin de un tipo enumerado para la mquina de estados
La declaracin del enumerado la pondremos en la parte declarativa de la arquitectura
(antes del BEGI N). El tipo enumerado que hemos declarado en el cdigo 91 nos permite
asignarlosvaloresLED_OFFyLED_ONalassealesquesedeclarendeltipoest ados_l ed.
A continuacin declararemos dos seales que indican el estado actual y el estado
siguiente al que iremos segn el estado actual y las entradas (mira la figura 9.1). Lo
haremosas:
si gnal est ado_act ual , est ado_si gui ent e : est ados_l ed;
Cdigo 9-2: Declaracin de las seales de estado de tipo estados_led anteriormente declarado
Y ahora, en la parte de sentencias de la arquitectura, describiremos el diagrama de
transicin de estados en VHDL (figura 9.3). Segn vimos en la figura 9.1 la mquina de
estadossepuededescribir contres procesos.Estosprocesosseexplicanenlossiguientes
apartados.
88 Universidad Rey J uan Carlos
9. Mquinas de estados finitos
9.1.1. Proceso combinacional que obtiene el estado siguiente
Este proceso obtiene el estado siguiente (el destino de la flecha en el diagrama de
transicin de estados) a partir del estado actual y las entradas. Este proceso es
combinacional, por lo tanto no tiene reloj ni reset. As que en la lista de sensibilidad
tendremos todas las seales que se leen, que sern el estado actual y las entradas. En
nuestro caso, observando el diagrama de transicin de estados tendremos el siguiente
proceso(figura9.3):
P_COMB_ESTADO: Pr ocess ( est ado_act ual , Pul so_BTN0)
begi n
case est ado_act ual i s
when LED_OFF =>
i f Pul so_BTN0 = ' 1' t hen
est ado_si gui ent e <= LED_ON;
el se
est ado_si gui ent e <= LED_OFF;
end i f ;
when LED_ON =>
i f Pul so_BTN0 = ' 1' t hen
est ado_si gui ent e <= LED_OFF;
el se
est ado_si gui ent e <= LED_ON;
end i f ;
end case;
end pr ocess;
Cdigo 9-3: Proceso que obtiene el estado siguiente
Como vemos en el cdigo 93, el proceso empieza con una sentencia CASE. Con esta
sentencia seleccionamos el estado actual (est ado_act ual ) y segn las entradas,
obtendremoselestadosiguiente(est ado_si gui ent e).Silocomparasconeldiagramadela
figura9.3,ambosdicenlomismo,unoencdigoyotrodeformagrfica.
Es muy importante poner todos losestados en el CASE. Y que en todas las alternativas se
asigne el est ado_si gui ent e, porque de lo contrario, se generara un latch para la seal
est ado_si gui ent e. Y esta seal debe ser combinacional, ya que es en la seal
est ado_act ual dondesecreaunelementodememoriaparaguardarelvalor.
9.1.2. Proceso secuencial
Elprocesosecuencialactualizaelestadoactualencadaciclodereloj,yloguardaenunoo
varioselementosdememoria(flipflops).Encadaciclodereloj,elestadosiguientepasaa
ser el estado actual. Para ello, simplemente usa biestables D. Por lo tanto es un proceso
muysencillo.Elprocesoincluyeunasentenciaderesetqueindicaelestadodepartida.
P_SEQ_FSM: Pr ocess ( r eset , cl k)
begi n
i f r eset = ' 1' t hen
est ado_act ual <= LED_OFF;
el si f cl k' event and cl k=' 1' t hen
est ado_act ual <= est ado_si gui ent e;
end i f ;
end pr ocess;
Cdigo 9-4: Proceso que actualiza y guarda el estado
9.1.3. Proceso combinacional que proporciona las salidas
Esteprocesocombinacionalproporcionalassalidasenfuncindelestadoactualy,encaso
de que sea una mquina de Mealy, tambin en funcin de las entradas. En nuestro caso,
comoesunamquinadeMoore,solodependerdelestadoactual.Elprocesosemuestra
enelcdigo95
Departamento de Tecnologa Electrnica 89
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
P_COM_SALI DAS: Pr ocess ( est ado_act ual )
begi n
case est ado_act ual i s
when LED_OFF =>
LD0 <= ' 0' ;
when LED_ON =>
LD0 <= ' 1' ;
end case;
end pr ocess;
Cdigo 9-5: Proceso que proporciona la salida
Recuerda que es muy importante que la salida est asignada en todas las condiciones
posiblesparaevitargenerarlatches.
Yatieneslostresprocesosdelamquinadeestados.Ahora,realizaeldiseoincluyendo
tambin el detector de flanco. Implementa el circuito en la FPGA y comprueba que
funcionabien.
9.2. Detector de flanco con mquinas de estados
Ahora vamosaimplementartambineldetectordeflancocomomquinadeestados.Es
por tanto, una variante al que hicimos en el apartado 5.3.2, que lo hicimos mediante
registrosdedesplazamiento.Eldetectordeflancodesubidadetectaunasecuencia01.Por
tanto, es un ejercicio que sabemos hacer de clase. Como las entradas no estn
sincronizadas con el reloj de la placa (puedo pulsar cuando quiera), para evitar
metaestabilidad,loimplementaremoscomouna mquinadeMoore(recuerdafigura5.6)
que son ms seguras. En la figura 9.4 se muestra el diagrama de estados del detector de
flancodesubida.
estado
pulso_btn0
BTN0
Leyenda entrada
salida
inic
0
s0
0
0
1
0
1
s01
1
1
0
estado
pulso_btn0
BTN0
Leyenda entrada
salida
estado
pulso_btn0
BTN0
Leyenda entrada
salida
inic
0
s0
0
0
1
0
1
s01
1
1
0
inic
0
s0
0
0
1
0
1
s01
1
1
0
Figura 9.7: Esquema del circuito del movimiento alternativo de los LED
92 Universidad Rey J uan Carlos
9. Mquinas de estados finitos
De los tres bloques de la figura 9.7, slo la mquina de estados es un diseo totalmente
nuevo. Pues el divisor de frecuencia se ha hecho en el apartado 6.3 (figura 6.5). Y el
registrodedesplazamientoessimilaralosdelaprctica7.
Acontinuacinsemuestraeldiagramadeestadosdelamquinadeestados,sinembargo,
antes de verla, intenta deducirla por ti mismo. Pues en clase se han realizado problemas
similares
18
.
DCHA
0
IZQ
1
01
X0
estado
rota_izq
tope_izq, tope_dcha
0X
10
Leyenda entradas
salida
11: ent r ada i mposi bl e
DCHA
0
IZQ
1
01
X0
estado
rota_izq
tope_izq, tope_dcha
0X
10
Leyenda entradas
salida
11: ent r ada i mposi bl e
Figura 9.8: Diagrama de transicin de estados
PuedesobservarqueseharealizadocomomquinadeMoore.
Fjate que hay entradas imposibles, y entradas que dan igual. En VHDL como la sntesis
en biestables la va a realizar el ISEWebpack y nuestra FPGA tiene tamao de sobra para
nuestro circuito, por ahora no nos vamos a preocupar de la simplificacin. Por tanto,
podemosdisearelprocesocombinacionaldelestadosiguientedelamaneramscmoda
para nosotros. Por ejemplo, como muestra el siguiente cdigo, considerando slo una
sealdetope
19
:
P_COMB_ESTADO: Pr ocess ( est ado_act , t ope_i zq, t ope_dcha)
begi n
case est ado_act i s
when I ZQ =>
i f t ope_i zq = ' 1' t hen
est ado_si g <= DCHA;
el se
est ado_si g <= I ZQ;
end i f ;
when DCHA =>
i f t ope_dcha = ' 1' t hen
est ado_si g <= I ZQ;
el se
est ado_si g <= DCHA;
end i f ;
end case;
end pr ocess;
Cdigo 9-7: Cdigo del proceso combinacional que obtiene el estado siguiente
Paraterminar,implementaelcircuitoenteroenlaFPGAycompruebaquefuncionabien.
9.4. Conclusiones
HemosvistocmoimplementarmquinasdeestadosfinitosenVHDL.Alenfrentartecon
las especificaciones de un diseo, debes pensar cmo se transformarlas en una o varias
mquinas de estados. Esta es una de las funciones ms importantes del ingeniero.
Posteriormente,elpasodelamquinadeestadosalVHDLesmsomenosdirecto.
18
Elproblemadelcarritohechoenclaseessimilar,quizsunpocomscomplicado.
http://laimbio08.escet.urjc.es/assets/files/docencia/EDII/carrito.pdf
19
Sinembargo,silohicieseamano,squetengoqueconsiderarlasentradasimposiblesparapodersimplificar
almximoporKarnaugh
Departamento de Tecnologa Electrnica 93
10. Clave electrnica
En esta prctica vamos a realizar un circuito que compruebe si se ha introducido una
clave correctamente. Despus de introducir la clave correcta, el circuito activar una
salida,queennuestrocasosernlosLED,peropodrasercualquierotracosa,comoabrir
unapuertaodesactivarunaalarma.
En la placa Pegasus disponemos de cuatro pulsadores, que para simplificar los vamos a
llamarA, B, C y D.stossecorrespondernconlospulsadoresBTN3,BTN2,BTN1yBTN0.
Elresetirenelprimerinterruptor(SW0).Lasespecificacionesdelcircuitoson:
LaclavequeactivarlasalidaserACBA(podrasercualquierotra).
Una vez que se ha introducido la clave correcta se encendern los 8 LED durante 3
segundos.Traslocualseapagarn.
Durante el tiempo en que los LED estn encendidos (despus de introducir la clave
correcta),elcircuitoignorarsisepresionanlospulsadores.
DespusdehaberintroducidolaclavecorrectaydequesehayanapagadolosLED,se
aceptarsolapamientoparalasiguienteclave.Estoes,laltimaAdelaclavecorrecta
podrserlaprimeraAdelasiguienteclaveintroducida(estonotienemuchosentidoen
unaclave,perosehaceascomoejercicio).
Se podr tener un nmero infinito de intentos. La secuencia correcta se podr
introducir en cualquier momento excepto durante el tiempo en que los LED estn
encendidos.
Paraesteejercicioslosedarnunasindicaciones:
Hazdetectoresdeflancoparatodoslospulsadores.SiusaslaplacaBasystendrsms
problemasparadetectarunanicapulsacinypodraserconvenienterealizarunfiltro
temporal: no aceptar pulsos durante los 300 ms despus de haber recibido un pulso
(miraelcaptulo11).
Hazeldiagramadeestadosamanoparaelcircuitodetectordelaclave
Un esquema posible del circuito se muestra en la figura 10.1. Aparte del bloque
detectordeflancos,esteesquemaesmuysimilaramuchosproblemasdeexamen,que
tienenunamquinadeestadosyuncircuitotemporizador(vercaptulo16figura16.1)
Comolamquinadeestadosrecibeentradassincronizadasdelmismoreloj:todaslas
entradas de este bloque provienen de bloques con el cl k y no vienen del exterior; el
circuitolopuedeshacermedianteunamquinadeMealyodeMoore.
Lasealhabi l i t a_cuent adelamquinadeestadosestaraunohastaquesellegueal
findelatemporizacin(f i n_cuent a=' 1' ).Lasealf i n_cuent avaldr1duranteunslo
ciclodereloj,alterminarlacuenta.Luegovolveracero.
Todoestosonrecomendaciones,peronotienesquehacerelcircuitoexactamentecomo
sepropone.Sitienesotraideadecmodisearlo,llvalaacabo.
Departamento de Tecnologa Electrnica 95
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
Det ect or de f l anco
Cl k
Reset
Cl k
Reset
BTN0
Pul so_D
Mqui na de est ados
Cl k
Reset
Cl k
Reset
LD( 7: 1)
BTN1
BTN2
BTN3
Pul so_C
Pul so_B
Pul so_A
Tempor i zador
Cl k
Reset
f i n3seg
Enabl e
8
habi l i t a_cuent a
f i n3seg
Det ect or de f l anco
Cl k
Reset
Cl k
Reset
BTN0
Pul so_D
Mqui na de est ados
Cl k
Reset
Cl k
Reset
LD( 7: 1)
BTN1
BTN2
BTN3
Pul so_C
Pul so_B
Pul so_A
Tempor i zador
Cl k
Reset
f i n3seg
Enabl e
8
habi l i t a_cuent a
f i n3seg
Figura 11.2: Cronograma de la salida del detector de flancos (PULSO_BTN) cuando hay rebotes en la
entrada (BTN)
Para evitar los rebotes basta con eliminar todos los pulsos que se generen durante los
siguientes 300 milisegundos despus de haber detectado un flanco de subida. Si
conseguimoshacerestecircuito,lasalidafiltrada(FI LTRO_BTN)seracomolamostradaen
lafigura11.3.
Departamento de Tecnologa Electrnica 97
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
4 flancos de subida
Slo despus de 300 milisegundos podr haber un nuevo pulso
BTN
FI LTRO_BTN
300 ms
4 flancos de subida
Slo despus de 300 milisegundos podr haber un nuevo pulso
BTN
FI LTRO_BTN
300 ms
Figura 11.3: Cronograma de la salida del filtro antirrebotes (FILTRO_BTN) cuando hay rebotes en la
entrada (BTN)
Cmo podramos realizar este circuito? pues con una mquina de estados similar al
detectordeflancosperocontemporizador.Elesquemadelcircuitosemuestraenlafigura
11.4. En este esquema propuesto, el temporizador se habilita cuando se ha detectado un
flancodesubida.Apartirdeentoncesnoseproducirningnpulsodesubidahastaque
eltemporizadordlasealdequehanpasado3milisegundos.Despusdeesto,sepodr
detectarunnuevoflancodesubida.
BTN0
Mqui na de est ados
Cl k
Reset
Cl k
Reset
Tempor i zador
Cl k
Reset
f i n3ms
Enabl e
enabl econt
f i n3ms
Fi l t r o_BTN0
BTN0
Mqui na de est ados
Cl k
Reset
Cl k
Reset
Tempor i zador
Cl k
Reset
f i n3ms
Enabl e
enabl econt
f i n3ms
Fi l t r o_BTN0
Figura 11.4: Esquema del circuito que filtra los rebotes de la entrada
Intenta pensar por ti mismo el diagrama de estados. Si no se te ocurre, puedes mirar la
figura11.5.
estado
filtro_btn0
enablecont
BTN0, f i n3ms
Leyenda entradas
salidas
inic
00
s0
00
0X
1X
0X
1X
s01
10
X1
espera
01
XX
X0
estado
filtro_btn0
enablecont
BTN0, f i n3ms
Leyenda entradas
salidas
inic
00
s0
00
0X
1X
0X
1X
s01
10
X1
espera
01
XX
X0
Figura 11.5: Diagrama de estados del circuito que filtra los pulsos
Paracadapulsadorhabraquerealizaruncircuitosimilar.
Implementaelcontadormanualdelaseccin6.4conestosfiltros.UtilizaunaplacaBasys
paracomprobarquerealmentefuncionabien.
Figura 12.1: Esquema de puertos de entrada y salida del control de la mquina expendedora
Cmoharamosestecircuitopordentro?delasprcticasanterioresyapuedesteneruna
idea. El esquema es similar al de la clave electrnica (recuerda la figura 10.1). La figura
12.2muestraunesquemadeestecircuito.Comopuedesver,incluye:
Departamento de Tecnologa Electrnica 99
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
Unbloquededeteccindeflancoparalospulsadores,haciendoquesloseconsidere
unamonedacadavezquesepresionaunpulsador.
Elbloquedelamquinadeestados,quedebesabercuntodinerosehaintroducidoy
controlarlassalidas.
Elbloquedetemporizacin,quedebeindicarelpasode2segundosdespusdehaber
introducidoeldinerosuficienteparadarunalata.
El bloque que convierte a siete segmentos la cantidad de dinero (en este caso un
nmero hexadecimal de una cifra: 4 bits) que se quiere mostrar por el display. Si
quisisemosmostrarunaLcuandodurantelatemporizacin,tendramosqueincluirla
sealenabl e_cont comoentradadeltemporizador.
Det ect af l anco
Cl k
Reset
Cl k
Reset
BTN3
m1eur o
Mq_est ados
Cl k
Reset
Cl k
Reset
LED( 7: 0)
BTN2
BTN1
BTN0
m50cent
m20cent
m10cent
Tempor i zador
Cl k
Reset
f i n2seg
Enabl e
8
enabl e_cont
f i n2seg
SEG( 6: 0)
4
conv7seg
s7seg cant i dad
qdi ner o
7
Det ect af l anco
Cl k
Reset
Cl k
Reset
BTN3
m1eur o
Mq_est ados
Cl k
Reset
Cl k
Reset
LED( 7: 0)
BTN2
BTN1
BTN0
m50cent
m20cent
m10cent
Tempor i zador
Cl k
Reset
f i n2seg
Enabl e
8
enabl e_cont
f i n2seg
SEG( 6: 0)
4
conv7seg
s7seg cant i dad
qdi ner o
7
Figura 12.2: Esquema interno del circuito de control de la mquina expendedora simple
Haz el diagrama de estados de la mquina de estados, implementa el circuito y
compruebaquefuncionabien.
12.2. Versin decimal
El circuito que hemos hecho est bien para estudiantes de electrnica digital, pero si lo
quiereutilizaralguienquenosabehexadecimalsevaahacerunlo.
Aspues,vamosasermsexplcitosconlosmensajesquevamosadar.
EL diseo va a ser exactamente igual con la diferencia de la informacin que se muestra
enlosdisplays.Ahorautilizaremosloscuatrodisplays(recuerdalaprctica6.3.2).
Loquesevaamostrarsegnelestadosemuestraenlafigura12.3.
En el inicio indicamos el precio
P150
Mientras no haya introducido el
dinero suficiente, se indica la
cantidad que lleva (en decimal).
Por ejemplo:
C060
Al haber introducido el dinero
suficiente escribiremos LATA
de la manera ms aproximada
En el inicio indicamos el precio
P150
Mientras no haya introducido el
dinero suficiente, se indica la
cantidad que lleva (en decimal).
Por ejemplo:
C060
Al haber introducido el dinero
suficiente escribiremos LATA
de la manera ms aproximada
FPGA_PWM
R1
V
CC
M
FPGA_PWM
R1
V
CC
M
Figura 14.3: Resultado de poner a tierra cada uno de los otros tres terminales, cuando el motor pierde par
indica que es el correspondiente
Unavezquetengamoslosterminalesidentificados,yapodemosgenerarlassecuenciasde
giro. En la figura 14.4 se muestra la identificacin de los terminales para el motor que
hemosobtenidodeimpresorasHewlettPackardmodelosDJ560CyDJ690c.Estemotoresel
modelo PM55L048 de Minebea, cuyas hojas de caractersticas se pueden consultar en la
pgina web de Minebea [16]. De todos modos, el funcionamiento con otros motores ser
similar, aunque tendrs que leer las caractersticas del motor que tengas para adaptar el
circuito.
106 Universidad Rey J uan Carlos
14. Control de motor paso a paso
A
B
D
Alimentacin
(comn)
C
AA
BB
D
Alimentacin
(comn)
C
Figura 14.4: Identificacin de los terminales en nuestro motor PM55L-048 de Minebea
14.1.2. Secuencia del motor paso a paso
Para hacer girar al motor tenemos que ir poniendo a tierra algunos terminales en una
secuenciaconcreta.Poneratierraunterminalhacequecirculecorrienteporeldevanado
correspondiente,yestohacequesemuevaelrotordelmotor.Delafigura14.3podemos
intuircmopodemosobtenerlasecuenciaconlaquepodemoshacerqueelmotorgire.La
figura 14.5 aclara cmo obtener esa secuencia. La flecha del centro indica de manera
esquemtica la posicin del rotor. De todos modos, es slo un esquema, no se producen
giros de 90 con cada paso, sino que son giros mucho menores (suelen ser menores de
10).
A
C
B D
A y B a tierra
A
C
B D
B y C a tierra
A
C
B D
C y D a tierra
A
C
B D
D y A a tierra
A
C
B D
A
C
B D
A y B a tierra
A
C
B D
A
C
B D
B y C a tierra
A
C
B D
A
C
B D
C y D a tierra
A
C
B D
A
C
B D
D y A a tierra
Figura 14.5: Secuencia de terminales que se ponen a tierra para obtener el giro del motor
As que para girar el motor tenemos que poner a tierra de manera secuencial los
terminales.Delafigura14.5podemosobtenerlasecuenciadeterminalesqueseponena
tierraparaobtenerelgirodelmotor:ABBCCDDAAB...
Enlafigura14.6semuestralasecuenciadelosterminalesquesetienenqueponeratierra.
Semuestranlosdossentidosdegiro.
1
1 1
1
1
1
1 1
1
1 1
1
1
1
1 1
1
1
1 2 3 4 5 6 7 8 9
A
B
C
D
1 1
1
1
1
1
1 1
1
1 1
1 1
1
1
1
1 2 3 4 5 6 7 8 9
A
B
C
D
1
1
tiempo tiempo
t
e
r
m
i
n
a
l
a
t
i
e
r
r
a
t
e
r
m
i
n
a
l
a
t
i
e
r
r
a1
1 1
1
1
1
1 1
1
1 1
1
1
1
1 1
1
1
1 2 3 4 5 6 7 8 9
A
B
C
D
1 1
1
1
1
1
1 1
1
1 1
1 1
1
1
1
1 2 3 4 5 6 7 8 9
A
B
C
D
1
1
tiempo tiempo
t
e
r
m
i
n
a
l
a
t
i
e
r
r
a
t
e
r
m
i
n
a
l
a
t
i
e
r
r
a
Figura 14.6: Secuencia de terminales que se ponen a tierra para obtener el giro del motor en ambos sentidos
Departamento de Tecnologa Electrnica 107
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
Se pueden generar otras secuencias, poniendo a tierra un nico terminal cada vez, o
mezclando ambas alternativas (estas secuencias las puedes ver en [7]). Lo puedes hacer
comoejercicio,peroparaestaprcticautilizaremoslassecuenciasdelafigura14.6.
Antes de generar las secuencias, tenemos que mirar cul es el tiempo mnimo que
podemos estar en cada paso (o la frecuencia mxima). Esto vara segn el motor y lo
tienesqueverenlashojasdecaractersticas.Ennuestromotor,lashojasdecaractersticas
indican que a partir de 100 Hz empieza a bajar el par del motor
24
. De las pruebas que
hemoshecho,amsde200Hzempiezaafuncionarmal.
14.2. Generacin de la secuencia de control con la FPGA
Ahora tenemos que generar las secuencias de la figura 14.6 con la FPGA. El bloque de
control que haremos se muestra en la figura 14.7. Usaremos los pulsadores BTN0 y BTN3
paraordenarmoverelmotorenunsentidouotro.Enprincipionosedeberandepulsara
lavez,peroencasodequesepulsenalavez,daremospreferenciaaunsentidodegiro.
Cuandonosepulsaningnpulsadorelmotordeberestarparado.
Porserundiseosncronoqueseharconunamquinadeestados,elcircuitotendrun
relojyunreset.
Elcircuitotendrcuatrosalidas(A,B,CyD)quecuandosean1darnlaordendeponerel
terminalcorrespondientedelmotoratierra.Cuandoseancero,sepondrnalatensinde
alimentacin y no circular corriente por el devanado del motor, y por tanto, no se
activar.
CONTROL_MOTOR
A
BTN3
BTN0
I ZQ
DCHA
SW0
RESET
CLK
B
C
D
AC0 ( P49)
AC1 ( P48)
AC2 ( P81)
AC3 ( P47)
J A1 ( P81)
J A2 ( P91)
J A3 ( P82)
J A4 ( P92)
Pegasus Basys
CONTROL_MOTOR
A
BTN3
BTN0
I ZQ
DCHA
SW0
RESET
CLK
B
C
D
CONTROL_MOTOR
AA
BTN3
BTN0
I ZQ
DCHA
SW0
RESET
CLK
BB
CC
DD
AC0 ( P49)
AC1 ( P48)
AC2 ( P81)
AC3 ( P47)
J A1 ( P81)
J A2 ( P91)
J A3 ( P82)
J A4 ( P92)
Pegasus Basys
AC0 ( P49)
AC1 ( P48)
AC2 ( P81)
AC3 ( P47)
J A1 ( P81)
J A2 ( P91)
J A3 ( P82)
J A4 ( P92)
Pegasus Basys
Figura 14.8: Esquema de la mquina de estados para el bloque de control de motor de la FPGA
Observa en la figura 14.8 que hay una seal CTS que no est en las entradas del bloque
mostradoenlafigura14.7.Estaseallatendremosquegenerarnosotrosyserlaquenos
marquelafrecuenciadelmotor.Paraelmotordenuestrocaso,serunasealde100Hz
(una centsima de segundo). Esta seal la tenemos que generar de modo que est activa
duranteunslocicloderelojencadacentsimadesegundo.
Otracosaquetienesquetenerencuentaesqueparaestapropuesta,lassealesdeentrada
delospulsadoresBTN0yBTN3nosetienenquepasarporundetectordeflanco,sinoquese
muestreancontinuamente,yaquequienhacedefiltroeslasealCTS,puesestactivaun
slocicloderelojduranteunacentsimadesegundo.
Enlafigura14.8lasflechasquegeneranlasdossecuenciasdegirosehapuestodedistinto
color.Fjatequeladecolorazul,ladelBTN0tienepreferenciasobreladeBTN3.Enrealidad
esindiferenteculescojas,perotienesqueescogerunasecuenciasobrelaotra.
Ahora tendras que realizar el circuito en VHDL. Es recomendable que para que te sea
ms fcil depurar, las salidas A, B, Cy D tambin las saques por cuatro LED. Incluso para
depurar el circuito podras bajar la frecuencia de giro y comprobar que efectivamente se
generanlassecuenciasdeseadas.
Una vez que tenemos el circuito y vemos que los LED se mueven como pensamos, nos
quedahacerquelassalidasA,B,CyDordenenalosterminalesdelmotorestaratierraoa
latensindealimentacinsegnsuvalor.Estoloveremosenelapartadosiguiente.
14.3. Circuito de potencia para gobernar el motor
PodramospensarquesiponemoslascuatrosalidasdelaFPGAdirectamenteconectadas
a los terminales del motor, haramos que los terminales se pongan a tierra cuando la
FPGA lo mande. Desgraciadamente no es as, digamos que la FPGA no tiene fuerza
suficiente como para obligar al motor a ponerse a cero, por tanto hay que pensar en
hacerlodeotramanera.LaFPGAnopuedesuministrarlapotencianecesariaparamover
un motor. Por otro lado, el motor va alimentado a 24 voltios (aunque puede funcionar a
menos tensin) mientras que la FPGA se alimenta a 3,3 voltios, por tanto, las tensiones
tampocosecorresponden.
En nuestra primera aproximacin podramos usar un transistor bipolar o MOSFET para
cadaterminal,demanerasimilaracomosemostrabaenlafigura13.4.Hacindolodeesta
manera,elesquemanospodraquedarcomosemuestraenlafigura14.9.
Analizando el esquema podemos ver que cuando una salida de la FPGA (por ejemplo,
FPGA_A) tiene un valor lgico de 1 (3,3 V), circular corriente por la base del transistor y
Departamento de Tecnologa Electrnica 109
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
entrar en saturacin. Esto provocar que el terminal del motor TA est a una tensin
cercanaacero(segnlacadadetensinentrecolectoryemisordeltransistor).
Porotrolado,sihayuncerolgicoalasalidadelaFPGA,habrcerovoltiosenlabasedel
transistorynocircularcorrienteporlabase.Porlotantoeltransistorestarencorteyel
terminaldelmotorTAestaraVcc.
FPGA_A
R1
V
CC
TA
FPGA_B
R1
V
CC
TB
FPGA_C
R1
V
CC
TC
FPGA_D
R1
V
CC
TD
V
CC
M
FPGA_A
R1
V
CC
TA
FPGA_A
R1
V
CC
TA
FPGA_B
R1
V
CC
TB
FPGA_B
R1
V
CC
TB
FPGA_C
R1
V
CC
TC
FPGA_C
R1
V
CC
TC
FPGA_D
R1
V
CC
TD
FPGA_D
R1
V
CC
TD
V
CC
M
Problemas tericos
En esta seccin se incluye la resolucin de problemas tericos de diseo digital. Te
recomendamosquelosintenteshacersinverlasolucin,yquemireslasolucinunavez
lo hayas intentado para comprobar el resultado. Los problemas de electrnica digital
parecenmuyfcilessitieneslasolucinallado,perolodifcilespensarlos.
Estos problemas han sido problemas de exmenes de la asignatura Electrnica Digital II
de la carrera de Ingeniera de Telecomunicacin de la Universidad Rey Juan Carlos. Por
ser problemas de exmenes, el enunciado est simplificado, para adecuarlos a la
resolucin en un tiempo limitado, por tanto, hay muchas simplificaciones y en muchos
casosseasumencomportamientosideales.
Tabla 16.1:
Codificacin de estados
Ahorarellenamoslatabladelosestadossiguientesysalidas(tabla16.2):
Departamento de Tecnologa Electrnica 121
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
Q2 Q1 Q0 P T1s Pl FWEn Q2 Q1 Q0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 X X X
0 0 0 1 0 0 0 0 0 0 1
0 0 0 1 1 0 0 0 X X X
0 0 1 0 0 0 0 1 0 1 1
0 0 1 0 1 0 0 1 0 1 1
0 0 1 1 0 0 0 1 0 0 1
0 0 1 1 1 0 0 1 0 1 0
0 1 0 0 0 0 1 0 0 1 1
0 1 0 0 1 0 1 0 X X X
0 1 0 1 0 0 1 0 0 1 0
0 1 0 1 1 0 1 0 X X X
0 1 1 0 0 1 0 0 0 1 1
0 1 1 0 1 1 0 0 X X X
0 1 1 1 0 1 0 0 1 0 0
0 1 1 1 1 1 0 0 X X X
1 0 0 0 0 1 0 1 0 0 0
1 0 0 0 1 1 0 1 0 0 0
1 0 0 1 0 1 0 1 1 0 0
1 0 0 1 1 1 0 1 0 1 0
1 X 1 X X X X X X X X
1 1 0 X X X X X X X X
Estado
actual Entradas Salidas
Estado
siguiente
Inicial
Esp1s
Fw
Estados imposibles
t+1 t+1
Moore: slo
dependen del
estado
Play
Esp1s2
t+1
condiciones imposibles
condiciones imposibles
condiciones imposibles
condiciones imposibles
condiciones imposibles
condiciones imposibles
Q2 Q1 Q0 P T1s Pl FWEn Q2 Q1 Q0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 X X X
0 0 0 1 0 0 0 0 0 0 1
0 0 0 1 1 0 0 0 X X X
0 0 1 0 0 0 0 1 0 1 1
0 0 1 0 1 0 0 1 0 1 1
0 0 1 1 0 0 0 1 0 0 1
0 0 1 1 1 0 0 1 0 1 0
0 1 0 0 0 0 1 0 0 1 1
0 1 0 0 1 0 1 0 X X X
0 1 0 1 0 0 1 0 0 1 0
0 1 0 1 1 0 1 0 X X X
0 1 1 0 0 1 0 0 0 1 1
0 1 1 0 1 1 0 0 X X X
0 1 1 1 0 1 0 0 1 0 0
0 1 1 1 1 1 0 0 X X X
1 0 0 0 0 1 0 1 0 0 0
1 0 0 0 1 1 0 1 0 0 0
1 0 0 1 0 1 0 1 1 0 0
1 0 0 1 1 1 0 1 0 1 0
1 X 1 X X X X X X X X
1 1 0 X X X X X X X X
Estado
actual Entradas Salidas
Estado
siguiente
Inicial
Esp1s
Fw
Estados imposibles
t+1 t+1
Moore: slo
dependen del
estado
Play
Esp1s2
t+1
Q2 Q1 Q0 P T1s Pl FWEn Q2 Q1 Q0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 X X X
0 0 0 1 0 0 0 0 0 0 1
0 0 0 1 1 0 0 0 X X X
0 0 1 0 0 0 0 1 0 1 1
0 0 1 0 1 0 0 1 0 1 1
0 0 1 1 0 0 0 1 0 0 1
0 0 1 1 1 0 0 1 0 1 0
0 1 0 0 0 0 1 0 0 1 1
0 1 0 0 1 0 1 0 X X X
0 1 0 1 0 0 1 0 0 1 0
0 1 0 1 1 0 1 0 X X X
0 1 1 0 0 1 0 0 0 1 1
0 1 1 0 1 1 0 0 X X X
0 1 1 1 0 1 0 0 1 0 0
0 1 1 1 1 1 0 0 X X X
1 0 0 0 0 1 0 1 0 0 0
1 0 0 0 1 1 0 1 0 0 0
1 0 0 1 0 1 0 1 1 0 0
1 0 0 1 1 1 0 1 0 1 0
1 X 1 X X X X X X X X
1 1 0 X X X X X X X X
Estado
actual Entradas Salidas
Estado
siguiente
Inicial
Esp1s
Fw
Estados imposibles
t+1 t+1
Moore: slo
dependen del
estado
Play
Esp1s2
t+1
condiciones imposibles condiciones imposibles
condiciones imposibles condiciones imposibles
condiciones imposibles condiciones imposibles
condiciones imposibles condiciones imposibles
condiciones imposibles condiciones imposibles
condiciones imposibles condiciones imposibles
Tabla 16.4: Tabla de excitacin de los necesarias para obtener una transicin en biestables J-K
16.2.5. Ecuacin simplificada para la salida Play
De toda la tabla 16.4 nos piden la ecuacin simplificada para la salida PLAY. Para ello
realizamosKarnaugh.PorserdeMoore,lasentradasnohacenfalta(sesimplificaran).En
lafigura16.9semuestraeldiagramadeKarnaughylaecuacindelasalidaPLAY.
Q1- Q0
Q2
PLAY
PLAY =Q2 +Q1 Q0
00 01 11 10
0 0 1 0
1 X X X
0
1
Q2
Q1- Q0
Q2
PLAY
PLAY =Q2 +Q1 Q0 PLAY =Q2 +Q1 Q0
00 01 11 10
0 0 1 0
1 X X X
0
1
Q2
Q1 Q0 Q1 Q0
Figura 16.9: Diagrama de Karnaugh y ecuacin de la salida Play
16.2.6. Modelo VHDL
Aunque slo se piden los tres procesos de la mquina de estados, se incluye todo el
diseoVHDL:laentidad(cdigo161)ylaarquitectura(cdigo162).
l i br ar y I EEE;
use I EEE. STD_LOGI C_1164. ALL;
use I EEE. NUMERI C_STD. ALL;
ent i t y mp3 i s
Por t ( Reset : i n STD_LOGI C;
Cl k : i n STD_LOGI C;
P : i n STD_LOGI C;
Pl ay : out STD_LOGI C;
Fw : out STD_LOGI C) ;
end mp3;
Cdigo 16-1: Entidad del circuito MP3
Departamento de Tecnologa Electrnica 123
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
ar chi t ect ur e Behavi or al of mp3 i s
- - el est ado no se puede l l amar PLAY ni FWpar a di f er enci ar l os de l os puer t os
t ype est ados i s ( I NI CI AL, ESP1S, ePLAY, eFW, ESP1S2) ;
si gnal est ado_act ual , est ado_si gui ent e : est ados;
si gnal T1S, enabl e : st d_l ogi c;
si gnal cuent a : unsi gned ( 23 downt o 0) ; - - 24 bi t s mayor que 10 mi l l ones
const ant cf i ncuent a : nat ur al : = 10**7; - - cont ar 10 mi l l ones
begi n
- - - - - - - - - - - - - - - - - - - - - - - - PROCESO COMBI NACI ONAL DEL ESTADO - - - - - - - - - - - - - - - - - - - -
P_COMB_ESTADO: Pr ocess ( est ado_act ual , T1S, P)
begi n
case est ado_act ual i s
when I NI CI AL =>
i f P = ' 1' t hen
est ado_si gui ent e <= ESP1S;
el se
est ado_si gui ent e <= est ado_act ual ;
end i f ;
when ESP1S =>
i f P = ' 0' t hen
est ado_si gui ent e <= ePLAY;
el si f T1S = ' 1' t hen
est ado_si gui ent e <= eFW;
el se
est ado_si gui ent e <= est ado_act ual ;
end i f ;
when ePLAY =>
i f P = ' 1' t hen
est ado_si gui ent e <= ESP1S2;
el se
est ado_si gui ent e <= est ado_act ual ;
end i f ;
when eFW=>
i f P = ' 0' t hen
est ado_si gui ent e <= ePLAY;
el se
est ado_si gui ent e <= est ado_act ual ;
end i f ;
when ESP1S2 =>
i f P = ' 0' t hen
est ado_si gui ent e <= I NI CI AL;
el si f T1S = ' 1' t hen
est ado_si gui ent e <= eFW;
el se
est ado_si gui ent e <= est ado_act ual ;
end i f ;
end case;
end pr ocess;
- - - - - - - - - - - - - - - - - - - - - - - - PROCESO COMBI NACI ONAL DE LAS SALI DAS ( MOORE) - - - - - - - - - - - - - - - -
P_COM_SALI DAS: Pr ocess ( est ado_act ual )
begi n
case est ado_act ual i s
when I NI CI AL =>
Pl ay <= ' 0' ;
Fw <= ' 0' ;
enabl e <= ' 0' ;
when ESP1S =>
Pl ay <= ' 0' ;
Fw <= ' 0' ;
enabl e <= ' 1' ;
when ePLAY =>
Pl ay <= ' 1' ;
Fw <= ' 0' ;
enabl e <= ' 0' ;
when eFW=>
Pl ay <= ' 0' ;
Fw <= ' 1' ;
enabl e <= ' 0' ;
when ESP1S2 =>
Pl ay <= ' 1' ;
Fw <= ' 0' ;
enabl e <= ' 1' ;
end case;
end pr ocess;
124 Universidad Rey J uan Carlos
16. Reproductor MP3
- - - - - - - - - - - - - - - - - - - - - - - - PROCESO SECUENCI AL - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
P_SEQ: Pr ocess ( Reset , Cl k)
begi n
i f Reset = ' 1' t hen
est ado_act ual <= I NI CI AL;
el si f Cl k' event and Cl k=' 1' t hen
est ado_act ual <= est ado_si gui ent e;
end i f ;
end pr ocess;
- - - - - - - - - - - - - - - - - - - - - - - - TEMPORI ZADOR - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
P_Tempo: Pr ocess ( Reset , Cl k)
begi n
i f Reset = ' 1' t hen
cuent a <= ( ot her s => ' 0' ) ;
T1S <= ' 0' ;
el si f Cl k' event and Cl k=' 1' t hen
i f enabl e = ' 1' t hen
i f cuent a < cf i ncuent a t hen
cuent a <= cuent a + 1;
T1S <= ' 0' ;
el se
cuent a <= ( ot her s => ' 0' ) ;
T1S <= ' 1' ;
end i f ;
el se
cuent a <= ( ot her s => ' 0' ) ;
T1S <= ' 0' ;
end i f ;
end i f ;
end pr ocess;
end Behavi or al ;
Cdigo 16-2: Arquitectura del circuito MP3
16.3. Solucin alternativa
Suele haber varias alternativas para disear un circuito digital. En el examen, varios
alumnosplantearonunasolucinsimilaralasiguiente(figura16.10):
MaqEst ados
Tempor i zador
P
PLAY
FW
Cl k
Reset
Cl k
Cl k
Reset
Reset
P+1S
P- 1S
P+1SEG
P- 1SEG
P se ha pulsado ms de 1 segundo
P se ha pulsado menos de 1 segundo
Sin embargo, esto no es un temporizador sino
otro mquina de estados que usa temporizador
MaqEst ados
Tempor i zador
P
PLAY
FW
Cl k
Reset
Cl k
Cl k
Reset
Reset
P+1S
P- 1S
P+1SEG
P- 1SEG
P se ha pulsado ms de 1 segundo
P se ha pulsado menos de 1 segundo
Sin embargo, esto no es un temporizador sino
otro mquina de estados que usa temporizador
Figura 16.10: Diagrama de bloques de la solucin alternativa
Sin embargo, fjate que el primer bloque (el llamado temporizador) es mucho ms que un
temporizador. Es una mquina de estados. Por lo tanto, al hacerlo de esta manera se
debendefinirlasdosmquinasdeestados:
Elesquematendraqueserelmostradoenlafigura16.11(osimilar).
Departamento de Tecnologa Electrnica 125
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
MaqEst ados2
MaqEst ados1
P
PLAY
FW
Cl k
Reset
Cl k
Cl k
Reset
Reset
P+1S
P- 1S
Ha pasado un segundo con el pulsador presionado.
Si mantengo pulsado, cada segundo que pase
volver a activarse, pero me da igual
Tempor i zador
Cl k
Reset
P- 1S
Enabl e F1S
MaqEst ados2
MaqEst ados1
P
PLAY
FW
Cl k
Reset
Cl k
Cl k
Reset
Reset
P+1S
P- 1S
Tempor i zador
Cl k
Reset
P- 1S
Enabl e F1S
Ha pasado un segundo con el pulsador presionado.
Si mantengo pulsado, cada segundo que pase
volver a activarse, pero me da igual
Est ado
P+1S P- 1S
P F1s
entradas
Salidas
Est ado
P+1S P- 1S
P F1s
entradas
Salidas
Figura 16.12: Orden de entradas y salidas en la
representacin de la primera mquina de estados
1 0
Imposible
X 1
REPOSO
0 0
0 0
ESP1S
0 0
Nos mantenemos aqu
hasta que suelte el
pulsador o pase un
segundo
1 0
MENOS1S
0 1
0 X
Ha soltado el pulsador. Si
lo suelta a la vez que ha
llegado el segundo,
tambin consideramos que
lo ha soltado, por eso 0 X
X X
Slo estamos un ciclo de
reloj en MENOS1S (P-
1S='1'), nos vamos
directamente a reposo.
Podramos considerar que:
- F1S no puede ser 1
- P no puede ser 1 (no hay
rebotes y no es posibles
presionar tan rpido el
pulsador)
MAS1S
1 0
1 1
Nos quedamos aqu hasta
que suelte el pulsador. Nos
da igual recibir F1S
1 X
0 X
1 0
Imposible
X 1
Imposible
X 1
REPOSO
0 0
0 0
ESP1S
0 0
ESP1S
0 0
Nos mantenemos aqu
hasta que suelte el
pulsador o pase un
segundo
1 0
MENOS1S
0 1
MENOS1S
0 1
0 X
Ha soltado el pulsador. Si
lo suelta a la vez que ha
llegado el segundo,
tambin consideramos que
lo ha soltado, por eso 0 X
X X
MAS1S
1 0
MAS1S
1 0
1 1
Slo estamos un ciclo de
reloj en MENOS1S (P-
1S='1'), nos vamos
directamente a reposo.
Podramos considerar que:
- F1S no puede ser 1
- P no puede ser 1 (no hay
rebotes y no es posibles
presionar tan rpido el
pulsador)
Nos quedamos aqu hasta
que suelte el pulsador. Nos
da igual recibir F1S
1 X
0 X
Figura16.15:Diagramadelasegundamquinadeestadosdelasolucinalternativa
Figura 17.1: Texto que deben de mostrar los displays de siete segmentos
El funcionamiento de los displays es igual que el de la placa de
prcticas. Esto es, tenemos 4 nodos que controlan el encendido de
cadaunodelosdisplays:AN3,AN2,AN1,AN0.Recuerdaquefuncionana
nivel bajo. Y tenemos 7 puertos para los siete segmentos (SA, SB, SC,
SD,SE,SF,SG),yquetambinfuncionananivelbajo.
A
G
D
B
C
F
E
A
G
D
B
C
F
E
Figura 17.2:
Segmentos del display
Recuerda que slo tenemos 7 puertos para todos los segmentos y no 7x4=28 segmentos.
Por lo tanto, debes usar el mismo segmento para los cuatro displays (tal como lo hemos
hechoenprcticas).
Lasentradasysalidasdelcircuitosemuestranenlafigura17.3.Elrelojdelcircuito(Cl k)
vaa10MHz.
Di spl ay
est ado_act ual
( PAUSA, PLAY, FF)
AN( 3. . 0)
SEG( 6. . 0)
Cl k
( 10MHz)
Reset
Reset
4
7
Di spl ay
est ado_act ual
( PAUSA, PLAY, FF)
AN( 3. . 0)
SEG( 6. . 0)
Cl k
( 10MHz)
Reset
Reset
4
7
RI : receptor
izquierdo
RD: receptor
derecho
Rueda
delantera
izquierda
Rueda
trasera
izquierda
RI : receptor RD: receptor
izquierdo derecho
Rueda
delantera
izquierda
Rueda
trasera
izquierda
RD:receptordeinfrarrojosdeladerecha.
Paraambas,losvaloresson:
0:siestsobrelalnea
1:siestfueradelalnea
Lascuatrocombinacionessonposibles(verfigura18.4)
Dossalidas(GI,GD)
GI =' 1' :Ordenparagiraralaizquierda.
GD=' 1' :Ordenparagiraraladerecha.
Lasposiblessa
( GI , GD) = ( 1, 1) Nosedebeponernunca
2.1. Entradas, salidas y estado
sentradasysalidasdelsistemadecon
pusoenelenunciado.
Dosentradas(RI , ): RD
RI :receptordeinfrarrojosdelaizquierda.
lidasson:
( GI , GD) = ( 1, 0) Giroalaizquierda
( GI , GD) = ( 0, 1) Giroaladerecha
( GI , GD) = ( 0, 0) Recto
RI =' 1' RD=' 1'
Ms all izquierda
GI =' 0' GD=' 1'
A
RI =' 1' RD=' 0'
A la izquierda
GI =' 0' GD=' 1'
RI =' 0' RD=' 0'
Centrado
GI =' 0' GD=' 0'
RI =' 0' RD=' 1'
A la derecha
GI =' 1' GD=' 0'
RI =' 1' RD=' 1'
Ms all derecha
GI =' 1' GD=' 0'
B C D E
No giro Giro a la dere a la izquierda cha Giro
RI =' 1' RD=' 1'
Ms all izquierda
GI =' 0' GD=' 1'
A
A la izquierda Centrado A la derecha
RI =' 1' RD=' 0'
GI =' 0' GD=' 1'
RI =' 0' RD=' 0'
GI =' 0' GD=' 0'
RI =' 0' RD=' 1' RI =' 1' RD=' 1'
Ms all derecha
GI =' 1' GD=' 0' GI =' 1' GD=' 0'
B C D E
No giro Giro a la dere a la izquierda
Figu n de los receptores respe y giro
Ahora hay que realizar el diagrama de transicin de estados. Recordamos que en este
apartadohayquerealizarlocomounamquinadeMoore.
Elordendelasentradasysalidaseneldiagramaserelsiguiente(figura18.5):
cha Giro
ra 18.4: Posici cto a la lnea
Departamento de Tecnologa Electrnica 135
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
Est ado
GI GD
RI RD
entradas
Salidas
Est ado
GI GD
RI RD
entradas
Salidas
Figura 18.5: Orden de entradas y salidas en el diagrama de estados
FjatequeesunamquinadeMoore,porloquelassalidasestnenelpropioestado.
Inicialmente partim que el enunciado os del estado CENTRO, en donde RI =' 0' y RD=' 0' , ya
dicequealprincipiosecolocaelcochesobrelalnea.Enesteestadosemantieneelcoche
singirar,hastaqueunodelosreceptorescambiea1.
En Centro:
Imposible
1 1
CENTRO
0 0
0 0
0 1 1 0
S
la derecha
le por
la izquierda
En Centro:
e sale por Se sa
Imposibl
1 1
e
CENTRO
0 0
0 0
0 1 1 0
S
la derecha
le por
la izquierda
Figura 19.8: Se fija el dos en el caso improbable que suelte la tecla a la vez que termina la temporizacin
Ahora,estandoenelestadoESP_S_A,estoes,elpulsadorpresionadoymostrandolaletra
A.Sisesueltalateclaantesdequepaseunsegundo,entradas:( 0, 0) .Tenemosque:
EsperaraversisevuelveapresionarPa estadoESP_P_A
Para contabilizar los segundos, tenem contador
habilitacinaceroduranteelcambiode ' 0' ).
ntesdeunsegundo
os que reiniciar el poniendo su
estado(E=
ESP_S_A
P0/ A000E
I NI CI AL
00/ 00000
En INICIAL
Imposible
T=' 1'
1 X
P0/ A000E 00/ A0000
PT/ 00DL0
ESP_S
P0
En ESP_S
Imposible
T=' 1'
X 1
/ 00000
0
0
/
0
0
0
0
0
0T/ 00DL0
A se sigue mostrando
E='0' para reiniciar el temporizador
Se ha soltado P antes de
_P_A
un segundo
ESP
00/ A000E
habilitar la cuenta
ESP_S_A (ESPera a Presionar, A)
s a ver qu pasa antes:
esiona P
- pasa un segundo
E='1' se vuelve a
esperamo
- se pr
ESP_S_A
P0/ A000E
I NI CI AL
00/ 00000
En INICIAL
Imposible
T=' 1'
1 X
En INICIAL
Imposible
T=' 1'
1 X
P0/ A000E 00/ A0000
PT/ 00DL0
ESP_S ESP_S
P0
En ESP_S
Imposible
T=' 1'
X 1
/ 00000
En ESP_S
Imposible
T=' 1'
X 1
0
0
/
0
0
0
0
0
0T/ 00DL0
A se sigue mostrando
E='0' para reiniciar el temporizador
Se ha soltado P antes de
_P_A
un segundo
ESP
00/ A000E
habilitar la cuenta
ESP_S_A (ESPera a Presionar, A)
s a ver qu pasa antes:
esiona P
- pasa un segundo
E='1' se vuelve a
esperamo
- se pr
Figura 19.9: Se suelta la tecla antes que pase un segundo: nueva espera
hora, estando en el estado ESP_P_A, esto es, el pulsador sin presionar y mostrando la
letraA,puedepasar:
QueantesdequepaseunsegundosevuelvaapresionarP.Enestecasovolvemosal
estadoaESP_S_B(similaraESP_S_A)
QuepaseunsegundosinvolverapresionarP,entradas( 0, T) enestecasosefijala
letraA
Enelcasoimprobablequeamboseventosocurransimultneamente,elenunciadodice
quesefijelaletraA.Lasentradasseran( P, T) ,paraestecaso,podemosirnosalestado
inicial (como en el caso anterior, y de este nos iramos en el siguiente ciclo de reloj a
ESP_S_A(puesPvaaseguirpresionadayaquenolapodremospulsarduranteunnico
ciclodereloj),onospodemosirdirectamentealestadoESP_S_A (loquesuponeponer
unaflechams).Eneldiagramahemoselegidolaprimeraopcin(ambassonvlidas).
de
A
Departamento de Tecnologa Electrnica 145
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
ESP_S_A
P0/ A000E
I NI CI AL
00/ 00000
En INICIAL
Imposible
T=' 1'
X 1
P0/ A000E 00/ A0000
PT/ 00DL0
ESP_S
P0/ 00000
En ESP_S
Imposible
T=' 1'
X 1
0
0
/
0
0
0
0
0
0T/ 00DL0
ESP_P_A
00/ A000E
ESP_S_B
PT/ A00L0
Se fija A
P0/ 0B000
0T/ A00L0 Se reinicia
temporizador
ESP_S_B (ESPera a Soltar, B)
esperamos a ver qu pasa antes:
- soltar P
- pasa un segundo
Se reinicia
temporizador
Se muestra B
ESP_S_A
P0/ A000E
I NI CI AL
00/ 00000
En INICIAL
Imposible
T=' 1'
X 1
En INICIAL
Imposible
T=' 1'
X 1
P0/ A000E 00/ A0000
PT/ 00DL0
ESP_S ESP_S
P0/ 00000
En ESP_S
Imposible
T=' 1'
X 1
En ESP_S
Imposible
T=' 1'
X 1
0
0
/
0
0
0
0
0
0T/ 00DL0
ESP_P_A
00/ A000E
ESP_S_B
PT/ A00L0
Se fija A
P0/ 0B000
0T/ A00L0 Se reinicia
temporizador
ESP_S_B (ESPera a Soltar, B)
esperamos a ver qu pasa antes:
- soltar P
- pasa un segundo
Se reinicia
temporizador
Se muestra B
20.2. Solucin
20.2.1. Metaestabilidad
Metaestabilidadesunestadoinestabledeunbiestable,enelqueelbiestablenoestaun
valor 0 1. Este estado rmetros temporales del
setupydeholddelbiestable
Como es una frecuencia menor que la frecuencia mxima de los biestables (25 MHz), la
frecuenciamximadeestecircuitoserde20MHz.
D0 = A + Q1
D1 = Q0 Q1
Ecuaci ones
S0 = Q0
S1 = Q1
D0 = A + Q1
D1
Ecuaci ones
= Q0 Q1
S0 = Q0
S1 = Q1
B tpmax(B)+tpmax(puerta)+tsu(D1)=50+15+20=85ns
Q0 tpmax(Q0)+3tpmax(puerta)+tsu(D0)=25+315+20=
90ns
Q1 tpmax(Q0)+tpmax(puerta)+tsu(D0)=25+15+20=
60ns
tpmax(Q1)+2tpmax(puerta)+tsu(D1)=25+215+20=
75ns
Tabla 22.2: Tiempos de propagacin mximos
ElcaminocrticovadelaentradaAalbiestableD0.Comoson100ns,lafrecuenciamxima
es
Departamento de Tecnologa Electrnica 153
Diseo de circuitos digitales con VHDL - v1.01 - 20/07/10
1
100ns
=
10
9
100
Hz = 10 MHz
1
100ns
=
10
9
100
Hz = 10 MHz
ue la mxima fijada por los biestables, la Como 10 MHz es una frecuencia menor q
frecuenciamximadelcircuitoser10MHz.
alizar
2) ansicindeestados
)
Figura 24.1: Circuito para an
1) Obtenerlatabladeexcitacindelautmata
Eldiagramadetr
3 EsunamquinadeMooreodeMealy?Porqu?
24.2. Solucin
24.2.1. Tabla de excitacin del autmata
Primeroobtenemoslasecuacionesdelasentradasdelosbiestablesy
lasdeverdadparaqueluegonos
lassalidas.Incluimos
latab seamsfcilrellenarlatabladelautmata.
D0 = A Q1
D1 = B Q0
S0 = Q0 D0 = A Q1
S1 = Q1 D1 = B Q0
S0 = Q0
0 0 0
0 1 1
S1 = Q1
1 0 0
1 1 0
Q1 A D0 Q0 B D1
0
1
1 0 0
1 1 0
0 0
0 1
Q1 A D0
0 0 0
0 1 1
1 0 0
1 1 0
Q1 A D0
0 0 0
0 1 1
1 0 0
1 1 0
Q0 B D1
0
1
1 0 0
1 1 0
0 0
0 1
Q0 B D1
0
1
1 0 0
1 1 0
0 0
0 1
Organizamoslatablaparapoderver
Est ado AB
Q1 Q0 00 01 10 11
0 0 00 10 01 11
0 1 00 00 01 01
1 0 00 10 00 10
1 1 00 00 00 00
estado
siguiente
estado
actual
entradas
Est ado AB
Q1 Q0 00 01 10 11
0 0 00 10 01 11
0 1 00 00 01 01
1 0 00 10 00 10
1 1 00 00 00 00
Est ado AB
Q1 Q0 00 01 10 11
0 0 00 10 01 11
0 1 00 00 01 01
1 0 00 10 00 10
1 1 00 00 00 00
estado
siguiente
estado
actual
entradas