Buscar

Memória ROM, RAM e Arquivos em VHDL

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 18 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 18 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 18 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

LÓGICA PROGRAMÁVEL 
AULA 5 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Prof. Ederson Cichaczewski 
 
 
2 
CONVERSA INICIAL 
Nesta aula, abordaremos memória ROM, memória RAM, arquivos, 
geração de estímulos e testes em VHDL. 
A VHDL permite implementar, além de diversos circuitos digitais, 
elementos de armazenamento, e também acessar arquivos. 
Para a verificação da operação de um projeto é necessário realizar 
testes. Em VHDL é possível gerar formas de onda para estimular uma entidade 
e analisar os resultados. 
TEMA 1 – MEMÓRIA ROM EM VHDL 
É uma memória apenas de leitura. Portanto, não possui pino de 
habilitação de escrita. Pode ter um pino de habilitação do dado na saída. 
Os dados armazenados na memória ROM em VHDL são definidos em 
sua inicialização em um vetor. 
Possui um barramento de entrada de endereços e um outro de saída de 
dados. 
1.1 Exemplo prático: memória ROM 16x8 
Veja um exemplo de memória ROM com barramento de endereços de 4 
bits e barramento de dados de 8 bits: 
Figura 1 ‒ Diagrama de uma memória ROM 16x8 
 
A entrada "ce" (chip enable) habilita a saída de dados quando está em 
nível lógico baixo (0), ou deixa a saída em alta impedância (Z) quando está em 
nível lógico alto (1). 
A operação do ciclo de leitura é apresentada a seguir. 
 
 
 
3 
Figura 2 ‒ Diagrama de tempo da operação de leitura da memória ROM 16x8 
 
A descrição VHDL da memória ROM de 8 bits de dados e 16 endereços 
(barramento de 4 bits de endereços), usando vetor, é apresentada a seguir. 
Figura 3 ‒ Exemplo de descrição de memória ROM 16x8 
 
A organização da memória é estabelecida na linha 12, na declaração do 
tipo “arranjo_memoria”; o número de bits de dados é fixado em 8. 
O número de endereços é definido pela constante “dados” na linha 13, 
com 16 elementos. 
Como a posição do vetor é dada por um tipo inteiro ("NATURAL"), é 
necessário converter o tipo "UNSIGNED" do sinal “endereco” para "INTEGER", 
por meio da função “to_integer”. 
TEMA 2 – MEMÓRIA RAM EM VHDL 
É uma memória de escrita e leitura, e na descrição é baseada em vetor. 
Possui barramentos de dados separados para entrada e saída, além de 
um pino que identifica a operação como sendo de escrita ou de leitura. 
Também possui um pino de habilitação de escrita que opera por borda 
como uma entrada de clock. 
 
 
4 
2.1 Exemplo prático: memória RAM 8x4 
Veja a seguir um exemplo de memória RAM com barramento de 
endereços de 3 bits e barramento de dados de 4 bits. 
Figura 4 ‒ Exemplo de diagrama de uma memória RAM 8x4 
 
A entrada "we" identifica se a operação é de leitura ou de escrita. A 
entrada "ce" (chip enable) habilita a escrita na memória quando está em nível 
lógico baixo (0). A saída está sempre habilitada. 
A operação dos ciclos de escrita e de leitura é apresentada a seguir. 
Figura 5 ‒ Diagrama de tempo das operações de escrita e de leitura da 
memória RAM 8x4 
 
A escrita de um dado na memória ocorre na borda de subida do sinal 
"ce" com "we=0". 
A descrição VHDL da memória ROM de 4 bits de dados e 8 endereços 
usando vetor é apresentada a seguir. 
 
 
 
5 
Figura 6 ‒ Descrição da memória RAM 8x4 com barramentos de entrada e 
saída separados 
 
A organização da memória é estabelecida na linha 13, na declaração do 
tipo “arranjo_memoria”, e o número de bits de dados e de endereços são fixos. 
O sinal “memoria” é o objeto que contém as informações da memória. 
Como a posição do vetor é dada por um tipo inteiro, é necessário 
converter o tipo "UNSIGNED" do sinal “endereco” para "INTEGER", por meio 
da função “to_integer”. 
2.2 RAM com barramento de dados bidirecional 
O mesmo barramento é utilizado para escrever ou ler dados da 
memória. 
2.2 Exemplo prático: memória RAM 16x8 bidirecional 
Figura 7 ‒ Exemplo de diagrama de uma memória RAM com barramento de 
dados bidirecional 
 
 
 
6 
A descrição VHDL da RAM 16x8 bidirecional é apresentada a seguir. 
Figura 8 ‒ Descrição de uma memória RAM 16x8 com barramento de dados 
bidirecional 
 
A operação dos ciclos de escrita e leitura é apresentada a seguir. 
Figura 9 ‒ Diagrama de tempo das operações de escrita e leitura da memória 
RAM 16x8 com barramento de dados bidirecional 
 
Quando "wr_ena=1", a escrita está habilitada. O dado é armazenado na 
borda de subida de "clk". 
Quando "wr_ena=0", nenhuma mudança ocorre nos dados 
armazenados. 
 
 
7 
TEMA 3 – ARQUIVOS EM VHDL 
Os arquivos em VHDL permitem a troca de dados entre uma entidade e 
o mundo exterior. 
As operações com arquivos não são sintetizáveis; elas servem apenas 
para teste e validação de entidades, como uma opção de origem para 
estímulos a serem aplicados em uma simulação. 
O tipo "arquivo" é usado para a declaração de objetos. 
A leitura e a escrita em objetos são feitas por meio de procedimentos. 
Os valores são lidos ou armazenados de modo sequencial, identificando-
se o final do arquivo por uma marca. 
3.1 Exemplo: declaração de um tipo “arquivo” 
A seguir são apresentados exemplos da descrição de declaração de um 
tipo "arquivo". 
Figura 10 ‒ Exemplos de declaração de um tipo "arquivo" 
 
Um objeto do tipo “arquivos_de_tipo_x” representa um arquivo contendo 
elementos da categoria “tipo_contido”. 
3.2 Arquivos binários 
Considerando a versão VHDL 1993, a abertura do arquivo ocorre na 
declaração de um objeto do tipo "arquivo" ("FILE"). 
Declaração: 
 modo: “IN” para arquivo de leitura e “OUT” para arquivo de escrita; 
 operação: “OPEN” explicita a abertura de arquivo. 
A seguir são apresentados exemplos de códigos para leitura e escrita 
em arquivo binário. 
 
 
8 
Figura 11 ‒ Exemplos de descrição VHDL de arquivos para leitura e escrita 
 
Não se esqueça também de que operações implícitas são subprogramas 
implicitamente declarados após uma declaração de um tipo "arquivo". 
A seguir são apresentados exemplos de códigos das operações 
implícitas para arquivos. 
Figura 12 ‒ Operações implícitas para arquivos em VHDL 
 
São valores para o campo “modo” do procedimento "FILE_OPEN": 
"READ_MODE", "WRITE_MODE", "APPEND_MODE". Os valores retornados 
pelo campo “status” do procedimento "FILE_OPEN" são: "OPEN_OK", 
"STATUS_ERROR", "NAME_ERROR", "MODE_ERROR". 
O arquivo pode ser fechado de duas formas: após o término da 
simulação ou por meio do procedimento "FILE_CLOSE". 
3.3 Exemplo prático: abertura de arquivo binário para escrita 
Veja na figura a seguir um exemplo de descrição para abertura de 
arquivo binário para escrita sendo fechado após o término da simulação. 
 
 
 
9 
Figura 13 ‒ Exemplo de descrição VHDL da abertura de arquivo binário para 
escrita 
 
3.4 Arquivos de texto (pacote TEXTIO) 
Esses arquivos podem ser manipulados por um editor de texto, e 
permitem uma interpretação direta das informações. Arquivos no formato 
"texto" possibilitam a troca de informações entre aplicativos de diferentes 
fornecedores. 
São de maior tamanho e execução mais lenta em relação aos arquivos 
binários. Além disso, são compostos por linhas com uma sequência de 
caracteres. Cada linha tem ao seu final um caractere de retorno de carro. 
Para tornar o pacote visível à entidade, é necessário incluir a cláusula 
“USE STD.TEXTIO.ALL”. 
Os tipos definidos no pacote TEXTIO são apresentados a seguir. 
Figura 14 ‒ Tipos de dados do pacote TEXTIO 
 
 O tipo “LINE” é um ponteiro para um valor do tipo “STRING”. As 
operações de escrita e de leitura de dados em arquivos são executadas com 
objetos definidos segundo esse tipo. O tipo “TEXT” é um tipo de arquivo 
composto por elementos do tipo “STRING”. 
Objetos do tipo “LINE” são empregados nas operações com arquivos no 
formato "texto". As operações de leitura e de escrita de dados são executadas 
em duas etapas. Para o armazenamento de uma informação em um arquivo, 
 
 
10 
deve-se primeiro transferir um ou mais dados para um objeto do tipo “LINE”. 
Uma vez transferidosos valores, o conteúdo do objeto tipo “LINE” é 
armazenado no arquivo. De maneira semelhante, na operação de leitura os 
valores são transferidos para um objeto do tipo “LINE”, e posteriormente os 
dados são extraid́os do objeto. 
O tipo “SIDE” é empregado nos procedimentos de escrita para definir a 
justificação dos dados no campo de escrita. O valor “RIGHT” indica que o valor 
está alinhado pelo lado direito do campo, e o valor “LEFT”, pelo lado esquerdo. 
O subtipo “WIDTH” é utilizado para especificar o tamanho do campo 
empregado na escrita de um dado. 
Os procedimentos de escrita e leitura são apresentados a seguir. 
Figura 15 ‒ Descrição VHDL dos procedimentos de escrita e de leitura em 
arquivo "texto" 
 
Os identificadores “linha_wr” e “linha_rd” são objetos do tipo "LINE". 
O procedimento “WRITE” insere o valor de “dado” no objeto “linha_wr”. 
O procedimento “WRITELINE” escreve a informação contida no objeto 
“linha_wr” no arquivo. 
O procedimento “READLINE” executa a leitura em arquivo e retorna com 
a informação no objeto “linha_rd”. O procedimento “READ” extrai um dos 
valores presentes no objeto “linha_rd”, e retorna com o valor em “dado”. 
Um objeto tipo “LINE” pode conter vários valores, pois esse tipo é um 
ponteiro para um valor “STRING”. A cada chamada do procedimento “WRITE”, 
um novo dado é inserido no objeto tipo “LINE”, e o ponteiro é movido para uma 
nova posição. A chamada do procedimento “WRITELINE” causa o retorno do 
ponteiro à posição inicial, e os valores contidos no objeto tipo “LINE” são 
perdidos. De modo semelhante, a cada chamada do procedimento “READ”, um 
dado é removido do objeto tipo “LINE”, e o ponteiro é deslocado. 
Os procedimentos “READ” e “WRITE” definidos no pacote “TEXTIO” 
sobrecarregam os procedimentos de mesmo nome definidos na linguagem 
para arquivos binários. Esses procedimentos do pacote “TEXTIO” são 
 
 
11 
invocados quando um objeto do tipo “LINE” é empregado no campo identificado 
por “linha_wr” ou “linha_rd”. Em ambos os procedimentos, “dado” pode ser do 
tipo “BIT”, “BIT_VECTOR”, “BOOLEAN”, “CHARACTER”, “INTEGER”, “REAL”, 
“STRING” e “TIME”. 
Um exemplo de descrição VHDL com operações de escrita e de leitura 
em um arquivo "texto" é apresentado a seguir. 
Figura 16 ‒ Exemplo de descrição VHDL de operações de escrita e de leitura 
em arquivo "texto" 
 
Esse código executa a escrita de uma linha contendo os caracteres de 
“a” a “z” em um arquivo. Após o armazenamento, o arquivo é fechado; 
posteriormente ele é aberto novamente no modo de leitura para recuperação 
da informação armazenada. 
Para leitura da informação no arquivo, o procedimento “READLINE” é 
executado uma única vez, sem teste de final de arquivo. Os valores 
recuperados são extraídos um a um por meio de um laço. 
A construção “WAIT FOR” foi incluid́a para permitir a visualização dos 
resultados no sinal “dado”. 
TEMA 4 – GERAÇÃO DE ESTÍMULOS EM VHDL 
Para testar um projeto em descrição VHDL é possível aplicar ao sistema 
sob teste uma série de estímulos e verificar o resultado. 
 
 
12 
Pode-se criar uma entidade específica que execute as operações de 
teste por meio da geração de estímulos. 
Os estímulos permitem detectar inconsistências de projeto na fase de 
simulação. 
O ponto de partida é a geração de estímulos que simulem as condições 
de entrada da descrição sob teste. 
Isso é possível por meio da ferramenta de simulação. 
Uma abordagem que torna o teste independente da ferramenta de 
simulação é gerar as formas de onda necessárias por meio de uma descrição e 
sintetizá-las. 
4.1 Sinais aleatórios 
É possível gerar sinais em região de código concorrente por meio da 
cláusula "AFTER" e em região de código sequencial, por meio do comando 
"WAIT", conforme a descrição a seguir. 
Figura 17 ‒ Exemplo de descrição VHDL para geração de sinal aleatório 
 
As duas construções sintetizam a mesma forma de onda, conforme 
vemos a seguir. 
 
 
 
13 
Figura 18 ‒ Diagrama de tempo do sinal aleatório gerado 
 
No caso da atribuição de sinal que emprega a cláusula “AFTER”, são 
indicados os valores e os correspondentes atrasos na transferência dos valores 
para o sinal. No caso da construção que emprega “WAIT”, os intervalos de 
tempo são acumulados por cada comando, e a transferência do valor para o 
sinal ocorre na execução do comando “WAIT”. 
Na primeira atividade do processo “abc”, o valor “01” é agendado para 
ser transferido para “s1” na próxima iteração dos comandos concorrentes. Isso 
ocorre em “t=0 ns”, na construção “WAIT FOR 20 ns”, e o processo é suspenso 
por 20 ns. No instante “t=20 ns”, o valor “11” é agendado para ser transferido 
para “s1”, e na execução da construção “WAIT FOR 50 ns”, o valor é 
transferido. De modo semelhante, ocorrem as outras transferências de valores. 
4.2 Sinais periódicos 
Um problema muito frequente em operações de teste é a geração de 
sinais periódicos no controle de circuitos sińcronos, como registradores, 
contadores, máquinas de estado etc. 
Abordagens utilizam regiões de código concorrente ou sequencial para a 
geração de sinais periódicos, sempre empregando a cláusula "AFTER". 
A descrição VHDL para a geração de um sinal periódico é apresentada a 
seguir. 
 
 
 
14 
Figura 19 ‒ Descrição VHDL de um sinal periódico 
 
As formas de onda periódicas geradas são apresentadas a seguir. 
Figura 20 ‒ Diagrama de tempo com os sinais periódicos gerados 
 
Na forma de onda do sinal “s0”, o intervalo de tempo em nível alto é 
igual ao intervalo de tempo em nível baixo, e o período é definido pelo genérico 
“t_ck”. A forma de onda dos sinais “s1”, “s2” e “s3” não é simétrica. No caso 
dos sinais “s1” e “s2”, os intervalos de tempo são definidos pelos genéricos 
“t_alto” e “t_baixo”. A forma de onda do sinal “s3” é gerada pelo deslocamento 
do sinal “dado”, que contém o padrão de valores que “s3” pode assumir. A cada 
intervalo de tempo definido pelo genérico “t_rol”, a informação armazenada em 
“dado” sofre uma rotação, e o valor do elemento de posição mais à esquerda 
do vetor é transferido para “s3”. Essa técnica é muito útil para a geração de 
padrões complexos de forma periódica. 
 
 
 
15 
TEMA 5 – TESTES EM VHDL 
A execução do teste de uma descrição pode empregar diferentes 
métodos, e a escolha da abordagem mais adequada deve considerar aspectos 
como: 
 facilidade de elaboração; 
 compatibilidade entre ferramentas de diferentes fornecedores; 
 tempo de execução; 
 necessidade de armazenar resultados etc. 
O uso dos recursos da linguagem de descrição de hardware é uma 
maneira eficiente de realizar testes em uma entidade de projeto. 
5.1 Teste usando constantes para geração de estímulos 
É uma maneira simples de realizar um teste. Os valores são 
armazenados em uma ou mais constantes do tipo vetor. 
Um processo controlado por comandos “WAIT” realiza a aplicação dos 
estímulos nos instantes desejados. 
É necessário recompilar a descrição a cada alteração de estímulos. 
5.2 Exemplo prático: teste de um registrador tipo "D" 
O diagrama de blocos do teste de um registrador tipo "D" com 
inicialização assíncrona é apresentado a seguir. 
Figura 21 ‒ Diagrama de blocos do teste de um registrador tipo "D" 
 
A descrição VHDL do teste do registrador tipo "D" é apresentada a 
seguir. 
 
 
16 
Figura 22 ‒ Descrição VHDL do teste do registrador tipo "D" 
 
A entidade sob teste é um registrador tipo "D" de 4 bits com inicialização 
assíncrona. 
Sua descrição VHDL é apresentada a seguir. 
Figura 23 ‒ Descrição VHDL da entidade sob teste: um registrador de 4 bits 
 
A sequência de estímulos para o teste é apresentada a seguir. 
 
 
17 
Figura 24 ‒ Diagrama de tempo da sequência de estímulos para teste do 
registrador 
 
Doze estiḿulos de teste são propostos na constante “vetores”.Essa 
constante é um vetor composto de elementos do tipo “RECORD”, em que cada 
elemento contém os estiḿulos que devem ser aplicados e o resultado 
esperado. A aplicação dos estiḿulos é definida pelo laço entre as linhas 25 e 
31, que percorre todos os elementos do vetor. A cadência da aplicação é 
definida pelo comando “WAIT” no interior do laço. Note que ele foi inserido para 
permitir a observação das formas de onda na simulação; poderia ser removido 
se a visualização não fosse necessária. 
A operação de teste proposta na descrição verifica a ocorrência de 
erros. O comando “ASSERT” verifica se os valores obtidos, “q”, e os valores 
corretos, “q_td”, são iguais. Se há discordância entre os valores é gerada uma 
mensagem de erro. 
Uma mensagem do erro introduzido no 11o estímulo, para verificação da 
condição de falha, é enviada à janela do simulador, conforme vemos a seguir. 
Figura 25 ‒ Mensagem do erro induzido no teste 
 
FINALIZANDO 
Nesta aula, vimos o projeto em VHDL de uma memória ROM, uma 
memória RAM, arquivos, geração de estímulos e testes. 
A compreensão do conteúdo desta aula é fundamental para que 
possamos dar continuidade do conteúdo da disciplina. 
 
 
 
18 
REFERÊNCIAS 
D’AMORE, R. VHDL: descrição e síntese de circuitos digitais. 2. ed. Rio de 
Janeiro: LTC, 2012. cap. 12, 13 e 15. 
PEDRONI, V. A. Eletrônica digital moderna e VHDL. Rio de Janeiro: Elsevier, 
2010. cap. 9.

Continue navegando