Sunteți pe pagina 1din 8

28/11/2016

ModeladodedispositivosdelgicasecuencialconVHDL|SistemasEmbebidosUTP

SistemasEmbebidosUTP
JustanotherWordPress.comsite

Modeladodedispositivosdelgicasecuencial
conVHDL
PostedbyutpembeddedonApril25,2012
ModeladodedispositivosdelgicasecuencialconVHDL
Autor:Ing.GabrielRivas
Loscircuitoslgicosseclasicanprincipalmenteencircuitosdelgicacombinacional,ycircuitosde
lgicasecuencial.Ladiferenciaentrestostiposdelgicaradicaenque,enelcasodeloscircuitosde
lgicacombinacional,susalidadependenicamentedeelestadoactualdesusentradas,peroenel
caso de los circuitos de lgica secuencial su salida actual depende de alguna manera de las salidas
anteriores,loqueimplicaquedebeteneralguntipodedispositivodealmacenamiento,omemoria.
Losdispositivosbsicosdememoria(de1bit),sonloslatchesylosipops.Elfuncionamientode
loslatchesyipopsesmuysimilar,ymuchaspersonassuelenconfundirlos.Ladiferenciaprincipal
entre los latches y los ipops, est en que los latches son activados por nivel, mientras que los
ipopssonactivadosporancos(instantesdecambiodeunnivelaotro).

(hps://utpembedded.les.wordpress.com/2012/04/g1.jpg)
Figura1.
https://utpembedded.wordpress.com/2012/04/25/10/
Para ver mejor sta diferencia

1/8
observemos el ejemplo de la gura 1, donde se compara el

28/11/2016

ModeladodedispositivosdelgicasecuencialconVHDL|SistemasEmbebidosUTP

Para ver mejor sta diferencia observemos el ejemplo de la gura 1, donde se compara el
funcionamientodeunDlatchyunDFlipFlop.Enstos2dispositivoslaentradaesDylaentrada
CLKdeterminacuandoseactivalasalida.Ellatchesaltoactivoyelipopseactivaconelancode
subida(cambiodenivelbajoanivelalto).
Podemosvericarstoalvereldiagramadeondasparaellatchdelagura1,yaquevemosquela
salida toma el valor de la entrada en cualquier momento que CLK = 1. Sin embargo si vemos el
diagramadeondasdelipop,podemosverquelasalidatomaelvalordelaentradaunicamenteen
el instante en que CLK cambia de nivel bajo a nivel alto. Tambin podemos ver que memorizan el
nivel para otros instantes de CLK. Tambin podemos ver que una forma sencilla de diferenciar el
smbolodeunlatch,deeldeunipop,esqueelipopensuterminaldeentradaCLKtieneuna
gura triangular y el latch no. Este tringulo indica que el dispositivo es accionado por ancos. Se
pueden obtener varios tipos de latches y ipops, activados por nivel alto, nivel bajo, anco de
subidaoancodebajada.Usualmentecuandoeldispositivoesbajoactivo,oactivadoporancode
bajada,secolocaunaburbujaocrculoenlaentradaCLK.
Losipopstienenmuchosusosenlaprctica,sonutilizadosparaimplementarmemoriasvoltiles
(RAM),registros,contadores,divisoresdefrecuenciaymquinasdeestados.
FlipFlopsylatches
Para modelar dispositivos de hardware secuencial se debe crear un proceso dentro de una
arquitectura.AcontinuacinsepresentaunejemplodecomosemodelaunipoptipoDactivado
porancodesubida:

https://utpembedded.wordpress.com/2012/04/25/10/

2/8

28/11/2016

ModeladodedispositivosdelgicasecuencialconVHDL|SistemasEmbebidosUTP

CdigoVHDLpararepresentarunflipfloptipoD
activadoporflancodesubida
LIBRARYieee;
USEieee.std_logic_1164.all;
Declaracindelaentidadd_ff
ENTITYd_ffIS
PORT(
D:INSTD_LOGIC;Entradadedatos
clk:INSTD_LOGIC;Relojmaestro
clr:INSTD_LOGIC;EntradadeResetasincrnica
ena:INSTD_LOGIC;EntradadehabilitacinparaD
Q:OUTSTD_LOGICSalidadedatos
);
ENDd_ff;
ARCHITECTUREaOFd_ffIS
SIGNALqint:STD_LOGIC;Declaracindevariableparaprocesosinternos
BEGIN
PROCESS(clk,ena,clr)Procesoqueseactivaconlasealclk
BEGIN
IFclr='0'THENEstadodelasealasincrnicadeReset
qint<='0';Asignacinasincrnica
ELSIF(clk'EVENTANDclk='1')THENEstadodelasealsincrnica
IFena='1'THENEstadodesealasncronicadehabilitacin
qint<=D;Asignacinasincrnica
ELSE
qint<=qint;Memorizavaloranterior
ENDIF;
ENDIF;
ENDPROCESS;
Q<=qint;Pasavalordelasealinternaalasalida
ENDa;
Ensteejemplosehanutilizadovariasentradasquedeterminarnelestadodelasalida.Silaentrada
clr=0,reiniciaelipopa0,sinocontinaelproceso,hastaquelasealsincrnicaproduzcaun
ancodesubida,luegosiena=1entonceslasalidaesigualalaentrada,sinoesigualalestado
anterior.Comosepuedeobservarensteejemplo,sedeneunavariableinternaparahacerlas
asignacionesyluegosepasastavariablealasalida.
Muchasvecesseutilizanlosipops,sinnecesidaddeutilizarlasentradasdehabilitacinoreset,se
puedesimplicarelcdigopresentadoanteriormentepararealizarotrosmodelosmssimples.Por
ejemploparaimplementarunipoptipoD,simple,activadoporancodesubida:

CdigoVHDLpararepresentarunlatchtipoDactivadopornivelaltoLIBRARYiee
Q<=qint;PasavalordelasealinternaalasalidaENDa;

ParaimplementarunlatchtipoD,elcdigoseracasiidnticoalpresentadoanteriormente:
https://utpembedded.wordpress.com/2012/04/25/10/

3/8

28/11/2016

ModeladodedispositivosdelgicasecuencialconVHDL|SistemasEmbebidosUTP

CdigoVHDLpararepresentarunlatchtipoD
activadopornivelalto
LIBRARYieee;
USEieee.std_logic_1164.all;
Declaracindelaentidadd_latch
ENTITYd_latchIS
PORT(
D:INSTD_LOGIC;Entradadedatos
clk:INSTD_LOGIC;Relojmaestro
Q:OUTSTD_LOGICSalidadedatos
);
ENDd_latch;
ARCHITECTUREaOFd_latchIS
SIGNALqint:STD_LOGIC;Declaracindevariableparaprocesosinternos
BEGIN
PROCESS(clk)Procesoqueseactivaconlasealclk
BEGIN
IF(clk='1')THEN
qint<=D;
else
qint<=qint;
ENDIF;
ENDPROCESS;
Q<=qint;Pasavalordelasealinternaalasalida
ENDa;
SicomparamoslosmodelosdeelipopylatchtipoD,podemosverqueelprocesodelipopse
activacuandosedalacondicin(clkeventandclk=1)yellatchseactivaconlacondicin(clk=
1).Lacondicin(clkeventandclk=1)indicaqueelprocesoseactivaencasodeunancode
subidaenclk,y(clk=1)indicaqueelprocesoseactivamientrasclkestennivelalto.Podemosver
queparaotrascondicionesdelasealclk,lasalidapermaneceenelnivelanterior.
DivisoresdeFrecuencia
Losdivisoresdefrecuenciasoncircuitoslgicossecuencialesqueseutilizanparaobtenersealesde
diferentesfrecuencias,sincronizadasconunosciladordefrecuenciasuperior.Comosemencion
anteriormente,losipopssonutilizadosparastetipodeaplicacin.Siobservamoslagura2,
podemosverquesiconectamoslasalidaQNconlaentradaDdelipoptipoD,obtebemosenla
saldaQunasealdefrecuenciaf=1/2Tcuandolafrecuenciadeclkes1/T.Evidentementeste
circuitodivideentre2lasealperidicaconectadaenclk.

https://utpembedded.wordpress.com/2012/04/25/10/

4/8

28/11/2016

ModeladodedispositivosdelgicasecuencialconVHDL|SistemasEmbebidosUTP

(hps://utpembedded.les.wordpress.com/2012/04/g2.jpg)
Figura2.FlipFlopT
EstaconguracindeipoptambinesconocidacomoipoptipoT,ysufuncionamiento
consisteeninvertirelniveldesalidaenQyQNacadaancodesubidadeCLK.Paraobtenerun
mayordivisordefrecuencia,sepuedenconectaripoptiposTensecuencia,endondeeldivisorde
lafrecuenciaseobtienemediantedivisor=2^n,dondeneselnmerodeipops.
Unamaneramsecientedeimplementardivisoresdefrecuenciaespormediodelusode
contadoressincrnicosylgicacombinacionalparagenerarlasealdesalida.Sudiseoesms
complicadoperosucomportamientoesmspredecibleyestablequeeldelosipoptipoT
conectadosensecuencia,yaquetodoslosipopcambianalmismotiempoconrespectoal
osciladormaestro.
ParadescribirelfuncionamientodeundivisordefrecuenciautilizandoVHDL,primerodebemos
deniruncomportamientodelcircuito.Podemosdenirlocomouncircuitoquecuentalospulsosde
lasealdeentradaCLK,cuandolacuenta<Xcantidadentnces,lasealdesalidaQ=1,sicuenta
>Ycantidad,entncesQ=0.LascantidadesXyYsepuedenvariardemaneraqueseconsigan
diferentesciclosdetrabajoenlasealdesalida.Elcontadordebeserunasealinternasolamente,a
menosqueelvalordelacuentasearequeridocomounasalida.Comoejemplo,haremoselmodelode
undivisorentre20.

https://utpembedded.wordpress.com/2012/04/25/10/

5/8

28/11/2016

ModeladodedispositivosdelgicasecuencialconVHDL|SistemasEmbebidosUTP

libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYdiv20IS
PORT(
clk:INSTD_LOGIC;
clkout:OUTSTD_LOGIC);
ENDdiv20;
ARCHITECTUREaOFdiv20IS
SIGNALcont:STD_LOGIC_vector(4downto0):=0000;
BEGIN
PROCESS(clk)
BEGIN
if(clk'eventandclk='1')then
Secciondelcontador
if(cont=19)then
cont<="00000";
else
cont<=cont+1;
endif;
Secciondedivision
if(cont<10)then
clkout<='1';
elsif(cont>9)then
clkout<='0';
endif;
endif;
ENDPROCESS;
ENDa;
Analizandoelcdigodeldivisordefrecuencia,podemosverquetieneunaentrada(clk)yuna
salida(clkout),Lasalidaenclkoutnosproporcionarunasealdefrecuenciaequivalenteala
frecuenciadelasealenclkdivididaentre20.Podemosidenticarenelproceso,questemdulo
estcompuestode2seccionesqueson:laseccindecuentaylaseccindeciclodetrabajo.Laseccin
decuentallevalacuentadelospulsosdeentrada,paraobtenereltiempodeunperiodoparalaseal
desalida,ylaseccindeciclodetrabajodetermina,enquetiempodesteperiodolasealesta
nivelaltoyanivelbajo.Enelcasodesteejemplo,sequizoobtenerel50%deciclodetrabajo,porlo
cualseutilizaronlasexpresions(cont<10)paranivelaltoy(cont>9)paranivelbajo,ysedeben
variarestascantidadesparaobtenerotrosciclosdetrabajo.Losresultadossepuedenobservarenla
gura3.

https://utpembedded.wordpress.com/2012/04/25/10/
(hps://utpembedded.les.wordpress.com/2012/04/g3.jpg)

6/8

28/11/2016

ModeladodedispositivosdelgicasecuencialconVHDL|SistemasEmbebidosUTP

(hps://utpembedded.les.wordpress.com/2012/04/g3.jpg)
Figura3.
Contadores
ParaimplementaruncontadorenVHDL,sepuedeutilizarenelproceso,unicamenteunaparte
similaralaseccinmarcadaenelcdigodeldivisorentre20comoSeccindelcontador,pero
habraquedesplegarlosresultadosdelacuentaenunasalida.Comoejemploharemosuncontador
de0a9:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYcont09IS
PORT(
clk:INSTD_LOGIC;Relojdeentrada
Q:OUTSTD_LOGIC_vector(3downto0));Salidadelcontador
ENDcont09;
ARCHITECTUREaOFcont09IS
SIGNALcont:STD_LOGIC_vector(3downto0):=0000;
BEGIN
PROCESS(clk)
BEGIN
if(clk'eventandclk='1')then
Secciondelcontador
if(cont=9)then
cont<="0000";
else
cont<=cont+1;
endif;
endif;
ENDPROCESS;
Q<=cont;
ENDa;

(hps://utpembedded.les.wordpress.com/2012/04/g4.jpg)
Figura4.
Enlagura4podemosobservarlosresultadosdelasimulacindelcontador.Puedeversequela
cuentavade0a9,yluegosereiniciahasta0yserepiteelciclo.
https://utpembedded.wordpress.com/2012/04/25/10/
Comopodemosobservar,laestructurafuncionaldelcontadorsoloocupa5lneasdecdigo,yse

7/8

28/11/2016

ModeladodedispositivosdelgicasecuencialconVHDL|SistemasEmbebidosUTP

Comopodemosobservar,laestructurafuncionaldelcontadorsoloocupa5lneasdecdigo,yse
puedenvariarloslmitesdelacuentaparaobtenercontadoresdediferentesmdulos.Sepuede
modicarstecdigoaadiendoentradasdehabilitacin,cuentahaciaadelante,cuentahaciaatrs,
ennhaymuchasposibilidades.

Abouttheseads(https://wordpress.com/abouttheseads/)

ThisentrywaspostedinLgicaProgramableandtaggedLgicaProgramable.Bookmarkthe
permalink.
BlogatWordPress.com.

https://utpembedded.wordpress.com/2012/04/25/10/

8/8

S-ar putea să vă placă și