Вы находитесь на странице: 1из 9

4/10/2015

Leccin4:GramticadellenguajeI

GramticadellenguajeI

Sentenciassecuenciales1 2Asignacinaunaseal
Asignacinavariable3 4Sentenciaif
Sentenciacase5 6Sentencialoop
Sentenciaexit7 8Sentencianext
Sentencianull9 10Sentenciawait
Sentenciawaituntil11

Sentenciassecuenciales
Enlamayoradeloslenguajesdedescripcindesoftware,todaslassentenciasde

asignamientosondenaturalezasecuencial.Estosignificaquelaejecucindelprogramase
llevaraacabodearribaaabajo,esdecirsiguiendoelordenenelquesehayandispuesto
dichassentenciasenelprograma,porelloesdevitalimportancialadisposicindelasmismas
dentrodelcdigofuente.
VHDLllevaacabolasasignacionesasealesdentrodelcuerpodeunprocesoprocessde
formasecuencial,conloqueelordenenelqueaparezcanlasdistintasasignacionesserel
tenidoencuentaalahoradelacompilacin.Estohacequecuandoutilicemosmodelos
secuencialesenVHDL,estossecomportendeformaparecidaacualquierotrolenguajede
programacincomoPascal,C,etc.

Asignacinaunaseal
Podremosasignarunciertovaloraunasealsiemprequestahayasidodeclaradaenla
entidadenelapartadodedeclaracindepuertos,obienporquelahayamoscreado
especficamentedentrodeunprocess.
Laasignacinaunasealdentrodeunprocesoessiempresecuencial,esdecir,lasealno
cambiasuvalorhastaquesehaevaluadoelprocesoenelcualseincluye.Sinoestdentrode
unproceso,comoporejemplo,usandoelestilodataflow,elcambioesconcurrente,esdecir,la
http://www.ehu.eus/~jtpolagi/completo/04.htm#4

1/9

4/10/2015

Leccin4:GramticadellenguajeI

asignacinestsiempreactiva,yseactualizainstanteneamente.Parahacerunaasignacina
unasealdeberemosusareloperador<=,estandolasealaasignaralaizquierdayelvalor
quedebetomaraladerecha.
signal<=signal1+signal2
Lassealessonelobjetomsusadodentrodelasntesisdediseos,teniendola
particularidaddequeloscambiosenunasealsonprogramados,nosoninmediatos.Esto
resultaextrao,sobretodosicomparamossucomportamientoconeldelasvariables,ypara
dejarclaroesteconceptoveamoselsiguienteejemplo:
process
begin
a<=b
b<=a
waitona,b
endprocess

Lasealatendrelvalorb
Lasealbtendrelvalora

SeacualizanloscambiosAQU

Enesteejemplo,lasdossealesintercambiansusvalores,yaquecuandoseejecutala
segundab<=a,elvalordelasealanohacambiadotodavaaunqueestlasentencia
a<=b,yaqueningunasealcambiadevalorhastaquesehayanevaluadotodaslasrdenes
deunproceso,yesenesemomentocuandoaybtomanelvalorqueseleshaindicadotomar.

Asignacinavariable
Laasignacinaunavariablevienetotalmenteinfluenciadaporsupropianaturaleza,lacual
hacequeslotengansucampodeaccinenunprocesoounsubprogramaareas
secuenciales.Unavariablenoretienesusvaloresdentrodeunsubprogramadespusdecada
llamada,soliendousarsecomondicesparaciclosloopyparaasignacionesinmediatas.Si
queremosusarunavariablefueradeunproceso,deberemosasignarsuvaloraunaseal,y
operarconlasealfuera.Parahacerelasignamientoaunavariabledeberemosusarel
operador:=,comosemuestraenlosejemplossiguientes.
Adiferenciadelasseales,elasignamientodeunvaloraunvariable,notieneunretardo
asociado,demaneraquelavariabletomaelnuevovalorjustoenelmomentodelaasigacin,
deformaquelassentenciasquevenganacontinuacin,lavariablerecienasignada,tendrel
nuevovalor.Deestaforma,elejemploexpuestoparaseales,alserusadoparavariables,no
conseguimoselmismoresultado:
a:=b
b:=a

atomaelvalorb
btomaelNUEVOvalordea(eldeb)

Enestaocasin,noseintercambiarnlosvaloresdeambasseales,sinoqueacabarncon
elvalorinicialdelavariableb.Paraconseguirqueseintercambienlasvariables,deberemos
usarunavariabletemporaldelasiguienteforma:
http://www.ehu.eus/~jtpolagi/completo/04.htm#4

2/9

4/10/2015

temp:=a
a:=b
b:=temp

Leccin4:GramticadellenguajeI

temptomaelvalordea
atomaelvalordeb
btomaelvalordetemp(queeraa)

Deberemostenerencuentaqueunavariablesereinicializasiemprealhacerunanueva
llamdaaunsubprograma.

Sentenciaif
Laconstruccinifthenelseesusadaparaseleccionarunconjuntodesentenciaspara
serejecutadassegnlaevaluacindeunacondicinoconjuntodecondiciones,cuyoresultado
debeserotrueofalse.Suestructuraeslasiguiente:
if(condicin)then
hazunacosa
else
hazotracosadiferente
endif
Silacondicinentreparntesisesverdadera,lassentenciassecuencialesseguidasala
palabrathensonejecutadas.Silacondicinentreparntesisesfalsa,lassentencias
secuencialesseguidasalapalabraelsesonejecutadas.Laconstruccindebesercerrada
conlaspalabrasendif.
Lasentenciaifthenelsepuedeserexpandidaparaincluirlasentenciaelsif,lacualnos
permiteincluirunasegundacondicinsinosehacumplidolaprimeralacualtieneprioridad.
Suestructuraeslasiguiente:
if(condicin)then
hazunacosa
elsif(otracondicin)then
hazotracosadiferente
else
hazotratotalmentediferente
endif
Sisedalasituacinenlacuallaprimeracondicinesverdadejecutalassentenciasquevan
despusdelprimerthen.Sinoesverdaderalaprimeracondicin,sepasaaevaluarla
segunda,ydeserestaverdad,ejecutalassentenciasqueestnacontinuacindelsegundo
then.Siningunadelasdosesverdadera,seejecutaloqueestdetrsdelapalabraelse.
Ntesequeparaqueseejecutelassentenciasconelnombre"otracosasdiferente",nosolo
debeserlasegundacondicinverdadera,sinoqueademslaprimeracondicindebeser
falsa.Unejemplodeestasentenciasepuedeveracontinuacin:
entitymultiisport(
http://www.ehu.eus/~jtpolagi/completo/04.htm#4

entidaddelmultiplexor
3/9

4/10/2015

Leccin4:GramticadellenguajeI

a,b,c:inbit_vector(3downto0)
enable:inbit
control:inbit_vector(1downto0)
d:outbit_vector(3downto0)
)
endmulti

puertosdelmultiplexor

finalizalaentidad

architecturearchmulofmultiis
begin
process(a,b,c,control,enable)
begin
ifenable='1'thend<="1111"
elsifenable='0'then
casecontrolis
when"00"=>d<=a
when"01"=>d<=b
when"10"=>d<=c
when"11"=>d<="1111"
endcase
endif
endprocess
endarchmul

arquitecturadelmultiplexor

sienablees1entoncesd="1111"
sienablenoes1yes0entonces
sentenciacasedentrodelif

secierralasentenciacase
secierralasentenciaifconend

finalizalaarquitectura

Deberemostenercuidadoalusarunasentenciaifthenelseyaquepodemoscaerenelerror
delamemoriaimplcita.Sinoincluimoslapalabraelse,ysinosecumplelaprimeracondicin,
lassealesdesalidanocambian,reteniendoelvalorprevioalasentenciaif.Estopuede
ayudarnosflipflopsobienhacerqueundiseoseatotalmenteerrneo.Analicmoslocon
unejemplo:
if(clk'eventandclk='1')then
q<=d
endif

Sihayunflancodesubidaenlasealclk,
entoncesqtomaelvalorded.

Enestecasosedicequedebeejecutarsesihayunflancodesubidaenlasealclk,perono
sedicenadasinohaycambiososielflancoesdebajada.Esenestecasosehadefinidouna
memoriaimplcita,yVHDLhacequelasealqsigaconelvalorquetenaantesdeejecutarse
lasentenciaif.Estohacequeestecdigoyelqueselistaacontinuacinseanequivalentes:
if(clk'eventandclk='1')then
q<=d
else
q<=q
endif

Sihayunflancodesubisdaenlasealclk,
entoncesqtomaelvalorded,sinoesas,
qsiguemanteniendosuvalor.

Estohacequeserecomiendesiempreelespecificarconelsequedebepasarconlas
sealessinosecumplalacondicinindicadaconelif.Enlaparteprcticahayvariosejemplso
conlasentenciaif,pulsaaquparairalaparteprctica.
Paraevitarlainclusindememoriaimplcitasserecomiendaespecificarsiempreel
comportamientodelcircuitoenaquelloscasosenlosquenosecumplelacondiciondeuna
http://www.ehu.eus/~jtpolagi/completo/04.htm#4

4/9

4/10/2015

Leccin4:GramticadellenguajeI

sentenciaif,odeunasentenciacase.

Sentenciacase
Lasentenciacaseesusadaparaespecificarunaseriedeacionessegnelvalordadode
unasealdeseleccin.Estasentenciaesequivalentealasentenciawithselectwhen,conla
salvedadquelasentenciaquenosocupaessecuencial,nocombinacional.Laestructuraesla
siguiente:
case(sealaevaluar)is
when(valor1)=>hazunacosa
when(valor2)=>hazotracosa
...
when(ltimovalor)=>haztalcosa
endcase
Enelcasoquelasealaevaluarsituadadespusdelcasetengael"valor1",entoncesse
ejecuta"unacosa",sitieneel"valor2",seejecuta"otracosa",...ysitieneel"ltimovalor",se
ejecuta"talcosa".Estasentenciaparecehechaalamedidaparacrearmultiplexores,comose
veenelsiguienteejemplo,delcualsloestudiamoslapartecorrespondientealasentencia
case:
entitymultiisport(
a,b,c:inbit_vector(3downto0)
enable:inbit
control:inbit_vector(1downto0)
d:outbit_vector(3downto0)
)
endmulti

architecturearchmulofmultiis
begin
process(a,b,c,control,enable)
begin
ifenable='1'thend<="1111"
elsifenable='0'then
casecontrolis
when"00"=>d<=a
when"01"=>d<=b
when"10"=>d<=c
when"11"=>d<="1111"
endcase
endif
endprocess
http://www.ehu.eus/~jtpolagi/completo/04.htm#4

entidaddelmultiplexor
puertosdelmultiplexor

finalizalaentidad

arquitecturadelmultiplexor

sentenciaifquecontienealcase

seevalalasealcontrol
sicontrolvale"00"entoncesd<=a
sicontrolvale"01"entoncesd<=b
sicontrolvale"10"entoncesd<=c
sicontrolvale"11"dvaldr"1111"
secierralasentenciacaseconend
secierralasentenciaif

5/9

4/10/2015

endarchmul

Leccin4:GramticadellenguajeI

finalizalaarquitectura

Estasentenciaesmuytpicadeloslenguajesdeprogramacinycuentaademsconuna
variante,muyimportanteenVHDL,comoesdarunvalorespecificadoalaciertasealsinose
contemplantodosloscasosposiblesdelasealaevaluar.Paraelloseusalapalabra
reservadaothers,queapareceenelsiguientefragmentodecdigo:
casecontrolis
when"00"=>d<=a
when"01"=>d<=b
when"10"=>d<=c
whenothers=>d<="1111"
endcase

seevalalasealcontrol
sicontrolvale"00"entoncesd<=a
sicontrolvale"01"entoncesd<=b
sicontrolvale"10"entoncesd<=c
sicontrolnotomaningnvalordelosespecificadosantes,
tomaelvalor"1111"
finalizalaarquitectura

Aligualqueerarecomendableespecificarunelsedentrodecadaif,serecomienda,con
msraznelusodeothersdentrodeuncaseaunqueenunrpincipioparescaqueestan
especificadostodoslosvaloresposibles,yaquealgunostipossoportanmsvaloresapartedel
nivelunoycerolgico,comoelestadoZodealtaimpedancia.Pulsaaquparairalaprctica
delmultiplexor.
Lasentenciacasetambinnospermiteespecificarunrangodevaloresposiblesdelaseal
deseleccin,paraloscualeshacerunaasignacin,mediantelapalabrareservadato.Como
ejemploveamosdosfragmentosdecdigoquesonequivalentes:
casecontrolis
when"000"=>d<=a
when"001"=>d<=a
when"010"=>d<=a
when"011"=>d<=b
when"100"=>d<=b
when"101"=>d<=b
when"110"=>d<=b
when"111"=>d<=c
whenothers=>d<=null
endcase

casecontrolis
when"000"to"010"=>d<=a
when"011"to"110"=>d<=b
when"111"=>d<=c
whenothers=>d<=null
endcase

Sentencialoop
Lasentencialoopcicloencastellanoseusaparaejecutarungrupodesentenciasun
nmerodeterminadodeveces,yconsistetantoenuncicloforcomoenunciclowhile.La
sentenciaforseejecutaunnmeroespecficodeiteracionesbasadoenelvalordeuna
variable.Lasentenciawhilecontinuarejcutndounaoperacinmientraunacondicinde
controllocalseacierta.Estassentenciassonmuytpicasdeloslenguajesmsusualesde
programacin,usndosehabitualmenteparaellolavariablei.Acontinuacinselistansendos
http://www.ehu.eus/~jtpolagi/completo/04.htm#4

6/9

4/10/2015

Leccin4:GramticadellenguajeI

ejemplosparacadacaso:
process(a)
begin
ciclo1:foriin7downto0loop
entrada(i)<=(others=>'0')
endloop
endprocess

Cabeceradelciclo
Instruccionesaejecutar8veces
Finalizacindelciclo

Estefragmentodecdigohacequeunoporunolos8ltimosbitsdelasealentradatengan
elvalorlgicocero.Queseindiquequedebenhacersecero8bits,noquieredecirquelaseal
entradaestformadapormsdeocho.Elencabezamientodelasentencianosdicequeseva
arepetirochovecesseguidaslasinstruccionesentreloopyendloop.Debemosdestacarque
enunciclofor,lavariabledelmismosedeclaraatomticamente,ynotenemosque
incrementarlaoinicializarla,yaqueelprogramalohacepornosotros.Laetiquetaciclo1seusa
aunqueesopcionalparadarmsposibilidadesdeorganizacinalprogramador.
process(a)
variablei:integer:=0
begin
ciclo2:whilei<7loop
entrada(i)<=(others=>'0')
i:=i+1
endloop
endprocess

Mientrasiseamenorque7=>ciclo

Finalizaelciclo

Enestaocasinseusalasentenciawhile,paralograrelmismoresultadoqueenelejemplo
anterior,esdecir,inicializarlos8ltimosbitsdelvectorentradaacero.Estavez,seejecutan
laslneasentreloopyendloopmientraslavariableiseamenorquesiete.Eslgicoqueesta
variablecambiedentrodelciclo,yaquedenoseras,seejecutaraparasiempre.Deforma
distintaalejemploanterior,lavariabledelciclowhiledebeserdeclaradacomointeger,
inicializadaeincrementadapornosotros,porloquerequieremstrabajo.

Sentenciaexit
Usadasiempredentrodeunloop,lasentenciaexitnospermitesalirdelmismosisealcanza
unacondicinfijadapornosotros.Suverdaderautilidadlaencontramossidiseamos
controladoresdememoria.Acontinuacinanalizamosunejemplo:
process(a)
begin
ciclo1:foriin7downto0loop
ifa'length<ithenexitciclo1
entrada(i)<=(others=>'0')
endloop
http://www.ehu.eus/~jtpolagi/completo/04.htm#4

7/9

4/10/2015

Leccin4:GramticadellenguajeI

endprocess
Ahoraseejecutaelmismoejemploqueexpusimosenelcasodeuncicloforconlasalvedad
quesilavariableisuperalalongituddelvectoraelciclodejadeejecutarseaunquenose
hayancumplidolasvecespedidasenelencabezamiento.

Sentencianext
Lasentencianexttambindebeestardentrodeuncicloloop,ynossirveparasaltarnosuna
omsdelasejecucionesprogramadas.
process(a)
begin
ciclo1:foriin7downto0loop
ifi=4thennext
else
entrada(i)<=(others=>'0')
endif
endloop
endprocess

Cabeceradelciclo
Siivale4,sesaltaelciclo
Sinovale4,...
...seinicializaentrada

Finalizaelciclo

Ahoraseejecutaelprogramatodaslasvecesprogramadas,exceptolacuarta,yaquehay
unasentenciaifquehacequesepasealasiguienteiteracinsilavaraibaleivalecuatro.

Sentencianull
Lasentencianullseutiliza,aligualqueenotroslenguajesdeprogramacin,paraquedada
unacondicinespecialnopasenada,esdecir,queningunasealovariablecambie,yqueel
programasigasucursohabitual.Sucomportamientodentrodeunloopessimilaraldela
sentencianext.

Sentenciawait
Lasentenciawaitseusaparasuspenderunprocesosistenotienelistasensitiva.Lonico
queexigeestasentenciaesestarsituadalafinaldelproceso.Paraentendermejorsto,basta
http://www.ehu.eus/~jtpolagi/completo/04.htm#4

8/9

4/10/2015

Leccin4:GramticadellenguajeI

condecirquelosdoscdigossiguientessonequivalentes.
process(a,b,c)
begin
x<=aandbandc
endprocess

process
begin
x<=aandbandc
waitona,b,c
endprocess

Ambosprocesosseejecutarncuandohayauncambioenlaseala,bocsemuestraen
estecasolaequivalenciadeunalistasensitivayunasentenciawaitexplcita.

Sentenciawaituntil
Nodebemosconfundirlasentenciawaituntilconlasentenciawaitvistaenelapartado
anterior.Enestaocasin,tampocosepuedeusarunalsitasensitivaconelproceso,yaque
staquedadefinidaconlamismasentencia.Paralasdescripcioneslafrmulawaituntildebe
estaralprncipiodelproceso,porloquelalgicadescritadeestameneranopuedeser
reseteadaasncronamente.Veamossuusoenelcasodelaarquitecturadeunflipflopd:
architectureejemploofffdis
begin
processbegin
waituntil(clk='1')
q<=d
endprocess
endejemplo
Esteprocesosesuspendehastaquelacondicinsiguienteawaituntilesverdadera.Una
vezqueesverdad,ylasasignacionesdesealsehanrealizado,elprocesovuelveaesperar
hastaquelasealclkvuelveavalerdenuevo1,esdecir,unflancodesubida.Pulsaaqupara
iralaprcticadelFlipFlopD.

http://www.ehu.eus/~jtpolagi/completo/04.htm#4

9/9

Вам также может понравиться