Multiplicador 8×8:
Exercício lab1a
somador 16bits

Na continuação da construção do multiplicador 8×8, o objetivo desta etapa é construir em Verilog, um somador de 16 bits utilizando o operador de soma “+”.

O projeto resolvido desta etapa, pode ser baixado diretamente no github <clicando neste link aqui> e no diretório raiz IVER10_1 temos todos os arquivos e instruções dos exercícios.

Se você caiu de paraquedas por aqui e precisa saber como instalar o software Questa para trabalhar com Verilog, leia a série “Instalando Quartos com Questa”, <clicando neste link aqui>.

Na etapa a seguir:

Caso o Quartus Prime apresente uma mensagem informando que o “design target do projeto é para a família do Cyclone III …” conforme figura abaixo, precisa acertar a configuração do seu projeto de acordo com o FPGA da placa de desenvolvimento que estiver sendo utilizado.

Neste exemplo, como estou utilizando a placa de desenvolvimento Mini-Fpga que usa o Cyclone IV EP4CE6F17C8, deve clicar em “Ok” -> escolher o “Cyclone IV E” -> “Ok”.

Acertando o projeto com o tipo de FPGA da placa de desenvolvimento.

Assim que abrir a tela do projeto, precisa clicar em “Assignments” (1) -> “Device” (2) -> “Device”(3) -> “Name filter” coloca “EP4CE6F17C8” (4) -> “Ok” (5).

Selecionando o FPGA de acordo com a placa de desenvolvimento. Neste caso é o EP4CE6F17C8N. Clique para ampliar.

Continuando, passos A e B:

O exercício pede para baixar o diretório “lab 1a” e abrir o projeto no Quartus, que é o arquivo “adder.qpf”, que em seguida pede para escrever o código de um somador de 16bits, conforme diagrama abaixo:

Somador 16 bits a ser construído

A descrição de hardware deste componente é bastante simples conforme indicado abaixo:

module adder (	
    input [15:0] dataa, datab,
    output[15:0] sum
  );
  assign sum = dataa + datab;
endmodule

O nome do arquivo a ser salvo no diretório do projeto deve ser “adder.v”. Caso estivéssemos programando, seria comparável a um “hello world” ;-).

Caso minhas notas sejam de grande valia para ti, vou ficar muito agradecido se você clicar nos anúncios desta página e conferir o que meus patrocinadores tem para lhe oferecer.

Passo C:

O exercício pede para sintetizar o projeto clicando em “Start -> Start Analysis & Synthesis”. Erros de digitação devem ser entendidos e corrigidos até que o Quartus retorne a mensagem indicando que foi concluída com sucesso a análise e síntese do circuito. Não adianta prosseguir antes de concluir esta etapa.

Passo D:

Nesta etapa o exercício pede para fazer uma simulação RTL usando o software ModelSim-Intel FPGA Edition. Nesta resolução vamos usar o Questa, que é a versão mais nova do ModelSim.

Precisa iniciar o simulador Questa, clicando em “Iniciar” -> “Questa”, devendo aparecer a tela de abertura, conforme abaixo:

Tela de abertura do Questa.

Basta fechar a tela “IMPORTANT Information” e trocar o diretório para o local correto do exercício lab1a, conforme indicado abaixo:

“File” -> “Change Directory…” -> “navegar até a pasta do lab1a” -> clicar em no botão “Selecionar pasta”.

Conforme indicado abaixo, somente após a primeira simulação, o diretório de nome “work” será adicionado na primeira linha da área de bibliotecas (library) e o caminho do projeto deve aparecer na janela de transcript do console:

Abrindo o local correto do projeto, clique para ampliar.

Este exercício lab1a, já vem com uma macro preparada na pasta lab1a, que é o arquivo adder-tb.do.

Precisa executar essa macro adder-tb.do para executar a simulação. Isso deve ser feito, clicando no menu “Tools” (1) -> “tcl” (2) ->”Execute Macro” (3) e em seguida selecionando o arquivo de macro “adder_tb.do” (4) e clicando no botão “Abrir” (5).

Abrindo a macro e executando, clique para ampliar.

Aguarde a macro executar, leva cerca de 30 segundos. Uma vez executada a simulação definida pela macro, precisa clicar com o botão direito do mouse na tela preta “Wave – Default” (1) e selecionar “Zoom Full” (2), conforme indicado abaixo:

Tela de simulação após rodar a macro, clique para ampliar.

Após aplicar o zoom na tela Wave-Default, dá para notar a soma das entradas “dataa” e “datab” sendo executadas e o resultado sendo apresentado em “sum”, conforme indicado abaixo:

Detalhe mostrando a operação de soma bit a bit dos sinais elétricos, clique para ampliar.

Tenha em mente que os registros “dataa”, “datab” e “sum”, são nomes de um barramento (bus). Neste cada um dos barramentos é composto por 16 bits.

Por exemplo, se clicar no sinal de “+”, de “dataa”, a tela vai expandir, exibindo cada um dos bits que compõem o barramento “dataa” indicado abaixo. Dá inclusive para saber o valor de cada bit individual e fazer a conversão para o valor hexadecimal.

Detalhe, mostrando o barramento dataa, com 16 bits, clique para ampliar.

Caso você tente reproduzir o exercício, caso ele não fique como apresentado nesta resolução, deve-se conferir os passos executados anteriormente.

Terminada a simulação, basta fechar a janela do Questa Intel Starter FPGA Edition.

Implementando e testando na placa Mini-FPGA, o somador 8×8 bits

Os passos a seguir são específicos para a placa de desenvolvimento Mini-FPGA utilizando o Cyclone IV EP4CE6F17C8. Caso esteja utilizando outra placa de desenvolvimento, os devidos ajustes devem ser realizados.

Feito os testes, para subir a descrição de hardware para a placa de desenvolvimento, precisamos levar alguns pontos em consideração:

  • A placa de desenvolvimento precisaria de 16 chaves para receber a entrada de dataa e datab.
  • Também precisaria de 16 leds para indicar o resultado da soma.
  • Os pinos de entrada e de saída devem ser indicados na etapa de pin assignment, de acordo com diagrama esquemático da placa Mini-FPGA.

Como a placa de desenvolvimento tem apenas 8 chaves, para a entrada de dados, vou dividir as chaves para entrar os bits de 0 a 3 de “dataa” e de “datab”, assim dá para fazer testes inserindo valores de zero até 0xF para cada uma das entradas e o resultado do somador, será exibido nos leds 0 até 4 que são os cinco primeiros bits do resultado, podendo representar valores entre 0 e 31 decimal ou 0x00 e 0x1F.

Dito isso, basta abir a interface do Pin Planner do Questa, já configurada para o CycloneIV EP4CE6F17C8 e atribuir os pinos conforme a seguir:

| dataa[0] - PIN_N16 | dataa[1] - PIN_M12 | dataa[2] - PIN_N14 | dataa[3] - PIN_N13 |
| datab[0] - PIN_R16 | datab[1] - PIN_P15 | datab[2] - PIN_P16 | datab[3] - PIN_N15 |
| sum[0]   - PIN_A5  | sum[1]   - PIN_B5  | sum[2]   - PIN_A4  | sum[3]   - PIN_B4  | sum[4]   - PIN_A3 |
Distribuição dos pinos sum, dataa e datab, clique para ampliar.

Feita a atribuição dos pinos, basta compilar o projeto e gravar na Mini-FPGA <conforme abordado neste artigo aqui>.

Depois é só testar na Mini-FPGA, o funcionamento do somador ;-).

Circuito somador: dataa = 8, datab = 5, sum = 13. Clique para ampliar.

Publicado por Renato de Pierri em 23/nov/2023.

Fonte: Manual de exercícios de Introdução ao Verilog, da Intel.

Last updated by at .