Você está na página 1de 52

VHDL

* * * * * * * * * Objetos de Dados Tipos de Dados Tipos e Subtipos Atributos Sentenas Concorrentes e Sequenciais Procedimetos e Funes Pacotes e Bibliotecas Generics Tipos de Atraso

Objetos em VHDL
* ! quatro tipos de objetos em " D#$ % % % % Constantes Sinais "ari!&eis Arqui&os

* Declaraes de arqui&o tornam um arqui&o dispon'&el para uso em um projeto( *Arqui&os podem ser abertos para leitura e escrita( * Arqui&os )ornecem um maneira de um projeto em " D# se comunicar com o ambiente do computador *ospedeiro(

Constantes
*Aumentam a le+ibilidade do c,di+o *Permitem )!cil atuali-a.o
CONSTANT <constant_name> : <type_name> := <value>; CONSTANT PI : REAL := !"#; CONSTANT $I%T& : INTE'ER := (;

Sinais
* Sinais s.o utili-ados para comunica.o entre componentes( * Sinais podem ser interpretados com )ios )'sicos/ reais(
SI'NAL <nome_s)nal> : <t)po> *:= <valo+>,; SI'NAL ena-le : .IT; SI'NAL output : -)t_vecto+/ 0o1nto 23; SI'NAL output : -)t_vecto+/ 0o1nto 23 := 42"""4;

Variveis
* "ari!&eis s.o usadas apenas em processos e subpro+ramas 0)unes e procedimentos1 * "ari!&eis usualmente n.o est.o dispon'&eis para m2ltiplos componentes e processos * Todas as atribuies de &ari!&eis tem e)eito imediato(
5ARIA.LE <nome_va+)avel> : <t)po> *:= <valo+>,; 5ARIA.LE opco0e : .IT_5ECTOR / %O$NTO 23 := 422224; 5ARIA.LE 6+e7 : INTE'ER;

Sinais x Variveis
* 3ma di)erena )undamental entre &ari!&eis e sinais 4 o atraso da atribui.o
ARC&ITECT:RE s);nals O< test IS SI'NAL a= -= c= out_"= out_8 : .IT; .E'IN PROCESS /a= -= c3 .E'IN out_" <= a NAN% -; out_8 <= out_" >OR c; EN% PROCESS; EN% s);nals;

T)me 2 " "90

a - c out_" out_8 2 " " " " " " " " " " 2 2 2 2

Sinais x Variveis

ARC&ITECT:RE va+)a-les O< test IS SI'NAL a= -= c: .IT; 5ARIA.LE out_ = out_# : .IT; .E'IN PROCESS /a= -= c3 .E'IN out_ := a NAN% -; out_# := out_ >OR c; EN% PROCESS; EN% va+)a-les;

T)me 2 "

a - c 2 " " " " "

out_ " 2

out_# 2 "

Escopo dos Objetos


* O " D# limita a &isibilidade dos objetos/ dependendo de onde eles s.o declarados( * O escopo dos objetos 4 de)inido como a se+uir$ % Objetos declarados em um pacote s.o +lobais para todas as entidades que usam aquele pacote( % Objetos declarados em uma entidade s.o +lobais para todas as arquiteturas que utili-am aquela entidade(

Escopo dos Objetos


% Objetos declarados em um arquitetura s.o dispon'&eis a todas as sentenas naquela arquitetura( % Objetos declarados em um processo s.o dispon'&eis apenas para aquele processo( * 5e+ras de escopo se aplicam a constantes/ &ari!&eis/ sinais e arqui&os(

Tipos de Dados
T)pos

Access

Compostos

Escala+es

A++ay

Reco+0

Inte)+os Rea)s

Enume+a0os

<?s)cos

Tipos Escalares
* Tipos 6nteiros
% A &aria.o m'nima de)inida pelo padr.o 4$ %7/89:/9;</=9: a >7/89:/9;</=9:
ARC&ITECT:RE test_)nt O< test IS .E'IN PROCESS />3 5ARIA.LE a: INTE'ER; .E'IN a := "; @@ OA a := @"; @@ OA a := "!2; @@ -a0 EN% PROCESS; EN% TEST;

Tipos Escalares
* Tipos 5eais
% A )ai?a m'nima de)inida pelo padr.o 4$ %8(@A<; a >8(@A<;
ARC&ITECT:RE test_+eal O< test IS .E'IN PROCESS />3 5ARIA.LE a: REAL; .E'IN a := "! ; @@ OA a := @B!C; @@ OA a := "; @@ -a0 a := "!BE" ; @@ OA a := C! ns; @@ -a0 EN% PROCESS; EN% TEST;

Tipos Escalares
* Tipos Anumerados % B uma )ai?a de &alores de)inida pelo usu!rio
TDPE -)na+y IS / ON= O<< 3; !!!! ARC&ITECT:RE test_enum O< test IS .E'IN PROCESS />3 5ARIA.LE a: -)na+y; .E'IN a := ON; @@ OA !!!!! a := O<<; @@ OA !!!! EN% PROCESS; EN% TEST;

Tipos Escalares
* Tipos F'sicos$ % Podem ter os &alores de)inidos pelo usu!rio.
TDPE +es)stence IS RAN'E 2 to "222222 :NITS oEm; @@ oEm AoEm = "222 oEm; @@ " A FoEm = "222 GoEm; @@ " F EN% :NITS;

% 3nidades de tempo s.o os 2nicos tipos )'sicos pr4%de)inidos em " D#(

Tipos Escalares
As unidades de tempo pr4%de)inidas s.o$
TDPE TIFE IS RAN'E @8"#B#( H#B to 8"#B#( H#B :NITS 6s; @@ 6emtose;un0o ps = "222 6s; @@ p)cose;un0o ns = "222 ps; @@ nanose;un0o us = "222 ns; @@ m)c+ose;un0o ms = "222 us; @@ m)ll)sese;un0o sec = "222 ms; @@ se;un0o m)n = H2 sec; @@ m)nuto E+ = H2 m)n; @@ Eo+a EN% :NITS;

Tipos Compostos
* Tipo ArraC$ % 3sados para colecionar um ou mais elementos de um mesmo tipo em uma 2nica constru.o( % Alementos podem ser de qualquer tipo " D#.
TDPE 0ata_-us IS ARRAD /2 TO "3 O< .IT; 2 !!!element num-e+s!!! " 2 !!!a++ay values!!!" SI'NAL >: 0ata_-us; SI'NAL D: .IT; D <= >/"83; @@ D +ece-e o valo+ 0o " o elemento

Tipos Compostos
* Outro e?emplo de &etor uni%dimensional 0usando a ordena.o DODETO1
TDPE +e;)ste+ IS ARRAD /"C %O$NTO 23 O< .IT; "C !!!element num-e+s!!! 2 2 !!!a++ay values!!! " S);nal >: +e;)ste+; SI'NAL D: .IT; D <= >/#3; @@ D +ece-e o valo+ 0o Co elemento

* A pala&ra DODETO ordena os elementos da esquerda para a direita/ com elementos de 'ndice decrescente(

Tipos Compostos
* Arranjos bi%dimensionais s.o 2teis para a descri.o de tabelas da &erdade(
TDPE t+utE_ta-le IS ARRAD/2 TO B= 2 TO #3 O< .IT; CONSTANT 6ull_a00e+: t+utE_ta-le := / 4222_224= 422"_2"4= 42"2_2"4= 42""_"24= 4"22_2"4= 4"2"_"24= 4""2_"24= 4"""_""43;

Tipos Compostos
* Tipos 5ecord % 3sados para colecionar um ou mais elementos de di)erentes tipos em uma 2nica constru.o % Alementos podem ser qualquer tipo " D# % Os elementos s.o acessados atra&4s no nome do campo TDPE -)na+y IS / ON= O<< 3; TDPE s1)tcE_)n6o IS RECOR% status : -)na+y; I%num-e+ : )nte;e+; EN% RECOR%; 5ARIA.LE s1)tcE : s1)tcE_)n6o; s1)tcE!status := on; @@ esta0o 0a cEave s1)tcE!I%num-e+ := 2; @@ nIme+o 0a cEave

Tipo Access
* Access % Similar aos ponteiros em outras lin+ua+ens % Permitem a aloca.o dinFmica de mem,ria % Gteis para a implementa.o de )ilas/ )i)os/ etc(

Subtipos
* Subtipos % Permitem o uso de restries de)inidas pelo usu!rio em um certo tipo de dado( % Podem incluir a )ai?a inteira de um tipo b!sico % Atribuies que est.o )ora da )ai?a de)inida resultam em um erro(

S:.TDPE <name> IS <-ase type> RAN'E <use+ +an;e>; S:.TDPE 6)+st_ten IS )nte;e+ RAN'E " to "2;

Subtipos
TDPE -yte IS -)t_vecto+/B 0o1nto 23; s);nal J_-yte: -yte; s);nal y_-yte: -)t_vecto+/B 0o1nto 23; I< J_-yte = y_-yte T&EN !!! S:.TDPE -yte IS -)t_vecto+/B 0o1nto 23 O compilador no gera nenhum erro. s);nal J_-yte: -yte; s);nal y_-yte: -)t_vecto+/B 0o1nto 23; I< J_-yte = y_-yte T&EN !!! O compilador gera um erro.

Somador de 4 bits

v z

esumo
* O " D# tem di&ersos tipos de dados dispon'&eis
* * * * * * para o projetista( Tipos enumerados s.o de)inidos pelo usu!rio Tipos )'sicos representam quantidades )'sicas Os arranjos cont4m um n2mero de elementos do mesmo tipo ou subtipo( Os records podem conter um n2mero de elementos de di)erentes tipos ou subtipos( O tipo access 4 basicamente um ponteiro( Subtipos s.o restries de)inidas pelo usu!rio para um tipo b!sico(

Atributos
* Atributos de)inidos na lin+ua+em retornam in)orma.o sobre certos tipos em " D#( Tipos/ subtipos Procedimentos/ )unes Sinais/ &ari!&eis/constantes Antidades/ arquiteturas/ con)i+uraes/ pacotes % Componentes * O " D# tem di&ersos atributos pr4%de)inidos que s.o 2teis para o projetista( * Atributos podem ser de)inidos pelo usu!rios para lidar com re+istros de)inidos pelo usu!rio/ etc( % % % %

Atributos de Sinal
* A )orma +eral de um atributo 4$
<nome> K <)0ent)6)ca0o+_0e_at+)-uto>

* Al+uns e?emplos de atributos de sinal


>KE5ENT @@ aval)a0o como 5ER%A%EIRO 7uan0o um evento no s)nal > aca-ou 0e oco++e+ >KLAST_5AL:E L +eto+na o Ilt)mo valo+ 0o s)nal > >KSTA.LE/t3 L aval)a0o com 5ER%A%EIRO 7uan0o nenEum evento oco+++eu no s)nal > EM pelo menos t se;un0os!

Atributos
KLE<T L +eto+na o valo+ ma)s a es7ue+0a 0e um t)po KRI'&T @@ +eto+na o valo+ ma)s a 0)+e)ta 0e um t)po K&I'& @@ +eto+na o ma)o+ valo+ 0e um t)po KLO$ @@ +eto+na o meno+ valo+ 0e um t)po KLEN'T& L +eto+na o nIme+o 0e elementos 0e um veto+ KRAN'E L +eto+na a 6a)Ja 0e valo+es 0e um veto+

Exemplos de Atributos
THPA count is 5AEGA @ TO 87:I THPA states 6S 0idle/ decision/read/Jrite1I THPA Jord 6S A55AH08K DODETO @1 OF bitI countKle6t = 2 countK+);Et = "8B countKE);E = "8B countKlo1 = 2 countKlen;tE = "8( statesKle6t = )0le statesK+);Et = 1+)te statesKE);E = 1+)te statesKlo1 = )0le statesKlen;tE = # 1o+0Kle6t = "C 1o+0K+);Et = 2 1o+0KE);E = "C 1o+0Klo1 = 2 1o+0Klen;tE = "H

countLran+e M @ TO 87: JordLran+e M 8K DODETO @

Exemplo de

e!istrador

* Aste e?emplo mostra como atributos podem ser usados na descri.o de um re+istrador de ; bits( * Aspeci)icaes % Disparado na subida do rel,+io % Arma-ena apenas se AEAB#A )or alto( % Os dados tem um tempo de NsetupO de K ns(
ENTITD (_-)t_+e; IS PORT /ena-le= clG : IN st0_lo;)c; a : IN st0_lo;)c_vecto+ /B %O$NTO 23; - : O:T st0_lo;)c_vecto+ /B %O$NTO 23; EN% (_-)t_+e;;

Exemplo de

e!istrador

* 3m sinal do tipo stdPlo+ic pode assumir os se+uintes &alores$ L3L/ LQL/ L@L/ L8L/ LRL/ LDL/ L#L/ L L/ or L%L * O uso de LSTAB#A detecta &iolaes de NsetupO
ARC&ITECT:RE 6)+st_attempt O< (_-)t_+e; IS .E'IN PROCESS /clG3 .E'IN I< /ena-le = K"K3 AN% aKSTA.LE/C ns3 AN% /clG = K"K3 T&EN - <= a; EN% I<; EN% PROCESS; EN% 6)+st_attempt;

* O que acontece se clS )or LQLT

Exemplo de

e!istrador

* O uso de L#ASTP"A#3A asse+ura que o rel,+io est! saindo de um &alor L@L


ARC&ITECT:RE -eEav)o+ O< (_-)t_+e; IS .E'IN PROCESS /clG3 .E'IN I< /ena-le =K"K3 AN% aKSTA.LE/C ns3 AN% /clG = K"K3 AN% /clGKLAST5AL:E = K2K3 T&EN - <= a; EN% I<; EN% PROCESS; EN% -eEav)o+;

Senten"as Se#$enciais e Concorrentes


* O " D# pro&U dois tipos de e?ecu.o$ Sequencial e Concorrente. * Tipos di)erentes de e?ecu.o s.o 2teis para a modela+em de circuitos reais( * As sentenas sequenciais en?er+am os circuitos do ponto de &ista do pro+ramador( * As sentenas concorrentes tem ordena.o independente e s.o ass'ncronas(

Senten"as Concorrentes
T+Ns t)pos 0e sentenOas conco++entes usa0os em 0esc+)OPes 0e 6luJo 0e 0a0os

E7uaOPes .ooleanas
Para atribuies concorrentes de sinais

1)tE@select@1Een
Para atribuies seletivas de sinais

1Een@else
Para atribuies condicionais de sinais

E#ua"%es &ooleanas
ent)ty control )s po+t(mem_op, io_op, read, write: )n bit; memr, memw, io_rd, io_wr:out bit); en0 control; a+cE)tectu+e control_arch o6 control )s -e;)n memw <= mem_op an0 write; memr <= mem_op an0 read; io_wr <= io_op an0 write; io_rd <= io_op an0 read; en0 control_arch;

'it()select)*(en
ent)ty mux )s po+t(a,b,c,d: )n std_logic_vector(3 0o1nto 0); s: )n std_logic_vector( 0o1nto 0); x: out std_logic_vector(3 0o1nto 0)); en0 mux; a+cE)tectu+e mux_arch o6 mux )s -e;)n 1)tE s select x <= a 1Een !00!, b 1Een !0 !, c 1Een ! 0!, d 1Een otEe+s; en0 mux_arch;

*it()select)*(en
a+cE)tectu+e mux_arch o6 mux )s -e;)n 1)tE s select x <= a 1Een !00!, b 1Een !0 !, c 1Een ! 0!, d 1Een ! !, !""! 1Een otEe+s; en0 mux_arch;

Possveis valores de s

*(en)else
a+cE)tectu+e mux_arch o6 mux )s -e;)n x <= a 1Een (s = !00!) else b 1Een (s = !0 !) else c 1Een (s = ! 0!) else d; en0 mux_arch;

Pode ser qualquer condio simples

Operadores L+!icos
AND XOR OR XNOR NAND NOT

# $r%"de&inidos para os tipos: " 'it e boolean( " )etores unidimensionais de bits e boolean( # *peradores l+gicos ,-* ./0 ordem de preced1ncia: 2 <= 3 o+ ' an0 4 resultar5 em erro de compila67o(

Operadores elacionais
= /= <= >= < >

# 8sados para testar igualdade, di&eren6a e ordenamento( # (= and 9=) s7o de&inidos para todos os tipos( # (<, <=, :, and :=) s7o de&inidos para tipos escalares( # *s tipo de operando em uma opera67o relacional devem ser iguais(

Operadores Aritm,ticos
Operadores de Adi.o

&

Operadores de Vultiplica.o

rem
Outros

mod

a!"

**

Senten"as Se#$enciais
SentenOas se7Renc)a)s sQo cont)0as em p+ocessos= 6unOPes ou p+oce0)mentos!

%ent+o 0e um p+ocesso a at+)-u)OQo 0e um s)nal S se7Renc)al 0o ponto 0e v)sta 0a s)mulaOQo!

A o+0em na 7ual as at+)-u)OPes 0e s)na)s sQo 6e)tas A<ETAF o +esulta0o!

Exemplos
LI.RARD )eee; :SE )eee!st0_lo;)c_""H#!ALL; ENTITD Re; IS PORT/%ata_)n : IN ST%_LO'IC_5ECTOR; %ata_out: O:T ST%_LO'IC_5ECTOR; $+ : IN ST%_LO'IC ; Reset : IN ST%_LO'IC ; ClG : IN ST%_LO'IC3; EN% Re;; ARC&ITECT:RE -eEav)o+al O< Re; IS .E'IN PROCESS/$+=Reset=ClG3 CONSTANT Re;_0elay: TIFE := 8 ns; 5ARIA.LE .5Te+o: ST%_LO'IC_5ECTOR/%ata_)nKRAN'E3:= /OT&ERS => K2K3;

Exemplos
.E'IN I< /Reset = K"K3 T&EN %ata_out <= .5Te+o A<TER Re;_0elay; EN% I<; I< /ClGKE5ENT AN% ClG = K"K AN% $+ = K"K3 T&EN %ata_out <= %ata_)n A<TER Re;_0elay; EN% I<; EN% PROCESS; EN% -eEav)o+al;

-rocesso
* 3m processo 4 uma contru.o em " D# que +uarda al+oritmos * 3m processo tem uma lista de sensibilidade que identi)ica os sinais cuja &aria.o ir.o causar a e?ecu.o do processo. a+cE)tectu+e behav o6 e;comp )s -e;)n comp: p+ocess (a,b) -e;)n e;uals <= <0<; Rtulo opcional )6 a = b tEen e;uals <= < <; en0 )6; en0 p+ocess comp; en0 behav;

Lista de sensibilidade

O uso do comando wait $roc : p+ocess (a,b,c) -e;)n x <= a an0 b an0 c; en0 p+ocess;

-rocesso

Equivalentes

$roc=: p+ocess -e;)n x <= a an0 b an0 c; 1a)t on a, b, c; en0 p+ocess;

Senten"as Se#$enciais
#ua$ro $ipo" de "en$en%a" "e&'enciai" "o u"ada" em de"cri%(e" compor$amen$ai"

i) $hen el"e

ca"e *hen

)or loop

*hile loop

i.)t(en)else
s);nal step: bit; s);nal addr: bit_vector(0 to >); ! ! ! p : p+ocess (addr) -e;)n )6 addr : x!0?! tEen step <= < <; else step <= <0<; en0 )6; en0 p+ocess; s);nal step: bit; s);nal addr: bit_vector(0 to >); ! ! ! p=: p+ocess (addr) -e;)n )6 addr : x!0?! tEen step <= < <; en0 )6; en0 p+ocess;

+, $em uma mem-ria impl.ci$a

i.)t(en)else
a+cE)tectu+e mux_arch o6 mux )s -e;)n mux@_ : p+ocess (a,b,c,d,s) -e;)n )6 s = !00! tEen x <= a; els)6 s = !0 ! tEen x <= b; els)6 s = ! 0! tEen x <= c; else x <= d; en0 )6; en0 p+ocess; en0 mux_arch;

case ) *(en
case present_state )s 1Een 3 =: A <= <0<; B <= < <; )6 x = < < tEen next_state <= '; else next_state <= 3; en0 )6; 1Een ' =: A <= <0<; B <= <0<; )6 x = < < tEen next_state <= 3; else next_state <= '; en0 )6; en0 case;
0/01

A
1/01 1/00

/
0/00

entradas: x sadas: y,z

Detector de /oeda

v z

.or)loop
type register )s bit_vector(> 0o1nto 0); type reg_arraA )s a++ay(@ 0o1nto 0) o6 register; s);nal &i&o: reg_arraA; p+ocess (reset) -e;)n )6 reset = < < tEen 6o+ i )n @ 0o1nto 0 loop )6 i = = tEen neJt; else &i&o(i) <= (otEe+s =: <0<); en0 )6; en0 loop; en0 )6; en0 p+ocess;

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Re"e$

*(ile)loop
type register )s bit_vector(> 0o1nto 0); type reg_arraA )s a++ay(@ 0o1nto 0) o6 register; s);nal &i&o: reg_arraA; p+ocess (reset) va+)a-le i: integer := 0; -e;)n )6 reset = < < tEen 1E)le i <= @ loop )6 i 9= = tEen &i&o(i) <= (otEe+s =: <0<); en0 )6; i := i C ; en0 loop; en0 )6; en0 p+ocess;

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Re"e$

Você também pode gostar