mirror of
https://github.com/tillitis/tillitis-key1.git
synced 2025-01-04 04:10:52 -05:00
Add HW to detect trap in cpu and signal using the LEDs
Signed-off-by: Joachim Strömbergson <joachim@assured.se>
This commit is contained in:
parent
e04b502833
commit
d335dd708a
@ -17,6 +17,7 @@ module tk1(
|
|||||||
input wire clk,
|
input wire clk,
|
||||||
input wire reset_n,
|
input wire reset_n,
|
||||||
|
|
||||||
|
input wire cpu_trap,
|
||||||
output wire fw_app_mode,
|
output wire fw_app_mode,
|
||||||
|
|
||||||
output wire led_r,
|
output wire led_r,
|
||||||
@ -103,8 +104,15 @@ module tk1(
|
|||||||
reg app_size_we;
|
reg app_size_we;
|
||||||
|
|
||||||
reg [31 : 0] blake2s_addr_reg;
|
reg [31 : 0] blake2s_addr_reg;
|
||||||
|
reg [31 : 0] blake2s_addr_new;
|
||||||
reg blake2s_addr_we;
|
reg blake2s_addr_we;
|
||||||
|
|
||||||
|
reg [23 : 0] cpu_trap_ctr_reg;
|
||||||
|
reg [23 : 0] cpu_trap_ctr_new;
|
||||||
|
reg [2 : 0] cpu_trap_led_reg;
|
||||||
|
reg [2 : 0] cpu_trap_led_new;
|
||||||
|
reg cpu_trap_led_we;
|
||||||
|
|
||||||
|
|
||||||
//----------------------------------------------------------------
|
//----------------------------------------------------------------
|
||||||
// Wires.
|
// Wires.
|
||||||
@ -114,6 +122,8 @@ module tk1(
|
|||||||
reg tmp_ready;
|
reg tmp_ready;
|
||||||
/* verilator lint_on UNOPTFLAT */
|
/* verilator lint_on UNOPTFLAT */
|
||||||
|
|
||||||
|
reg [2 : 0] muxed_led;
|
||||||
|
|
||||||
|
|
||||||
//----------------------------------------------------------------
|
//----------------------------------------------------------------
|
||||||
// Concurrent connectivity for ports etc.
|
// Concurrent connectivity for ports etc.
|
||||||
@ -141,9 +151,9 @@ module tk1(
|
|||||||
.RGB1(led_g),
|
.RGB1(led_g),
|
||||||
.RGB2(led_b),
|
.RGB2(led_b),
|
||||||
.RGBLEDEN(1'h1),
|
.RGBLEDEN(1'h1),
|
||||||
.RGB0PWM(led_reg[LED_R_BIT]),
|
.RGB0PWM(muxed_led[LED_R_BIT]),
|
||||||
.RGB1PWM(led_reg[LED_G_BIT]),
|
.RGB1PWM(muxed_led[LED_G_BIT]),
|
||||||
.RGB2PWM(led_reg[LED_B_BIT]),
|
.RGB2PWM(muxed_led[LED_B_BIT]),
|
||||||
.CURREN(1'b1)
|
.CURREN(1'b1)
|
||||||
);
|
);
|
||||||
/* verilator lint_on PINMISSING */
|
/* verilator lint_on PINMISSING */
|
||||||
@ -172,9 +182,13 @@ module tk1(
|
|||||||
cdi_mem[5] <= 32'h0;
|
cdi_mem[5] <= 32'h0;
|
||||||
cdi_mem[6] <= 32'h0;
|
cdi_mem[6] <= 32'h0;
|
||||||
cdi_mem[7] <= 32'h0;
|
cdi_mem[7] <= 32'h0;
|
||||||
|
cpu_trap_ctr_reg <= 24'h0;
|
||||||
|
cpu_trap_led_reg <= 3'h4;
|
||||||
end
|
end
|
||||||
|
|
||||||
else begin
|
else begin
|
||||||
|
cpu_trap_ctr_reg <= cpu_trap_ctr_new;
|
||||||
|
|
||||||
gpio1_reg[0] <= gpio1;
|
gpio1_reg[0] <= gpio1;
|
||||||
gpio1_reg[1] <= gpio1_reg[0];
|
gpio1_reg[1] <= gpio1_reg[0];
|
||||||
|
|
||||||
@ -212,10 +226,37 @@ module tk1(
|
|||||||
if (cdi_mem_we) begin
|
if (cdi_mem_we) begin
|
||||||
cdi_mem[address[2 : 0]] <= write_data;
|
cdi_mem[address[2 : 0]] <= write_data;
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if (cpu_trap_led_we) begin
|
||||||
|
cpu_trap_led_reg <= cpu_trap_led_new;
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end // reg_update
|
end // reg_update
|
||||||
|
|
||||||
|
|
||||||
|
//----------------------------------------------------------------
|
||||||
|
// trap_led_logic
|
||||||
|
//----------------------------------------------------------------
|
||||||
|
always @*
|
||||||
|
begin : trap_led_logic
|
||||||
|
cpu_trap_led_new = 3'h0;
|
||||||
|
cpu_trap_led_we = 1'h0;
|
||||||
|
|
||||||
|
cpu_trap_ctr_new = cpu_trap_ctr_reg + 1'h1;
|
||||||
|
|
||||||
|
if (cpu_trap_ctr_reg == 24'h0) begin
|
||||||
|
cpu_trap_led_new = cpu_trap_led_reg ^ 3'h4;
|
||||||
|
cpu_trap_led_we = 1'h1;
|
||||||
|
end
|
||||||
|
|
||||||
|
if (cpu_trap) begin
|
||||||
|
muxed_led = cpu_trap_led_reg;
|
||||||
|
end else begin
|
||||||
|
muxed_led = led_reg;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
//----------------------------------------------------------------
|
//----------------------------------------------------------------
|
||||||
// api
|
// api
|
||||||
//----------------------------------------------------------------
|
//----------------------------------------------------------------
|
||||||
|
@ -68,6 +68,7 @@ module application_fpga(
|
|||||||
wire clk;
|
wire clk;
|
||||||
wire reset_n;
|
wire reset_n;
|
||||||
|
|
||||||
|
wire cpu_trap;
|
||||||
wire cpu_valid;
|
wire cpu_valid;
|
||||||
wire [03 : 0] cpu_wstrb;
|
wire [03 : 0] cpu_wstrb;
|
||||||
/* verilator lint_off UNUSED */
|
/* verilator lint_off UNUSED */
|
||||||
@ -168,6 +169,7 @@ module application_fpga(
|
|||||||
) cpu(
|
) cpu(
|
||||||
.clk(clk),
|
.clk(clk),
|
||||||
.resetn(reset_n),
|
.resetn(reset_n),
|
||||||
|
.trap(cpu_trap),
|
||||||
|
|
||||||
.mem_valid(cpu_valid),
|
.mem_valid(cpu_valid),
|
||||||
.mem_ready(muxed_ready_reg),
|
.mem_ready(muxed_ready_reg),
|
||||||
@ -181,7 +183,6 @@ module application_fpga(
|
|||||||
/* verilator lint_off PINCONNECTEMPTY */
|
/* verilator lint_off PINCONNECTEMPTY */
|
||||||
.irq(32'h0),
|
.irq(32'h0),
|
||||||
.eoi(),
|
.eoi(),
|
||||||
.trap(),
|
|
||||||
.trace_valid(),
|
.trace_valid(),
|
||||||
.trace_data(),
|
.trace_data(),
|
||||||
.mem_instr(),
|
.mem_instr(),
|
||||||
@ -310,6 +311,7 @@ module application_fpga(
|
|||||||
.clk(clk),
|
.clk(clk),
|
||||||
.reset_n(reset_n),
|
.reset_n(reset_n),
|
||||||
|
|
||||||
|
.cpu_trap(cpu_trap),
|
||||||
.fw_app_mode(fw_app_mode),
|
.fw_app_mode(fw_app_mode),
|
||||||
|
|
||||||
.led_r(led_r),
|
.led_r(led_r),
|
||||||
|
Loading…
Reference in New Issue
Block a user