Skip to content

LucasMGcode/Simulador-Cache-4-Way

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Simulador Cache 4-Way

Verilog simulation Language License

Abrir no Colab

Idioma: Português | English

Este projeto implementa uma cache associativa por conjunto 4-way, somente leitura, em Verilog. O objetivo é servir como material educacional de arquitetura de computadores, mostrando como tags, bits de validade, seleção de vias, preenchimento por bloco e política LRU se conectam em um datapath simples.

O projeto nasceu como trabalho da disciplina INF450, mas este repositório contém apenas uma implementação própria e documentação pública. Materiais brutos de referência usados durante o estudo não são redistribuídos neste repositório.

Funcionalidades

  • Cache 4-way set-associative somente leitura.
  • Separação do endereço em tag, line e block offset.
  • Quatro arrays de tags, validade e dados, um por via.
  • Codificador para identificar a via de hit.
  • Decodificador para habilitar escrita na via escolhida em caso de miss.
  • FSM principal para comparar tags, tratar hit, buscar bloco na RAM e atualizar metadados.
  • Política LRU local por conjunto usando idades de 2 bits.
  • Testbench auto-verificável com mensagens PASS/FAIL.
  • Desenho SVG editável no Inkscape e renderizado no Colab com dados reais da simulação.
  • Cobertura de teste para substituição LRU, múltiplas linhas da cache e offsets dentro do bloco.

Estrutura

.
├── assets/               # SVG editável no Inkscape para visualização do datapath
├── src/                  # Código Verilog e testbench
├── docs/                 # Explicações de datapath, FSM, LRU e visualização
├── notebooks/            # Notebook Colab para simular e visualizar o projeto
├── .github/workflows/    # CI com Icarus Verilog
├── LICENSE
├── README.md
└── README.en.md

Como executar

Requisito: Icarus Verilog.

cd src
make sim

O testbench gera uma sequência de leituras e imprime, para cada acesso, endereço, tag, linha, bloco, sinal de hit, via selecionada e dado de saída. Além do log textual, ele gera trace.csv, usado pelo notebook Colab para preencher o SVG do datapath com os sinais de cada acesso. Os cenários cobrem misses em vias inválidas, hit após preenchimento, substituição LRU, indexação em linhas diferentes e leitura de offsets diferentes dentro do mesmo bloco.

Modelo padrão

Parâmetro Valor
CACHE_SIZE 64 bytes
RAM_SIZE 4096 bytes
BLOCK_SIZE 4 bytes
WAYS 4
CACHE_LINES 4
RAM_BITS 12
LINE_BITS 2
BLOCK_BITS 2
TAG_BITS 8

Formato do endereço:

[tag][line][block offset]

Exemplo de saída

ACCESS miss fills invalid way0  addr=0 hit=0 way=0 dout=0
PASS hit              value=0
PASS selected_way     value=0
PASS dout             value=0
...
ACCESS hit updates LRU          addr=0 hit=1 way=0 dout=0
PASS hit              value=1
...
ALL TESTS PASSED

Limitações

  • A cache é somente leitura: não há caminho de escrita do processador para a cache.
  • O projeto é educacional e prioriza clareza arquitetural sobre otimizações de síntese.
  • O testbench cobre os cenários principais, mas ainda pode ser expandido para sequências maiores e padrões aleatórios de acesso.

Documentação

Créditos acadêmicos

Este projeto foi desenvolvido como estudo de arquitetura de computadores. Os exemplos de cache direta, cache 2-way e cache 4-way da disciplina foram usados como referência conceitual, mas o repositório público mantém apenas código e documentação autorais.

Releases

No releases published

Packages

 
 
 

Contributors