Tutorial do Max Plus II Baseline

Transcrição

Tutorial do Max Plus II Baseline
Tutorial do Max Plus II Baseline
Thiago Valentin de Oliveira
10/08/2010
1
Baixando, Licenciando e Instalando o Software
O primeiro passo é adquirir o software Max Plus II com uma licença. Isso pode ser feito seguindo os passos
abaixo.
• Acesse o site http://www.altera.com/maxplus2-student e clique em ‘Get Licenses’.
• No final da página clique em ‘MAX+PLUS II Software for Students and Universities’.
• Escolha uma versão (de preferência a 10.2) e clique em ‘Continue’.
• Abra o prompt de comando do MS-DOS e digite ‘dir /p’. O número de série do seu disco rı́gido será
mostrado. Anote-o.
• Preencha o formulário e o questionário e conclua o pedido de licença.
• Clique no link fornecido e em ‘Download MAX+PLUS II Baseline’. Baixe e instale o arquivo ‘baseline10 2.exe’.
• Você deve verificar em qual pasta do seu disco rı́gico foi instalado o Max Plus II Baseline pois a licença
será enviada para o seu email e você deverá baixá-la e colocá-la na mesma pasta que o Max PLus II
Baseline. O nome do arquivo é ‘license.dat’.
• Abra o ‘Painel de Controle’ e vá na seção ‘Sistema’. Clique em ‘Avançado’ e vá em ‘Variáveis de Ambiente’.
• Crie uma nova variável de ambiente com o nome ‘LM LICENSE FILE’ e valor ‘C:\ <NOME DO DIRETÓRIO> license.dat’ e confirme a operação. Isso finaliza o processo de instalação e autenticação do
software Max Plus II Baseline. Agora basta abri-lo e mãos à obra!
2
Introdução
O software Max Plus II Baseline da Altera nos oferece uma grande facilidade para trabalhar com descrição de
circuitos. Basicamente, devemos escrever um código em VHDL, que será compilado pelo programa. Obtendo
êxito, podemos simular o resultado através de formas de onda, verificando, assim, a validade da implementação
do circuito descrito em VHDL. Finalmente, se tudo estiver correto, fazemos a programação descrita no chip
disponı́vel (usando uma FPGA).
Todos esses passos serão descritos sucintamente à seguir. Em paralelo, um exemplo de código em VHDL será
utilizado para mostrar o funcionamento do programa, bem como algumas caracterı́sticas intrı́nsecas do mesmo
que serão muito úteis em nossas simulações. Utilizaremos como exemplo um circuito que realiza a operação
lógica OR entre dois bits de entrada (A e B), cuja saı́da é o bit S1; e, também, a operação lógica AND bit a bit
entre dois vetores de 4 bits (C e D), cuja saı́da é o vetor S2.
3
3.1
Desenvolvendo um Projeto
Iniciando o Programa
Verifique em que local foi instalado o programa e execute-o. O arquivo de execução tem nome ‘MAX+plus
II 10.2 BASELINE’. A Figura 1 mostra a janela principal do programa, após este ser carregado.
1
Figura 1: Tela principal
Clique em ‘File’ → ‘New...’ na barra de ferramentas no topo da página. Selecione a opção ‘Text Editor File’
e clique em ‘OK’. Uma janela branca será aberta e nela deve se digitar o código em VHDL do circuito que
desejamos implementar.
3.2
Escrevendo o Código em VHDL
O exemplo em questão do código em VHDL segue abaixo.
-- Implementacao das funcoes logicas (A or B) e (C[3..0] and D[3..0])
library IEEE;
use IEEE.std_logic_1164.all;
entity Exemplo is
port (
A,B: in std_logic;
C,D: in std_logic_vector (3 downto 0);
S1: out std_logic;
S2: out std_logic_vector (3 downto 0)
);
end Exemplo;
architecture Comportamento of Exemplo is
begin
S1 <= A or B;
S2 <= C and D;
end Comportamento;
Para salvar o arquivo, clique em ‘File’ → ‘Save’. Escolha como nome do arquivo o mesmo utilizado para
a entidade do programa. Utilize como extensão do arquivo (Automatic Extension) ‘.vhd’, conforme mostra a
Figura 2. Escolha o diretório que desejar e salve o arquivo. Uma dica que pode ser útil: não utilize como
diretório padrão para seus arquivos .vhd um path que contenha caracteres especiais, como acentos. Isso gerará
erro na hora de salvá-lo. O atalho (CTRL + S) também pode ser utilizado para salvar. Uma vez salvo um
2
programa, o atalho não abrirá nenhuma janela nova ao ser executado, apenas irá salvar o programa, atualizandoo; para abrir um arquivo salvo, clica-se em ‘File’ → ‘Open’ (atalho CTRL + O). Fique atento para a extensão
do arquivo que desejar abrir.
Figura 2: Salvando o arquivo texto
3.3
Compilação
O primeiro passo agora é selecionar o nosso programa como arquivo atual. Isso pode ser feito clicando em
‘File’ → ‘Project’ → ‘Set Project to Current File’, que é equivalente ao atalho (CTRL + SHIFT + J).
Para compilar o programa, clique em ‘File’ → ‘Project’ → ‘Save & Compile’, que equivale ao atalho (CTRL
+ L). Algumas abas serão abertas (Figura 3). Se isso não ocorrer, os erros serão indicados na aba inferior que
se abriu, em letras vermelhas. Volte ao código e corrija-os. Após compilado o arquivo, estas abas podem ser
fechadas.
Algumas mensagens de warning também podem ser indicadas. Isso não impede a compilação, mas é bom
verificá-los antes de prosseguir. As mensagens em letras verdes não indicam nenhum tipo de erro, apenas
mostram informações do chip utilizado, o que veremos no futuro como configurar.
Figura 3: Compilação
3.4
Simulação
Para simular o resultado, primeiro devemos criar um arquivo onde serão guardadas as formas de onda de
todos os bits do circuito. Para isso, clique em ‘File’ → ‘New...’ e escolha a opção ‘Waveform Editor File’,
indicando a extensão .scf ao lado. Uma nova janela será aberta; maximize-a. Clique em ‘Node’ → ‘Enter
Nodes from SNF...’. Esta operação também pode ser feita clicando com o botão direito do mouse sobre a área
3
branca da janela e escolhendo ‘Enter Nodes from SNF...’. A Figura 4 mostra o que estamos visualizando na
tela neste momento.
Figura 4: Inclusão das formas de onda
Clique em ‘List’ e depois em ‘=>’, de forma que os dados na janela branca da esquerda sejam copiados
para a janela branca da direita. Isto estará selecionando os sinais que visualizaremos na simulação (Figura 5).
Escolhemos ver todos eles. Clique em OK. Repare que agora todos eles estão dispostos na tela.
Figura 5: Edição das formas de onda
Vamos analisar agora como manipular as ferramentas de simulação. Note, inicialmente, a diferença dos
sı́mbolos de entrada (A, por exemplo) e saı́da (S1, por exemplo), representados na coluna da esquerda, com
fundo branco. Para entradas, o fio vermelho fica à direita do sı́mbolo cinza (com uma letra I, de Input);
para saı́das o fio vermelho fica à esquerda do sı́mbolo cinza (com uma letra O, de Output). Clicando sobre
cada um deles e arrastando para baixo ou para cima, podemos reorganizar a ordem de modo a facilitar nossa
visualização e interpretação. Faça o seguinte: arraste a entrada A para cima e, depois, selecionando C, D e S2
juntos, desloque esse grupo inteiro para baixo, deixando uma linha no meio para separar o conjunto A, B e S1 do
conjunto C, D e S2. Note, ainda, a diferença da simbologia de bits e vetores. Os vetores são representados pelos
mesmos sı́mbolos cinzas agrupados, indicando ser um grupo de bits. Dispomos agora da organização mostrada
na Figura 6.
Figura 6: Edição das formas de onda
4
Devemos agora configurar as entradas para obter as saı́das em função destas. O intervalo de simulação padrão
é de um microssegundo (1.0 us), mas pode ser alterado em ‘File’ → ‘End Time...’ e alterando o valor indicado.
Cuidado: intervalos muito grandes e com muitas operações podem deixar sua máquina lenta para operar, ou
mesmo travá-la. Vamos optar por manter o intervalo de 1.0 us.
Os comandos (CTRL + SPACE) e (CTRL + SHIFT + SPACE) são utilizados para ampliar ou reduzir
a visualização do gráfico, respectivamente. Esses comandos equivalem às lupas com um sinal de + e de -,
respectivamente, na barra de ferramentas à esquerda da tela. Com a primeira opção, vemos mais detalhes
dentro de um intervalo menor. Já com a segunda, observamos menos detalhes, mas podemos visualizar boa
parte do intervalo estudado, ou todo ele. É exatamente isso que faremos. Use o comando (CTRL + SHIFT
+ SPACE) sucessivas vezes até que todo o intervalo (1.0 us) seja mostrado na tela. Observe ainda que uma
reta azul vertical marca a posição (no eixo do tempo) exata para facilitar a leitura do gráfico. Neste instante,
os valores das variáveis são mostrados à esquerda do gráfico, na segunda coluna. Obtemos, então, o resultado
mostrado na figura 7.
Figura 7: Edição das formas de onda
Agora vejamos as funções dos outros itens na barra de ferramentas à esquerda da tela. Elas são usadas para
configurar as entradas do circuito para simularmos o resultado. Escolha uma das entradas (A, por exemplo),
clicando sobre ela. A primeira linha deve ficar com fundo preto. Veja a Figura 8. Antes de prosseguir, clique
sobre um vetor de entrada (C, por exemplo). Observe que algumas opções não estão disponı́veis para bits e
outras para vetores; veremos isso à frente com detalhes. Quando uma opção for exclusiva para bits ou exclusiva
para vetores, essa informação será fornecida.
Figura 8: Ferramentas de Simulação
As ferramentas são compostas de dois grupos. Um inclui as três primeiras opções, utilizadas para seleção,
texto e marcação. Apenas uma pode ser utilizada por vez. O outro inclui as outras opções e estas são utilizadas
para manipular as formas de onda.
• (I) Seleção: Opção de seleção dos sinais; é a opção que já estava marcada previamente.
• (II) Texto: Opção de texto; utilizada para adicionar comentários ao gráfico.
• (III) Marcação: Opção de marcação de tempo; é utilizada para selecionar um intervalo qualquer de
tempo em um sinal.
5
• (IV) Ampliar: Opção de ampliar tela de exibição. (Utilizado na Figura 7)
• (V) Reduzir: Opção de reduzir tela de exibição. (Utilizado na Figura 7)
• (VI) Ajustar em Página: Opção equivalente a utilizar redução (V) sucessivas vezes até que o intervalo
total seja ajustado na página. Esse processo poderia ser utilizado anteriormente, quando precisamos
realizar esse processo.
• (VII) Nı́vel Lógico 0: Impõe o nı́vel lógico 0 em toda a região selecionada. Se um bit é selecionado e
a opção (VII) é acionada, este permanece fixo em 0. Se um bit é selecionado e a opção de marcação (III)
é utilizada para delimitar uma região especı́fica, ao clicar em (VII), apenas a região delimitada assume
valor 0; exclusiva para bits.
• (VIII) Nı́vel Lógico 1: Impõe nı́vel lógico 1 com o mesmo comentário feito em (VII); exclusiva para
bits.
• (IX) Nı́vel Lógico Indeterminado: Não determina o nı́vel lógico (chamado Don´t Care), com o mesmo
comentário feito em (VII); exclusiva para bits.
• (X) Alta Impedância: Determina alta impedância ao sinal, com o mesmo comentário feito em (VII);
exclusiva para bits.
• (XI) Inverter Nı́vel Lógico: Complementa o sinal invertendo o nı́vel lógico em todos os instantes de
tempo. Para bits, o complemento é feito normalmente. Para vetores, o complemento é feito em cada bit.
• (XII) Clock: Gera uma onda quadrada controlada, isto é, um pulso de clock com perı́odo e, consequentemente, frequência ajustáveis. Veja a Figura 9. Na primeira linha da aba que se abre está a
informação do intervalo de tempo usado na simulação (nesso caso, Interval: 0.0ns To: 1.0us). Lembre-se
que 1ms = 10−3 s, 1us = 10−6 s e 1ns = 10−9 s. Como o intervalo de tempo tem 1us (um microssegundo),
usaremos os submúltiplos ns (nanossegundos). A opção Starting Value indica se o valor inicial é 0 ou 1.
Clock Period indica o perı́odo do pulso de Clock, que pode ser ajustado também determinando um valor
constante de tempo em Clock Period multiplicado por um valor inteiro determinado em Multiplied By.
Esta opção é exclusiva para bits.
Figura 9: (XII) Clock
• (XIII) Contador: Realiza uma contagem, isto é, incrementa uma quantidade ao valor atual. Para
bits, equivale a uma onda quadrada. Para vetores, equivale ao valor em binário de um contador comum.
Novamente, a primeira linha da aba que se abre é Interval: 0.0ns To: 1.0us. A segunda linha indica o
modo como é mostrado o valor da contagem (Radix is:). Para bits, temos, obrigatoriamente, a opção
Binary. A opção Starting Value indica o valor inicial de contagem. A opção Count Type: indica se a
contagem deve ser feita, para vetores, em Binário (Binary) ou em Código de Gray (Gray Code). Ao lado,
Increment By indica quantas unidades devem ser incrementadas em cada perı́odo. Finalmente, o último
controle é análogo ao Clock (XII): Count Every: multiplicado pelo valor inteiro em Multiplied By indica
o perı́odo de contagem.
Figura 10: (XIII) Contador
6
• (XIV) Grupo: Esta opção só é utilizada para vetores, para definir um valor constante (Group Value)
em um intervalo selecionado.
Figura 11: (XIV) Grupo
Agora já temos condições suficientes de levar a simulação adiante. À partir do que tinhamos na Figura 7,
façamos o seguinte: primeiro, criamos, para a entrada A, um clock com pulso de perı́odo igual a 50.0 ns e
valor inicial 0, utilizando a opção (XII) Clock. Para a entrada B fazemos o mesmo, usando a multiplicação do
perı́odo por 2, isto é, obtendo um perı́odo de 100.0 ns. Para a entrada C, usamos a opção (XIII) Contador
com valor inicial 0, em Código de Gray e perı́odo de 40.0 ns. Dê um duplo clique sobre C e observe a aba que
se abre. Nesta, pode-se escolher a base numérica a ser utilizada: binária (BIN), decimal (DEC), octal (OCT)
ou hexadecimal(HEX). Esta última geralmente é mais utilizada devido à compactação de informações; escolha
esta. A opção Display Gray Code Count As Binary Count não deve ser usada agora pois ela mostra a contagem
em Código de Gray como contagem binária normal. Finalmente, para a entrada D, usamos a opção (XIII)
Contador com valor inicial 5, em Código Binário, incremento 2 e perı́odo de 40.0 ns. Obtemos, finalmente, a
imagem mostrada na Figura 12. Se preferir, pode-se clicar com o botão direito sobre um vetor e depois, clicar
em Ungroup para separá-lo por bits. O processo inverso pode ser feito selecionando os bits, clicando com o
botão direito e, à seguir, em Enter Group, escolhendo um nome para o grupo.
Figura 12: Edição das formas de onda
Com tudo pronto, podemos salvar o nosso arquivo, da mesma forma que foi salvo o arquivo texto com extensão
.vhd; a diferença é que agora o arquivo deve ter a extensão .scf. Agora basta fazer a simulação clicando em
‘File’ → ‘Project’ → ‘Save & Simulate’ (atalho CTRL + SHIFT + L). Observe ainda, que a Compilação e
Simulação podem ser feitas com apenas um comando (se a compilação não gerar erros, é claro) através da opção
‘File’ → ‘Project’ → ‘Save & Compile & Simulate’ (atalho CTRL + SHIFT + K). Esta forma é útil quando
pequenas mudanças são feitas no código fonte e/ou na simulação. A Figura 13 mostra as abas que são abertas
ao término da simulação.
Figura 13: Simulação Completa
7
Clique em OK e depois em Open SCF. O resultado obtido deve ser igual aquele mostrado na Figura 14.
Observe que tudo ocorre como esperado, tanto a função OR dos bits de entrada quanto a função AND bit a bit
dos vetores de entrada. No local onde a barra vertical azul está marcada (182.4 ns), temos: A = 1, B = 1 e
S1 = 1, como esperado. Além disso, C = 6H = 0110, D = 8H = 1000 e S2 = 0H = 0000, como esperado.
Figura 14: Resultado da Simulação
3.5
Temporização
Um recurso que vimos anteriormente era modificar o tempo total de simulação. Note, agora, na Figura 14,
que pequenos atrasos são indicados nas formas de onda produzidas como saı́das do circuito. Na prática, isto é
o que ocorre de fato, com atrasos da ordem de alguns nanossegundos. Se tentarmos aumentar o intervalo de
simulação para um segundo, por exemplo, esse efeito já não será mais percebido a olho nu. Mas deve-se ter
o cuidado já mencionado, pois isso pode sobrecarregar a máquina na qual estamos fazendo a simulação. Uma
alternativa é desconsiderar esse efeito de temporização ao compilarmos o código: clique em ‘MAX+plus II’ →
‘Compiler’. Agora, clique em ‘Processing’ e ative a opção ‘Functional SNF Extractor’. Clique em Start e a
compilação será feita novamente. Refaça a simulação e verifique os resultados.
Agora desfaça o processo que acabamos de ver, desativando a opção ‘Functional SNF Extractor’. Compile e
simule novamente e teremos de volta o resultado mostrado na Figura 14.
3.6
Gravação
O processo final é gravar todas as informações em um chip, que está disponı́vel em uma FPGA. Clique em
‘Assign’ → ‘Device’ e escolha o dispositivo no qual deverá ser feita a gravação. Clique em OK. Agora clique em
‘Assign’ → ‘Pin/Location/Chip’ (Figura 15).
Nesta etapa, deve-se digitar em Node Name: o nome de cada bit (para vetores usamos o número de posição
após o seu nome, sem parênteses; nesse caso terı́amos: A, B, S1, C3, C2, C1, C0, D3, D2, D1, D0, S23, S22,
S21, S20) e em Pin: o número do pino do chip ao qual deve ser associado (o manual do kit FPGA deve ser lido
pois há diversas restrições à alguns pinos nos chips). Clique em Add para adicionar a nova informação. Ao final
clique em OK. Todas as informações já estão bem definidas.
Figura 15: Pinagem do Chip
Para concluir o processo clique em ‘MAX+Plus II’ → ‘Programmer’ → ‘Program’ e pronto! A opção Program
só estará disponı́vel quando a FPGA estiver conectada ao PC através da porta paralela e ligada na fonte. Uma
vez gravado o circuito, podemos testá-lo no kit da FPGA.
8

Documentos relacionados