Você está na página 1de 31

Subprogramas: Procedimentos e Funções

• Subprograma:
• Contém coleção de comandos seqüenciais
• Contém comando return
• Declaração do subprograma pode ser:
• Dentro da área de declarações da arquitetura
• Dentro da área de declarações de um processo
• Subprograma pode ser chamado:
• Dentro da arquitetura ⇒ comando concorrente
• Subprograma é executado sempre que ocorre evento em algum sinal de
modo in ou inout dos parâmetros reais
• Dentro de um processo ou de um subprograma ⇒ comando seqüencial
• Função: possui valor de retorno

1
Procedimento: Formato
• Declaração:

procedure <nome procedimento> ( <parâmetros formais> ) is


- - Área de declarações do procedimento
begin
- - Área de comandos (seqüenciais) do procedimento
end procedure <nome procedimento> ;

• Chamada:

<nome procedimento> ( <parâmetros reais> ) ;

2
. .
c
a .
. e
n
pd m
e e
n of a
s e
g
nb
iva p
r
o
c
e D
e
.
l
.uc
l
a r
o
c
ed :a d
i
od
lo
a t
t ri
i e
rt r
ai
b
l u r
e d c
l
a
r
a
_m
e
d
i ur
e
c =ot
tp
;:
= lv n
etv e
o
rt e
ot
t u c
a
c l c
a
o
d
a a a t o ' a l o
; _ucallre/loa+tlrrang'engthl:rel_amediproce
U
s
a
m C
h
r
a
e
m
a
nP m
e
ad
i va
e l
(ve
o t e
ol > 0 :
= al a
s i d
i
m
e
n
e
d
i
aoc
d
a
e
d
vh ; o
rt
'l r (
i
) p v s
e
e
r . 0
0 t
o
Exemplo 1: Procedimento sem Parâmetro

e
p
o
r
o
r
ct e
n
gth; y tfi;
e
d
i
m
e ; ) u a
r li
n
t
o
3

; e
e
n
d
.
a
re
n
d b
e
g p
r
o e
g
nb
i s
gi s
g iypt a
r
ch
i
t
c
h
i
t
e
cp
r
o
c
e.
_.
d
o
a
r
ii
n
)e
n
d
; e
s d
e
nd c
a
s e
g
nb
iv a
r p
r
o
c
e c
e
s
d) a
r
c u n
al
f n
a
o
p lue
n
cf u e
c
r
et
t
u
r
es
;_t
h
o
pP
r
o
c
e < tc
a
s
e w h
e
n w e
h
f
e
u
n
n) p
r a
ei
b
l u r
e d e
ch
i
t : n
c ,o
p 1_ o
ed rt
l
; ;so=ures;usratbadcsiuocerduresl_oartiuret_uncf,es2dsa(iuocpf
tl c
t e : t_ o h
aertf=>res=>res negtipsi ;negtiusrtb o
ed : t , d si
pTd u l
t
;=:op1=:op1 ;)u l
t ; r ;r a
ct
Exemplo 2: Procedimento dentro de Processo

<op2op+2
4

;;
e
n
d
.
p
r c
o
n .b
e
g
i
n.e
n
d b
e
g p
r
o e
n
d b
e
g p
r
o p
r
o
c
e
s
o
c
e
s_ r
o
atl*
p
r
o ; c
o
n
r
o.
t w
a
uti
_r
e
g
o
u i
nu c
e
r d;.w
a
uti
_ r
e
gf
ii
nu c
e
r d
;_r ti
hc
e
s _wrl
i nt_
i
le
nt e
c
o
nt nti
_
l we
rl e
c
o
nt
o
p
; _ et
b p
a
s h<
='_ r
o l p
a
s h
_ ei
t_ r
o l
*aCh *;ack=e'0;1_arotih =e'1=<n'_wretib
m
p
r
o a
mC
h ; p
s i ; ; 1 a
c
s k
i
c
e
m
e d
i p
r
o
c
nt e
o menotdi
Exemplo 3: Procedimento chamando outro Procedimento

5
e
n
d
p
re
n
d l
o. b
e
g
.
i
ne
n
d b
e
g p
r
op
r
o
c
e
s
o
c
e
s.
l
o
p(
x E
ex
w ei
t
_ p
r
e
a
d
m ( P
r
o;
_ m
e
r
e_ m
e
ade
n
d
i
f r
e
tr
e
s i
fw
ua ti
_ m
e
r
e a
r
e
sdi
nu c
e
rd
;;ucatienrehyeor ceso =a<d=:t;;urn=t'nmtli=a<d_usb_eread
n
s
t st;
( '
0 ad
t 1
_ e
urcao='1enLi ;__usbi enth=yread;_meadyorsi '
1 =< m
e
;usrcat ;n o'1;res
o res
='1t
;
Exemplo 4: Procedimento com comando return

6
Subprogramas: Procedimentos e Funções
• Passagem de parâmetros:
• Na declaração do subprograma: parâmetros formais
• Na chamada do subprograma: parâmetros reais
• Associação de parâmetros reais e formais:
• Associação posicional
• Associação por nome
• Declaração de parâmetros formais:
<classe> <identificador> : <modo> <tipo> := <valor default>
• Classe: constant, variable, signal
• Modo: in, out, inout
• Valor default:
• Apenas para classe constant ou variable e modo in
• Usado se parâmetro real é omitido (último) ou é open
7
Parâmetros de Procedimentos e Funções
• Modo in:
• Passagem de parâmetro por valor
• Parâmetro formal não pode ser atribuído dentro do subprograma,
apenas lido
• Classe default: constant
• Modo out:
• Passagem de parâmetro por referência
• Parâmetro formal não pode ser lido dentro do subprograma,
apenas atribuído
• Classe default: variable
• Modo inout:
• Parâmetro formal pode ser lido e atribuído dentro do subprograma
• Classe default: variable
8
e
n
d
.e
;n
d eb
g a
ul e
n gb
i s
gi s
g iypt a
r
ct h
i
p
r
o
c
e.
_ o
a
r .
d
i) nie
n
d
; d
e
s e
n
d c
a
se
g
nb
v
i a
r p
r
o
c
e:
p
r
d
o) a
r
c u n
al
f n
a
o
p lue
n
cf ue
c
r
et
s_ th r
oP t
< c
a w
e h w
e he
o ai
b u r
ec
e
s h
i
t n
c , 1_ o r
;uopn(fcsoe=ures;seunstbnadpsieresl_oarducreet:uncf,op2desdioctlf
c) al l
t r
a u l i
t
;u;=c>rt=>r :ntti_op(h ;oed:ntti,usdbsi _ e
s a( up
ue
sl
t ue
sl
t ; e
g
r : o
pi e
g
r
; r
a
ct
t
)
: :
=op1=op1 _uncf ; n
9op2op+2 oe)d
Exemplo 5: Procedimento com Parâmetro modo in

;; si
e
n
de
;n
d e
gb s
t
i e
g
n b
e
i
nd e
gb p
r
o s
u b a
r
cth
i
.
p
r
o
c
e u a.
d
(
Pn
3.
i va
r
a i
bu m
l
s3 a
r
c;e
n
d
l
o c
a
r r
e
so
r f
n
iv
i a
r
i
a
b uc
e
r
edy
p
et ue
c
r
et
s, C p
r
o e l: p h
i
tp yu l
tn l
e adw
o
r d et
;X"00ces,nePCrocesuecret;=:=:(i)usmre'ycar,ua(sbiisotf
_4"0 _xtPC car(a(i)a(i)_vrse:tbi:nbi_vectt.si
,xnet :word yandandbxorb(range=:'0wordor13(
_;PC) ; a(i)o(i)xori)opl;;reswonotd
xorb(rycar :utl;0)
i
) ; uot
Exemplo 6: Procedimento com Parâmetro modo out

; word)
si
10
e
n
de
;n
d eb
g st
i e
n gb
e
i
nd e gb p
r
o s
u b a
r
cth
i
.
p
r
o
c
en
e
g
a
et./ni va
r
ai
bu m
sl/ a
r
c ;e
n
d
l
o c
a
r a(
i c
a
r o
rf
i:
=a
n/ n i v a
r
a
biv a
r
i
a
bu c
e
r
e dy
p
e
wt ue
c
r
et
so
p ( p
r
o el: p h
i
tp
_ y n
ed
_ y n o
t p
r
o l
e l
e n
e o
r d et
;;1)cse:op1roescucreet;=:ni=:x)=:uotvare';aucreed_ycar_ycargaeat(sbiisotf
w
o
r d c
a
r a
n(
i a
n(
i
_ r
s
e
r u
:
; _yuotxxed)xead)angel ;tbi:tbiuwootcort13(si o
t : i
n: n _
iv
et .
;orcarncardop ='1rsd)iwontd
y y
_;ni_;ni ;0) ; o
Exemplo 7: Procedimento com Parâmetro modo inout

11
e
n
d e
gb p
r
o u sb a
r
ch
i
t
;=:uasenodlcarusm(orfi1npivarablivarabliuceredywpeotuecret
m p y n
i
) r
o e e
;;=:a(=:a(vrea'uceredycar:usmcremnsbiisotfni rd et
a
n i
) x i
r
)
s
e
_
o
r
a
r : tb
i w
; o
r dy
:b
: at
(_v e
ct
t. si
d
b y n
g
b
e :
= ni
y(i)xo(i)opl ;'0worduwootwo13(d ni o
r
orca(rcar =:X"0;rdnot0)
r
yand _100y
; ;
a(
i
) s"
)
i
Exemplo 8: Procedimento com Valor Default para Parâmetro

xyorb
12

(i)
;
enardend egbstiegnbi
cecthiproce.ncremi.ncremi.ncremi.nivarabiumslarc
u r
et ; s n
ct
( n
ct
(
; ,uontuont),uonts:untcesucret n
ct
( p
r
o
c
e e
c
ol : p
r
o h
i
t
e
y b ;
=>ope _00 =:rXd X
"
0 w o si
n)
; ;)_11 4
" "
0
13
; 0
"
Exemplo 8: Procedimento com Valor Default p/ Parâmetro (cont.)
e
n
d
.e
;n
d b
e
g e
g
p
n
r
ob
.
ia
r
c
h
i
t
p
r
o
c.v p
a (
l v p
(
a
l p1(
f
vp
a.
(
li
n e
n
d
.
pb
e
g
i
n p
r
o
c
e .c
e
s e
c
t
u
r
e
s,v 1 ,v 1=v > ,
v 1 r
o
c
e u
r
e
;,a2l,a2l,a1l,a2l ured p( sotfd e
t
e
var3)=>4f=>2f,var3 ;p :o3f:1fi .i
;,open,va2lva4)l ut3;nt1 s
f
3 4;
f ;
=v>ar=v>al :n4i:ni f 2f
3
), 4
;=>3f =:v; t
4 t
2
Exemplo 9: Associação de Parâmetros por Posição e Nome

var3) s4)i
;
14
e
n
d b
e
g p
r
o .a
r
c
h
i
t
;enodlend fiorfi:uonfdni ucereduecret
p r
e
i
t
f rf
i u ofv (
i n=
;;;urn_ssetnd=')vran'asefl _ndfisotf f
it
e
:t : 1 g
e;
=;i=uretenthopl ff_vsett(si r
s .
; _rssti:uond:ni
et o
u
:uototb_vectib
n
at l
e
a
n o
r t
Exemplo 10: Parâmetro Formal array unconstrained

ura)l;;un
siconsrat
15

neid
e
n
d
e
n
a b
e s
t e
g
nb
i
r
c
h
p
r
i
t
od
.
. n f
i
d .
.
P nf
i
d .
.
Pg
niv a
r i v a
riv
a
r iv
a
r iu
u i
m
l a
c
e
c
e
s
t
u
r _ r
s f
i a
r
a
m
e_ r
sf
i a
r
a
m
e a
e b
l a
eb
la
e b
la
e b
l: s
p r
ch
i
t
;
e t t t t t f f b r e
; _set(frorea_set(brorea :op:agl_rebl_maptiocesucret
r
e l ti l n
a obo
c
_ocblconsrt_,mapconsrt ;uratl;eanl:kbi:bi
,akflaneid,agflaneid _vectt_vectt
,gopt ;opt) ort0(or7(d
; ) o1
5 )o
w
n
ot
Exemplo 10: Parâmetro Formal array unconstrained (cont.)

;;0)
16
Parâmetros da classe signal
• Parâmetro real é signal
• Modo in:
• Parâmetro formal pode ser lido e aplicado atributos
• Parâmetro formal pode ser usado em comando wait,
como se fosse parâmetro real ⇒ Suspende processo
• Modo out:
• Parâmetro formal pode ser atribuído, como se fosse parâmetro real ⇒
Escalona transação para parâmetro real
• Modo inout:
• Combinação de modo in e out

17
e
n
de
;n
d b
e
g a
s e
ng b
e
i
nd b
e
g p
r
o .s
i
gs
u
b a
r
cth
i
.
p
r
o
c
e v r
e
c .
ii
n va
r
a i
b e
m
b
l
e1 a
r
c ;e
n
d
l
o atdwa i o
r f
i
n
i u c
e
r
ed n
a
l
d
at
y
p
e
t u e
c
r
et
s_ e
p e _
l m
s
g h
i
tp
_ bu t n r
e t
_
,p
a e b
;atk(d pacetk:proucreet;uerf(nrtli_pactk_vceicocklcetkivaohf
t : c
e i
)
_x et pk :
,cocl_pacts =:xrcocklrange'atdsngt(i;tbi_vetbivreceis
,packk ;etk _;atd=;'1opl_uerbf_xarld cort1(rsi
; et) :
u ot, a
rt t
o
8
)
x
_pacek_cockl ;
t
)
i :
n i
Exemplo 11: Procedimento com Parâmetro signal / in

s;tbi
18
e
n
d
.e
;n
d b
e
gb
e
g
p
i
n
r
oe
n
d b
e
g p
r
o .s
i
ga
r
c
h
i
t
p
r
o
c
e g
e
n
r
a.i
n4
c
e
s
A
r
c;e
n
d
w
l
oa i s
< o
r f
i
n
i uc
e
r
e dn
a
l
c
le
c
t
u
r
e
s _ et h
i
t p tf =' n g
e o
c
kt
o
;cock(l uecret;or2*,1'0ont1 nraet:tbi_vpel
s w i w i
d um _
=>col=>tdh ;thaertferoblsnwock(l.of c ;l
ck
) p
e w i
d
;,ro/2id ;th :asl:er:hp g
n iu mb ti
d i
s
n
umerb o
u ni n i
ttbi)unatmeti
=u>pl s i; r
al;
s
Exemplo 12: Procedimento com Parâmetro signal / out

_uecont
19

,
e
n
d.e
;.n b
ep
r&p
s&
(b
e
g
i
ne
nb
ep
r s
i c
o
n a
r
cth
i
d
p
r
o, p
s g
i
(
n
1o
c
e
sP
r
o
c,
s1
C
h
a
m d
.
;
.g
i
no
c
e
u d g
n
a
l
s s
a
ntue
ct
c
e
s, s 2(
s
1
,e
s
o,
v
a2
a
d
a
c r
e
p ( 1
,
s v
at
l r
e
et
;va)ls2)uveqi;)loncor sgnai:2b:nisotf
; a
l e
n s
&Ch enet eetd ,s12;=:er.sil i
t e
gt.
amaad proc :ni ;1
s
e
q
uencai enot ;val e
d
i
m b
i
t
l : i
Exemplo 13: Chamada Concorrente de Procedimento

eprod n
n i
t
cemdi e
g
e
20

enot rs)i
Funções
• Possuem:
• Declaração do tipo do valor de retorno
• Pelo menos um comando return
• Podem ser pure ou impure:
• Default: pure
• Função pure: Não referencia variáveis ou sinais “externos“
• Função impure: Possui efeito colateral
• Passagem de parâmetros igual a procedimentos, exceto por:
• Classe: apenas constant ou signal
• Classe default: constant
• Modo: apenas in
• Modo default: in

21
Procedimento: Função
• Declaração:

function <nome função> ( <parâmetros formais> )


return <tipo> is
- - Área de declarações da função
begin
- - Área de comandos (seqüenciais) da função
end function <nome função> ;

• Chamada:

... <nome função> ( <parâmetros reais> ) ... ;

22
e
n d
fe
n e e e
g
i
n
fb
iu n
uncti;dfiuretseluretvsalfiuretvualontili cf
onmilvrnalrnmniue<lxrnmae>mamt(
t u e ; m i ; x t v a
Exemplo 14: Função pure

;; nethenh,ueml
n ,nmai
x
:nti
egr)
r
e
urnnti
egrt
23

si
e
n
d
.e
;n
d b
e
g r
e
a e
g
n b
i s
gis
g e
n
id e
gb u n f a
r
c
h
i
t
p
r
o
c
e < a d
t
0 i
n v a
r
i
a
by p
et
t: p
r d0 a
r
c n
a
al
dn
a
a ;
l
d u r
e
r
nt e
n
d
l
o r
e
s o
r f
n
iv
i a
r
a i
b c
o
n tie
c
t
u
r
e
s= p
r l
_
e r o
c h
i r t r p u l n e l v b
;vrom(boces:romomsaiesa(duecrett:esb:tbi;uestl;=:retvran'burestl__onatt.of.
_ o t _ t r r _
i
tv
e us g
e : u
Exemplo 15: Função pure

_unart;romya0(es)_vecotcort0( t*2loplunartvra(blsi
aa(dl ot13) rot0(ot7) +tbi =:al:nbi
res) obif ;4); pos'(b ;0_vecti
;_vecott ;v(i) orret)
rot0( urnat
; 7
) u t
24

rasli
e
n
d b
e
g a
rc . us
e l
i
b
;.=usm</amCh.ni;enduretengbiunoctfisnaglionsanctuectthi.neiyraei
v b r
n n s
o
_sad(aconcd _vtbi_vabd,urce1yeadl.o_mercib; t r
e u
u o
r
c
e 1 o
r
e
nt e
c
o
rt( v
, (
b
1 u s
o
r
c :
m
e t
i. f . ai
t
l
,usoreed unsgni:v2b,ues2=:10si;
cea2)uncaof ve1d(bnbii:mbi;ns
f
t )
eredl uns+i_vecort_vecortt t
Exemplo 16: Chamada Concorrente de Função

y a g
n
; ve2d(b)urerntot13) ) (
0
;_vectti; b
25

orsi
e
n
d
.
p u n. b
e
g
i
ne
n eb m .
iv a v a c
o p
r
o
c
e.
.
.
r
o
c
e
s m
e
r.
b.;
pdr
e
t
ux n
e :
t
= ng
nv
ia
riu p
r
e . r
ai
b
l r
ai
b
l n
s
a
nts
i
s
:
= r
o r
_
n n n abu f e e t
;geneces;numerb_xentenlncotiunmeb_xnetumodl
_ r
a
et :
= u
( m
e
rb:n
at n
g
e
n : r
n u n
m
eb: o
n
s n u e a r a
Exemplo 17: Função impure

qe x e ; r
a r
a u
_unmb _unmt ;l_eset;ralunat:ralt : u t
e
r e b _q
; r+1) unmerb =:0l;52* r
a =
momd urert ;
u o
od
l n
n
at
u
26

; rali
s
Overloading
• Dois ou mais subprogramas (funções ou procedimentos) com:
• mesmo nome
• parâmetros formais de tipos diferentes
• Subprograma a ser executado é determinado pelo tipo dos parâmetros reais

27
e
n
d
.
p
r n
c i n
c i n
c .
ib
e
g
i
n v a
r v
a
re
n
d e
gb p
r
oe
n
d b
e
g p
r
o
c
p
e
r
s
o.u
s
e
e l
i
b
r
i
a
o
c
e
s r
e
m
nt r
e
m
nt r
e
m
nt 0
P
r
o a
e i
i
a
b
b
l
l
e;:
=a n
bi uc
e
r
e;
da
:
=
ai
n uc
e
d
r
e .
n
u
m y
i
e
;uco
nt( c
o
u
nt( c
o
u
nt(c
e
s
_ u c
o
ntc
o
u
n
t
__ v
e
cti n
c
r
ei+
n
; i
n
c
r_e
r
c ;
i
i
b t m
_,vXb_nt)i_,nti :vb:ntors(innat( emnat(.atbil
"
0
2
" ; ; 2
)_ v e
cti
i
n
t
e
g g
n
e
a(d: i
n: n
oi : i
n
o ;
) tr ) u
; or15(=:;2sgn+i_vtbi_vttbi negtti u
o d e(d e
c
t e
c
Exemplo 18: Overloading de Procedimentos

wnot0 ;n)=:or;ort ;:rn


: ) B
"
=X"0 s1)i negti i
n
2
" r
28

; =:1)i
s
e
n
d
.
p a .
db
e
g
i
n v
a e
n eb
un fp
r
o
c
e
s.u
s
e
i l
i
b
r
a
r
o
c
e
s o
:
= r
a
e i
b
l d
f
u
n
cu r
e
r t g
nic
o
nt i .e
n
u y
i
e
d t n
;ao+ :aodon"i_tbi+"(l _merci;
X"00 _vtbi;+vecort(,ertfi .atbil
_4"0 ecort( s+"(i:gth ;
; won13d gned(lntbii
e _
Exemplo 19: Overloading de Operadores

ot0) , t f
)ve
c
ot
; sgneid(urret)
rgtih)rntbi
_
v
29

;ecort
si
e
n
d
e
n
a
d
r e
gb p
r
ob
e
g
i
ne
n
de
gbp
r
os
i
y
g
pta
r
cth
i
c
h
p
r
i
t
o
c
ep
2
(
v
2
, nie
n
pdpe
g
n
1
(b
iv
a p
r
o
c
e c
v
a
r
:
i
a
1
A
rp
r
o
cv
n
1
:
=v
i
a
r
i
ac
e
d
u
rn
e
a
l
st
u
ie
c
rt
c
e
t
s
ur
p
e
r.
) r
o
c
ePr
o
c
e
udv
,
v2 r
a
ei
b
lu
r
e
pd b
p
l
r
o
e
c
v
e
2
sc
h
i
t
e
ce
d
u
r
es
;b
l
e
v
1e
p
1
(
.s
:
.
t
; e
a
r
c h
a
o
c
r
c
1
h; s
o r
e
p ,
.3 v3.2
( :
t
st
u
i
r
ep
1
; :
t); o f
;;proc1;2;):;ts)i; ;si ensti
Exemplo 20: Escopo e Visibilidade

f
f
i
i f
i ni
ni 
i
n 
f
i 
i
n
i
n

i
n
ni
m
m
e
e
s
s
c
c
o
o m
e
s
c
o c
o
eic
o
ei c
i
o
e m
e
s
c
o c
i
o
ec
i
o
ec
c
i
o
o
e
ei
, p
p
p
p
1
2
, p
v3 s
c
o
p s
c
o
p s
c
o
p p
v
1 s
c
o
ps
c
o
ps
s
c
c
o
o
p
p
s
v
,t2
30

v3p2 v
2 v
1p
1st
e
n
p d
.
.v
:.
.b
e
g
i
ne
n b
ep
r va p
r
o
c
e
r
o
c
e d=
2p
1d
p
r
o.
..
v
:
.
=v
:
=.
.
g
i
no
c
v
a
e
r
u
id r
a i
b
ld
u
r
e
ur
e
p *
v
; c
e
d
u
r.p
1
vv
+ p
2a
r
b
e
l
p
e2v
:e p
1
i
s
1 e ;1 v
; ;p2 ; :ntisinegeti
;e
g
e
r ;r
f i 
f
i i
n n i
m
e
s
c m
e
s
c i
c
i
o c
o i
i
o
p
o o
p
o
v e
s
c
o
p e
s
c
o
p
vp1( (
p
2 o
v v
) ) p2() p1()o
Exemplo 21: Escopo, Visibilidade e Procedimentos Aninhados

31

Você também pode gostar