izumizawa / mc851

Projeto com objetivo de desenvolver um sistema computacional contendo, ao menos, um processador e seus componentes periféricos.
5 stars 0 forks source link

[Barramento] Escolher e implementar um protocolo de arbitragem, controle e roteamento de barramento #34

Open daniel-pg opened 11 months ago

daniel-pg commented 11 months ago

Problema: A CPU pode fazer até duas requisições de memória por ciclo, uma no estágio de Fetch (IF) e outra no estágio de Memória (MEM).

Na versão da CPU que entregamos ao final da disciplina de MC851, resolvemos isso com uma arquitetura Harvard de memória (em termos simples: uma ROM de instruções e RAM+Periféricos separados). Isso funciona, mas não é o ideal, pois não segue o padrão do RISC-V nem permite carregar novos programas dinamicamente.

Esse problema pode ser mitigado introduzindo-se uma cache separada para cada estágio (cada uma tem 1 MMU), reduzindo a quantidade de conflitos. Mas isso por si só não resolve o problema; o que acontece se ambas as caches derem miss ao mesmo tempo? Precisamos de mecanismo de arbitragem das requisições das MMUs de Dados e Instruções, onde o ideal seria que:

  1. Uma MMU só acesse um único dispositivo mapeado em memória por vez.
  2. Um dispositivo só seja acessado por uma única MMU.
  3. Cada acesso permita fazer 1 leitura, 1 escrita, ou (opcional) 1 leitura+1 escrita.
  4. Se as duas MMUs tentarem acessar dispositivos diferentes e não houver conflito de recursos, duas transações independentes podem ser executadas.
  5. Cada transação de memória permita especificar quantas palavras devem ser escritas ou lidas (pode ser útil para a cache ler um bloco inteiro de uma vez).
  6. Uma vez iniciada e aceita, uma transação não pode ser interrompida por uma nova requisição.
  7. Requisições em endereços inválidos devem retornar um erro.

Não é necessário reinventar a roda! Protocolos abertos:

Outros protocolos:

Nota: O controlador de barramento atualmente é chamado de IMC (controlador de memória integrado), seja por inexperiência/desconhecimento meu, ou por indefinição da arquitetura de memória, ou porque o artigo da Wikipedia misturou um monte de coisas que não tem nada a ver, ou porque essas coisas tem uns 1000 nomes diferentes de acordo com a literatura (alguns chamam de Interconnect, por exemplo).