mirror of
https://github.com/tillitis/tillitis-key1.git
synced 2025-12-15 16:49:15 -05:00
fpga: Add syscall interrupt
Add syscall interrupt to be used for syscalls. The interrupt is triggered by writing to an address in the 0xe1000000-0xe1ffffff The PicoRV32 core is configured to use its minimal, non RISCV-standard, interrupt implementation.
This commit is contained in:
parent
dd48b77047
commit
19ae709c81
4 changed files with 118 additions and 17 deletions
|
|
@ -45,6 +45,8 @@ module tk1 #(
|
|||
output wire gpio3,
|
||||
output wire gpio4,
|
||||
|
||||
input wire syscall,
|
||||
|
||||
input wire cs,
|
||||
input wire we,
|
||||
input wire [ 7 : 0] address,
|
||||
|
|
@ -448,7 +450,17 @@ module tk1 #(
|
|||
end
|
||||
|
||||
// In unused space
|
||||
if ((cpu_addr[29 : 24] > 6'h10) && (cpu_addr[29 : 24] < 6'h3f)) begin
|
||||
if ((cpu_addr[29 : 24] > 6'h10) && (cpu_addr[29 : 24] < 6'h21)) begin
|
||||
force_trap_set = 1'h1;
|
||||
end
|
||||
|
||||
// Outside SYSCALL
|
||||
if (cpu_addr[29 : 24] == 6'h21 & |cpu_addr[23 : 2]) begin
|
||||
force_trap_set = 1'h1;
|
||||
end
|
||||
|
||||
// In unused space
|
||||
if ((cpu_addr[29 : 24] > 6'h21) && (cpu_addr[29 : 24] < 6'h3f)) begin
|
||||
force_trap_set = 1'h1;
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -878,6 +878,17 @@ module tb_tk1 ();
|
|||
// Unused trap range: 0xd1000000-0xfeffffff
|
||||
$display("--- test11: Unused");
|
||||
cpu_read_check_range_should_trap(32'hd1000000, 32'hd100000f);
|
||||
cpu_read_check_range_should_trap(32'he0fffff0, 32'he0ffffff);
|
||||
|
||||
// SYSCALL trap range. 0xe1000004-0xe1ffffff
|
||||
$display("--- test11: SYSCALL");
|
||||
cpu_read_check_range_should_not_trap(32'he1000000, 32'he1000003);
|
||||
cpu_read_check_range_should_trap(32'he1000004, 32'he100000f);
|
||||
cpu_read_check_range_should_trap(32'he1fffff0, 32'he1ffffff);
|
||||
|
||||
// Unused trap range: 0xe2000000-0xfeffffff
|
||||
$display("--- test11: Unused");
|
||||
cpu_read_check_range_should_trap(32'he2000000, 32'he200000f);
|
||||
cpu_read_check_range_should_trap(32'hfefffff0, 32'hfeffffff);
|
||||
|
||||
// TK1 trap range: 0xff000400-0xffffffff
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue