Escolar Documentos
Profissional Documentos
Cultura Documentos
OBJETIVO
Este experimento tem por objetivo familiarizar o aluno com a técnica HDL de projeto de
sistemas digitais e com suas ferramentas de projeto: a linguagem de descrição de hardware
Verilog, a placa DE2 e o software de síntese Quartus II.
INTRODUÇÃO
Objetivo: Ilustrar o uso do software Quartus II e da placa DE2, familiarizando o aluno com
o uso dos recursos de chaves, botões, leds e display de 7 segmentos disponíveis na placa.
1. Todos os programas do aluno deverão ser armazenados em uma pasta (diretório) criada
para tal finalidade. Portanto, utilizando o Windows Explorer (ou outro programa
similar), procure a pasta da disciplina (D:\LaboratoriodeCircuitosLogicos) e dentro
desta pasta crie uma pasta com o nome do aluno e sua turma (Aluno_T0X). Dentro da
pasta do aluno crie uma nova pasta com o nome de Mod_Teste. Esta pasta será utilizada
em breve.
2. Inicie o aplicativo Quartus II que aparece no Desktop do seu PC. Ao ser executado, a
tela mostrada na Figura 2 é apresentada. Feche a janela “Getting Started”, clicando no
“X” no canto superior direito da mesma.
3. Na tela inicial do Quartus II (Figura 3) clique na opção File > New Project Wizard para
criar o seu novo projeto e começar a criar os arquivos deste projeto.
4. Ao selecionar File > New Project Wizard uma nova janela surgirá (Figura 04). Para
continuar, clique no botão “NEXT”.
Figura 3 – Tela inicial do Quartus II.
5. Na janela apresentada na Figura 5, deve ser selecionado o diretório onde o projeto será
gravado, o nome do mesmo, bem como o nome do módulo que será criado no arquivo.v
(arquivo Verilog). Para escolha da pasta (diretório) onde o projeto deve ser armazenado,
clique nos três pontinhos do lado direito e navegue até a pasta criada no item 1
(LaboratoriodeCircuitosLogicos\Aluno_T0X\Mod_Teste). Observe que o nome
indicado no terceiro campo da janela (campo inferior) deverá coincidir com o nome do
módulo mais externo criado no arquivo de descrição Verilog. Por exemplo, no
experimento estaremos criando o módulo Mod_Teste, então observe que tanto o nome
do projeto (segundo campo) quanto o nome do módulo “top-level” (terceiro campo)
foram assim denominados.
6. Para seguir, clique no botão “NEXT”.
9. Na janela seguinte, apenas clique no botão NEXT para seguir para a janela de
finalização. Na janela de finalização clique no botão “FINISH”.
10. Na janela aberta após a conclusão do Wizard de criação do projeto, mostrada na Figura
8, percebe-se o sucesso na criação, como observado na indicação pelo círculo vermelho
na figura. O nome deverá corresponder àquele indicado no passo 4, que em nosso caso
corresponde a “Mod_Teste”. Veja no navegador de projetos que o projeto identifica a
placa Cyclone II, EP2C35F672C6, e vincula o nome Mod_Teste na hierarquia.
Figura 8 – Tela do projeto Mod_Teste.
11. Selecione no menu a opção “File > New”. Será apresentada a janela mostrada na
Figura 9.
12. Selecione a opção “Design Files > Verilog HDL File”. Ao selecionar esta opção você
estará adicionando ao projeto um arquivo de descrição, no qual você editará, usando a
linguagem Verilog, a descrição do hardware que será implementada pelo FPGA. Após
selecionar a opção, clique no botão “OK”.
13. Na tela do Quartus II será aberta uma janela de edição, conforme indicado na Figura 10.
Nesta janela digite a descrição de hardware do módulo “Mod_Teste”(descrição após a
Figura 10). Este módulo não apresenta nenhuma funcionalidade, apenas disponibiliza
acesso aos recursos de entrada e saída da placa DE2. As denominações utilizadas nesse
módulo (como por exemplo: SW) estão definidas em uma planilha Excel, onde nesta, é
realizada a correlação entre o nome da chave e os respectivos pinos do dispositivo
FPGA, aos quais estão ligados os botões, chaves, led’s, e display’s, fisicamente.
Figura 9 – Janela para seleção do tipo de arquivo que será acrescentado ao projeto.
input CLOCK_27;
input CLOCK_50;
// --------------------------------------------------------------------------
// Trecho para instanciação de módulos e interligação entre os mesmos
// Esta parte será modificada para cada um dos experimentos realizados
// --------------------------------------------------------------------------
// Liga todos os segmentos dos Displays de 7-segmentos
// ---------------------------------------------------------------------------
// Fim do trecho para instanciação de módulos e interligação entre os mesmos
// ---------------------------------------------------------------------------
endmodule // fim do modulo
Observe que estamos definindo um módulo (Mod_Teste) e seus parâmetros, portanto,
após o último parâmetro, e antes do parêntesis que fecha a chamada do módulo, não
existe ‘virgula’.
14. Salve o arquivo que foi criado clicando no botão de salvar ou selecionando a opção
“File > Save”. Ao solicitar o salvamento do arquivo, será apresentada a tela mostrada
na Figura 11. Certifique-se de que o diretório onde o arquivo está sendo salvo é o do
projeto (....\Aluno_T0X\Mod_Teste) e que o nome do arquivo corresponde ao nome do
módulo “top-level”, da descrição editada. Neste exemplo o nome do arquivo será
“Mod_Teste.v”;
OrigemD:\LabCircuitosLogicos\DE2\DE2_lab_exercises\DE2_pin_assignments.csv
18. Feche o projeto Mod_Teste através da opção “File > Close Project”. No Windows
Explorer, copie e cole a pasta Mod_Teste. O Windows irá criar uma nova pasta com
nome tipo pasta Mod_Teste (Cópia). Renomeie esta nova pasta com o nome
ChavesLeds para a próxima tarefa. Agora, dentro da pasta do aluno (Aluno_T0X)
deverá ter duas pastas (Mod_Teste e ChaveLeds). A partir de agora, novos projetos
devem sempre ser baseados no Mod_Teste, que tem todas as configurações iniciais.
Abra o projeto no Quartus II utilizando a opção “File > Open Project” e escolha o
projeto na pasta recém-criada (ChavesLeds). Caso não seja seguido rigorosamente o
processo descrito acima, poderão não ser mantidas as informações quanto ao modelo da
placa e a configuração das chaves. Caso isso ocorra, será necessário definí-los
novamente.
O trecho de descrição a seguir indica uma conexão entre a chave 0 e o led verde (Green) 0
da placa DE2. Observe que os botões, chaves, led’s e display’s são definidos como vetores,
onde SW[0] corresponde a chave 0, KEY[0] corresponde ao botão 0, LEDR[0] corresponde
ao LED vermelho 0 e LEDG[0], corresponde ao LED Verde 0. Note que são oito displays
de sete segmentos numerados de HEX0 a HEX7. Para ter acesso aos segmentos do primeiro
display utilizamos os índices de HEX0[0] a HEX0[6]. De modo semelhante para o último
display utilizamos os índices de HEX7[0] a HEX7[6].
A partir do exemplo acima, elabore uma descrição que realize as seguintes conexões:
b) Chaves de 0 a 10, conectadas aos Led’s vermelhos (Red) de 0 a 10. As chaves são
referenciadas com SW, portanto a primeira linha será: assign LEDR[0] = SW[0]. As outras
10 linhas mudarão apenas os índices do LEDR e do SW;
Verifica-se que a saída S vale 1 quando o valor das entradas forem iguais, e por sua vez, ao
valor binário 0, quando forem diferentes. A partir desse fato, podemos deduzir a expressão
lógica de S:
__
S = AB + A B
// --------------------------------------------------------------------------
// Trecho para instanciação de módulos e interligação entre os mesmos
// Esta parte será modificada para cada um dos experimentos realizados
// --------------------------------------------------------------------------
// Defina os dados para realização do COMPARADOR
wire A, B;
wire S;
assign A = SW[0];
assign B = SW[1];
comparador M1(S, A, B);
assign LEDG[0] = S;
// ---------------------------------------------------------------------------
// Fim do trecho para instanciação de módulos e interligação entre os mesmos
// ---------------------------------------------------------------------------
endmodule // fim do modulo
Em seguida crie três novos módulos (em três novos arquivos, dentro da mesma pasta
COMPARADOR) e associe-os ao projeto. Tenha o cuidado de criá-los corretamente File >
new (ver Itens 12 e 13), pois estes mesmos arquivos serão utilizados nos próximos
experimentos.
//Arquivo comparador.v:
//Arquivo porta_or2.v:
A B S
0 0
0 1
1 0
1 1
Verifique os diagramas RTL gerados pelo Quartus II para vários níveis de hierarquia
acessando o menu: Tools \ Netlist Viewers \ RTL Viewer
Utilize o Conversor de Código Binário Puro de quatro bits para o Código do Mostrador de
7 Segmentos Hexadecimal NBA, implementado no módulo SEG7_LUT.v.
Copie e cole a pasta Mod_Teste renomeando-o para SEG7_LUT. Abra o novo projeto. No
arquivo Mod_Teste.v (dentro da pasta SEG7_LUT), digite o trecho a seguir, no espaço
reservado, em substituição à descrição de hardware anterior:
// --------------------------------------------------------------------------
// Trecho para instanciação de módulos e interligação entre os mesmos
// Esta parte será modificada para cada um dos experimentos realizados
// --------------------------------------------------------------------------
// Defina os dados para realização do Conversor de 7 segmentos
SEG7_LUT(saida7segmentos,entradaHEXA);
Em seguida crie um novo módulo (em um novo arquivo) e associe ao projeto. Complete os
valores a serem utilizados na estrutura case, tendo como exemplo o caso 4'h1. Utilize como
referência a Figura 17. Calcule os demais valores e complete a tabela do modo indicado.
Verifique que na primeira linha da tabela (onde tem 4'h0: oSEG)os valores são definidos de
forma direta, levando em consideração o nível baixo dos segmentos. Ou seja, com a
definição 7’b1000000; temos o segmento 7 apagado e os demais acesos formando um
‘zero’. Na segunda linha da tabela temos um ‘~’ antes do valor a ser atribuído, invertendo
assim os bits. Então os 1s representam os segmentos acesos. Portanto para o segundo valor
na tabela, o segundo e terceiro bit estão acesos e os demais apagados, formando assim um
‘um’. O restante da tabela poderá ser preenchido utilizando ou não o ‘~’ conforme queira.
Arquivo SEG7_LUT.v:
always @(iDIG)
begin
case(iDIG)
4'h0: oSEG = 7'b1000000 ;
4'h1: oSEG = ~7'b0000110 ; // ---[0]---
4'h2: oSEG = ; // | |
4'h3: oSEG = ; //[5] [1]
4'h4: oSEG = ; // | |
4'h5: oSEG = ; // ---[6]---
4'h6: oSEG = ; // | |
4'h7: oSEG = ; //[4] [2]
4'h8: oSEG = ; // | |
4'h9: oSEG = ; // ---[3]---
4'ha: oSEG = ;
4'hb: oSEG = ;
4'hc: oSEG = ;
4'hd: oSEG = ;
4'he: oSEG = ;
4'hf: oSEG = ;
endcase
end
endmodule
Preparação:
Preencha a tabela do case(iDIG) do arquivo SEG7_LUT.v com os valores necessários para
acendimento dos segmentos corretos para a formação dos dígitos conforme o padrão de
segmentos da Figura 17.
REFERÊNCIAS BIBLIOGRAFICAS
Tutorial: Quartus II Introduction Using Verilog Design – Altera ®.
Elementos de Eletrônica Digital – I.V. Idoeta, F.C. Capuano – Editora Érica, 2003.
Verilog HDL Synthesis – J. Bhasker – Star Galaxy Publishing, 1998.
Altera Website – http://www.altera.com
Apostila: Projeto de Sistemas Digitais na Atualidade – UFPB/CCT/DEE - A.
Scaico, 2000.