aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoachim StroĢˆmbergson <joachim@assured.se>2019-02-12 13:28:10 +0100
committerJoachim StroĢˆmbergson <joachim@assured.se>2019-02-12 13:28:10 +0100
commitc00b7ab976c5e558ffa043e48d1363d7ae573b0a (patch)
tree96f87e3943ab30a228845ecf88ef1f09fd3db97e
parent3493b95cb0be58262a385afd0d19ab6fb992c16e (diff)
Starting to add control registers and control FSM needed for the key handling and tamper response.
-rw-r--r--src/rtl/fpga_mkm.v90
1 files changed, 80 insertions, 10 deletions
diff --git a/src/rtl/fpga_mkm.v b/src/rtl/fpga_mkm.v
index 6725ed9..6dee64a 100644
--- a/src/rtl/fpga_mkm.v
+++ b/src/rtl/fpga_mkm.v
@@ -44,34 +44,59 @@ module fpga_mkm(
input wire mosi,
output wire miso,
- // Tamper and alarm
+ // Tamper and alarm.
input wire tamper,
output wire alarm,
+ // We will use red LEDs to indicate tamper event.
output wire rled1,
output wire rled2,
output wire rled3,
output wire rled4,
+
+ // We will use the green LED to indicate loaded key.
output wire gled5
);
//----------------------------------------------------------------
+ // Internal constant and parameter definitions.
+ //----------------------------------------------------------------
+ localparam CTRL_IDLE = 0;
+ localparam CTRL_ALARM = 1;
+ localparam CTRL_DONE = 3;
+
+
+ //----------------------------------------------------------------
// Registers including update variables and write enable.
//----------------------------------------------------------------
- reg [31 : 0] counter_reg = 32'b0;
+ reg [21 : 0] alarm_counter_reg = 22'h0;
+
+ reg alarm_reg = 1'h0;
+ reg alarm_new;
+ reg alarm_we;
+
+ reg key_loaded_reg = 1'h0;
+ reg key_loaded_new;
+ reg key_loaded_we;
+
+ reg miso_reg = 1'h0;
+
+ reg [1 : 0] fpga_mkm_ctrl_reg = CTRL_IDLE;
+ reg [1 : 0] fpga_mkm_ctrl_new;
+ reg fpga_mkm_ctrl_we;
//----------------------------------------------------------------
// Concurrent connectivity for ports etc.
//----------------------------------------------------------------
- assign rled1 = counter_reg[21];
- assign rled2 = counter_reg[22];
- assign rled3 = counter_reg[23];
- assign rled4 = counter_reg[24];
- assign gled5 = counter_reg[25];
+ assign rled1 = alarm_counter_reg[21];
+ assign rled2 = alarm_counter_reg[21];
+ assign rled3 = alarm_counter_reg[21];
+ assign rled4 = alarm_counter_reg[21];
+ assign gled5 = key_loaded_reg;
- assign miso = 1'h0;
- assign alarm = counter_reg[25];
+ assign miso = miso_reg;
+ assign alarm = alarm_reg;
//----------------------------------------------------------------
@@ -79,7 +104,52 @@ module fpga_mkm(
//----------------------------------------------------------------
always @ (posedge clk)
begin : reg_update
- counter_reg <= counter_reg + 1;
+ alarm_counter_reg <= alarm_counter_reg + 1;
+
+ if (alarm_we)
+ alarm_reg <= alarm_new;
+
+ if (key_loaded_we)
+ key_loaded_reg <= key_loaded_new;
+
+ if (fpga_mkm_ctrl_we)
+ fpga_mkm_ctrl_reg <= fpga_mkm_ctrl_new;
+ end
+
+
+ //----------------------------------------------------------------
+ // fpga_mkm_ctrl_fsm
+ //----------------------------------------------------------------
+ always @*
+ begin : fpga_mkm_ctrl_fsm
+ alarm_new = 1'h0;
+ alarm_we = 1'h0;
+ key_loaded_new = 1'h0;
+ key_loaded_we = 1'h0;
+ fpga_mkm_ctrl_new = CTRL_IDLE;
+ fpga_mkm_ctrl_we = 1'h0;
+
+ case (fpga_mkm_ctrl_reg)
+
+ CTRL_IDLE:
+ begin
+ if (tamper)
+ begin
+ fpga_mkm_ctrl_new = CTRL_ALARM;
+ fpga_mkm_ctrl_we = 1'h1;
+ end
+ end
+
+
+ CTRL_ALARM:
+ begin
+
+ end
+
+ default:
+ begin
+ end
+ endcase // case (fpga_mkm_ctrl_reg)
end
endmodule // fpga_mkm