-
Notifications
You must be signed in to change notification settings - Fork 0
Entrada de Usuário
[English]
A entrada de usuário consiste em 4 bytes, cada um representando um dispositivo diferente. Esses bytes podem ser acessados com as seguintes instruções:
la t0 0x00fffffc
lb t0 t0 device_byteAqui, device_byte é um número entre 0 e 3.
O teclado é responsável por ler a entrada e transmiti-la em formato ASCII.
No Logisim Evolution, ele é um componente nativo que armazena uma sequência de caracteres e fornece o primeiro caractere digitado por meio de uma saída de 7 bits. Essa saída é combinada com um bit adicional que indica se há caracteres no buffer. Esse bit é colocado na posição mais significativa do byte, representando efetivamente o sinal do número, o que facilita testar se o valor é válido.
Sempre que o teclado recebe um sinal de leitura, o primeiro caractere é removido do buffer. Isso continua até que o buffer esteja vazio. O teclado também transmite um sinal de interrupção externa ao processador, permitindo que o programa em execução seja interrompido para que a entrada disponível seja processada imediatamente.
O joystick é um dispositivo de entrada simples que permite controle direcional dentro da simulação. Na versão atual do projeto, ele está disponível apenas na simulação do Logisim.
Os dados do joystick são acessados lendo o terceiro byte da entrada do usuário. Ele retorna os valores X e Y no formato 0xXY. Para utilizar esses dados de forma eficaz, pode ser necessário um processamento adicional para separar cada eixo do byte.
Os interruptores são componentes que permitem entrada de bits individuais por meio do segundo byte da entrada do usuário. Assim como o joystick, esse dispositivo não está disponível na simulação em SystemVerilog.
Embora não seja um dispositivo de entrada do usuário, o Gerador de Números Aleatórios é acessado por meio do primeiro byte. Ele gera um novo valor aleatório toda vez que a palavra de entrada do usuário é lida.
Em SystemVerilog, esses componentes não podem ser acessados diretamente. Para permitir a interação, foi desenvolvido um programa externo que facilita a comunicação com a simulação por meio de um arquivo de texto compartilhado.
A imagem abaixo mostra esse programa, com o componente do teclado destacado:
Abaixo está o código responsável por lidar com a entrada do usuário:
`timescale 1s/1s
module user_input #(
parameter KEYBOARD_FILE = "keyboard.mem"
) (
input read,
input clock,
input reset,
output [31:0] data_out
);
// ... (código completo mantido como no original)-
- 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