Laboratório: Multiplicador Multiciclo
Este laboratório propõe o desenvolvimento de um multiplicador digital. O objetivo principal é projetar um multiplicador multiciclo e avaliar o seu funcionamento, o que envolve a utilização de clock, registradores de deslocamento e circuitos de controle para o avanço de uma operação por etapas.
Ver histórico de mudanças
Changelog
| Versão | Data | Descrição |
|---|---|---|
| v2025.1 | 15/mar/2025 | Versão inicial |
| v2025.2 | 12/abr/2025 | Alterado formato esperado para o relatório |
| v2025.3 | 23/abr/2025 | Removida menção a máquina de estados |
Disciplina
Este laboratório faz parte da disciplina MC613 - Laboratório de Circuitos Digitais. Ver oferecimento mais recente.
Entrega
- A entrega deverá estar em único arquivo .ZIP contendo todos e apenas os arquivos listados abaixo.
- O nome do arquivo ZIP deve ser RA<RA>.zip, onde <RA> é o RA do componente do grupo que fará a entrega. Por exemplo, RA123456.zip é a entrega do grupo do aluno com o RA 123456.
- Os nomes dos arquivos dentro do ZIP devem ser seguidos.
- Se mais do que um arquivo for recebido para a mesma entrega, apenas o último recebido dentro do prazo será considerado.
- O cumprimento ou não dessas instruções fará parte dos critérios de avaliação.
Arquivos que fazem parte da entrega:
diagrama.pdf: Diagrama de blocos para a entidade do multiplicador.multiplier.vhd: Descrição em VHDL da entidade do multiplicador.multiplier_tb.vhd: Testbench da unidade do multiplicador.multiplier_board.vhd: Descrição em VHDL da entidade de interface de comunicação entre o multiplicador e as conexões na placa DE1-SoC.*.vhd: Descrição em VHDL de quaisquer módulos auxiliares pra construção do seu multiplicador.relatorio.pdf: Resposta da comparação dos relatórios de síntese.
Link para entrega: https://ic.unicamp.br/~isaias/mc613/entrega.
Multiplicador
Um multiplicador digital é um circuito que realiza a operação de multiplicação entre dois números binários. Multiplicadores são essenciais em diversas aplicações como:
- Processamento Digital de Sinais: Filtragem, transformadas e análise de sinais digitais.
- Computação Gráfica: Transformações geométricas em gráficos 3D.
- Machine Learning: Redes neurais e operações matriciais.
- Criptografia: Algoritmos de cifra como RSA usam operações matemáticas complexas.
Escolher a melhor implementação de um multiplicador é uma tarefa fundamental na construção de um chip, pois enquanto um microcontrolador pode fazer seu papel com uma multiplicação implementada em software, uma GPU contém dezenas ou centenas de milhares de multiplicadores para processar os gráficos de última geração dos jogos atuais. Ele pode ser implementado de várias formas, desde multiplicadores combinacionais (rápidos, mas ocupam mais área) até multiplicadores sequenciais (mais lentos, porém ocupam menos área).
Atividades do Laboratório
Parte I - Multiplicador Multiciclo
O diagrama a seguir representa o mecanismo de multiplicação de dois números inteiros sem sinal em múltiplos ciclos. Nele, considerando o resultado (produto) da multiplicação inicializado em zero, o multiplicando é estendido para o dobro do tamanho da palavra e deslocado para a esquerda, e o multiplicador deslocado para a direita a cada ciclo de clock. Também a cada ciclo de clock, o bit menos significativo do multiplicador e avaliado e, se for igual a 1, o multiplicando é somado no produto. A operação de multiplicação estará pronta após, no máximo, N ciclos de clock, onde N é o comprimento (em bits) dos operandos.

Seu trabalho é desenvolver o multiplicador multiciclo acima para operandos de N bits (e produto de 2*N bits), obedecendo a seguinte interface:
entity multiplier is
generic (
N : integer := 4
);
port (
a, b : in std_logic_vector(N-1 downto 0);
-- Operandos (multiplicador e multiplicando)
r : out std_logic_vector(2*N-1 downto 0);
-- Resultado (produto)
clk : in std_logic;
-- Clock
set : in std_logic
-- Operandos foram alterados
);
end multiplier;
Desenhe um diagrama ilustrando a sua implementação do multiplicador e salve como diagrama.pdf.
Na interface, o sinal de entrada set em 1 indica que os operandos a e b foram alterados, ou seja, sinaliza o início de uma nova operação de multiplicação.
Você pode dividir o seu código em vários arquivos *.vhd e utilizar componentes auxiliares, se julgar necessário. Não utilize bibliotecas (libraries) customizadas auxiliares. Ao final, reúna todos os arquivos *.vhd necessários para o projeto em uma única pasta chamada multiplier.
Parte II - Verificação do Multiplicador
Desenvolva uma simulação para testar o funcionamento do seu Multiplicador. A simulação deve ser um testbench, descrito na entidade multiplier_tb, que inclua a maior quantidade de entradas que considerar viável e garanta que seu comportamento está correto. Entregue sua entidade de teste no arquivo multiplier_tb.vhd.
Parte III - Teste na placa DE1-Soc
Desenvolva uma interface de comunicação entre o seu multiplicador e as conexões na placa DE1-SoC. Instancie seu multiplicador para operandos de 5 bits e mapeie as entradas e saídas para a placa. Utilize os switches para as entradas a e b, um dos push-buttons para a entrada set e um dos sinais de clock interno da placa para clk (consulte o manual). Exiba o resultado nos visores de 7 segmentos em hexadecimal. Salve sua entidade de interface como multiplier_board.vhd.
Parte IV - Utilização de Recursos
Analise a saída do relatório de síntese (Synthesis Report) do quartus para a implementação do seu multiplicador. Compare os resultados com uma implementação utilizando o operador de multiplicação e entregue suas conclusões num arquivo relatorio.pdf.