• Nenhum resultado encontrado

Segundo Trabalho de Sistemas Digitais

N/A
N/A
Protected

Academic year: 2021

Share "Segundo Trabalho de Sistemas Digitais"

Copied!
9
0
0

Texto

(1)

Segundo Trabalho de Sistemas Digitais

Alunos: Márcio Teixeira, Louise Landi e Tharsus Proux.

Professor: Mário Vaz Filho.

(2)

1 – Introdução

O objetivo deste trabalho é o projeto de um divisor de frequências em linguagem VHDL comportamental capaz de dividir frequências acima de 50 MHz, com simulação do projeto no software ISE e implementação em uma FPGA Spartan3AN Starter Kit.

2 – Planejamento

Um divisor de frequências funciona da seguinte maneira: sua entrada é um pulso e sua saída é também um pulso mas com frequência menor do que o pulso de entrada. Entretanto, para um uso mais genérico, sua implementação necessita de um gerenciador de clock para poder gerar frequências acima de 50 MHz.

O projeto em VHDL será composto por 2 módulos. Um módulo será chamado de clk_div e ele é o nosso divisor de frequências de fato. O outro módulo é chamado de base_tempo e é o módulo de implementação do clk_div. No base_tempo será incluído o dcm1, um gerenciador de clock e a saída do dcm1 será um sinal interno que irá à entrada do clk_div. As entradas e saídas de base_tempo serão dadas, respectivamente, por dmc1 e clk_div. Na Figura 1 foi ilustrado a lógica de funcionamento do projeto.

Figura 1

A entrada de base_tempo será um pulso de clock denominado de clk. As saídas de base_tempo serão ligadas a um LED e a um osciloscopio. A entrada e a saída de dcm1 foram denominadas de CLKIN_IN e CLKFX_OUT respectivamente. A entrada e a saída de clk_div foram denomidas de clk_in e div_out respectivamente.

3 – Criação dos Códigos Fonte em VHDL

Para criar os códigos fontes foi utilizado o Software ISE da empresa Xilinx. Após iniciado o software, é necessário criar um novo projeto. A Figura 2 corresponde a primeira janela que abre. Ao se criar um novo projeto no ISE é necessário escolher uma pasta que será a workspace. Nela, todos os arquivos necessários para o funcionamento da simulação e implementação do projeto serão salvos. Foi escolhida a pasta tpm que é a pasta para arquivos temporários utilizada no laboratório e com isso, o limite de dados que podem ser armazenados não será estourado em nenhuma conta dos alunos que participaram desde trabalho. Após a escolha da workspace, é necessário dar um nome ao projeto que será base_tempo, o mesmo nome do módulo principal. Além disso, é escolhido o tipo do módulo de maior hierarquia (base_tempo) que é do tipo HDL. Na janela seguinte, escolhe-se a plataforma de desenvolvimento (Evaluation Development Board) que é a Spartan3AN Starter Kit.

(3)

Figura 2

Após criado o novo projeto, iremos criar os códigos contes. Para isso iremos na aba Project > New

Source. Na nova janela é escolhido VHDL Module e o nome do módulo é clk_div. Na janela

seguinte, é possível criar as portas do módulo só que essa criação será feita mais adiante. Após criado o módulo clk_div, serão criadas as suas entradas e saídas, além da sua lógica de funcionamento. Observações sobre a estrutura de um código VHDL encontram-se no Apêndice 1. A Figura 3 mostra o início do código que é uma documentação do projeto. É importante a realização de uma documentação adequada com informações a respeito do projeto e com comentários ao longo do código para facilitar uma leitura futura de fácil entendimento. Além disso, é mostrado o início do código de fato. A primeira parte é a respeito de quais bibliotecas VHDL serão usadas e a segunda parte é a criação da entity clk_div. Na entity serão declaradas as constantes, entradas e saídas do módulo clk_div.

(4)

frequências. Quatro sinais internos são usados como parte da lógica. Dois serão contadores e serão os responsáveis por informar o momento de mudança dos valores de cada saída, determinando assim a frequência de saída de acordo com o valor máximo assumido. Os outros dois serão sinais que sofrerão alteração ao longo do funcionamento do divisor e seus valores serão direcionados às saídas de clk_div, pois nenhuma saída pode ser diretamente manipulada em VHDL.

A lógica da saída LED é dada pelo “primeiro circuito” e funciona da seguinte maneira: a cada subida de clk_in (ou seja, a cada subida do clock de entrada) o contador será comparado com um número, se o contador for menor que esse número, então o sinal interno de saída manterá o seu valor lógico e o contador será incrementado uma unidade. Se o contador for maior ou igual ao mesmo número, então o sinal interno de saída receberá seu valor negado e o contador será redefinido como sendo igual a um. Ou seja, a ideia é ir incrementando o contador de forma a determinar quantas vezes o clock subiu e a partir daí escolher em quantas vezes se quer dividir sua frequência ao comparar o valor do contador com um número. Nesse caso o tempo que LED permenece aceso é igual ao tempo que ele permenace apagado, pois o sinal interno de saída muda sempre para o seu valor lógico negado.

A lógica da saída OSCILOSCOPIO é dada pelo “segundo circuito” e funciona da mesmo maneira que o “primeiro circuito”, com a exceção da comparação do contador ser feita na descida do clock. Além disso, o sinal interno de saída tem o tempo em nível lógico alto diferente do tempo em nível lógico baixo, entretanto a frequência de saída não será afetada.

Figura 4

Na FPGA que será implementado o projeto, o clock padrão dela é de 50MHz, ou seja, o período é de 20ns. No circuito do LED foi escolhido o valor máximo do contador como sendo 25 milhões, pois assim a frequência do LED será de 1 Hz. No circuito do OSCILOSCOPIO o valor máximo do contador será determinado mais adiante.

Finalizado o módulo clk_div, o módulo base_tempo será criado e será de uma hierarquia superior ao clk_div e nele iremos colocar o módulo dcm1. O processo de criação é o mesmo do clk_div, mudando apenas o nome do módulo. A Figura 5 mostra o início do código da mesma forma que a Figura 4. A primeira parte são os comentários seguida da declaração das bicliotecas utilizadas e da entity base_tempo e suas constantes, entradas e saídas.

(5)

Figura 5

Cada attribute é um sinal que será implementado na FPGA, seja ele um sinal de saída ou entrada do módulo. LOC é uma palavra e receberá os valores entre aspas em rosa que determinará quais os pinos da FPGA que serão utilizados. FAST é uma palavra usada para fazer o sinal que vai para o osciloscopio sair por um driver de alta corrente para operar em alta velocidade pelo pino Y18.

Na Figura 6, é mostrada a lógica de base_tempo. Dentro de architecture foram declarados os component clk_div e dcm1. Ainda não foi criado o módulo dcm1 com core generator, para isso será seguido o tutorial do ISE. Por hora será terminado o módulo base_tempo para depois criar o

dcm1. Um sinal interno, clk_int, será usado para conectar o clock de saída do dcm1 com o clock de

entrada do clk_div. A configuração da lógica é bem simples, serão “conectados” os pinos de cada módulo corretamente.

(6)

feito. As entradas dos dcm1 são as entradas do base_tempo e a saída do dcm1 é a entrada do

clk_div. As saídas do clk_div são as saídas do base_tempo. A saída locked é apenas um indicativo

da sincronia do dcm1. Há um atraso no funcionamento do base_tempo, pois o dcm1 leva um tempo até sincronizar sua saída com a entrada e sua saída é apenas liberada quando a sincronia está completa. A saída locked quando vai a nível lógico 1 indica que o sincronismo está completo e o

base_tempo começará a dividir a frequência de entrada. A entrada reset será mantida fixa em nível

lógico 1, pois o foco desse trabalho é apenas o funcionamento da lógica do circuito divisor de frequência. O valor máximo para o contador do circuito do OSCILOSCOPIO foi escolhido como quatro nesse trabalho.

Para criar o módulo dcm1 será seguido o tutorial do ISE: 1. Em Project Navigator, selecione Project > New Source.

2. Na nova janela, selecione IP (CoreGen & Architecture Wizard) source e digite dcm1 para o nome do módulo.

3. Clique em Next.

4. Na janela Select IP, selecione FPGA Features and Design > Clocking > Spartan-3E,

Spartan-3A > Single DCM_SP.

5. Clique em Next, e clique em Finish. O Clocking Wizard está preparado. 6. Na janela Architecture Wizard Setup, selectione OK.

7. Na janela General Setup, verifique que as portas RST, CLK0 e LOCKED estão selecionadas. 8. Selecione a porta CLKFX.

9. Digite 50 e selecione MHz para a Input Clock Frequency. 10. Verifique as seguintes configurações:

• Phase Shift: NONE

• CLKIN Source: External, Single • Feedback Source: Internal • Feedback Value: 1X

• Use Duty Cycle Correction: Selecionado 11. Clique no botão Advanced.

12. Selecione Wait for DCM lock before DONE Signal goes high. 13. Clique em OK.

14. Clique em Next, e depois novamente em Next.

15. Selecione Use output frequency e digite 50 no local adequado e selecione MHz. 16. Clique em Next, e depois clique em Finish.

O módulo dcm1 foi criado e seu component já foi declarado e instanciado no código do

base_tempo. O tutorial ensina como conseguir as declarações mas nesse trabalho elas já foram

fornecidas. Todos os códigos já foram criados e seus módulos conectados mas antes de implementar o projeto na FPGA é necesário simular o projeto para a verificação de possíveis erros na lógica.

4 – Simulação

A simulação do projeto é feita no ISim que é a ferramenta utilizada pelo ISE para simulações. Instruções de como simular um projeto no ISE encontram-se no Apêndice 2. Para realizar a simulação será forçado um clock em clk 50 MHz de frequência que começa em nível lógico zero. No reset será forçado uma constante de valor 0. O tempo total de duração da simulação será de 4 us. A Figura 7 mostra o resultado obtido. Nessa simulação, foi feita uma divisão de frequência por 25 na saída do LED e uma divisão por 5 na saída do OSCILOSCOPIO.

(7)

Figura 7

É possível perceber que o período do LED está com o valor de 1000 ns, ou seja, para se conseguir uma período de 1 segundo (frequência de 1 Hz) é só multiplicar o número máximo do contador do “primeiro circuito” do clk_div por 1000000 (e assim será igual a 25000000). Essa simulação mostra a eficiência dos “circuitos” do clk_div e nos dá garantia de funcionamento da lógica desenvolvida. Após simulado o projeto e com um resultado positivo, será feita a implementação do projeto na FPGA.

5 – Implementação na FPGA

A implementação do projeto será feita usando a ferramenta Impact do ISE. Após feita a síntese e gerado o bitstream, o Impact será aberto com um duplo clique em cima de Configure Target

Device. Após aberta a janela do Impact as seguintes instruções foram realizadas:

1. Duplo clique em Boundary Scan

2. Clique com o botão direito na área branca aberta e selecione Initialize Chain 3. Abra/selecione o arquivo base_tempo.bit

4. Na próxima janela clique em Byspass

5. Clique com o botão direito em cima do “chip” que ficou verde e selecione Configure FPG only A configuração da FPGA está completa e o projeto funciona de acordo com o planejado. O LED pisca numa frequência de 1 Hz (meio segundo aceso e meio segundo apagado) e a saída para teste com um OSCILOSCOPIO está funcionando.

6 – Conclusões

A utilização do VHDL comportamental para a implementação de um circuito divisor de frequências foi de fácil implementação e gerou o resultado esperado. Seu entendimento e sua lógica de utilização são simples e demandam pouco tempo para conseguir entender seu mecanismo de funcionamento.

(8)

Um codigo em VHDL pode ser estruturado de várias maneiras e há inúmeras funções disponíveis. Nesse trabalho o conhecimento necessário de VHDL é básico e será feito um panorama geral e simplificado.

As primeiras declarações do código VHDL são library e use. Elas permitem a utilização de um package. Um package de VHDL contém subprogramas, definições de constantes, e/ou definições de tipo para ser usado através de um ou mais sistemas. Cada package contém uma “seção de declaração”, na qual o subprograma disponível (i.e. exportável), constantes e tipos são declarados, e um “corpo do package”, no qual as implementações do subprograma são definidas, juntas com qualquer constante ou tipos usados internamente. A seção de declaração representa a porção do package que é “visível” ao usuário do package. A implementações de fato das subrotinas no package não são tipicamente do interesse do usuário.

A segunda declaração é a entity. Essa é a parte principal do projeto, é a interface do Sistema que descreve as entradas e saídas. Composta de duas partes: parameters e connections. Parameters refere-se aos parâmetros, exemplo largura de barramento, são declarados como generics. Connections por sua vez, refere-se como ocorre a transferência de informações, são declarados como ports. O nome de uma entity deve identificar o sistema, podendo usar letras e números, porém deve iniciar por uma letra.

A terceira declaração é a architecture.

A quarta declaração é process. Um process sequencial e independente representa o comportamento de uma parte do sistema. O corpo do process é uma lista sequencial de declarações. A sequência de declarações no process é executada em ordem, começando pela primeira. Depois da última declaração do process ser executada, o process é repetido desde a primeira declaração e continua a se repetir até ser suspenso. Se a lista de sensibilidade opcional é dada, uma wait on … declaração é inserida depois da última declaração sequencial, causando a suspenção do processo naquele ponto até que ocorra um evento em algum dos sinais na lista, nessa hora o process é reexecutado com a primeira declação no process.

Uma função da library usada é a if/else. E como o próprio nome sugere é utilizada para realizar comparações.

Um módulo VHDL é um arquivo com contém o código VHDL como um todo.

Com prática a organização de um código VHDL se mostrará de fácil estruturação, pois seu mecanismo de funcionamento é simples, porém muito poderoso e abrangente.

Apêndice 2

Para se realizar uma simulação no ISE é utilizada a ferramenta do ISE chamada ISim. Para isso é necessário mudar o modo view (que está localizado na barra de ferramentas logo acima do esquemático de hierarquia) de implementation para simulation. Depois dê um clique em cima de do processo de maior hierarquia (base_tempo) e em process dê um duplo clique em Behavioral

Check Syntax. Se não ocorrem erros e a sintaxe estiver correta, dê um duplo clique em Simulate Behavioral Model e o ISim será aberto em uma nova janela. Na Figura 8 estão localizados os

(9)

Figura 8

Toda vez que uma nova simulação for ser executada, é necessário reiniciar o status do simulador. Isso é feito clicando no botão restart (seta mais a esquerda das três). O tempo de execução da simulação é determinado numa caixa do lado direito do botão restart. O botão com uma seta e uma ampulheta inicia a simulação e essa terá a duração do tempo determinado pelo usuário. Para forçar um clock ou um valor constante em uma entrada clique com o botão direito em cima da entrada desejada (i.e. reset ou clk) e selecione o opção de interesse. Uma janela de configuração abrirá e ao término da configuração clique em OK. A Figura 9 mostra a tela inicial do ISim e nela estão localizados os itens citados anteriormente.

Referências

Documentos relacionados

No entanto, maiores lucros com publicidade e um crescimento no uso da plataforma em smartphones e tablets não serão suficientes para o mercado se a maior rede social do mundo

Basílica de Nossa Senhora do Rosário de Fátima Domingo XXX do Tempo Comum.

patula inibe a multiplicação do DENV-3 nas células, (Figura 4), além disso, nas análises microscópicas não foi observado efeito citotóxico do extrato sobre as

Neste estudo foram estipulados os seguintes objec- tivos: (a) identifi car as dimensões do desenvolvimento vocacional (convicção vocacional, cooperação vocacio- nal,

Como parte de uma composição musi- cal integral, o recorte pode ser feito de modo a ser reconheci- do como parte da composição (por exemplo, quando a trilha apresenta um intérprete

libras ou pedagogia com especialização e proficiência em libras 40h 3 Imediato 0821FLET03 FLET Curso de Letras - Língua e Literatura Portuguesa. Estudos literários

5 “A Teoria Pura do Direito é uma teoria do Direito positivo – do Direito positivo em geral, não de uma ordem jurídica especial” (KELSEN, Teoria pura do direito, p..

Sem esquecer a Fraude Fiscal, analisemos também um pouco do crime de branqueamento, art. Em crónica publicada no Diário do Minho, em 1 de Dezembro de 2010, Cultura, era