Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

TUTORIAL 
 
Altera Quartus II 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
by Lucas Martins Guido 
 
guido DOT lucas AT ieee DOT org 
 
 
Versão Beta 1.0 
 
 
 
 
 
 
Este Tutorial tem objetivo puramente educativo, sem nenhuma finalidade 
lucrativa. Sua cópia para finalidades educacionais e pessoais, total ou parcial, é 
totalmente permitida pelo autor. 
 2 
Esse tutorial foi criado para finalidades educacionais, inicialmente com o objetivo 
de auxiliar os alunos de EA773 – Laboratório de Circuitos Lógicos, na UNICAMP. 
O software Quartus II que utilizei para a obtenção das imagens contidas neste 
tutorial é a versão Web Edition que não requer licença. 
 
Escrevi na forma de um passo-a-passo, que começa desde o download do 
software e abrange a prototipagem do sistema digital, simulação em software e 
dicas rápidas. 
Não me preocupei em usar uma linguagem rebuscada e procurei durante o texto 
todo colocar a informação de uma forma agradável. 
 
No final desse tutorial você encontrar um FAQ com as perguntas mais frequentes 
durante as monitorias. Possivelmente suas dúvidas futuras podem aparecer lá. 
 
Meu objetivo é transmitir aos colegas um pouco da experiência que adquiri em 
alguns semestres lidando com essa placa e software. 
Dicas para melhorar esse material são muito bem-vindas. 
 
Agradeço a todos que colaboraram para a criação deste tutorial, contribuindo 
com dúvidas, incentivo e apoio. 
 
Espero que ajude. 
 
Abraços, 
 
Lucas Martins Guido 
 
06 de setembro de 2009 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 3 
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 
 
Após o download dos 1.31GB de programa, dois cliques para instalar. 
Existem alguns detalhes que podem economizar um bom espaço no HD sem 
prejudicar as funcionalidades necessárias para o programa, sabendo que nossa 
placa de prototipagem usa uma FPGA Cyclone II da Altera. 
 
No início da instalação, ao invés de escolher a opção de instalação completa, 
opte por Custom. 
 
 
 
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 
 
 4 
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. 
 
Na primeira execução do programa será solicitado que o usuário escolha o 
layout. Esse tutorial será montado utilizando o layout do Max+Plus II. Caso 
tenha escolhido a opção Quartus II você pode alterá-la, como lembrado na 
imagem abaixo. 
 
 
 
A partir deste ponto irei me referir ao Quartus II como QII. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 5 
2. Conceitos Fundamentais 
 
 
2.1 – Criando uma Pasta para o Projeto 
 
Tanto o QII como diversos programas de engenharia usam o conceito de Projeto. 
Um projeto é uma espécie de ambiente em que podemos desenvolver nosso 
trabalho, executar simulações, compilações, etc. Arquivos que não estejam 
relacionados ao projeto não serão levados em conta na simulação, muito menos 
na compilação. Muitos erros ocorrem devido ao descaso com os arquivos do 
projeto, que devem estar juntos em uma mesma pasta. 
 
UM projeto, UMA pasta. 
 
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. 
 
2.2 – O Conceito de Projeto 
 
Criada a pasta é hora de darmos o primeiro passo no programa, criar o nosso 
projeto. O projeto tem a seguinte estrutura: Uma página principal e diversas 
auxiliares. Essas páginas são colocadas em uma espécie de árvore, o que forma 
uma hierarquia. Não respeitar essa hierarquia de páginas resulta em um erro 
muito comum, que citarei mais pra frente. Vamos entender a hierarquia das 
páginas primeiro.. 
 
Imagine que desejamos criar um relógio digital com despertador. Já temos na 
cabeça uma série de componentes que vamos usar, como o próprio relógio e um 
comparador. Quando o horário for igual ao horário selecionado, o relógio vai 
despertar. Precisamos indispensavelmente de um relógio e algum circuito que 
faça essa comparação. 
Vou dar um exemplo de uma hierarquia errada para esse projeto. 
 
 
 
 6 
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. 
 
O caso correto seria: 
 
 
 
2.3 – Criando Projetos, Fechando Projetos, Abrindo Projetos... 
 
Agora que temos os conceitos fundamentais para começarmos um projeto com 
ordem, é hora de irmos para o QII. 
O primeiro passo é criar um diagrama inicial. 
File > New > Block Diagram / Schematic File 
 
 
 7 
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. 
 
Antes de qualquer coisa, hora de criar o projeto. 
File > Save As 
 
 
 
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. 
 
Atenção! Não crie outro projeto nesta pasta. 
 
 
 
 
 
 8 
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. 
 
 
Para abrir e fechar projetos vá em: 
File > Open Project 
File > Close Project 
 
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. 
 
2.4 – Ambiente de Trabalho 
 
Conceitos prontos, hora de conhecermos o ambiente de trabalho. Abrimos um 
esquemático, criamos o projeto, precisamos colocar algo nele. 
 
Usarei um Detector de RA como exemplo nesse tutorial. Falaremos dele mais pra 
frente. 
 
Vamos dar uma olhada no menu lateral. 
 
 
 
Esse é o ambiente de trabalho em que ficaremos a maior parte do tempo. 
Acostume-se com ele, possivelmente o verá por várias horas. 
Na esquerda temos as ferramentas. Numerei as mais importantes para explicá-
las comdetalhes. 
 
 9 
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. 
 
No topo da tela há o menu de opções. Já usamos o File, usaremos diversos 
outros. Conforme necessidade, vou explicando. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 10 
3 – Mão-na-Massa - Detector de RA como Exemplo 
 
 
3.1 – Montando o Esquema Elétrico 
 
Esse é um dos primeiros experimentos do laboratório. 
A idéia é projetar um circuito combinacional que tenha como entrada os números 
de 0 a 9 e na saída, 1 para algarismos detectados e 0 para não detectados. 
Meu RA é 071580, ou seja, terei 1 na saída para as entradas 0 1 5 7 8 e 0 na 
saída para as entradas 2 3 4 6 9. 
 
Neste turorial usarei indicarei os bits como ABCD...KLMNOP, sendo o A o mais 
significativo. A’ significa A barrado, A negado. 
Z é a saída e em caso de mais saída, Z1 Z2 Z3 ... ZN com Z1 como a mais 
significativa. 
Minha expressão lógica ficou: Z = DB + D’A + C’B’A’ 
 
Vou usar as ferramentas citadas e criar o circuito lógico. 
A única informação que falta para você é onde encontrar as portas-lógicas. Basta 
clicar duas vezes no fundo da tela ou na ferramenta Seleção de Componentes e 
seguir conforme a imagem abaixo. 
 
 
 11 
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. 
 
Abaixo segue a minha montagem inicial: 
 
 
 
Observe que as portas estão devidamente colocadas e ligadas. Falta visivelmente 
especificar as entradas e saídas, quem são A B C D e Z. 
Aqui é um ponto importante, onde surge um grupo componentes que só existem 
no programa: Os inputs e os outputs. 
Naquela janela onde selecionamos componentes está a área Name, como dito 
anteriormente. Digite lá input para selecionar entrada e output para selecionar 
saída. Finja que são componentes que você liga nas entradas e saídas. 
 
 
 
 
 
 
 
 
 
 
 
 
 12 
Veja como fica a montagem: 
 
 
 
Agora temos as saídas e entradas especificadas. Para mudar o nome das 
entradas e saídas basta dar dois cliques nelas. 
 
Observe que onde os fios se ligamos temos ou um quadrado ou um bolinha. 
Onde não há ligação os fios passam reto. Muita atenção nisso, conexões podem 
ser criadas quando movemos os componentes e, caso isso passe desapercebido, 
problemas ocorrerão. 
Um X indica o fim do fio. 
 
Existe também a possibilidade de se trabalhar com barramentos (coletivo de fio) 
no QII. Devido a complexibilidade em se fazer isso nesta interface gráfica e ao 
número de erros que já tive tentando isso, não vou citar esse método aqui. Para 
mais detalhes use os tutoriais do programa ou pesquise na internet. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 13 
3.2 – Compilando 
 
Compilando veremos se nossas ligações estão corretas, se não fizemos nenhuma 
lambança estrutural. 
Vamos compilar o projeto do RA. 
 
Primeiramente, antes da compilação em si, precisamos selecionar para qual 
FPGA compilaremos este projeto. No nosso laboratório usamos uma placa com a 
FPGA Cyclone II EP2C20F484C7. Você pode observar esse modelo olhando na 
própria placa. Mencionarei isso novamente com mais detalhes. 
Para escolher o dispositivo seguimos o caminho: 
 
Assignments > Device 
 
Na tela que abre, selecione a família Cyclone II e o dispositivo EP2C20F484C7. 
 
 
 
Uma vez selecionado o dispositivo, estamos prontos para compilar. 
 
Max+Plus II > Compiler 
 
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 
 14 
projeto salvo antes, então opte por sim. Caso esteja inseguro, faça um backup 
antes de compilar. 
 
 
 
Caso a compilação transcorra sem problemas, teremos nessa parte de baixo da 
tela várias mensagens em verde e alguns Warnings. 
 
Dica: Esqueça os Warnings. Eles dizem diversas coisas sobre capacitâncias, 
realimentação, etc. Isso não significa que ocorrerá um erro, mas sim que em 
uma montagem completa (como a criação de um circuito integrado dedicado) 
seriam fatos importante a se pensar. No nosso caso, simulação e prototipagem 
simples, não influenciará no resultado. Como você não está na AMD (ainda) e 
nem quer transformar seu atual projeto em um circuito integrado para ser 
vendido pelo mundo (ainda), deixaremos os Warnings para depois. 
 
Caso ocorresse algum problema a simulação não terminaria, e o programa 
acusaria os problemas. Vou criar um erro muito comum, ligarei duas saídas de 
duas portas diferentes em uma mesma entrada de uma terceira porta. Eu teria 
que usar pelo menos um OR2 no caminho, mas não farei isso propositalmente. 
Vamos ver o resultado na compilação. 
 
 15 
 
 
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. 
 
É importante lembrar que o fato de a compilação terminar sem problemas 
significa que você construiu um projeto ESTRUTURALMENTE decente. Isso 
significa que, do ponto de vista de ligações e hierárquico, você não cometeu 
erros. 
Porém NADA até agora garante que o seu projeto vai funcionar como você quer. 
Se você projetou errado o que você terá agora é um circuito corretamente 
montado que faz a coisa errada. 
Atenção sempre! É por isso que engenheiros fazem máquinas, e não ao 
contrário. 
 
 
 
 
 
 16 
3.3 – Simulando 
 
Essa é a hora da verdade. É preciso saber se o que fizemos tem o funcionamento 
esperado. 
Um erro aqui significará OU que você projetou errado OU que você fez ligações 
incorretas. 
Lembro que para simular é necessário anteriormente ter compilado. 
 
Vamos abrir a tela de simulações, o Waveform. 
 
Max+Plus II > Waveform Editor 
 
Teremos a seguinte tela então: 
 
 
 
Temos então um novo menu lateral, uma aba onde ficarão os pinos (inputse 
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: 
 17 
Insert > Insert Node or Bus… 
 
Aparecerá uma nova tela: 
 
 
 
Clique em Node Finder… 
 
 
 
 
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. 
 18 
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: 
 
 
 
Temos agora os pinos listados, na figura vemos o B selecionado. As estradas 
estão em 0 e a saída ainda não foi simulada, por isso está “riscada”. 
Apontado pelo número 7 temos um indicador que podemos mover. Ele faz com 
que visualizemos o tempo em que ele está colocado. Caso não seja desejável 
usá-lo, basta colocá-lo no tempo zero (lá no início) e fingir que ele não está ai. 
 
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. 
 
Vamos agora entender o menu lateral. 
 
Na lateral temos um menu que só é ativado quando escolhemos um pino. No 
exemplo, escolhi o pino B. 
Como o pino B é um pino de entrada (input) temos que atribuir um valor a ele. 
Esse valor pode ser 1, 0, uma onda oscilante periódica como um clock ou algo 
aleatório. Caso eu tivesse agrupado A B C e D (ensinarei isso mais adiante) 
poderia fazer com que eles fossem uma contagem de 0 até 15. 
Meu objetivo é que você perceba que, em uma simulação, quem manda na 
entrada é você. 
 
Utilizarei os números da imagem acima para explicar algumas coisas aqui. 
 19 
3.3.1 – Alterando o valor de uma entrada para 0 ou 1 
 
Posso fazer isso individualmente ou em grupo. Para tal, selecionamos uma 
entrada ou, com CTRL apertado, mais do que uma. 
Para forçar um 1, clicamos no botão indicado pelo número 3. Para forçar 0, 
clicamos no indicado por 2. 
 
3.3.2 – Fazer com que uma entrada tenha o comportamento de Clock 
 
Selecionamos o pino desejado e então pressionamos o botão indicado por 5. Veja 
que há um pequeno relógio (clock) do lado do botão. Ao clicarmos nele teremos 
uma tela, é importante interpretá-la bem. 
 
 
 
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. 
 
Ajustados os parâmetros, observe o comportamento oscilatório no pino 
selecionado. 
 
 20 
 
 
3.3.3 – Agrupando entradas e atribuindo valores automaticamente 
 
Essas duas coisas vem juntas pois assim se tornam muito eficientes. 
 
Vamos voltar a pensar na nossa situação, um projeto de Detector de RA. Eu 
tenho 4 entradas e estou interessado em valores que vão de 0 a 9 na entrada. 
Existem diversas formas de eu colocar esses valores na entrada. 
A primeira é colocando em cada uma um clock distinto, sendo que cada entrada 
tem o dobro da frequência da anterior. A segunda forma é manualmente, 
utilizando o botão indicado pelo número 1. 
 
Particularmente eu gosto da opção de agrupar as entradas e fazê-las contar 
automaticamente. Além de visualmente ficar mais organizado, existam muitas 
saídas ou poucas, o trabalho é o mesmo. 
 
Primeiro selecionamos, com CTRL apertado, as entradas A B C e D. Em seguida 
clicamos no botão indicado por 4, que tem inclusive um C (de count) ao lado. 
Clicar com o botão direito sobre as entradas e selecionar Group surtirá o mesmo 
efeito. 
É importante ressaltar que a entrada mais acima na tela será a mais significativa 
no agrupamento. No nosso caso A é a mais significativo e está mais acima da 
tela. OK. Caso D estivesse mais acima, teríamos um problema na interpretação 
dos resultados. A solução seria arrastar o pino D para baixo e ordenar tudo 
conforme desejado, bastante simples. Para fazer isso clicamos no desenho ao 
lado esquerdo do nome do pino e arrastamos ele para onde desejamos. 
 
Ao agrupar e clicar no botão de agrupamento, surge a tela que segue. 
 21 
 
 
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. 
 
 
 
Observe que RA agora é um agrupamento de entradas. A está por cima, logo é a 
mais significativa. D está por baixo, logo é a menos significativa. 
 
Se desejado for desagrupar, basta clicar com o botão direito no agrupamento e 
selecionar Grouping > Ungroup. 
 
Agora que temos um agrupamento, queremos atribuir a ele uma contagem 
automática. 
Iniciamos clicando sobre o agrupamento RA e depois, novamente, no botão com 
o C ao lado (que fica na esquerda da tela, usado para agrupar o conjunto). 
Surgirá então uma tela com duas abas. 
Vou colocar aqui abaixo as duas abas. 
 22 
 
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. 
 
 
 
Podemos observar que, de fato, ocorre uma contagem automática. As entradas 
de A até D estão variando até seu máximo possível (15 para 4 bits) e depois 
retornam ao 0, onde continuam com o mesmo comportamento até 1us. 
 
 23 
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. 
 
Agora vamos ao simulador. 
 
Max+Plus II > Simulator 
 
 
 
A tela que se abre é essa. 
Fique de olho no nome do arquivo de waveform que será simulado. É comum em 
projetos maiores termos mais de um .vwf, muitas vezes você pode achar que o 
projeto tem problema pois está simulando o arquivo .vwf errado. Cuidado! 
No local onde selecionamos o tempo de simulação, certifique-se de não 
extrapolar o tempo máximo e nem simular muito mais do que o necessário. 
Na região Simulation Option, selecione as opções conforme a imagem acima. 
 24 
Tudo pronto, “Start”. 
 
Após a simulação ocorrer, se não houver problemas, clique fora ou clique em 
Open. O programa fará uma pergunta, concorde com ele. 
 
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. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 25 
4 – Criando Componentes – Relógio Despertador como Exemplo 
 
 
Você pode usar muitos componentes e circuitos integrados prontos, todos 
disponível pelo programa. 
Agora e se você é um aspirante a engenheiro(a) que querum pouco mais de 
emoção? Você quer fazer seus próprios componentes! 
 
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. 
 
Vamos fazer isso com o exemplo do Relógico com Despertador. 
 
Primeiramente salvamos nosso trabalho anterior e fechamos o projeto. 
File > Close Project 
 
UM projeto, UMA pasta. 
 
Criamos uma pasta nova. 
 
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. 
 
Na folha correta, fazemos o circuito. Dele queremos fazer um componente. Com 
essa folha na tela, seguimos o caminho: 
File > Create / Update > Create Symbol Files for Current File 
 
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 
 
 
Se você fez alterações em um componente e já o tinha usado em outras folhas, 
vá nessas folhas e clique no fundo branco com o botão direito. Existe uma opção 
chamada Update Symbol or Block. Clique nela e selecione para atualizar todos. 
Faça isso para todas as folhas que tiverem o componente desatualizado. 
 
Muitas vezes criamos um componente e ele fica com os pinos em locais 
indesejados. Podemos resolver isso remanejando os pinos. Vá em Abrir e em 
Files of Type coloque All. Os arquivos .bsf são arquivos de componentes, abra 
um e verá na tela apenas o desenho externo do componente criado. 
Divirta-se ai, mas cuidado para não remanejar pinos e esquecer os nomes em 
lugares errados. 
 
 26 
Segue abaixo algumas telas do relógio com despertador, usando componentes 
customizados. 
 
 
 
 
 
 27 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 28 
5 – A Placa e a Gravação 
 
 
Temos um projeto pronto e provavelmente testamos ele anteriormente, se isso 
for viável. 
Máquinas de estado geralmente dão mais trabalho para serem simuladas do que 
testadas em hardware, já um detector de RA pode ser muito rapidamente 
simulado. 
A escolha das ferramentas fica a cargo do projetista, você escolhe o que vai 
usar. 
 
A placa disponível no laboratório consiste em uma FPGA ligada a diversos 
periféricos que ajudam no ensino, como LEDs, botões e chaves. Cada um desses 
dispositivos está ligado a um pino da FPGA, que por sua vez possui um endereç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 
 
A placa disponível no laboratório é a seguinte: 
 
 
 
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. 
 29 
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. 
 
A ligação entre placa e computador é feita através do cabo USB. 
O USB é capaz de fornecer energia para o funcionamento da placa, inclusive se 
você ligá-la somente no USB provavelmente ela vai funcionar. Porém caso você 
de alguma forma drene mais corrente do que o USB pode fornecer, a saída do PC 
pode ser danificada. Para evitar riscos, ligue também a fonte da placa na 
tomada. Isso garante que a energia seja fornecida pela rede elétrica evitando 
maiores problemas. 
 
Cada periférico da placa tem um endereço de acesso. 
Por exemplo, queremos ligar a saída do detector de RA em um LED. De alguma 
forma precisamos relacionar o pino de saída ao endereço do LED da placa. Ao 
fazermos isso e compilarmos o projeto, aquela saída virtual será na verdade 
direcionada eletronicamente para uma saída física, exatamente a do LED. 
Nenhum tipo de preocupação com corrente e tensão precisa ser tomado, o 
pessoal da Altera já deu conta de tudo. Basta fazer as associações. 
 
Existe também, embutido na placa, três fontes geradoras de clock. 
As frequências são 24MHz, 27MHz e 50MHz. 
Colocar um frequência dessa em um LED, visualmente, é como deixá-lo aceso. 
Um pisca-pisca é uma luz acesa (para os olhos humanos) quando pisca mais que 
24 vezes por segundo, ou seja, mais de 24Hz. Isso é uma média, mas serve para 
alertar que deve-se tomar cuidado com a frequência dos LEDs. 
 
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. 
 
5.2 – A interface Hardware e Software 
 
Até agora nos preocupamos em garantir um bom projeto no QII. Criamos o 
projeto, montamos os esquemas, fizemos simulações. Agora resta uma ação, 
prototipar nosso projeto na placa de desenvolvimento. Basicamente iremos 
transferir nosso projeto para a FPGA, que garantirá o funcionamento dele como 
se o tivéssemos montado com circuitos integrados TTL em um protoboard. 
Além desse processo ser muito mais rápido, podemos nos despreocupar com a 
montagem física e seus possíveis problemas (interferências, ruídos, mal-contato) 
e focar a atenção no resultado do projeto. 
 
O primeiro passo é ligar nossas entradas e saídas a pinos reais da placa, 
associando endereços a elas, como eu já disse anteriormente. 
 
Mas antes disso, compile! 
 
Antes de começarmos a fazer qualquer coisa é necessário compilar o projeto. 
Aqui é imprescindível termos a certeza de que escolhemos a família da FPGA e o 
modelo corretamente. Compilar para uma família errada e tentar gravar é como 
 30 
tentar colocar diesel em um fusca, ou um cartucho de Super Nintendo no drive 
de CD. Simplesmente as coisas não irão combinar. 
 
Tendo essas certezas garantidas, vamos fazer o seguinte caminho: 
Assignments > Pins 
 
 
 
Essa é a tela que esperamos. À direita um desenho ilustrativo onde temos a 
família e o modelo da FPGA, uma boa hora para conferir se estamos no caminho 
certo. 
Na parte de baixo temos todos os nossos pinos e, ao lado deles, diversas opções. 
Muito dessa tela nunca usaremos, podemos até dar uma enxugada nela. Clicando 
com o botão direito nessa região da tabela (parte de baixo da tela) surge a 
opção Customize Columns. Nela, tire tudo menos Node Name e Location. 
 
Vamos associar os pinos do exemplo do Detector de RA. O primeiro passo é ir 
para o manual (ou a referência rápida no fim desse tutorial) e procurar o 
endereço do que queremos ligar. No nosso caso, queremos que as entradas 
sejam 4 chaves e a saída 1 LED. 
 
Abrindo o manual veremos que o endereço de um LED verde, o LEDG7 é, 
PIN_Y21. 
 
 31 
 
 
Você pode ver os nomes olhando na placa. Perceba que na parte de cima, à 
esquerda da imagem, temos o LEDG7 
 
Vamos então para a tabela da página de associação de pinos. Queremos Z no 
LEDG7. 
Para isso, clico na célula Location ao lado do pino Z e digito Y21. Veja que o 
programa já insere PIN_. 
 
Para ligar as entradas A B C D nas chaves (switches) vamos pegar o endereço de 
4 chaves no manual. 
 
 
 
Usaremos SW3 para A, SW2 para B, SW1 para C e SW0 para D. 
 
Vejamos como fica a tela com os pinos associados. 
 32 
 
 
Agora que os pinos já estão endereçados, feche essa tela. 
Retornando à tela dos esquemáticos, compile novamente o projeto. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 33 
5.2 – A Gravação 
 
Chegou a hora de gravar a placa e testar o que fizemos. 
Não esqueça de compilar o projeto novamente APÓS associaros pinos aos seus 
endereços físicos. 
 
Certifique-se de que o USB e a fonte estão conectador. 
Ligue a placa !! 
 
Max+Plus II > Programmer 
 
 
 
Primeiro certifique-se de que a opção Program/Configure está selecionada. 
Depois clique em “Hardware Setup...” e onde está “No Hardware” selecionamos a 
opção referente ao USB. 
Caso a opção USB já estiver selecionada, ótimo. 
 
Tudo pronto, clique em Start. 
 
A gravação é bastante rápida. Quando ela terminar, o projeto já está gravado. 
Tire os olhos do monitor, volte-se para a placa. Seu projeto já está lá. 
 
BOA SORTE !! 
 
 34 
6 – FAQ 
 
 
6.1 – Por que a onda da saída está um pouco para a direita em relação às 
entradas? 
 
 
 
Perceba que a saída Z é modificada um pouco depois da mudança das entradas. 
Pensando de forma ideal essa mudança na saída deveria ocorrer ao mesmo 
instante que as entradas fosse modificadas. 
Assim como você deve lembrar de um dia ter aprendido em Circuitos Lógicos, 
toda porta-lógico possui um tempo de propagação, um atraso. Esse tempo 
representa quanto tempo demora para que um sinal na entrada seja interpretado 
pelo circuito e a resposta se encontre na saída. 
 
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. 
 
Muitas vezes acima eu tive o cuidado de lembrá-lo que nenhum tempo de 
transição do circuito deve ser muito próximo do tempo de atraso, senão a 
veracidade dos dados na saída serão comprometidas. 
Exemplo: Imagine que minha contagem, no detector de RA, fosse efetuada a 
cada 9ns. O que eu estaria lendo na saída? Quando minha porta começasse a 
colocar o dado na saída eu já teria outra coisa na entrada, e tudo começaria a se 
encavalar. Para poucas entradas isso é gritante, mas para diversas entradas que 
mudam em tempos diferentes, o cuidado com o tempo de atraso deve ser ainda 
maior! Sempre preciso ter a certeza que leio minha saída um tempo de atraso 
(ou mais) depois da minha última entrada ter sido colocada devidamente. 
 
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. 
 
 
 
 35 
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. 
 
 
 
Olhe só o pico amplicado. Repare no eixo do tempo para calcularmos a largura 
dele. Ele mede um pouco menos do que 0.280ns, ou seja, 280 ps (pico 
segundos). 
Está convencido de que ele é muito pequeno? 
 
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. 
 
6.3 – Como aumento o tempo máximo nas simulações? 
 
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. 
 
Edit > End Time... 
 
6.4 – Não compila e aparece que o problema é a hierarquia. 
 
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. 
 
Para mudar o arquivo principal na hierarquia, selecionando outra folha como 
folha principal, faça o seguinte: 
1- Abra na tela o arquivo que você quer colocar como principal (no exemplo o 
Relógio COM Despertador) 
2- Project > Set as Top-Level Entity 
 
Isso pode resolver a maioria dos casos. Se não resolveu, crie outro projeto e 
copie e cole o conteúdo dos esquemas. 
 36 
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.5 – O nome do meu projeto é Projetão da Moçada e não compila, por 
quê? 
 
Simples, nunca use em programas de engenheria ~ / * ç <espaço> nem nada de 
estranho. Se possível evite letras maiúsculas também. 
Existem programas que aceitam, outros não. Então na arrisque e evite dor de 
cabeça desnecessária. 
 
No caso do QII você pode usar letras maiúsculas. 
 
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? 
 
Sim, com certeza. 
Vá onde selecionamos componentes e digite vcc ou gnd. Vcc é sempre 1, gnd é 
sempre 0. Ligue-os onde quer manter 1 ou 0 sempre e pronto. 
 
6.7 – Fui no TTL HandBook e justamente a página que eu queria não 
estava lá.. O que faço? 
 
Você pode procurar a página perdida com alguém no laboratório, ou ir prevenido. 
 
http://www.alldatasheet.com/ 
 
Esse site é muito eficiente, basta ir na busca e digitar o código do componente, 
por exemplo 74194, bc548. 
 
Fique atento pois os datasheets de componentes trazem muita informação, 
muitas vezes muito mais do que você precisa. Caso queira apenas as 
funcionalidades do circuito, dificilmente você vai precisar mais do que as duas 
primeiras páginas. Por isso não saia imprimindo tudo logo de cara. 
 
Vale lembrar que eu nunca vi um datasheet em português. 
 
6.8 – Sumiram as ferramentas do Waveform. 
 
Tools > Customize Waveform Editor... 
 
6.9 – No simulador, os pinos não aparecem. 
 
Compile e insira os pinos. 
 
 
 
 
 
 37 
6.10 – Simulei anteriormente, inseri e tirei alguns pinos, quero simular 
novamente. Compilo e quando abro o simulador só tenho pinos antigos. 
Que fazer? 
 
Isso é normal. Delete todos os pinos da lateral e insira-os novamente, como se 
fosse a primeira vez que você abriu essa tela. 
 
6.11 – Sumiram as ferramentas da área de trabalho. 
 
 Tools > Customize Block Editor... 
 
6.12 – Estou na tela de associação de pinos com endereços, para 
gravação. O problema é que minha tela não mostra, na parte de baixo, 
os pinos do meu projeto. 
 
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 
 
6.13 – Estou na tela de associação de pinos com endereços, para 
gravação. O problema é que minha tela não mostra, ao lado dos pinos do 
meu projeto, a coluna Location. 
 
Clique com o botão direito nessa “tabela” e vá para a opção Customize Columns. 
Insira Location na sua tabela. 
 
6.14 – Estou na tela de gravação mas não consigo gravar. 
 
Provavelmente se você olhar na parte superior dessa tela verá escrito No 
Hardware. 
Clique no botão Hardware Setup... e escolha a opção referente ao USB. 
 
Se o cabo USB estiver desconectado você não ira conseguir. 
 
6.15 – Usei o clock da placa e todos os meus LEDs ficam acesos. 
 
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. 
 
 
 
 
 
 
 
 
 
 
 38 
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. 
 
LEDs39 
Displays 
 
 
 
 
 
 
 
 
 40 
Switches (Chavinhas) 
 
 
 
 
 
Botões 
 
 
 
 
 
Clocks

Mais conteúdos dessa disciplina