Laboratório: Controlador RAM
Este laboratório propõe o desenvolvimento de um controlador de memória RAM. O objetivo envolve a familiarização com um protocolo de comunicação e a utilização de componentes periféricos da FPGA.
Ver histórico de mudanças
Changelog
| Versão | Data | Descrição |
|---|---|---|
| v2025.1 | 24/mai/2025 | Versão inicial |
| v2025.2 | 03/jun/2025 | Corrigidas inconsistências no template de interface |
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: Coletânea de todos os diagramas e formatos de onda requeridos pela atividade.controller.vhd: Descrição em VHDL da entidade do controlador.controller_tb.vhd: Testbench da entidade SDRAM_CTRL.controller_board.vhd: Descrição em VHDL da entidade de interface de comunicação entre o controlador e as conexões na placa DE1-SoC.*.vhd: Descrição em VHDL de quaisquer módulos auxiliares pra construção do seu controlador.
Link para entrega: https://ic.unicamp.br/~isaias/mc613/entrega.
Memória
Conforme nossos projetos vão crescendo, alguns elementos lógicos podem limitar o que é possível fazer, por isso as FPGAs contam com chips dedicados para algumas funções. Um exemplo é a memória, pois embora possamos instanciar um vetor grande em verilog ou VHDL, ele ainda será limitado a alguns kilobytes ou megabytes. Enquanto isso, um chip de SDRAM pode fornecer megabytes ou gigabytes, ao custo de uma latência maior, isto é, a resposta para um acesso leva alguns ciclos.
As memórias SDRAM possuem uma organização interna que divide a memória em várias seções independentes de mesmo tamanho, chamadas bancos, permitindo que o dispositivo opere com um comando em cada banco simultaneamente acelerando o acesso de maneira intercalada. Essas operações são coordenadas por um módulo chamado de controlador de memória, o qual recebe os pedidos de leitura e escrita, e os ordena para garantir a temporização correta dos acessos e o melhor desempenho.
Atividades do laboratório
Parte I - Planejamento
Seu objetivo nesta atividade é projetar uma unidade controladora de memória capaz de ler e escrever da memória SDRAM presente na DE1-SoC. Consulte o datasheet da memória presente na placa DE1-SoC, modelo IS42S16320D-7TL, e implemente a máquina de estados da controladora. Você irá encontrar este documento na página Material Complementar dentro do pacote Datasheets de componentes periféricos.
Estude o manual da unidade de memória e planeje qual deve ser o funcionamento da sua controladora. Entenda quais são os comandos, como enviá-los para a memória, e como ela responde. Planeje a frequência de clock e a temporização das operações.
Entenda como inicializar e configurar a memória e como implementar as operações de leitura e escrita. Você pode considerar leituras e escritas de apenas uma palavra de dados de cada vez. Planeje qual devem ser os formatos de onda de saída de sua controladora (ou de entrada nos pinos de interface com a memória SDRAM) para cada uma das fases: inicialização da memória, leitura de uma palavra de dados e escrita de uma palavra de dados. Considere que após cada uma das operações, a memória deve estar pronta para executar outra.
Após, considere se é necessário implementar uma operação adicional de refresh, e qual deve ser o formato de onda de saída esperado.
Modele uma máquina de estados de uma controladora que agregue todas as operações e resulte nos formatos de onda de saída.
Envie no arquivo diagrama.pdf o diagrama da máquina de estados da controladora de memória e os formatos de onda esperados.
Para desenhar os diagramas de formato de onda, sugere-se utilizar o WaveDrom ou outra ferramenta.
Parte II - Interface da controladora com a CPU e com a DRAM
A sua controladora deve implementar a seguinte interface:
entity SDRAM_CTRL is
port (
-- Interface com a CPU
SYS_CLK : in std_logic;
C_ADDR_IN : in std_logic_vector(24 downto 0);
C_DATA_OUT : out std_logic_vector(15 downto 0);
C_READY : out std_logic;
C_DATA_IN : in std_logic_vector(15 downto 0);
C_WRITE : in std_logic;
C_READ : in std_logic;
-- Interface com a SDRAM
DRAM_DQ : inout std_logic_vector(15 downto 0);
DRAM_ADDR : out std_logic_vector(12 downto 0);
DRAM_BA : out std_logic_vector(1 downto 0)
DRAM_CLK : out std_logic;
DRAM_CKE : out std_logic;
DRAM_LDQM : out std_logic;
DRAM_UDQM : out std_logic;
DRAM_WE_N : out std_logic;
DRAM_CAS_N : out std_logic;
DRAM_RAS_N : out std_logic;
DRAM_CS_N : out std_logic
-- Adicione outros sinais que julgar necessário
);
end SDRAM_CTRL;
Implemente sua entidade SDRAM_CTRL seguindo as orientações anteriores.
Você pode assumir que o clock de entrada SYS_CLK estará na frequência correta planejada na Parte I.
Salve a entidade da controladora no arquivo controller.vhd e crie um testbench, controller_tb.vhd que ilustre seu funcionamento.
Para o testbench, aguarde o tempo de inicialização e teste as operações de leitura e escrita, comparando as formas de onda de saída com o esperado durante o planejamento.
Parte III - Teste na placa DE1-Soc
Como não existe um processador para consultar sua memória, você precisa implementar uma interface com a DE1-SoC para enviar estes pedidos.
- Utilize um dos botões para iniciar uma leitura na memória, pegando o valor presente nos switches SW[9..0] e usando como endereço.
- Utilize outro botão para iniciar uma escrita na memória. Esta função exige duas etapas, uma para informar o endereço e outra para informar os dados, ambas por meio dos switches. Utilize o mesmo botão para avançar de uma para a outra e posteriormente enviar o pedido.
- Ao entrar na operação de escrita, os outros botões não devem parar a operação.
- Utilize os displays para mostrar simultaneamente o endereço acessado e os dados lidos deste endereço.
Além disso, é necessário produzir o clock na frequência correta de comunicação com a memória.
Para isso, utilize um PLL, que pode ser instanciado diretamente pela interface gráfica do Quartus IP Catalog. Procure pela função ALTPLL.
Implemente sua interface para enviar operações de leitura e escrita para a memória SDRAM conforme especificado anteriormente, e envie a entidade no arquivo controller_board.vhd.
Observações
- O laboratório já será considerado entregue se apenas a parte 1 for concluída.