diff options
Diffstat (limited to 'src/rtl')
-rw-r--r-- | src/rtl/fpga_mkm.v | 90 |
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 |