-
Notifications
You must be signed in to change notification settings - Fork 0
Índice de Programas
[English]
Esta lista fornece uma visão geral completa da funcionalidade de cada programa disponível para as simulações.
Um programa simples que roda em loop infinito usando a instrução ja (Jump Absolute).
O contador de programa (PC) retorna continuamente ao endereço 4, e o registrador x1 incrementa indefinidamente.
Este programa testa a instrução AUIPC.
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:
Este programa testa todas as condições de instruções de desvio. Primeiro verifica quando o salto deve ocorrer, depois quando não deve.
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.
Programa que testa as pseudo-instruções call e ret.
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.
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.
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.
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.
As instruções de carregamento devem gerar os seguintes valores nos registradores:
As instruções de armazenamento devem gerar os seguintes valores na memória:
Este programa testa todas as operações da ALU.
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.
Este programa executa o algoritmo Quicksort para ordenar um vetor de 16 bytes localizado logo após o programa.
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
Na simulação SystemVerilog, o vetor é diferente para demonstrar ordenação ASCII correta. O resultado será:
0123456789abcdef
Este programa executa o algoritmo Insertion Sort para ordenar um vetor de 16 bytes localizado logo após o programa.
Igual ao programa Quicksort.
Este programa usa addi para definir todos os registradores com o valor 1.
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.
Este programa testa a funcionalidade do terminal.
O terminal deve imprimir:
This is a test string !@$%¨&*()_{}[]
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.
Este programa testa tanto a tela quanto a entrada via teclado. Usa macros e recursos do montador para reduzir o tamanho do código.
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.
-
- 1.1 Introduction
- 1.2 RISC-V Implementation
- 1.2.1 Available Instruction Set
- 1.2.2 Available Non-ISA Features
-
- 2.1 ALU
- 2.2 Register File
- 2.3 Program Counter
- 2.4 Input Buffer
- 2.5 RAM
- 2.6 Operation Controller
- 2.7 CSR Controller
-
- 3.1 Input Devices
- 3.1.1 Keyboard
- 3.1.2 Switches and Joystick
- 3.1.3 Random Number Generator
- 3.1.4 Real-Time Device
- 3.2 Output Devices
- 3.2.1 Screen
- 3.2.2 Terminal
- 3.2.3 Software Interrupt Register
- 3.1 Input Devices