Skip to content

Índice de Programas

Diogo Valadares Reis dos Santos edited this page Aug 26, 2025 · 1 revision

[English]

[← Página Anterior | Próxima Página →]

Índice de Programas

Esta lista fornece uma visão geral completa da funcionalidade de cada programa disponível para as simulações.


Salto Absoluto

Um programa simples que roda em loop infinito usando a instrução ja (Jump Absolute).

Resultado Esperado

O contador de programa (PC) retorna continuamente ao endereço 4, e o registrador x1 incrementa indefinidamente.


Adição Imediata ao PC

Este programa testa a instrução AUIPC.

Resultado Esperado

Os três primeiros dígitos do primeiro registrador (ra) devem corresponder a 0x004, e os dígitos restantes refletem o valor imediato adicionado (0xf). Cada registrador subsequente incrementa o valor em 4 e modifica o imediato, resultando nos seguintes valores:

Resultado AUIPC


Desvio Condicional

Este programa testa todas as condições de instruções de desvio. Primeiro verifica quando o salto deve ocorrer, depois quando não deve.

Resultado Esperado

Todos os registradores de ra a a2 devem conter o valor 0xffffffff. Se algum deles contiver 0, a condição não está funcionando corretamente.


Chamada e Retorno

Programa que testa as pseudo-instruções call e ret.


Operações CSR

Este programa requer que o controlador CSR esteja ativado. Ele testa todos os CSRs disponíveis para verificar o funcionamento correto e termina com a instrução mret, que deve alterar o bit de privilégio.

Resultado Esperado

Os valores dos registradores podem variar entre Logisim e a simulação SystemVerilog devido às diferenças na implementação do dispositivo de tempo real.

CSR Logisim CSR SV

Teste de Perigo

Este programa verifica riscos de acesso a registradores ou memória na arquitetura. Se não houver riscos, apenas os registradores tp e t0 devem conter o valor 0xffffffff.


Carregamento e Armazenamento

Este programa testa se as instruções de Load e Store funcionam corretamente, carregando diferentes partes da palavra 0xfafbfcfd e armazenando valores em vários endereços de memória com diferentes deslocamentos. O programa termina com uma instrução LUI usando o imediato 0xfffff. Uma variante chamada load ignora as instruções de armazenamento.

Resultado Esperado

As instruções de carregamento devem gerar os seguintes valores nos registradores:

Resultado Load

As instruções de armazenamento devem gerar os seguintes valores na memória:

Resultado Store


Teste de Operações

Este programa testa todas as operações da ALU.

Resultado Esperado

Deve produzir os seguintes valores nos registradores. Note que na versão atual do DRISC-V, operações de divisão resultam em 0 e não geram exceção de instrução ilegal.

Resultado ALU


Quicksort

Este programa executa o algoritmo Quicksort para ordenar um vetor de 16 bytes localizado logo após o programa.

Resultado Esperado

Os 16 bytes serão ordenados. No Logisim, o resultado será:
88 99 aa bb cc dd ee ff 00 11 22 33 44 55 66 77

Quicksort Logisim

Na simulação SystemVerilog, o vetor é diferente para demonstrar ordenação ASCII correta. O resultado será:
0123456789abcdef

Quicksort SV


Insertion Sort

Este programa executa o algoritmo Insertion Sort para ordenar um vetor de 16 bytes localizado logo após o programa.

Resultado Esperado

Igual ao programa Quicksort.


Teste de Registradores

Este programa usa addi para definir todos os registradores com o valor 1.


Tela

Este programa copia uma imagem de um gato da RAM para a tela. É maior que os outros programas e, na simulação SystemVerilog, o tamanho do programa deve ser aumentado para funcionar.

Resultado Esperado

Tela com Gato


Terminal

Este programa testa a funcionalidade do terminal.

Resultado Esperado

O terminal deve imprimir:
This is a test string !@$%¨&*()_{}[]


Chamador e Tratador de Exceções

O tratador de exceções gerencia erros durante a execução do programa. Quando acionado, imprime o motivo da exceção. Interrupções ainda não são tratadas, mas podem ser implementadas adicionando um programa após os rótulos de interrupção no código assembly. Após imprimir a exceção, o tratador retorna ao programa chamador.

Diferente dos outros programas, o tratador deve ser colocado em seu endereço designado: 0x80000000.

O chamador de exceções gera erros para invocar o tratador. É controlado pelo usuário via teclado. Ao iniciar o programa, digitar 0, 2, 3, 4, 6, 8 ou b gera mensagens específicas. Qualquer outro caractere gera um erro de "exceção desconhecida".

Um programa separado, Trap Handler Test, permite testar o tratador sem o controlador CSR. Deve ser usado como um programa normal para verificar a saída das mensagens.


Entrada/Saída do Usuário

Este programa testa tanto a tela quanto a entrada via teclado. Usa macros e recursos do montador para reduzir o tamanho do código.

Comportamento Esperado

Um ponto aparece no centro da tela e começa a se mover. O usuário pode controlar a direção usando as teclas W, A, S e D. Pressionar Q encerra o programa.

Entrada/Saída do Usuário

Clone this wiki locally