[aes/rtl] Fix clearing of key and output registers
diff --git a/hw/ip/aes/rtl/aes_control.sv b/hw/ip/aes/rtl/aes_control.sv
index 0e49e00..0b7061e 100644
--- a/hw/ip/aes/rtl/aes_control.sv
+++ b/hw/ip/aes/rtl/aes_control.sv
@@ -180,10 +180,12 @@
key_full_we_o = 1'b1;
key_dec_sel_o = KEY_DEC_CLEAR;
key_dec_we_o = 1'b1;
- key_clear_we_o = 1'b0;
+ key_clear_we_o = 1'b1;
end
if (data_out_clear_i) begin
- state_sel_o = STATE_CLEAR;
+ add_rk_sel_o = ADD_RK_INIT;
+ key_words_sel_o = KEY_WORDS_ZERO;
+ round_key_sel_o = ROUND_KEY_DIRECT;
data_out_we_o = 1'b1;
data_out_clear_we_o = 1'b1;
end
@@ -298,7 +300,7 @@
end
FINISH: begin
- // Final round: do not update state anymore
+ // Final round
// Select key words for add_round_key
if (dec_key_gen_q) begin
@@ -389,9 +391,9 @@
end
end
- // Clear once all output regs have been read
- assign output_valid_o = data_out_we_o;
- assign output_valid_we_o = data_out_we_o | data_out_read;
+ // Clear once all output regs have been read, or when output is cleared
+ assign output_valid_o = data_out_we_o & ~data_out_clear_we_o;
+ assign output_valid_we_o = data_out_we_o | data_out_read | data_out_clear_we_o;
always_ff @(posedge clk_i or negedge rst_ni) begin : reg_output_valid
if (!rst_ni) begin