mirror of
https://github.com/tillitis/tillitis-key1.git
synced 2025-11-24 17:43:17 -05:00
PoC: Control access to FW RAM
Allow FW RAM access only in the following execution contexts: - Firmware mode - IRQ_SYSCALL_HI Input port `system_mode` of the `fw_ram` module is replaced with an enable port. Since access to FW RAM not longer depend only on system_mode
This commit is contained in:
parent
a871d23d5d
commit
62dba7c4fe
7 changed files with 92 additions and 37 deletions
|
|
@ -17,8 +17,7 @@ module fw_ram (
|
|||
input wire clk,
|
||||
input wire reset_n,
|
||||
|
||||
input wire system_mode,
|
||||
|
||||
input wire en,
|
||||
input wire cs,
|
||||
input wire [ 3 : 0] we,
|
||||
input wire [ 8 : 0] address,
|
||||
|
|
@ -31,21 +30,19 @@ module fw_ram (
|
|||
//----------------------------------------------------------------
|
||||
// Registers and wires.
|
||||
//----------------------------------------------------------------
|
||||
reg [31 : 0] tmp_read_data;
|
||||
reg [31 : 0] mem_read_data0;
|
||||
reg [31 : 0] mem_read_data1;
|
||||
reg ready_reg;
|
||||
wire system_mode_cs;
|
||||
reg bank0;
|
||||
reg bank1;
|
||||
reg [31 : 0] tmp_read_data;
|
||||
reg [31 : 0] mem_read_data0;
|
||||
reg [31 : 0] mem_read_data1;
|
||||
reg ready_reg;
|
||||
reg bank0;
|
||||
reg bank1;
|
||||
|
||||
|
||||
//----------------------------------------------------------------
|
||||
// Concurrent assignment of ports.
|
||||
//----------------------------------------------------------------
|
||||
assign read_data = tmp_read_data;
|
||||
assign ready = ready_reg;
|
||||
assign system_mode_cs = cs && ~system_mode;
|
||||
assign read_data = tmp_read_data;
|
||||
assign ready = ready_reg;
|
||||
|
||||
|
||||
//----------------------------------------------------------------
|
||||
|
|
@ -56,12 +53,12 @@ module fw_ram (
|
|||
.RADDR({3'h0, address[7 : 0]}),
|
||||
.RCLK(clk),
|
||||
.RCLKE(1'h1),
|
||||
.RE(system_mode_cs & bank0),
|
||||
.RE(en & cs & bank0),
|
||||
.WADDR({3'h0, address[7 : 0]}),
|
||||
.WCLK(clk),
|
||||
.WCLKE(1'h1),
|
||||
.WDATA(write_data[15 : 0]),
|
||||
.WE((|we & system_mode_cs & bank0)),
|
||||
.WE((|we & en & cs & bank0)),
|
||||
.MASK({{8{~we[1]}}, {8{~we[0]}}})
|
||||
);
|
||||
|
||||
|
|
@ -70,12 +67,12 @@ module fw_ram (
|
|||
.RADDR({3'h0, address[7 : 0]}),
|
||||
.RCLK(clk),
|
||||
.RCLKE(1'h1),
|
||||
.RE(system_mode_cs & bank0),
|
||||
.RE(en & cs & bank0),
|
||||
.WADDR({3'h0, address[7 : 0]}),
|
||||
.WCLK(clk),
|
||||
.WCLKE(1'h1),
|
||||
.WDATA(write_data[31 : 16]),
|
||||
.WE((|we & system_mode_cs & bank0)),
|
||||
.WE((|we & en & cs & bank0)),
|
||||
.MASK({{8{~we[3]}}, {8{~we[2]}}})
|
||||
);
|
||||
|
||||
|
|
@ -85,12 +82,12 @@ module fw_ram (
|
|||
.RADDR({3'h0, address[7 : 0]}),
|
||||
.RCLK(clk),
|
||||
.RCLKE(1'h1),
|
||||
.RE(system_mode_cs & bank1),
|
||||
.RE(en & cs & bank1),
|
||||
.WADDR({3'h0, address[7 : 0]}),
|
||||
.WCLK(clk),
|
||||
.WCLKE(1'h1),
|
||||
.WDATA(write_data[15 : 0]),
|
||||
.WE((|we & system_mode_cs & bank1)),
|
||||
.WE((|we & en & cs & bank1)),
|
||||
.MASK({{8{~we[1]}}, {8{~we[0]}}})
|
||||
);
|
||||
|
||||
|
|
@ -99,12 +96,12 @@ module fw_ram (
|
|||
.RADDR({3'h0, address[7 : 0]}),
|
||||
.RCLK(clk),
|
||||
.RCLKE(1'h1),
|
||||
.RE(system_mode_cs & bank1),
|
||||
.RE(en & cs & bank1),
|
||||
.WADDR({3'h0, address[7 : 0]}),
|
||||
.WCLK(clk),
|
||||
.WCLKE(1'h1),
|
||||
.WDATA(write_data[31 : 16]),
|
||||
.WE((|we & system_mode_cs & bank1)),
|
||||
.WE((|we & en & cs & bank1)),
|
||||
.MASK({{8{~we[3]}}, {8{~we[2]}}})
|
||||
);
|
||||
|
||||
|
|
@ -129,7 +126,7 @@ module fw_ram (
|
|||
bank1 = 1'h0;
|
||||
tmp_read_data = 32'h0;
|
||||
|
||||
if (system_mode_cs) begin
|
||||
if (en & cs) begin
|
||||
if (address[8]) begin
|
||||
bank1 = 1'h1;
|
||||
tmp_read_data = mem_read_data1;
|
||||
|
|
|
|||
|
|
@ -48,6 +48,8 @@ module tk1 #(
|
|||
input wire access_level_hi,
|
||||
input wire access_level_med,
|
||||
|
||||
output wire fw_ram_en,
|
||||
|
||||
input wire cs,
|
||||
input wire we,
|
||||
input wire [ 7 : 0] address,
|
||||
|
|
@ -202,6 +204,7 @@ module tk1 #(
|
|||
assign system_reset = system_reset_reg;
|
||||
|
||||
assign rom_exec_en = !system_mode | access_level_med | access_level_hi;
|
||||
assign fw_ram_en = !system_mode | access_level_hi;
|
||||
|
||||
//----------------------------------------------------------------
|
||||
// Module instance.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue