Skip to content

Entrada de Usuário

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

[English]

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

Entrada de Usuário

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_byte

Aqui, device_byte é um número entre 0 e 3.

O Teclado

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.

image

O Joystick

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.

image

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

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.

image

O Gerador de Números Aleatórios

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.

image

Código em SystemVerilog

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:

image

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)

Clone this wiki locally