200 likes | 294 Views
VHDL Linguagem de Descrição e Síntese de Circuitos Digitais. Sistemas Digitais. O Comando Generic. Vetores Definidos Pelo Usuário. Vetores predefinidos são unidimensionais As vezes necessita-se de vetores com dimensões maiores Exemplo: memórias
E N D
VHDLLinguagem de Descrição e Síntese de Circuitos Digitais Sistemas Digitais
Vetores Definidos Pelo Usuário • Vetores predefinidos são unidimensionais • As vezes necessita-se de vetores com dimensões maiores • Exemplo: memórias • São necessárias duas dimensões para especificar uma memória • Número de posições e número de bits • Descrição de uma memória de 2kbytes de 8 bits
Operadores de Deslocamento sll Multiplicação por 2 srl Divisão por 2 sla sra rll rrl
Atraso Inercial Tempo mínimo que um pulso deve durar para que seja aceito por um circuito.
Atraso de Transmissão Atraso no transporte de um sinal. Isto é modelado em VHDL como segue:
Comandos Sequenciais Comandos sequenciais ficam contidos em regiões específicas de código como processos ou subprogramas. Uma vez iniciada a execução de comandos em região de código sequencial, os comandos são avaliados na sequência em que são apresentados no código. Veremos a aplicação dos comandos sequenciais IF, CASE e WAIT. Veremos também o modo de operação de um processo e a lista de sensibilidade, além da atribuição de valores a sinais nas regiões de código sequencial.
Comandos Sequenciais Um processo define uma área contendo comandos sequenciais. A palavra reservada PROCESS identifica o comando. O processo é um comando concorrente. Um processo é composto de duas regiões: parte de declaração, e parte de comandos sequenciais. A primeira região é o local para declaração de tipos e subtipos, constantes, variáveis, entre outros. A declaração de sinais não é permitida. A segunda região encontra-se entre as palavras reservadas BEGIN e END.
Comandos Sequenciais Lista de Sensibilidade em Processos Contém comandos sequenciais que representam o comportamento de uma parte ou de toda a descrição. A palavra reservada PROCESS pode ser antecedida de um rótulo qualquer, e ser seguida de uma lista de sensibilidade. A lista define para quais sinais que o conjunto de comandos contidos no processo é sensível. Isto é, a ocorrência de uma mudança no valor de um dos sinais da lista fará com que o processo seja executado.
Comandos Sequenciais Lista de Sensibilidade em Processos
Comandos Sequenciais Execução Sequencial abc: PROCESS BEGIN comando 1 comando 2 . . . comando n END PROCESS abc; Execução Conjunta . . . comando abc: PROCESS Comando xyz: PROCESS comando . . . Execução Sequencial xyz: PROCESS BEGIN comando 1 comando 2 . . . comando m END PROCESS xyz;
Comandos Sequenciais Exemplo: • 1 | ENTITY sens_tes IS • 2 | PORT( a, b : IN BIT; • 3 | sa, sb : OUT BIT); • 4 | END sens_tes; • 5 | • 6 | ARCHITECTURE teste OF sens_tes IS • 7 | BEGIN • | abc: PROCESS (a) -- executado na alteração do valor de “a” • | BEGIN • | sa <= a; • | sb<=b; • | END PROCESS abc; • 13 | END teste; A linha 10 descreve uma parte combinacional A linha 11 descreve um elemento de armazenamento de valor sensível à variação da entrada “a” O circuito é não sintetizável, pois o elemento de memória descrito é ativo tanto na borda de subida quanto de descida de “a”, não havendo uma correspondência com circuitos reais.
Comandos Sequenciais • O Comando WAIT • Suspende a execução de um processo. A suspensão pode ser condicionada a três clausulas, ou a uma combinação delas: • WAIT ON: fornece um mecanismo equivalente à lista de sensibilidade em um processo. Neste caso, após o comando WAIT ON, o processo fica suspenso até a alteração de valor em um dos sinais da lista. • WAIT UNTIL: o processo é suspenso enquanto a expressão booleana contida no comando não for satisfeita • WAIT FOR: o processo é suspenso por um período de tempo, reiniciando no comando seguinte, após o período de tempo definido.
Comandos Sequenciais O Comando WAIT WAIT ON lista_de_sensibilidade; WAIT UNTIL expressão_booleana; WAIT FOR expressão_de_tempo; WAIT ON lista _de_sensibilidade UNTIL condição_booleana FOR expressão_de _tempo; WAIT ON sig_a, sig_b; -- Lista de sensibilidade WAIT UNTIL sig_c = ‘1’; -- Condição booleana WAIT FOR 100 ns; -- Expressão de tempo WAIT ON sig_d=‘0’ FOR 50 ns; -- Condição booleana por período de tempo