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