@@ -125,11 +125,13 @@ flgs_red_t red_flags;
125125redmule_config_t dec_config;
126126logic dec_config_valid;
127127
128+ logic config_fifo_empty, config_fifo_full;
129+
128130tc_clk_gating i_acc_clock_gating (
129- .clk_i ( clk_i ),
130- .en_i ( dec_config_valid | busy_o ),
131- .test_en_i ( '0 ),
132- .clk_o ( clk_acc )
131+ .clk_i ( clk_i ),
132+ .en_i ( dec_config_valid | config_fifo_empty | busy_o ),
133+ .test_en_i ( '0 ),
134+ .clk_o ( clk_acc )
133135);
134136
135137/* --------------------------------------------------------------*/
@@ -566,6 +568,7 @@ redmule_memory_scheduler #(
566568/* ---------------------------------------------------------------*/
567569
568570logic tiler_busy;
571+ redmule_config_t dec_config_q;
569572
570573redmule_inst_decoder # (
571574 .InstFifoDepth ( 4 ),
@@ -578,25 +581,44 @@ redmule_inst_decoder #(
578581 .x_commit_t ( x_commit_t ),
579582 .x_result_t ( x_result_t )
580583) i_inst_decoder (
581- .clk_i ( clk_i ),
582- .rst_ni ( rst_ni ),
583- .clear_i ( '0 ),
584- .busy_i ( tiler_busy ),
585- .tiler_done_i ( cfg_complete ),
586- .config_valid_o ( dec_config_valid ),
587- .config_o ( dec_config ),
588- .x_issue_req_i ( x_issue_req_i ),
589- .x_issue_resp_o ( x_issue_resp_o ),
590- .x_issue_valid_i ( x_issue_valid_i ),
591- .x_issue_ready_o ( x_issue_ready_o ),
592- .x_register_i ( x_register_i ),
593- .x_register_valid_i ( x_register_valid_i ),
594- .x_register_ready_o ( x_register_ready_o ),
595- .x_commit_i ( x_commit_i ),
596- .x_commit_valid_i ( x_commit_valid_i ),
597- .x_result_o ( x_result_o ),
598- .x_result_valid_o ( x_result_valid_o ),
599- .x_result_ready_i ( x_result_ready_i )
584+ .clk_i ( clk_i ),
585+ .rst_ni ( rst_ni ),
586+ .clear_i ( '0 ),
587+ .config_ready_i ( ~ config_fifo_full ),
588+ .tiler_done_i ( /* cfg_complete*/ ),
589+ .op_done_i ( flgs_streamer.z_stream_sink_flags.done ),
590+ .config_valid_o ( dec_config_valid ),
591+ .config_o ( dec_config ),
592+ .x_issue_req_i ( x_issue_req_i ),
593+ .x_issue_resp_o ( x_issue_resp_o ),
594+ .x_issue_valid_i ( x_issue_valid_i ),
595+ .x_issue_ready_o ( x_issue_ready_o ),
596+ .x_register_i ( x_register_i ),
597+ .x_register_valid_i ( x_register_valid_i ),
598+ .x_register_ready_o ( x_register_ready_o ),
599+ .x_commit_i ( x_commit_i ),
600+ .x_commit_valid_i ( x_commit_valid_i ),
601+ .x_result_o ( x_result_o ),
602+ .x_result_valid_o ( x_result_valid_o ),
603+ .x_result_ready_i ( x_result_ready_i )
604+ );
605+
606+ fifo_v3 # (
607+ .FALL_THROUGH ( 0 ),
608+ .DEPTH ( 2 ),
609+ .dtype ( redmule_config_t )
610+ ) i_config_fifo (
611+ .clk_i ( clk_acc ),
612+ .rst_ni ( rst_ni ),
613+ .flush_i ( clear ),
614+ .testmode_i ( '0 ),
615+ .full_o ( config_fifo_full ),
616+ .empty_o ( config_fifo_empty ),
617+ .usage_o ( ),
618+ .data_i ( dec_config ),
619+ .push_i ( dec_config_valid ),
620+ .data_o ( dec_config_q ),
621+ .pop_i ( cfg_complete )
600622);
601623
602624/* ---------------------------------------------------------------*/
@@ -613,25 +635,25 @@ redmule_ctrl #(
613635 .Width ( Width ),
614636 .NumPipeRegs ( NumPipeRegs )
615637) i_control (
616- .clk_i ( clk_acc ),
617- .rst_ni ( rst_ni ),
618- .test_mode_i ( test_mode_i ),
619- .flgs_streamer_i ( flgs_streamer ),
620- .busy_o ( busy_o ),
621- .tiler_busy_o ( tiler_busy ),
622- .clear_o ( clear ),
623- .evt_o ( evt_o ),
624- .config_i ( dec_config ),
625- .config_o ( redmule_config ),
626- .reg_enable_i ( reg_enable ),
627- .fifo_empty_i ( z_fifo_empty ),
628- .fifo_ready_i ( ~ z_fifo_full ),
629- .start_cfg_i ( dec_config_valid ),
630- .cfg_complete_o ( cfg_complete ),
631- .w_loaded_i ( flgs_scheduler.w_loaded ),
632- .flush_o ( engine_flush ),
633- .cntrl_scheduler_o ( cntrl_scheduler ),
634- .cntrl_flags_o ( cntrl_flags )
638+ .clk_i ( clk_acc ),
639+ .rst_ni ( rst_ni ),
640+ .test_mode_i ( test_mode_i ),
641+ .flgs_streamer_i ( flgs_streamer ),
642+ .busy_o ( busy_o ),
643+ .tiler_busy_o ( tiler_busy ),
644+ .clear_o ( clear ),
645+ .evt_o ( evt_o ),
646+ .config_i ( dec_config_q ),
647+ .config_o ( redmule_config ),
648+ .reg_enable_i ( reg_enable ),
649+ .fifo_empty_i ( z_fifo_empty ),
650+ .fifo_ready_i ( ~ z_fifo_full ),
651+ .start_cfg_i ( ~ config_fifo_empty ),
652+ .cfg_complete_o ( cfg_complete ),
653+ .w_loaded_i ( flgs_scheduler.w_loaded ),
654+ .flush_o ( engine_flush ),
655+ .cntrl_scheduler_o ( cntrl_scheduler ),
656+ .cntrl_flags_o ( cntrl_flags )
635657);
636658
637659
0 commit comments