-
Notifications
You must be signed in to change notification settings - Fork 0
terminal (pt‐br)
[English]
O Terminal é um componente que permite que texto seja exibido pela máquina sem a necessidade de renderizar cada caractere pixel a pixel, tornando-o ideal para exibir mensagens do sistema.
A interface do terminal é muito mais simples que a da tela. Ela requer apenas uma entrada ASCII de 7 bits, um sinal de clock e um sinal para limpar o terminal.
Para escrever no terminal em um programa, utilize a instrução de armazenamento de byte (sb). Como o terminal possui um buffer interno, apenas um endereço é necessário para escrever os dados. Para limpar o terminal, envie um sinal de escrita para o próximo endereço usando outra instrução sb.
Na interface da simulação em SystemVerilog, o terminal está localizado no lado direito da janela:
No código SystemVerilog, o terminal funciona utilizando um registrador de deslocamento (shift register). Quando novos dados são escritos no primeiro registrador, os conteúdos existentes são deslocados para baixo no buffer. Ao escrever no arquivo externo, todo o buffer é salvo em formato hexadecimal, separado por bytes.
`timescale 1s/1s
module terminal #(
parameter string TERMINAL_FILE = "terminal.mem"
)
// entradas e saídas
(
input logic clock,
input logic reset, // Sinal de reset adicionado
input logic write,
input logic [7:0] data
);
// registrador de deslocamento
logic [7:0] buffer [0:63];
always @(negedge clock) begin
integer file_handle;
// lógica de reset
if (reset) begin
for (int i = 0; i < 64; i++) begin
buffer[i] <= 8'd0;
end
file_handle = $fopen(TERMINAL_FILE, "w");
if (file_handle != 0) begin
$fclose(file_handle);
end
end
// lógica de escrita
else if (write) begin
// gera o registrador de deslocamento
for (int i = 63; i > 0; i--) begin
buffer[i] <= buffer[i-1];
end
buffer[0] <= data;
// limpa o arquivo antes de escrever o novo conteúdo do buffer
file_handle = $fopen(TERMINAL_FILE, "w");
if (file_handle) begin
foreach (buffer[i]) begin
$fdisplay(file_handle, "%h", buffer[i]);
end
$fclose(file_handle);
end
end
end
endmodule-
- 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