Segundo Trabalho de Sistemas Digitais

Documentos relacionados
Primeiro Trabalho de Sistemas Digitais

ISE com VHDL estrutural

Tutorial - Xilinx ISE

Introdução à Simulação em VHDL. Ney Laert Vilar Calazans

Laboratório de Eletrônica Digital Tutorial Quartus II (Procedimentos para Criação e Simulação de Projetos Digitais)

ALTERA Quartus II. Manual

Tutorial para criação de circuitos digitais em VHDL no Quartus Prime 16.1

VIVADO TUTORIAL 101: CADEADO DIGITAL

Laboratório sobre Implementação de Sistemas Digitais com HDLs Ferramentas de Captura e Validação

Tutorial para criação de circuitos digitais utilizando diagrama esquemático no Quartus Prime 16.1

Departamento de Engenharia Elétrica e de Computação EESC-USP. Guia de Projetos VHDL utilizando o QUARTUIS II. Profa. Luiza Maria Romeiro Codá

FPGA & VHDL. Tutorial

Introdução VHDL Parte 4 - Testbench

Introdução ao desenho de circuitos digitais usando Xilinx WebPACK 4.1 e linguagem ABEL

Produção de tutoriais. Suellem Oliveira

EPUSP PCS 2011/2305/2355 Laboratório Digital. Frequencímetro

Eletrônica Digital para Instrumentação. Herman Lima Jr.

UNIVERSIDADE FEDERAL DO PARANÁ SETOR DE CIÊNCIA E TECNOLOGIA ENGENHARIA ELÉTRICA

Criação de componentes no Proteus

Programação em Linguagem C

MSP430 Lab 02 Criar e Compilar um projeto

FPGA & VHDL. Tutorial Aula 1. Computação Digital

Plano de Aula 26/8/13. VHDL - Visão Geral. Obje%vos: VHDL - Visão Geral. Descrição de circuito digital em VHDL

Introdução ao Projeto de Sistemas Digitais com Dispositivos Programáveis

CONTROLE DE UM SERVO MOTOR

ISE com VHDL comportamental

LSCAD André Luiz junho ModelSim-Altera 6.6d

12/11/13. Obje%vos do laboratório. SST20707 Síntese de Sistemas de Telecomunicações. Síntese de máquinas de estado (FSM) Finite State Machine (FSM)

Microcontroladores: Programação em C

EPUSP PCS 2011/2305/2355 Laboratório Digital. Frequencímetro

PASSO A PASSO COMO CRIAR UM NOVO PROJETO EM SCHEMATIC NO SOFTWARE QUARTUS II CYCLONE IV

PSI-3451 Projeto de CI Lógicos Integrados. Aula 4

Suporte de funcionamento e interacção com o teclado

1 Práticas de Laboratório Construindo um Circuito TTL (Transistor-Transistor Logic) Introdução a ferramenta EDA Quartus II

Circuitos/Sistemas Integrados Digitais (CID/SID)

Produção de tutoriais. Suellem Oliveira

Tutorial Multisim. Página inicial do Multisim

Tutorial MAXPLUS II Altera Bruno Cozer Fev.2001

Para se criar um subtrator e somador, necessitaremos de três componentes, o Somador de 8 bits, o multiplexador e inversor.

Lógica Reconfigurável

Tutorial Xilinx 2 Baixando o Somador e Subtrator no FPGA. Ciência da Computação 5º Período

Eletrônica de Potência I Prof. André Fortunato rev. 1-11/2011

LABORG. Parte 1 Introdução à Simulação em VHDL. Ney Laert Vilar Calazans

GUIA DE IMPLEMENTAÇÃO DE CIRCUITOS NA PLACA DE DESENVOLVIMENTO:

Escola Politécnica da Universidade de São Paulo Departamento de Engenharia de Sistemas Eletrônicos - PSI. PSI Projeto de Sistemas Integrados

EPUSP PCS 2355 Laboratório Digital. Contadores em VHDL

Exercícios Referentes à Prova P1

Lógica Reconfigurável

Introdução à Computação

Revisão: Projeto de Processadores em VHDL

Exercícios de Laboratório 3

Open Day Bibliotecas ElipseX

Tutorial - CoDeSys - Sequencial Function Chart (SFC)

EPUSP PCS 2011/2305/2355 Laboratório Digital. Frequencímetro

ELETRÔNICA DIGITAL I

Sequência de passos de programação, gravação e configuração do kit DE0-Nano Altera.

Prática 2 Implementação de Circuitos Lógicos em FPGA

CRIANDO PERSONALIZAÇÕES/PATCHS DE APARELHOS (BLIBLIOTECAS)

TUTORIAL EXTRATOR DE DADOS CHEGADAS DE TURISTAS NÃO RESIDENTES AO BRASIL

Projeto de CI Semidedicados

Produção de tutoriais. Suellem Oliveira

Tutorial 132 CP DUO Configuração MODBUS Escravo

EPUSP PCS 3335 Laboratório Digital A. Um Circuito Digital

Produção de tutoriais. Suellem Oliveira

EPUSP PCS 2011/2305/2355 Laboratório Digital. Freqüencímetro

Produção de tutoriais. Suellem Oliveira

DISPOSITIVOS LÓGICOS PROGRAMÁVEIS - DLP. 18/04/2016 Prof. Alexandre - ELP1DLP1 / DEE

DEPARTAMENTO DE ENGENHARIA ELECTROTÉCNICA E DE COMPUTADORES INSTITUTO SUPERIOR TÉCNICO UNIVERSIDADE TÉCNICA DE LISBOA SISTEMAS DIGITAIS

Jclic Alfabeto Sonoro

SOLIDWORKS FloXpress, um dos produtos SOLIDWORKS Express que fazem parte de todas as versões do SOLIDWORKS.

Tutorial: Configuração do CLP Citrino

Lógica Reconfigurável

Universidade Federal de Santa Catarina Centro Tecnológico Departamento de Informática e Estatística Curso de Graduação em Ciências da Computação

Usando o Eclipse - Fundamentos. Professor Vicente Paulo de Camargo

QUARTUS II DESENVOLVIMENTO

Introdução ao VHDL. Circuitos Lógicos. DCC-IM/UFRJ Prof. Gabriel P. Silva. Original por Ayman Wahba

Tutorial: como funciona o SysBackup

Power Estimation FPGA ASIC

PSI-3451 Projeto de CI Lógicos Integrados

Revisão: Projeto e síntese de Circuitos Digitais em FPGA

FEDERAL UNIVERSITY OF RIO GRANDE DO SUL

Guia de instalação CF 6031

TABELA DO F/F. T Q n Q n+1

Departamento de Engenharia Electrotécnica e de Computadores Instituto Superior Técnico Universidade Técnica de Lisboa Sistemas Digitais

TREINADOR LÓGICO. O treinador lógico destina-se ao desenvolvimento de experiências com circuitos digitais em Laboratório Convencional.

Introdução ao Projeto de Sistemas Digitais com Dispositivos Programáveis

Tutorial SQL Server 2014 Express

TUTORIAL CONVERSÃO ARQUIVO DWG PARA SHP (Shapefile) UTILIZANDO SOFTWARE AUTOCAD MAP

REDES INDUSTRIAIS. TREINAMENTO ELIPSE E3 Capítulo 11

Tutorial sobre o uso da ferramenta de autoria A Ferramenta de Autoria - Célula

Introdução ao Projeto de Sistemas Digitais com Dispositivos Programáveis

Administração Central. Unidade do Ensino Médio e Técnico Cetec Capacitações São Paulo

Universidade Federal de Santa Catarina Centro Tecnológico Departamento de Informática e Estatística Curso de Graduação em Ciências da Computação

Sistemas Digitais Guia de Implementação de Circuitos na Placa de Desenvolvimento

Tutorial de Administração de sites do Portal C3

PCS3225. Sistemas Digitais II. Biestáveis em VHDL. Biestáveis em VHDL. Marcos A. Simplicio Jr.

EPUSP PCS 2011 Laboratório Digital I. Uma ULA Simples

DISPOSITIVOS LÓGICOS PROGRAMÁVEIS - DLP. 10/03/2017 Prof. Alexandre - ELP1DLP1 / DEE

Passos Iniciais para simulação de um projeto utilizando portas lógicas

Transcrição:

Segundo Trabalho de Sistemas Digitais Alunos: Márcio Teixeira, Louise Landi e Tharsus Proux. Professor: Mário Vaz Filho.

1 Introdução Tutorial de um Divisor de Frequências em VHDL 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.

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. Figura 3

A Figura 4 mostra a terceira parte do código que será a lógica de funcionamento do divisor de 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.

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. Figura 6

Cada component foi instanciado e teve seus pinos conectados de acordo com o planejamento 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.

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.

Apêndice 1 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 botões citados.

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. Figura 9