File tree Expand file tree Collapse file tree 1 file changed +16
-1
lines changed
Expand file tree Collapse file tree 1 file changed +16
-1
lines changed Original file line number Diff line number Diff line change @@ -69,6 +69,8 @@ module hwpe_ctrl_slave
6969
7070 logic triggered_q;
7171
72+ logic done_q1, done_q2;
73+
7274 always_ff @ (posedge clk_i or negedge rst_ni)
7375 begin
7476 if (rst_ni == 1'b0 )
@@ -198,7 +200,7 @@ module hwpe_ctrl_slave
198200 regfile_flags.is_testset = (cfg.req == 1'b1 && cfg.wen == 1'b1 && cfg.add[LOG_REGS + 2 - 1 : 2 ] == REGFILE_MANDATORY_ACQUIRE ) ? 1 : 0 ; // Operation is a test&set to register context_ts
199201 regfile_flags.is_trigger = (cfg.req == 1'b1 && cfg.wen == 1'b0 && cfg.add[LOG_REGS + 2 - 1 : 2 ] == REGFILE_MANDATORY_TRIGGER && cfg.data == '0 ) ? 1 : 0 ; // Operation is a trigger
200202 regfile_flags.is_commit = (cfg.req == 1'b1 && cfg.wen == 1'b0 && cfg.add[LOG_REGS + 2 - 1 : 2 ] == REGFILE_MANDATORY_TRIGGER ) ? 1 : 0 ; // Operation is a commit (or commit & trigger)
201- regfile_flags.true_done = ctrl_i.done & flags_o.is_working; // This is necessary because sometimes done is asserted as soon as rst_ni becomes 1
203+ regfile_flags.true_done = ( ctrl_i.done | done_q1) & ~ done_q2; // This is necessary because sometimes done is asserted as soon as rst_ni becomes 1
202204 flags_o.enable = s_enable_after[3 ]; // Enable after three cycles from rst_ni
203205 end
204206
@@ -465,6 +467,19 @@ module hwpe_ctrl_slave
465467 cfg_req_q <= cfg_req_d;
466468 end
467469
470+ // FF to make flags_o.done a pulse, pulse should be two cycles long so no single event upset can completely destroy it
471+ always_ff @ (posedge clk_i or negedge rst_ni)
472+ begin
473+ if (! rst_ni) begin
474+ done_q1 <= 1'b1 ;
475+ done_q2 <= 1'b1 ;
476+ end
477+ else begin
478+ done_q1 <= ctrl_i.done;
479+ done_q2 <= done_q1;
480+ end
481+ end
482+
468483 assign cfg_id_d = cfg.id;
469484 assign cfg_req_d = cfg.req;
470485 assign cfg.r_id = cfg_id_q;
You can’t perform that action at this time.
0 commit comments