Академический Документы
Профессиональный Документы
Культура Документы
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