diff options
author | Joachim StroĢmbergson <joachim@secworks.se> | 2015-10-02 15:39:34 +0200 |
---|---|---|
committer | Joachim StroĢmbergson <joachim@secworks.se> | 2015-10-02 15:39:34 +0200 |
commit | 28a9cddf2fa7e934ea790b0e59fcbeddf0c125bc (patch) | |
tree | 0af93427228c0725be061471c2666d23dcfb1e9f /src/rtl | |
parent | d44bb7e5d9b18b92a2dc0fe9dc0bf5b4bf3f438f (diff) |
Removed api error port and added error bit in status register that is set when api access violations happens and cleared by writing the status register.
Diffstat (limited to 'src/rtl')
-rw-r--r-- | src/rtl/aes.v | 34 |
1 files changed, 25 insertions, 9 deletions
diff --git a/src/rtl/aes.v b/src/rtl/aes.v index 98fe61a..7b422b5 100644 --- a/src/rtl/aes.v +++ b/src/rtl/aes.v @@ -48,8 +48,7 @@ module aes( // Data ports. input wire [7 : 0] address, input wire [31 : 0] write_data, - output wire [31 : 0] read_data, - output wire error + output wire [31 : 0] read_data ); //---------------------------------------------------------------- @@ -66,6 +65,7 @@ module aes( localparam ADDR_STATUS = 8'h09; localparam STATUS_READY_BIT = 0; localparam STATUS_VALID_BIT = 1; + localparam STATUS_ERROR_BIT = 2; localparam ADDR_CONFIG = 8'h0a; localparam CTRL_ENCDEC_BIT = 0; @@ -92,7 +92,7 @@ module aes( localparam CORE_NAME0 = 32'h61657320; // "aes " localparam CORE_NAME1 = 32'h20202020; // " " - localparam CORE_VERSION = 32'h302e3830; // "0.80" + localparam CORE_VERSION = 32'h302e3831; // "0.81" //---------------------------------------------------------------- @@ -108,6 +108,10 @@ module aes( reg next_we; reg next_set; + reg error_reg; + reg error_new; + reg error_we; + reg encdec_reg; reg keylen_reg; reg config_we; @@ -147,7 +151,6 @@ module aes( // Wires. //---------------------------------------------------------------- reg [31 : 0] tmp_read_data; - reg tmp_error; wire core_encdec; wire core_init; @@ -164,7 +167,6 @@ module aes( // Concurrent connectivity for ports etc. //---------------------------------------------------------------- assign read_data = tmp_read_data; - assign error = tmp_error; assign core_key = {key0_reg, key1_reg, key2_reg, key3_reg, key4_reg, key5_reg, key6_reg, key7_reg}; @@ -226,6 +228,8 @@ module aes( encdec_reg <= 0; keylen_reg <= 0; + error_reg <= 0; + result_reg <= 128'h00000000000000000000000000000000; valid_reg <= 0; ready_reg <= 0; @@ -236,6 +240,9 @@ module aes( valid_reg <= core_valid; result_reg <= core_result; + if (error_we) + error_reg <= error_new; + if (init_we) begin init_reg <= init_new; @@ -362,6 +369,8 @@ module aes( init_set = 0; next_set = 0; config_we = 0; + error_new = 0; + error_we = 0; key0_we = 0; key1_we = 0; key2_we = 0; @@ -375,7 +384,6 @@ module aes( block2_we = 0; block3_we = 0; tmp_read_data = 32'h00000000; - tmp_error = 0; if (cs) begin @@ -389,6 +397,12 @@ module aes( next_set = write_data[CTRL_NEXT_BIT]; end + ADDR_STATUS: + begin + error_new = 0; + error_we = 1; + end + ADDR_CONFIG: begin config_we = 1; @@ -456,7 +470,8 @@ module aes( default: begin - tmp_error = 1; + error_new = 1; + error_we = 1; end endcase // case (address) end // if (we) @@ -488,7 +503,7 @@ module aes( ADDR_STATUS: begin - tmp_read_data = {30'h00000000, valid_reg, ready_reg}; + tmp_read_data = {29'h00000000, error_reg, valid_reg, ready_reg}; end ADDR_KEY0: @@ -573,7 +588,8 @@ module aes( default: begin - tmp_error = 1; + error_new = 1; + error_we = 1; end endcase // case (address) end |