Skip to content

Controlador CSR

Diogo Valadares Reis dos Santos edited this page Aug 26, 2025 · 2 revisions

[English]

[← Página Anterior | Próxima Página →] (Esta página está em construção)

O Controlador de Registradores de Controle e Status (CSR)

O Controlador de Registradores de Controle e Status (CSR) é o maior componente do DRISC-V. Ele é responsável por gerenciar instruções de sistema, armazenar os CSRs e lidar com interrupções e exceções. Sua implementação é opcional, pois não afeta diretamente a execução de instruções padrão.

Controlador CSR

O Controlador de CSR inclui duas interfaces de comunicação com o Controlador de Operações e com o Contador de Programa. Essas interfaces fornecem dados essenciais para detectar e tratar exceções dentro do sistema. A tabela a seguir resume essas conexões:

Sinal Conectado a Entrada/Saída Descrição
Instrução Atual Controlador de Operações Entrada Serve como Trap Value para certas exceções. Parâmetros como funct3 são extraídos dela.
Próxima Instrução Controlador de Operações Entrada Decodificada em instruções de sistema e endereços de CSR.
Próxima Instrução Decodificada Controlador de Operações Entrada Usada para verificar se o próximo opcode é válido ou uma instrução de sistema.
Carga, Armazenamento e Salto Controlador de Operações Entrada Dispara exceções de desalinhamento causadas por essas instruções.
Exceção Controlador de Operações Saída Sinaliza que uma exceção ocorreu.
Próxima Carga de Sistema Controlador de Operações Saída Usada para carregar CSRs mapeados na memória externa, acionando uma instrução de carga.
Salto de Sistema Controlador de Operações e Contador de Programa Saída Sinaliza um salto usando o Endereço de Destino do Sistema.
Carga de Sistema Contador de Programa Saída Sinaliza ao PC para usar o Endereço de Destino do Sistema para carregamento.
Endereço Calculado Contador de Programa Entrada Contém o endereço calculado pelo PC para saltos e operações de carga/armazenamento.
Endereço de Destino do Sistema Contador de Programa Saída Contém o endereço usado para saltos e cargas de sistema.

Além dessas conexões, o Controlador de CSR também se comunica com os Barramentos A e C para instruções de manipulação de CSR. Ele também recebe sinais de Fase e Interrupção.

Na imagem do componente, é possível ver que ele contém o valor da maioria dos CSRs listados na Página de ISA Disponível. Nem todos são de 32 bits, e isso ocorre porque nem todos os bits precisam ser armazenados — alguns podem ser fixados em zero. Os CSRs que não estão presentes não são obtidos por registradores. São eles: o mip, que é obtido pelos sinais de interrupção, e o time, que é mapeado na memória e obtido de um dispositivo externo.

Comportamento do Controlador de CSR

Antes de analisar como o circuito é configurado internamente, é importante entender a lógica do que está acontecendo.

O Controlador de CSR pode ser dividido em uma rotina síncrona e uma rotina assíncrona.

Rotina Síncrona

Se o sistema estiver em estado de reset:
    Inicializar todos os registradores com seus valores padrão

Senão, se o sistema estiver na fase 2:
    Se houver uma interrupção OU uma exceção:
        Executar a rotina de tratamento de trap
    Senão, se a instrução for MRET:
        Executar a rotina MRET
    Senão, se a instrução for uma operação de CSR E o CSR for válido:
        Atualizar o CSR selecionado com o novo valor calculado

    Se NÃO houver exceção:
        Incrementar o contador de instruções (INSTRET = INSTRET + 1)

Senão, se o sistema estiver na fase 1 E a instrução for uma operação de CSR E o CSR for válido:
    Definir o barramento C com o valor do registrador selecionado

Se o sistema NÃO estiver em estado de reset:
    Incrementar o contador de ciclos (CYCLE = CYCLE + 1)

Função que calcula novos valores de CSR

Entradas: Registrador, Dados  
Saída: Novo valor de CSR

Se o modo de operação for "escrita":
    Retornar Dados

Senão, se o modo for "set":
    Retornar (Registrador OU Dados)

Senão, se o modo for "clear":
    Retornar (Registrador E NÃO Dados)

Senão:
    Não retornar valor

Rotina Assíncrona

Inicializar sinais assíncronos:
    Interrupção ← FALSO
    Exceção ← FALSO
    Causa ← Nenhuma
    Valor ← 0

Se interrupções estiverem habilitadas OU o sistema estiver em Modo Usuário:
    Se a interrupção X estiver habilitada E pendente:
        Interrupção ← VERDADEIRO
        Causa ← Interrupção X

Se Interrupção for VERDADEIRA:
    Se MTVEC estiver em modo vetorizado:
        Endereço de Destino ← MTVEC + (Causa × 4)
    Senão:
        Endereço de Destino ← MTVEC

Senão, se qualquer condição de exceção for VERDADEIRA:
    Exceção ← VERDADEIRA
    Causa ← Código da exceção
    Valor ← Instrução atual, endereço calculado ou 0

Senão, se a instrução for MRET:
    Endereço de Destino ← MEPC

Se Exceção for VERDADEIRA:
    Endereço de Destino ← MTVEC

Dentro do Controlador de CSR

Circuito Interno do CSR

O Controlador de CSR pode ser dividido em múltiplas partes.

Clone this wiki locally