{"id":51824255,"url":"https://github.com/nkdwon/ac3-tp01-riscv-cache-controller","last_synced_at":"2026-07-22T07:33:43.545Z","repository":{"id":361517325,"uuid":"1249418345","full_name":"nkdwon/ac3-tp01-riscv-cache-controller","owner":"nkdwon","description":null,"archived":false,"fork":false,"pushed_at":"2026-05-31T03:05:26.000Z","size":122,"stargazers_count":0,"open_issues_count":4,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-31T03:12:43.129Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"SystemVerilog","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nkdwon.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-25T17:19:30.000Z","updated_at":"2026-05-31T03:05:30.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/nkdwon/ac3-tp01-riscv-cache-controller","commit_stats":null,"previous_names":["nkdwon/ac3-tp01-riscv-cache-controller"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/nkdwon/ac3-tp01-riscv-cache-controller","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nkdwon%2Fac3-tp01-riscv-cache-controller","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nkdwon%2Fac3-tp01-riscv-cache-controller/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nkdwon%2Fac3-tp01-riscv-cache-controller/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nkdwon%2Fac3-tp01-riscv-cache-controller/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nkdwon","download_url":"https://codeload.github.com/nkdwon/ac3-tp01-riscv-cache-controller/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nkdwon%2Fac3-tp01-riscv-cache-controller/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35753457,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"online","status_checked_at":"2026-07-22T02:00:06.236Z","response_time":124,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-07-22T07:33:40.288Z","updated_at":"2026-07-22T07:33:43.538Z","avatar_url":"https://github.com/nkdwon.png","language":"SystemVerilog","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 📘 Trabalho Prático 1 — Controlador de Cache RISC-V\n\n## Integrantes\n\n- Felipe Barros Ratton de Almeida\n- Laura Menezes Heráclito Alves\n- Mateus Ribeiro Fernandes\n- Vitor de Meira Gomes\n\n---\n\n## 🎯 Objetivo\n\nEste projeto tem como objetivo implementar e validar um controlador de cache em SystemVerilog, baseado na especificação apresentada no livro:\n\n**Computer Organization and Design: The Hardware/Software Interface — RISC-V Edition**\n\nO trabalho foi desenvolvido para a disciplina de Arquitetura de Computadores III e tem como foco a compreensão prática dos principais conceitos relacionados à hierarquia de memória, incluindo:\n\n- Funcionamento de caches;\n- Políticas de leitura e escrita;\n- Tratamento de cache misses;\n- Controle de bits valid e dirty;\n- Política write-back;\n- Comunicação entre cache e memória principal.\n\n---\n\n## 📚 Referência Teórica\n\nA implementação segue a arquitetura apresentada no:\n\n**Capítulo 5, Seção 5.12 — Computer Organization and Design: The Hardware/Software Interface (RISC-V Edition)**\n\nA organização dos módulos e a estrutura geral da cache foram inspiradas diretamente no modelo de cache direct-mapped apresentado pelo livro.\n\n---\n\n## 🏗️ Arquitetura Implementada\n\nO projeto implementa uma cache de mapeamento direto (*Direct-Mapped Cache*) composta pelos seguintes módulos:\n\n| Módulo | Descrição |\n|----------|----------|\n| `cache_def.sv` | Definições de tipos, parâmetros e interfaces |\n| `dm_cache_data.sv` | Memória de dados da cache |\n| `dm_cache_tag.sv` | Memória de tags da cache |\n| `dm_cache_fsm.sv` | Controlador principal da cache (FSM) |\n| `memory_model.sv` | Modelo simplificado de memória principal |\n| `cpu_request_model.sv` | Gerador de requisições da CPU para testes |\n\n---\n\n## ⚙️ Adaptações de Implementação\n\nEmbora a arquitetura siga a especificação apresentada pelo livro, algumas adaptações foram realizadas para facilitar a simulação utilizando o Icarus Verilog:\n\n- Implementação de modelos simplificados de CPU e memória principal;\n- Criação de um ambiente completo de validação funcional;\n- Ajustes na FSM para compatibilidade com o simulador;\n- Simplificação de algumas interfaces internas.\n\nEssas adaptações não alteram os requisitos funcionais do controlador de cache.\n\n---\n\n## 📦 Estrutura do Projeto\n\n```text\nac3-tp01-riscv-cache-controller/\n├── bin/\n│\n├── debug/\n│   ├── tb_smoke.sv\n│   └── tb_smoke_memories.sv\n│\n├── docs/\n│   ├── enunciado/\n│   └── relatorio/\n│\n├── src/\n│   ├── cache_def.sv\n│   ├── cpu_request_model.sv\n│   ├── dm_cache_data.sv\n│   ├── dm_cache_fsm.sv\n│   ├── dm_cache_tag.sv\n│   └── memory_model.sv\n│\n├── tb/\n│   ├── tb_dm_cache.sv\n│   ├── tests_read.sv\n│   ├── tests_write.sv\n│   ├── tests_replacement.sv\n│   ├── tests_consistency.sv\n│   └── tests_edge_cases.sv\n│\n├── Makefile\n├── README.md\n└── .gitignore\n```\n\n---\n\n## 🧪 Testes Implementados\n\nO projeto contempla todos os cenários mínimos exigidos pelo enunciado.\n\n### Leitura (Read Path)\n\n- Cache Hit\n- Cache Miss\n- Atualização correta de Valid Bit\n- Atualização correta de Tag\n\n### Escrita (Write Path)\n\n- Write Hit\n- Write Miss\n- Política Write-Back\n- Atualização do Dirty Bit\n\n### Substituição\n\n- Substituição de blocos\n- Escrita de blocos dirty na memória principal\n- Validação da política de substituição\n\n### Consistência\n\n- Sequências de leitura e escrita\n- Acessos repetidos ao mesmo endereço\n- Conflitos de mapeamento\n\n### Casos Limite\n\n- Cache inicialmente vazia\n- Cache totalmente inválida\n- Endereços extremos\n\n---\n\n## 📊 Funcionalidades\n\n- Cache Hit\n- Cache Miss\n- Leitura de memória\n- Escrita em cache\n- Write-Back\n- Dirty Bit\n- Valid Bit\n- Controle por FSM\n- Integração com memória principal\n- Simulação automatizada\n\n---\n\n## 🛠️ Dependências\n\n### Linux (Ubuntu/Debian)\n\nInstalar:\n\n```bash\nsudo apt update\nsudo apt install iverilog gtkwave make\n```\n\nVerificar instalação:\n\n```bash\niverilog -V\ngtkwave --version\nmake --version\n```\n\nFerramentas utilizadas:\n\n- Icarus Verilog\n- GTKWave\n- GNU Make\n\n---\n\n## ▶️ Compilação\n\nPara compilar o projeto:\n\n```bash\nmake build\n```\n\n---\n\n## ▶️ Execução\n\nPara executar todos os testes:\n\n```bash\nmake run\n```\n\nou\n\n```bash\nmake test\n```\n\n---\n\n## 📈 Visualização de Waveforms\n\nApós a execução da simulação:\n\n```bash\nmake wave\n```\n\nSerá aberto o arquivo:\n\n```text\nbin/wave.vcd\n```\n\npara inspeção dos sinais através do GTKWave.\n\n---\n\n## 🧹 Limpeza\n\nRemover arquivos gerados:\n\n```bash\nmake clean\n```\n\n---\n\n## ❓ Ajuda\n\nListar os comandos disponíveis:\n\n```bash\nmake help\n```\n\n---\n\n## 🪟 Windows\n\n### Opção recomendada: WSL\n\n```powershell\nwsl --install\n```\n\nApós a instalação:\n\n```bash\nsudo apt update\nsudo apt install iverilog gtkwave make\n```\n\n### Opção nativa\n\n- Icarus Verilog: http://bleyer.org/icarus/\n- GTKWave: https://gtkwave.sourceforge.net/\n\n---\n\n## 🐞 Sinais Relevantes para Debug\n\nDurante a análise das waveforms recomenda-se observar:\n\n- `hit`\n- `miss`\n- `valid`\n- `dirty`\n- `mem_req`\n- `cpu_req`\n- `ready`\n- `rw`\n\n---\n\n## 🎓 Contexto Acadêmico\n\nProjeto desenvolvido para fins acadêmicos na disciplina de Arquitetura de Computadores III.\n\nO objetivo principal é exercitar conceitos de hierarquia de memória e projeto de hardware utilizando SystemVerilog.\n\n---\n\n## 📌 Licença\n\nUso exclusivamente acadêmico.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnkdwon%2Fac3-tp01-riscv-cache-controller","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnkdwon%2Fac3-tp01-riscv-cache-controller","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnkdwon%2Fac3-tp01-riscv-cache-controller/lists"}