Escolar Documentos
Profissional Documentos
Cultura Documentos
Tutorial QuartusII v1.0 PDF
Tutorial QuartusII v1.0 PDF
Altera Quartus II
No final desse tutorial você encontrar um FAQ com as perguntas mais frequentes
durante as monitorias. Possivelmente suas dúvidas futuras podem aparecer lá.
Abraços,
06 de setembro de 2009
2
1. Download do Quartus II Web Edition e Instalação
A Altera disponibiliza uma versão do Quartus II Web Edition em seu site, sem a
necessidade de nenhuma licença comprada. Basta fazer o download e instalar no
seu PC.
Atualmente o link para download é esse:
https://www.altera.com/support/software/download/altera_design/quartus_we/d
nl-quartus_we.jsp
Uma tela com opões será aberta. Nela existe a possibilidade de você não
selecionar uma série de arquivos de compilação, entre outros. Opte apenas pelas
seguintes opções:
Cyclone II support
Third-party EDA tool interfaces
Tutorial files
3
As demais opções podem ser todas desmarcadas. Caso queira, desmarque
também “Tutorial files”, o que implicará em abrir mão dos tutoriais que o help do
programa oferece.
Prossiga com a instalação até o fim. O programa não é muito leve, talvez a
instalação leve alguns minutos e PCs antigos (tomando como referência 2008)
podem rodá-lo com dificuldades.
4
2. Conceitos Fundamentais
Isso não é um provérbio chinês, mas com certeza essa frase evita muitos
problemas.
O primeiro passo para começarmos um projeto no QII é criarmos uma pasta no
Windows para colocarmos os arquivos. Faça isso como de costume, escolha um
local (que pode ser um pendrive) no PC e crie uma pasta vazia. Arquivos .jpg
podem ser colocados nesta pasta sem problemas, porém prefira pastas vazias
para manter a ordem.
5
Como mostrado, a compilação é executa de forma ascendente, ou seja, o
arquivo principal será o último lido no processo de compilação.
Nesse exemplo o erro é evidente, vamos analisar.
Para um Relógio COM Despertador precisamos, claro, de um comparador.
Quando o programa ler o Relógio COM Despertador ainda não terá lido o
Comparador, ou seja, teremos problemas!
Existe uma forma de trocar de lugar o Comparador com o Relógio COM
Despertador, mas antes de aprendermos a consertar aprenderemos a fazer
direito.
6
Na tela que foi aberta vamos desenvolver nosso projeto com as portas-lógicas,
componentes prontos (ALUs, contadores, flip-flops, etc) e componentes que
vamos criar.
Na hora de salvar este projeto, escolhemos a pasta que criamos para tal.
Nomeamos o arquivo com qualquer coisa que nos lembre do que se trata o
projeto e alguma sinalização de que ele é o nosso arquivo principal, ou seja, o
Relógio COM Despertador do exemplo anterior.
Para indicar isso, usei _main no final do nome.
Perceba que abaixo do nome e do tipo do arquivo temos uma opção que já está
selecionada, que diz: “Criar um novo projeto baseado neste arquivo”. Claro que
sim, é exatamente o que queremos.
Após você clicar em Save uma janela vai aparecer, aperte uma vez Next e depois
aperte Finish.
Nosso projeto já está criado.
7
Mas e se eu quero usar um circuito do projeto X no projeto Y?
Abra o projeto X, copie o circuito com o Ctrl+C, feche o projeto Y, abra um novo
diagrama (File>New>Block Diagram/Schematic File), copie o conteúdo com
Ctrl+V e salve.
Atenção! Quando você for abrir seu projeto para trabalhar nele, antes de abrir
qualquer esquemático, abra o projeto. Assim, a primeira coisa a se fazer quando
queremos abrir o QII para continuar um trabalho é File>Open Project. Somente
depois File>Open para escolher o esquemático com qual queremos lidar.
Usarei um Detector de RA como exemplo nesse tutorial. Falaremos dele mais pra
frente.
8
1. Ferramenta de Seleção – É a setinha do Windows, clique e arraste para
selecionar.
2. Seleção de Componentes – Clicar nessa ferramenta ou clicar duas vezes
na área branca ao lado das ferramentas surte o mesmo efeito. Uma tela se
abrirá e nela selecionaremos o componente desejado para adicionar ao
esquema.
3. Fio – Aqui você não pica fio, você liga os fios, cria os fios.
4. Ligação Constante – Esse botão não é bem uma ferramenta, é uma opção.
Selecionar ela garante que todas as conexões fiquem firmes, como se fossem
fios elásticos. Suponhamos que eu tenho uma ligação entre a saída de um
componente A e a entrada de um componente B, e por motivos estéticos
quero distanciar B de A. Com essa opção selecionada, o fio vai continuar
ligado entre os componentes, esticando automaticamente quando eu
distancio os componentes. Sem esta opção, eu vou tirar um componente de
perto do outro e o fio se manterá como estava, ou seja, a ligação será
desfeita e teremos um fio com um lado ligado ao vazio. Muitíssimo útil para
não desligar o que queremos manter ligado, mas cuidado! Quando movemos
componentes é possível, sem querer, curto-circuitar fios no caminho sem
que percebamos, por isso muita atenção.
5. Seleção Parcial – Essa opção permite a seleção de apenas um pedaço do
fio, sem ter que selecioná-lo inteiro. Caso haja um fio que desejemos apagar
apenas sua ponta, com essa opção selecionada deletamos apenas a ponta do
fio. Sem essa opção, teríamos que deletar o fio todo e criar um novo.
6. Zoom – A ferramenta da lupa não é novidade para ninguém. Com ela
selecionada, clique na tela com o botão esquerdo para aumentar a imagem,
com o botão direito para diminuí-la.
9
3 – Mão-na-Massa - Detector de RA como Exemplo
10
Em Name você pode digitar o nome do componente, isso ganha tempo ao invés
de ficar procurando manualmente.
Tente fazer isso digitando 74194, dff, and3. A regra para memorizar é simples:
XXff leva aos flip-flops, onde XX é o tipo do flip-flop.
YYYK leva as portas-lógicas, onde YYY é o tipo da porta (and, or, xor) e K é o
número de entradas.
11
Veja como fica a montagem:
12
3.2 – Compilando
Na tela que surge, aperte Start. Uma barra verde começará a andar mostrando a
porcentagem de compilação concluída. Ao clicar no Start o programa perguntará
se desejamos salvar o projeto. Se você pretende compilar é necessário ter o
13
projeto salvo antes, então opte por sim. Caso esteja inseguro, faça um backup
antes de compilar.
14
Perceba que a compilação não terminou e o programa nos apontou erros. Ele deu
a dica que o problema pode estar em inst3. Essas marcações instX você pode ver
no desenho das portas no esquemático. Diga-se de passagem, inst3 é o
componente em cuja entrada implantei o erro.
Essas mensagens podem ajudar muito na hora de achar os erros de montagem.
Corrigir erros e fazer montagens melhores é uma questão de experiência, com o
tempo você vai pegando o jeito.
15
3.3 – Simulando
Temos então um novo menu lateral, uma aba onde ficarão os pinos (inputs e
outputs) que serão testados e, na direita da tela, a linha do tempo. Essa mira na
tela não existe, eu coloquei ela ai e você já saberá porquê.
Primeiro vamos inserir os pinos que serão testados. Para isso clique nas
proximidades da mira com o botão direito. Surgirá uma telinha, onde você fará o
seguinte caminho:
16
Insert > Insert Node or Bus…
Sua tela abrirá um pouco diferente dessa de cima. Inicialmente teremos as duas
telas (Nodes Found e Selected Nodes) em branco.
O primeiro passo é, onde indiquei na imagem com o número 1, selecinar “Pins:
all”. Após isso, clique em List. Na janela da esquerda aparecerão todos os pinos.
17
Você pode selecionar só os que deseja que apareçam na simulação e apertar o
botão > ou, caso queira simular todos os pinos (que é o nosso caso aqui) clique
em >> marcado na imagem pelo número 3.
OK duas vezes, voltamos a nossa tela de simulação. Agora ela está um pouco
diferente, vamos ver:
Indicado com o número 6 está o tempo final da simulação. Caso ele seja
pequeno ou grande demais, além da nossa vontade, podemos mudá-lo. Isso será
feito daqui a pouco. Procure manter esse tempo máximo em sua memória, ele
será necessário para referência várias vezes.
18
3.3.1 – Alterando o valor de uma entrada para 0 ou 1
Start e End time dizem onde começam e terminam as oscilações. Não confunda
isso com período. Não esqueça que o End Time não pode ser maior que o tempo
de simulação.
Logo abaixo temos a seleção de período. Deixe o Offset em ZERO, Duty Cicle em
50% (o que significa metade do tempo em 1, metade em 0) e ajuste o período.
Tome muito cuidado com o período escolhido para que ele não seja muito lento
(e o tempo de simulação não seja suficiente para tudo) e nem muito rápido (para
que o tempo de atrase se torne um problema).
Mais sobre tempo de atraso na parte 6 desse Tutorial.
19
3.3.3 – Agrupando entradas e atribuindo valores automaticamente
Essas duas coisas vem juntas pois assim se tornam muito eficientes.
20
Aqui escolhemos o nome do grupo e o tipo de contagem.
Vou dar ao grupo o nome de RA e vou escolher uma contagem do tipo Unsigned
Decimal, ou seja, decimal sem sinal.
21
Na tela da esquerda temos que a contagem é binária, será mostrada como
decimais sem sinal, começa em 0 e é incrementado de 1 em 1.
Na tela da direita temos que a contagem começa em 0 e termina em 1us, o
tempo máximo da nossa simulação.
Os valores da contagem vão mudar a cada 40ns.
22
Já sabemos como manobrar as contagens, agora vamos de fato simular nossa
saída. Temos as entradas contando até 9, daí pra frente é Don’t Care.
Esperamos 1 em 0 7 1 5 8 e 0 no resto até 10. A partir de 10, seja o que for que
der na saída, não importa.
O primeiro passo para a simulação é salvar essa tela do Waveform. Basta clicar
em salvar e pronto.
23
Tudo pronto, “Start”.
Eis que onde antes estava meio “riscado” no waveform (a saída Z) agora temos
informação. Vamos ver o que obtivemos.
Obtivemos, de fato, o que nós queríamos. Lembro que usei 10 em diante como
Don’t Cares.
Pergunta: Por que temos esse pico entre o 3 e o 4 e por que a saída está um
pouco deslocada da entrada? Explicarei brevemente mais adiante.
24
4 – Criando Componentes – Relógio Despertador como Exemplo
Muitas vezes, mais do que um luxo, isso é uma necessidade. Para montagens
muito grandes colocar tudo em uma tela apenas é inviável. Fica praticamente
impossível saber quem é quem em um mar de fios e portas.
Fazer seus componentes torna a montagem muito mais limpa e profissional.
Assim segue. A diferença é que aqui vamos criar 3 esquemas elétricos ao invés
de 1.
Para criar um componente, abra uma folha em branco. Obviamente não vamos
criar um componente da folha principal, não faz sentido.
Salve com o nome que desejar e pronto. Lembro que o componente vale apenas
para esse projeto.
Caso queira fazer alterações no componente, altere o esquemático que usou para
gerá-lo e salve.
File > Create / Update > Create Symbol Files for Current File
25
Segue abaixo algumas telas do relógio com despertador, usando componentes
customizados.
26
27
5 – A Placa e a Gravação
É interessante saber o que é uma FPGA e como ela funciona. Não vou me
prolongar muito aqui sobre isso, mas muito conteúdo sobre isso pode ser achado
na internet. Uma introdução interessante pode ser achada na Wikipédia, sempre
com melhores conteúdos em sua versão inglesa.
5.1 – A Placa
Observe que temos diversas opções nela, inclusive saídas para áudio e vídeo. No
curso de EA773 usaremos apenas os LEDs, displays, botões e as chaves.
28
Com esta vista de cima do equipamento observamos um botão vermelho que fica
na parte de cima, na esquerda. Ele liga e desliga a placa. É óbvio, mas vale
lembrar que não pode-se gravar nada com a placa desligada.
A FPGA é o maior circuito integrado da placa, com a volta verde. Nela está
marcado sua família (Cyclone II) e o modelo, no caso EP2C20F484C7.
Para maiores detalhes sobre a placa você pode ler o manual dela. No final dessa
parte do tutorial vou colocar os endereços mais utilizados, para referência rápida.
29
tentar colocar diesel em um fusca, ou um cartucho de Super Nintendo no drive
de CD. Simplesmente as coisas não irão combinar.
30
Você pode ver os nomes olhando na placa. Perceba que na parte de cima, à
esquerda da imagem, temos o LEDG7
31
Agora que os pinos já estão endereçados, feche essa tela.
Retornando à tela dos esquemáticos, compile novamente o projeto.
32
5.2 – A Gravação
BOA SORTE !!
33
6 – FAQ
6.1 – Por que a onda da saída está um pouco para a direita em relação às
entradas?
Os motivos pelos quais isso ocorre fogem do interesse desse tutorial, mas podem
ser entendidos estudando-se a eletrônica interna de cada porta lógica,
principalmente da tecnologia dos transistores envolvidos.
Como podemos observar na imagem, o tempo de atraso da FPGA que usamos é
aproximadamente 10ns.
Em termos engenheiros, não dizemos que ondas vem antes ou depois, mas sim
que elas estão defasadas de uma determinada quantidade.
Por isso, lembre sempre de manter suas oscilações com períodos maiores que 3
vezes o tempo de atraso, pelo menos. Como não estamos nos preocupando aqui
com a velocidade, coloque umas 10 vezes. Isso faz com que o atraso, até
visualmente, fique despresível.
34
6.2 – O que são esses picos que ocorrem, às vezes, nas transições?
Esse pico é feio, mas vou te mostrar como ele é miserável. Olhando assim não
vemos a dimensão da coisa, mas vamos dar várias ampliadas.
Isso ocorre, novamente, devido a eletrônica interna das portas. Esse tipo de
fenômeno sempre ocorre nas transições.
Isso é mais um motivo para você não trabalhar muito próximo do tempo de
atraso. Quanto maior o tempo que o dado fica na saída, menos significativo é o
ruído e menor a chance dele ser lido como um dado.
Várias vezes foi citado que o tempo máximo não pode ser extrapolado, porém
muitas vezes ele é pouco para as nossas necessidades. Surge então a
necessidade de aumentálo.
Primeiro você precisa ter certeza que não está com dois projetos na mesma
pasta, que não apagou o que não devia e colocou outra coisa em cima. Se você
suspeita disso, vale mais a pena criar um projeto novo e ir copiando e colando o
conteúdo dos esquemas.
Isso pode resolver a maioria dos casos. Se não resolveu, crie outro projeto e
copie e cole o conteúdo dos esquemas.
35
Importante! Não copie e cole arquivos, copie e cole o conteúdo dos esquemas.
Existe sim como copiar os arquivos, mas já que o objetivo é consertar erros é
melhor arriscar o mínimo possível.
6.6 – Tenho 200 entradas que ficam em 1 sempre, mais 200 que sempre
ficam em 0.. Quando coloco no Waveform fica uma bagunça. Já que eu
não tenho que mudar elas sempre, tem algo mais prático a ser feito?
http://www.alldatasheet.com/
36
6.10 – Simulei anteriormente, inseri e tirei alguns pinos, quero simular
novamente. Compilo e quando abro o simulador só tenho pinos antigos.
Que fazer?
Se aparece o local onde os pinos deveriam estar, mas não estão.. Compile o
projeto e abra a tela de associação novamente.
Caso o local onde os pinos deveriam aparecer simplesmente não está lá, ainda
nessa tela siga o caminho:
View > All Pins List
Clique com o botão direito nessa “tabela” e vá para a opção Customize Columns.
Insira Location na sua tabela.
Como eu expliquei anteriormente, para que você veja com clareza o piscar dos
LEDs é preciso que eles pisquem em frequência muito baixa.
Para diminuir a frequência do clock divida-a várias vezes. Um componente que
ajuda muito nesse tipo de serviço é o freqdiv.
37
7 – Referência Rápida aos Endereços dos Periféricos
Aqui coloco as tabelas de endereços que você pode ver no manual. As imagens e
a tabelas abaixo foram feitas pelo pessoal da Altera, crédito a eles.
LEDs
38
Displays
39
Switches (Chavinhas)
Botões
Clocks
40