Você está na página 1de 18

RESUMO DE DICAS VHDL

1 No se podem declarar variveis dentro de ar!itet!ra " variveis so declaradas dentro de


processos#
1a- Entre $locos da ar!itet!ra s% & sinais li'ando os $locos#
2 No se pode declarar !m sinal dentro de !m (rocess )apenas variveis*+ mas pode,se atri$!ir o
valor de !ma varivel a !m sinal+ o! reali-ar opera./es entre sinais e variveis#
3 Sinais podem ser usados dentro de um Process, mas atri$!i./es a sinais dentro de processo
podem ca!sar res!ltados inesperados por!e a atri$!i.o do valor 0 retardada at0 !e !m
comando 1AI2 se3a e4ec!tado# O mesmo ocorre se o processo for disparado por alguma mudana
em um ou mais elementos da lista de sensibilidades, que equivalente a eecutar um !"#$ no final do
processo%
& Sinais s'o usados para fa(er comunica'o entre processos e tambm s'o usados para interligar
)*ire+ pro,etos estruturais )pro,etos que eplicitam a interliga'o f-sica dos m.dulos, sem detal/ar o
comportamento de cada m.dulo+%
0 1entro de um processo, atribui2es a sinais podem enviar dados para outros processos )disparando-
os+%
3 1entro de um processo, valores de sinais podem ser usados do lado direito de epress2es para
atribuir valores a vari4veis%
5 #6PO7$"8$9: 1entro de um processo, a atribui'o a um sinal retardada )n'o feita+ at que um
ciclo de simula'o se,a rodado, sendo disparado pela eecu'o de um comando !"#$, ou atravs da
mudana de um sinal na lista de sensibilidades, o que tambm feito no final do processo% 9emplo:
Process
;egin
S<s=cl> ?@ 8O$ )s<s=cl>+ after 0A nsB
#nt=bus ?@ data=in after 1A nsB
1ata=out ?@ m<=function )int=bus+ after 1A nsB
!"#$ 3A nsB -- s. ap.s 3A ns ap.s o tempo de simulacao anterior
-- que s<s-cl>, int=bus e data=out vao mudar,
-- com seus respectivos atrasos CC
D 1entro de um processo )atribui2es sequenciais+ um sinal s. pode ter atribu-do um valor de cada
ve(% 9%:
Process
;egin
E<( ?@ 1 after & nsB
Pqd ?@ 1A after 0 nsB
E<( ?@ 2 after & nsB -- s. esta atribui'o reali(ada C
!"#$ ----
---- -
end processB
F "$7"SO 19 S#8"#S Guando uma atribui'o de sinal simulada, a mudana de sinal ocorre num
instante preciso de tempo simulado )isto ,4 n'o se pode precisar na s-ntese do circuito+% $ais atribui2es
de atraso nos sinais servem para simula'o, mas n'o servem para s-ntese% Guando ser for sinteti(ar o
1
circuito devem-se usar cloc>s e contadores para gerar os atrasos necess4rios% He,a-se um eemplo
abaio, que para simula'o est4 OI, mas para sinteti(ar n'o serve:
signal : integerB
process ---
begin
---- -
?@ J 1 after 1A nsB -- para sinteti(ar precisa usar registro cK cloc> para
--- - -- construir um contador e garantir esse tempo%
endB
1A "$7"SO L97O "tribui2es de sinais podem especificar atraso L97O, bastando n'o indicar a
cl4usula de atraso "M$97B 9: ?@ J1B
11 9emplo de 6NE usando atribui'o de sinais com L97O 19O"P:
entit< H"7 is
port )" : in ;#$=H9Q$O7 )A to 5+B
#819E : in #8$9R97 range A to 5B
ON$PN$ : out ;#$+B
9nd H"7B
"rc/itecture HS1O=1 of H"7 is
;egin
Process
;egin
ON$PN$ ?@ " )#819E+B --- sc/edulado em A nsB )Ans ap.s o que for especificado
!"#$ -- -- pelo !"#$+
---- -
end HS1O=1B
---- 69S6O QO6 L97O 19O"P precisa ter o comando !"#$ C
11 S#R8"O "SS#R8698$ H"7#";O9 "SS#R8698$
------------------------------- ------------------------------------
- valores de sinais s'o sc/edulados - valores de vari4veis n'o s'o sc/edulados
- valores de sinais podem ter atraso - valores de vari4veis s'o especific% SKatraso
- valores de sinais s'o atuali(ados s. - val% de vari4v% s'o atuali(% imediatamente
ap.s o !"#$ ser eecutado%
91: H :@ 1B
S ?@ HB
" :@ SB -- " recebe o valor vel/o de S e n'o H )ou 1+B
!"#$ ---B
92: E ?@ 1B
E ?@ 2B
!"#$ for A nsB -- "p.s o *ait ser eecutado, recebe valor 2%
12 MO76"S 19 !"#$:
!"#$ O8 ", ;B -- suspende eecu'o do processo at que ocorra evento em " ou ;%
!"#$ N8$#O "T 1AB -- susp% 9ec% do processo at que ocorra evento em " e "T1A%
!"#$ MO7 1A nsB -- susp% 9ec% 1o processso por 1A ns )tempo de simula'o+%
2
!"#$B -- suspende eec% 1o processo para sempre usado em processos de iniciali(a'o% 8ao /4
modo de matar um processo em HS1O%
13 "o invs de ter um ou mais comandos !"#$ dentro de um processo, pode-se usar uma lista de
sensibilidade% U equivalente a ter um !"#$ no fim do processo% 8VO S9 PO19 $97 O#S$" 19
S98S#;#O#1"19S 9 !"#$ "O 69S6O $96PO 8N6 P7OQ9SSO%
9%: Simula'o Passo Simples: Simula'o 1ois Passos
)6aioria dos Qompilad% HS1O+
Process )", ;+ Process )", ;, S, $+
;egin begin
S?@ "B S ?@ "B
$ ?@ ;B $ ?@ ;B
H ?@ S or $B H ?@ S or $B
9nd processB end processB
-- usa valores vel/os de S, $ para H -- "tuali(a o valor de S, $ para H em dois
-- passos de delta time)tempo de simul%Lero+
1& O OOOP MO7:
arc/itecture ----- of decoder is procedure O11=P"7#$P )
begin ": in ;#$=H9Q$O7 )A to 5+B
process );NS="+ -- t<pe integer 79SNO$ : #8ON$ ;#$ + is
begin begin
for I in A to 3 loop 79SNO$ ?@ WAXB
1 )I+ ?@ );NS=" @ >+B for m in A to 5 loop
9nd loopB 79SNO$ ?@ 79SNO$ or " )m+B
9nd processB 9nd loopB
9nd arc/itectureB 9nd O11=P"7#$PB
P7OQ9SSO OI% 977O: 6NO$#PO"S "$7#;N#YZ9S 8O
69S6O P"SSO 19 S#6NO"YVO%
SO RN"71" NO$#6O @T ")5+ CC%
10 Restri.o de RAN5E uma restri'o de range usa valores que deveriam ser compat-veis com o
tipo que est'o relacionadas, e estar numa dire'o compat-vel com a declara'o original do tipo% O valor
inicial default o etremo inferior do range%
9:
#nteger range 1 to 1A @@ 8"O @@ integer range 1A to 1
#nteger range 1A do*nto 1 @@ 8VO @@ integer range 1 do*nto 1A
real range 1%A to 1A%A @@ 8VO @@ real range 1 to 1A
9m alguns casos dese,a-se toda a faia : integer
13 Declara.o de Sinais
Sinais podem ser declarados em diversos lugares: entidade, arquitetura ou num pac>age%
3
Sinais podem ser abstra2es de fios f-sicos, de barramentos, ou usados para documentar fios num
circuito real% Nm sinal deve ser declarado com um tipo, antes de ser usado% " sintae :
Declara.o de sinal6
Escalar 6 si'nal name)s* 6 t7pe 8ran'e9constraint:86;e4pression:<
Arra76 si'nal name)s* 6 arra79t7pe8inde49constraint:86;e4pression:<
Entit76 port )name)s*6 direction t7pe 8ran'e9constraint:86;e4pression:<
Se se dese,a inciali(ar um sinal, deve-se indicar um literal em [:epress'o\%
9:
Si'nal S6 =I2 6; >?@<
Si'nal 5ROUND6 =I2 6; >A@<
Qaso contr4rio, o valor default inicial o valor mais baio daquele tipo#
?B " EC(RESSDES6
"lm dos tipos padr'o )standard+, algumas empresas fornecem tipos de dados estendidos e operadores
sobrecarregados )fun2es+, tal como declarado num pac>age% Al'!mas empresas podem Eornecer
operadores com converso a!tomtica de tipos+ mas o (acFa'e S2ANDARD no Eornece tais
operadores#
E46
5eralmente operandos tem !e ser do mesmo tipo# No & converso a!tomtica de tipos#
E4emplo " NGO SE (ODE ES(ECIHICAR6
? I ?#A
9emplo de Qonvers'o de tipos:
#nteger )3%A+ tipo integer
7eal )3+ tipo real
#nteger ] time tipo time
8anos J picos tipo time
8anosKpicos
?J " Res!mo de Operadores6 NO2A6 (arKnteses podem alterar a precedKncia#
(recedKncia
MENOR
Operadores
O.gicos
O(ERADORE
S
"nd
Or
8and
"nd O.gico
Or O.gico
Qomplem% "nd
O(ERANDOS
6esmo tipo
6esmo tipo
6esmo tipo
Operadores
7elacionais
8or
Eor
@
K@
?
?@
T
T@
Qomplem% 1o Or
Ou eclusivo O.gico
#gual
8'o igual
6enor que
6enor ou igual que
6aior que
6aior ou igual que
6esmo tipo
6esmo tipo
6esmo tipo
6esmo tipo
6esmo tipo
6esmo tipo
6esmo tipo
6esmo tipo
&
Operador de
Qoncatena'o
Operadores
"ritmticos
^
J
-
Qoncatena'o
"di'o
Subtra'o
6esmo tipo
6esmo tipo
Operadores
"ritmticos
J
-
6ais Nn4rio
6enos Nn4rio
Gualquer numrico
Gualquer numrico
Operador
"ritmtico
]
K
mod
rem
6ultiplica'o
1ivis'o
6.dulo
7esto
6esmo tipo
6esmo tipo
#nteiro
#nteiro
MAIOR Operador
"ritmtico
Operadores
O.gicos
]]
abs
not
9ponencia'o
Halor "bsoluto
Qomplemento
9p% #nteira
Gualquer numrico
6esmo tipo
?L " O(ERADORES
Operadores L%'icos " trabal/am com tipos ;#$, ;OOO9"8, S$1=OOR#Q, vetores de taman/o igual
e 8VO 96 #8$9#7OS%
Operadores Relacionais " trabal/am com qualquer tipo de escalar ou tipo arra< N8#-1#698S#O8"O
cu,o tipo de elemento um tipo discreto )enumera'o ou inteiro+%
Operadores Aritm0ticos " trabal/am com inteiro, real e S$1=OOR#Q=H9Q$O7%
9m alguns casos operadores s'o especifica2es para um bloco de /ard*are para ser constru-do usando
ferramentas de s-ntese l.gica% " adi'o inteira )J+ poderia produ(ir um somador de 32 bits, a menos
que o usu4rio especifique um tipo epl-cito )comprimento do somador+% O eemplo abaio representa
um somador de D bits )ao invs de 32+, com fios a, b, e % Por eemplo:
Varia$le a+ $+ 4 6 inte'er ran'e A to MNN<
4 6; a I $<
8ormalmente HS1O requer que a soma se,a do mesmo comprimento das parcelas% Para dar conta do
vai um do bit mais significativo da soma, fa(-se:
Varia$le a+ $ 6 S2D9LO5IC9VEC2OR )J doOnto ?*<
0
Varia$le 4 6 S2D9LO5IC9VEC2OR )L doOnto ?*<
4 6; >A@Pa I >A@P$<
MA " O !e si'niEica istoQ
E ?@ " ?@ ;B ) A 0 menor o! i'!al a = QQ *
Significa : compare " com ;, e o resultado booleano produ(ido atribua ao sinal E%
M? " Aritm0tica IEEE Std9Lo'ic9Vector
O pac>age S$"81"71 n'o permite aritmtica em bit=vectors% Al'!ns vendedores Eornecem !m
pacFa'e aritm0tico !e E!nciona com std9lo'ic9vectors# Portanto, o tipo std=logic=vector
geralmente o tipo de dados mais usado para s-ntese e simula'o% 9ntretanto, eiste uma ambiguidade ao
interpretar o valor de um std=logic=vector% Por eemplo:
_1A11` @T valor sem sinal 11 )on(e+
_1A11` @T valor com sinal 0, em complemento a 2%
1eve-se declarar o tipo de pac>age aritmtico que se quer usar, ou se,a:
Nse #999%std=logic=signed%allB
Nse #999%std=logic=unsigned%allB
Os pacotes definem operadores l.gicos, relacionais e aritmticos% 9:
_1A11`T _AA11`
" epress'o tem duas interpreta2es, dependendo da sele'o de pac>age:
11 T 3 8ameros sem sinal )verdadeiro+
-0 T 3 8ameros com sinal )falso+
"o usar epress2es aritmticas literais, o nome dos subtipos si'ned e !nsi'ned podem ser usados para
indicar o tipo anico de operador dese,ado% Por eemplo:
SignedX)_1A11`+ T SignedX)_AA11`+
Qomo ambos os operandos s'o signed, o perador de compara'o )T+ signed, e produ( um M"OS9%
MM " Novos operadores VHDL@LR:
sll s/ift left logical ror - rotate rig/t
sla s/ift left arit/metic srl - s/ift rig/t logical
rol rotate left sra - s/ift rig/t arit/metic
nor eclusive nor
MR " LI2ERAIS SGO CASE SENSI2IVE EM VHDL
MS " OS 2I(OS DE DADOS SGO DECLARADOS EM (ACTA5ES COMO A=AICO6
(ACTA5E DA2A 2U(ES
3
(acFa'e S2D9LO5IC9??VS Std9lo'ic
Std9lo'ic9vector
(acFa'e S2D9LO5IC9ARI2H Si'ned+ !nsi'ned
(acFa'e 2EC2IO Hile+ Line
(acFa'e S2ANDARD =oolean+ $it+ c&aracter+ time+
Strin'+ $it9vector+
Nat!ral+ positive+
Severit79level
VHDL Lan'!a'e Inte'er+ real
MN " Convertendo tipos =I2 para =OOLEAN ) >?@ torna-se tr!e+:
varia$le CCC 6 =I2<
varia$le WWW 6 =oolean<
WWW 6; ) CCC ; >?@*<
MV " LI2ERAIS =I2 e =OOLEAN XX
=I2 " o valor de um sinal num sistema digital% Nm literal bit representa dois valores discretos atravs
do uso os literais caracteres WAX ou W1X, bitX)W1X+% O standard #999 113& define nove foras )WNX, WEX,
WAX, W1X, WLX, WOX, WSX, etc+ de sinal num pac>age HS1O para o tipo S$1=OOR#Q% 9stes nove valores s'o
mais ateis para simula'o e s-ntese do que o tipo ;#$ puro% )1evido a isto, os tipos ;#$ e ;OOO9"8
)true, false+ s'o diferentes +%
=OOLEAN " Nm literal ;ooleano representa dois valores discretos somente: $7N9 ou M"OS9% Nm
literal booleano n'o um um literal ;#$, nem tem rela'o com ele CC% Um =OOLEANO pode ser
testado n!ma senten.a IH# O valor default falso para valores n'o inciali(ados%
Operadores relacionais, como @, ?@, T@, K@, etc produ(em um resultado ;OOO9"8O%
Nm sinal booleano comumente usado para epressar o estado de um sinal eletrbnico ou ;us, sem
escol/er o valor real de voltagem eltrica )ou uma das foras tipo ;#$+% Portanto, um ;oolean uma
representa'o abstrata% O pac>age S$"81"71 n'o predefine um arra< de valores booleanos%
MB " Al'!mas senten.as vlidas e invlidas de acordo com o tipo dos operadores6
Se,a a declara'o de tipos:
Hariable ", ;, Q, 1 : ;#$=H9Q$O7 )3 do*nto A+B
Hariable 9, M, R : ;#$=H9Q$O7 )1 do*nto A+B
Hariable S, #, c, I : ;#$B
5
1+ " :@ ; or Q and 1B #nv4lida precisa pardnteses pois os 2 operadores l.gicos tem o
mesmo n-vel e se trocar a ordem troca o resultado% "lm disso
o tipo n'o ;OOO9"8 e deveria ser%
2+ S :@ # and c or IB #nv4lida 8'o pode fa(er opera2es l.gicas, pois o tipo deveria
ser ;OOO9"8 e 8VO ;#$%
3+ " :@ ; and 9B #nv4lida $ipos misturados
&+ S :@ # or MB #nv4lida $ipos misturados
MJ " H!n./es e (rocedimentos podem ser declarados n!ma entidade+ ar!itet!ra o! pacFa'e+ mas
so instanciados dentro de processos e portanto so se!enciais# H !ma e4ce.o para proced!re
call concorrente !e pode ser !sada dentro da ar!itet!ra " ver item SR#
H!n.o recebe um ou mais paremetros e retorna um )1+ s. valor#
H!n.o NGO pode conter senten.a 1AI2#
(rocedimento como uma fun'o, mas podem ser retornados mais de um valor, usando paremetros% Os
paremetros s'o do tipo #8, ON$ e #8ON$% Os paremetros podem ser vari4veis ou sinais%
Procedimentos usam a sentena 79$N78 sem valor%
(rocedimento (ODE conter senten.a 1AI2 e parYmetros tipo sinal podem passar sinais para
serem esperados na senten.a 1AI2#
O procedimento tem que ser declarado num pac>age, no cabeal/o de um processo ou na declara'o de
uma arquitetura antes de ser c/amado%
ML " ECEM(LO COM 2I(OS ENUMERADOS
arc/itecture be/ave of cpu is
t<pe instruction is )add, lda, ldb+B
begin process
variable a, b, data : integerB
variable instruct : instructionB
begin
% % % %
case instruct is
*/en lda @T a :@ dataB -- load a accumulator
*/en ldb @T b :@ dataB -- load b accumulator
*/en add @T a:@ a J bB -- add t*o acuumulators
end caseB
*ait on dataB
end processB
end be/aveB
8ote-se que durante a s-ntese l.gica ser4 reali(ada uma codifica'o numrica para o Q"S9, que poder4
introdu(ir estados inv4lidos, ou se,a, associando AA a lda, A1 a ldb e 1A a add, o que seria associado
quando um valor numrico 11 fosse gerado ff Seria prudente associar um valor )e%g% invalido+ ao valor
11 e tomar alguma atitude caso ele acontecesse, ao invs de deiar indefinido%
D
RA " E4press/es Z!aliEicadas
U dif-cil distinguir entre o caracter >?@+ o $it >?@ ou std9lo'ic >?@# U dif-cil saber com segurana o tipo
de literal que ele , pois precisa-se saber o conteto% Precisa-se typecasting ser epl-cito no tipo de um
valor% #sto pode ser feito usando uma expresso qualificada% 9emplo:
;itX)W1X+
Outro eemplo :
$<pe mont/s is )"pril, 6a<, cune+B
$<pe name is )"pril, cune, cud<+B
cune de tipo amb-guo )"pril tambm+ em alguns contetos% Hocd pode qualificar cune e eplicar
eatamente o que cune representa em HS1O com a epress'o qualificada:
6ont/sX)cune+
8ameX)cune+%
Guando um tipo tem valores compartil/ados com outros tipos, pode ser necess4rio tornar claro isso,
fa(endo um casting de um literal para um tipo particular% " sintae :
epress'o=qualificada
t<peX)literal ou epress'o+%
8'o confundir uma epress'o qualificada com uma fun'o que reali(a convers'o%
9: Gual a diferena entre inte'er )R#A* e inte'er@ )R#A* f
a integer )3%A+ um call legal para uma fun'o de convers'o de real para inteiro%
b integerX)3%A+ uma epress'o inv4lida pois n'o se pode fa(er cast do tipo real para o
tipo inteiro%
R? , S!$tipos escalares
subt<pe digit is integer range A to FB
variable 6S1, 8S1 : digitB
t<pe instr is )add, sub, mul, div, sta, stb, outa, fr+B
subt<pe arit/ is instr range add to divB -- subcon,unto de instr%
subt<pe pos is integer range 1 to 21&5&D33&5B -- subcon,unto de inteiros
subt<pe nano is time range A ns to 1 usB -- subcon,unto de tempo
RM " Atri$!i.o de ARRAUS
"tribui'o de um ;#$=H9Q$O7 usando algumas vari4veis:
Q :@ _1A1A`B -- atribui'o de constante
Q :@ S ^ $ ^ 6 ^ !B -- & sinais de 1 bit concatenados
Q :@ )W1X, WAX, W1X,XAX+B -- & bits agregados
Q :@ 3B -- inv4lido pois tipo ;#$=H9Q$O7 e 3 inteiro
RR " A5RE5ADOS
F
Nm arra< literal pode conter uma lista de elementos tanto com nota'o posicional como com nota'o
nomeada, formando um tipo agregado% " sintae :
[t<pe=nameX\ )[c/oice @T \ epression g, [ot/ers @T \ epressionh+
t<pe=nameX pode ser qualquer tipo de arra< limitado%
9:
Hariable E : ;#$=H9Q$O7 )1 to &+B
Hariable ", ;: ;#$B
E :@ ;#$=H9Q$O7X)W1X, " nand ;, W1X, " or ;+B -- ON i%
E :@ )1 @T W1X, & @T " or ;, 2 @T " nand ;, 3 @T W1X+B
E)1+ recebe W1X
E)2+ recebe )" nand ;+
E)3+ recebe W1X
E)&+ recebe )" or ;+
RS " Declara./es tipo ARRAU
9: $PP9 7"6 #S "77"P )1 to D, 1 to 1A+ OM bitB
$PP9 *ordD is arra< )integer range 1 to D+ OM bitB
E4emplo de arra7 sem limites6 t7pe =I29VEC2OR is arra7 )nat!ral ran'e [\* oE =I2<
ARRAUS MUL2IDIMENSIONAIS
$<pe memor< is arra< )A to 5, A to 3+ of bitB
Qonstant 7O6 : memor< :@ ) )WAX,WAX,WAX,XAX+,
)WAX,XAX,XAX,X1X+,
@ @ @ @ @ @ @ @
)WAX,X1X,X1X,X1X++B
9emplo de referdncia:
1ata=bit :@ 7O6 )0,3+B
ARRAU de ARRAUS
$<pe *ord is arra< )A to 3+ of ;itB
$<pe memor< is arra< )A to &+ of *ordB
Hariable addr, inde : integerB
Hariable data: *ordB
Qonstant rom=data : memor< :@ ) )WAX,XAX,XAX,XAX+,
)WAX,XAX,XAX,X1X+,
)WAX,XAX,X1X,X1X+,
@ @ @ @ @ @ @ @
)WAX,X1X,X1X,X1X++B
data :@ rom=data )addr+B
rom=data )addr+ )inde+ -- para acessar um bit somente%
RN " SU=2I(OS DE ARRAU
1A
Pode ser conveniente declarar um novo tipo )subtipo+ de um tipo de arra<% #sto feito atribuindo limites
ao tipo de arra< ilimitado% Por eemplo:
S!$t7pe $7te is $it9vector )B doOnto A*<
Hariaveis agora podem usar o subtipo, assim:
Varia$le 47- 6 $7te<
RV " (ROCEDURE, (arametros de ]
O modo dos paremetros IN+ OU2 e INOU2% Os paremetros podem ser sinais ou vari4veis% Se n'o
declarados como sinais, o default serem vari4veis%
9emplo:
PROCEDURE vector_to_int (z: IN bit_vector (1 to 8);
Zero_fla : OU! boolean;
" : INOU! inteer) i#
$E%IN
" :& ';
Zero_fla :& !RUE; (( )ara zero;
*OR i in 1 to 8 +OOP
" :& " , -; (( " .o# - la.o# .o o)era.or atrib/i01o &2 3 INOU! 444
I* (z(i) & 516) !7EN 8 :& 8 9 1;
Zero_fla :& *:+;E; (( )ara n1o zero
END I*;
END +OOP;
Ret/rn;
END vector_to_int;
8O$": G do tipo #8ON$ porque usado dos dois lados da atribui'o%
RB " S!$tipos Escalares
t<pe instr is )add, sub, mul, div, sta, stb, outa, fr+B
subt<pe arit/ is instr range add to divB -- sbuset of instr
subt<pe pos is integer range 1 to 21&5&D33&5B -- subset of integers
subt<pe nano is time range A ns to 1 usB -- subset of time
RJ " 2ipos Compostos " RECORDS
11
Type two_digit is
RECORD sign : bit;
Msd : integer range 0 to 9;
Lsd : integer range 0 to 9;
END RECORD;
PROCESS
!R"!#LE !CNTR$ #CNTR : two_digit;
#E%"N
!CNTR&sign :' ()*;
!CNTR&+sd :' );
!CNTR&,sd :' !CNTR&+sd;
#CNTR :' two_digit*-(0*$.$/0;
END PROCESS;
RL " 2ipos predeEinidos6 2EC2O E LINHAS
Nsados para opera2es de 9ntrada e Sa-da durante simula'o% 9stes tipos s'o usados numa declara'o _file` com
fun2es read, write e end-of-file% "rquivos do tipo teto s'o tratados como grupos de lin/as%
8a biblioteca S$1, eiste um con,unto de fun2es e tipos no Pac>age $9E$#O que s'o predefinidos% Os
procedimentos de entrada no pac>age $9E$#O s'o readline e read% Os procedimentos de sa-da no pac>age
$9E$#O s'o Oriteline e Orite% Por eemplo:
Readline )H6 In 2EC2< L 6 o!t LINE*< -- Od uma lin/a do arquivo M na vari4vel O
Read )L6 Ino!t Line< I2EM 6 inte'er*< -- Od um item da lin/a O na vari4vel #$96%
Oendo dados de um arquivo uma opera'o de dois est4gios% Por eemplo:
a : )roce## <<<
file te#tvector# : !E=! i# in >te#t<vec?;
variable + : +ine;
variable av@ bv : bit_vector (A .oBnto ');
bein
rea.line (te#tvector#@ +);
rea. (+@ av);
bv :& av;
( ( ( ( ( ( ( ( ( (
Qontinuando i%%
U preciso criar uma referdncia para o pac>age desta biblioteca antes de fa(er #KO de teto:
U#e ;!D<!E=!IO<:++;
"lm disso, /4 duas fun2es que retornam valores ;ooleanos que indicam condi2es 9OM ou 9OO%
EN*I+E (filenaCe)
END+INE(filenaCe)
9emplo completo:
U;E ;!D<!E=!IO<:++;
EN!I!D co)EF I;
END co)EF;
:RC7I!EC!URE fir#t O* co)EF I;
$E%IN
PROCE;; (o)
*I+E in#t/ff : !E=! I; IN >G)atHGte#t<.ata?;
*I+E o/tfile: !E=! I; OU! >G)atHGneB<.ata?;
I:RI:$+E +1@ +- : +INE;
I:RI:$+E av: bit_vector (A .oBnto ');
$E%IN
J7I+E NO! (END*I+E(in#t/ff)) +OOP
12
RE:D+INE (in#t/ff@ +1); (( lK /Ca linHa .o ar8/ivo .e entra.a
RE:D (+1@ av); (( +K /C valor .a linHa
JRI!E (+-@ av);
JRI!E+INE (o/tfile@ +-);
END +OOP;
END PROCE;;;
END fir#t;
O arquivo de dados _test%data` contm:
AA11
AA=11
11AA
13jMj
1A1A 1A11
Nnderscores s'o permitidos e ignorados% S-mbolos ^ indicam um namero numa base diferente )por
eemplo, base 13+% 1ados do tipo $it e $it9vector n'o tem aspas% $ipos enumerados, que utili(am
identificadores n'o podem ser lidos ou escritos com $9E$#O%
SA " 2ipos ACCESS
$ipos "ccess n'o s'o suportados por ferramentas de s-ntese, mas podem ser usados durante simula'o%
$ipos "ccess s'o semel/antes a ponteiros em linguagens de programa'o% 9les auiliam a construir
estruturas na mem.ria do simulador, que podem ser de taman/os variados% 9les permitem ao usu4rio
declarar dinamicamente quando mem.ria necess4ria para um item e para alocar mem.ria do simulador
quando necess4ria para guardar novos itens criados% Hari4veis do tipo access s'o ponteiros que podem
ser manipulados% Nm uso t-pico de tipos de acesso para criar uma estrutura de lista lin>ada%
O operador 89! fa( com que o sistema do simulador aloque arma(enamento para um item
)tipicamente um record+ e ele retorne o endereo de onde o novo item arma(enado na mem.ria do
simulador% Nma outra opera'o 19"OOOQ"$9, que deleta um item da mem.ria% He,am-se os
eemplos abaio:
27pe tOo9di'it is record , , , --
27pe pntr is access tOo9di'it< -- pntr um ponteiro
Varia$le 4ptr6 pntr< -- uma vari4vel ponteiro para acessar um record
9ample of storage allocation:
Cptr 6; neO tOo9di'it< -- aloca espao para o endereo de um record em ptr%
Nm eemplo de desalocar mem.ria:
Deallocate )4ptr*<
Para acessar elementos no record, use o nome do campo selecionado com o ponteiro% Por eemplo:
Cptr#msd 6; _?AA?`<
S? " CICLO DE SIMULAaGO
Os simuladores de primeira gera'o usavam uma tcnica que os desenvolvedores de sistemas Q"1 c/amam
_al'oritmo de !ma lista`, que relativamente r4pido mas que n'o consegue lidar com eventos paralelos de
atraso (ero, tais como trocar os valores de " e ;% O significado e os problemas que est'o associados com esta
atribui'o de sinais com atraso (ero pode ser ilustrado por um eemplo simples:
" ?@ ;B -- atraso (ero " recebe o valor vel/o de ;
; ?@ "B -- atraso (ero " ,4 trocou para o valor vel/o de ; e portanto ; recebe o
13
-- valor vel/o de ;%
9ste eemplo n'o trocaria os valores de " e ;, mas daria a " e a ; o valor vel/o de ;, usando o algoritmo de uma
lista%
Simuladores HS1O modernos usam um _al'oritmos de d!as listas` que verificam os valores anteriores e os
novos dos sinais% 8este mtodo, as epress2es s'o primeiro avaliadas e depois os sinais s'o atribu-dos novos
valores% 9m HS1O, o c.digo eemplo acima reali(a uma troca de dados entre os dois sinais " e ;, em algum
ponto do tempo de simula'o )algum instante+% Em opera.o+ os valores vel&os de = e A so $!scados e
sc&ed!lados para atri$!i.o+ para atraso -ero+ ap%s !ma senten.a 1AI2 s!$se!ente ser e4ec!tada#
9ste comportamento de duas fases do ciclo de simula'o HS1O natural para pro,etistas de /ard*are que est'o
acostumados com flip-flops cloc>ados 6asterKSlave%
" ordem dos eventos de _atraso (ero` tratada com uma unidade de tempo fict-cia c/amada _delta time`# Delta
time representa a e4ec!.o de !m ciclo de sim!la.o+ sem avan.ar o tempo de sim!la.o#
Os pontos c/aves de simula'o e _delta time` s'o:
simulador modela eventos de atraso (ero usando delta time%
9ventos sc/edulados ao mesmo tempo s'o simulados em ordem espec-fica durante um passo de delta time%
" l.gica relacionada ent'o resimulada para propagar os efeitos para outro passo de delta time%
Passos de delta time continuam at que n'o /a,a mais atividade para o mesmo instante de delta time%
1&
O ciclo de simula'o HS1O mostrado abaio:
" eecu'o de uma sentena !"#$ ou uma mudana de um paremetro numa lista de sensibilidades
disparam a entrada num ciclo de simula'o% O ciclo de simula'o comea no tempo de entrada%
Os sim!ladores VHDL Ea-em todas as atri$!i./es de sinais com valores previamente comp!tados
e sc&ed!lados% Como al'!ns valores de sinais m!dam+ al'!ns processos podem ser ativados%
9nt'o, o ciclo de simula'o vai atravs do tempo do meio e processos ativos s'o eecutados%
Sentenas de atribui'o a vari4veis s'o eecutadasB epress2es do lado direito das atribui2es de
sinais s'o avaliadas%
9lementos que precisam ser sc/edulados s'o avaliados para se obterem os valores apropriados%
Pode ser necess4rio voltar ao come.o sem na verdade avanar o tempo simulado% 9ste ciclo c/amado
um passo delta time% Delta time 0 a itera.o sem o avan.o do tempo de sim!la.o% Nm simulador
poderia dar diversas voltas neste loop fa(endo avalia2es a atribui2es, sem avanar o tempo simulado%
Guando n'o forem disparados mais processos , o ciclo de simula'o vai para o tempo Sai, e o tempo de
simula'o ent'o avanado%
8otem-se 3 processos concorrentes na figura abaio, que s'o disparados de acordo com suas listas de
sensibilidade% O processo " iniciado com a mudana do sinal QI e produ( uma mudana no estado do
sinal Sa% O processo ; disparado quando o sinal Sa muda de estado e este por sua ve( fa( com que o
sinal Sc mude e o Processo Q se,a ativado% Note,se tam$0m !e as e4ec!./es dos processos esto
acontecendo sem !e o tempo de sim!la.o se3a avan.ado pois ainda no se esta$ili-aram as
m!dan.as% O processo Q ao ser ativado fa( com que o sinal Sd mude de estado% #sto fa( com que o
processo " se,a 8OH"698$9 ativado )completou-se um loop+% O procedimento transcorre at que
todos os sinais ten/am estabili(ado% "- ent'o o tempo de simula'o avanado%
SM " Atri$!i./es Concorrentes a Sinais
"lm de poder atribuir valores a sinais dentro de processos concorrentes, o que torna os sinais
concorrentes, poss-vel fa(er atribuioes a sinais fora dos processos, o se,a, dentro da arquitetura% #sto
10
Entra Comeo Meio Fim Sai
Tempo
Atribuies de Sinais
Execuo de Processos
Avaliao de Sinais
!o.a# a# atrib/i0Le# .o la.o .ireito (avalia0Le#)
#1o calc/la.a# a)M# atrib/i0Le# #ereC feita#
(ROCESSO A )cF+Sd* (ROCESSO = )Sa+ SeS'*
Sa
Se
Sc
Sd
(ROCESSO C )Sc+ S$*
Sb
Sf
Ck
S
similar a _escrever um processo` o qual s. fa( atribuir um valor a um sinal% 1esta forma, as atribui2es
a sinais dentro da arquitetura s'o concorrentes%
:rcHitect/re :R"1 of =DZ i#
$ein
;ai.a1 N& : (in.eO); (( #ai.a1 e #ai.a- #ao concorrente#
;ai.a- N& $ (in.eO);
En. :R"1;
8ote-se que na forma concorrente acima, qualquer sinal usado no lado direito da atribui'o est4 )por
default+ na lista de sensibilidades% " qualquer /ora que o sinal mudar, a atribui'o concorrente
avaliada e um valor atribu-do ao sinal%
Hormas de Atri$!i./es Concorrentes a Sinais6
"lvo ?@ 9press'o -- opera'o l.gica, comparativa ou aritmtica
Qondicional -- similar a sentenas #M
Selecionada -- semel/ante a sentena Q"S9
Atri$!i./es Condicionais a Sinais6
9emplo:
Z N& : BHen (O2A) el#e
$ BHen (ONA) el#e
C;
NO2A6 NGO SE (ODEM HAWER A2RI=UIaDES CONDICIONAIS A SINAIS DEN2RO DE
(ROCESSOS XXXX
Atri$!i./es Selecionadas a Sinais Usando E4presso 1it&6
JitH PEU;IN:+ #elect
Z N& : BHen 1Q@ (( ;M )o.e ter /C alvo
$ BHen --@
C BHen otHer#;
9ste tipo de atribui'o usado fora de um processo% Qomo uma atribui'o concorrente, roda quando
ocorrer qualquer mudana no sinal selecionado, no eemplo o sinal 69NS#8"O% 9sta uma forma
redu(ida de escrever um processo com uma sentena Q"S9%
NO2A6 NGO SE (ODEM HAWER A2RI=UIaDES CONDICIONAIS A SINAIS DEN2RO DE
(ROCESSOS XXXX
SR " (roced!re Call Concorrente
Outra forma de sentena concorrente uma procedure call concorrente% Nma procedure call concorrente
uma procedure call que eecutada fora de um processo%
Procedure Qall Qoncorrente:
$em parametros #8, ON$ e #8ON$%
6uitas tem mais que um valor de retorno%
U considerada uma sentena%
13
U equivalente a um processo contendo uma s. procedure call%
(roced!re Call Concorrente6 ;\ E!ivale a6 (roced!re Call dentro de !m (rocesso6
9la disparada nos dois casos quando algum dos seus parametros de entrada mudar%
SS " Senten.as =locF6
Nma sentena ;loc> contm um con,unto de sentenas concorrentes e especialmente atil para
organi(ar um pro,eto% Pode-se usar ;loc> para particionar uma netlist estrutural% " sintae :
$locR_#tateCent
Slabel:T blocR U(eO)re##1o booleana)V
S.eclara0Le#T
bein
#tenten0a#_concorrente#
en. blocR UlabelV;
1eclara2es declaram ob,etos locais ao bloco e podem ser qualquer uma das seguintesB
NS9 --clausula
Subprograma -- declara'o e corpo
$ipo, constantes, sinais -- declara2es
Qomponente declara'o
" ordem das sentenas concorrentes num bloco n'o importante pois todas as sentenas est'o sempre
eecutando% Os blocos podem ser anin/ados no c.digo fonte para organi(ar e criar a /ierarquia% Ob,etos
declarados dentro de um ;OOQI s'o vis-veis dentro daquele bloco e todos os seus sub-blocos
)anin/ados a ele+% Se um bloco fil/o )dentro de um bloco pai+ declara um ob,eto com o mesmo nome
do bloco pai, tal declara'o redefine a declara'o do bloco pai )over*rite+%
$1 : blocR
;inal ;: $I!; (( Declara01o .e ; no bloco $1
$ein
; N& : an. $; (( ; .e $1
$- : blocR
;inal ;: $I!; (( Declara01o .e ;@ bloco $-
$ein
; N& C an. D; (( ; .e $-
$A: blocR
$ein
Z N& ;; (( ; .e $-
En. blocR;
En. blocR;
D N& ;;
En. blocR;
15
:rcHitect/re
$ein
Iector_to_int (bit#t/ff@ fla@ n/Cber);
En.;
:rcHitect/re
$ein
Proce##
$ein
Iector_to_int (bit#t/ff@ fla@ n/Cber);
Jait on bit#t/ff@ n/Cber;
En. )roce##;
En.;
SN " VHDL ES2RU2URAL
1D

Você também pode gostar