From ca3e810dd0a70833dd96f4087af232d4f02603ac Mon Sep 17 00:00:00 2001 From: Matheus Cavalcante Date: Thu, 7 Oct 2021 10:09:29 +0200 Subject: [PATCH] [hardware] :alien: Retime handshake between lanes and FUs --- hardware/src/lane/operand_requester.sv | 12 +++--------- hardware/src/masku/masku.sv | 5 +++-- hardware/src/sldu/sldu.sv | 2 +- hardware/src/vlsu/vldu.sv | 2 +- 4 files changed, 8 insertions(+), 13 deletions(-) diff --git a/hardware/src/lane/operand_requester.sv b/hardware/src/lane/operand_requester.sv index d4138ac82..1053d4c5e 100644 --- a/hardware/src/lane/operand_requester.sv +++ b/hardware/src/lane/operand_requester.sv @@ -92,8 +92,6 @@ module operand_requester import ara_pkg::*; import rvv_pkg::*; #( strb_t ldu_result_be; logic ldu_result_req; logic ldu_result_gnt; - logic ldu_result_ready; - assign ldu_result_gnt_o = ldu_result_req_i && ldu_result_ready; stream_register #(.T(stream_register_payload_t)) i_ldu_stream_register ( .clk_i (clk_i ), .rst_ni (rst_ni ), @@ -101,7 +99,7 @@ module operand_requester import ara_pkg::*; import rvv_pkg::*; #( .testmode_i(1'b0 ), .data_i ({ldu_result_id_i, ldu_result_addr_i, ldu_result_wdata_i, ldu_result_be_i}), .valid_i (ldu_result_req_i ), - .ready_o (ldu_result_ready ), + .ready_o (ldu_result_gnt_o ), .data_o ({ldu_result_id, ldu_result_addr, ldu_result_wdata, ldu_result_be} ), .valid_o (ldu_result_req ), .ready_i (ldu_result_gnt ) @@ -114,8 +112,6 @@ module operand_requester import ara_pkg::*; import rvv_pkg::*; #( strb_t sldu_result_be; logic sldu_result_req; logic sldu_result_gnt; - logic sldu_result_ready; - assign sldu_result_gnt_o = sldu_result_req_i && sldu_result_ready; stream_register #(.T(stream_register_payload_t)) i_sldu_stream_register ( .clk_i (clk_i ), .rst_ni (rst_ni ), @@ -123,7 +119,7 @@ module operand_requester import ara_pkg::*; import rvv_pkg::*; #( .testmode_i(1'b0 ), .data_i ({sldu_result_id_i, sldu_result_addr_i, sldu_result_wdata_i, sldu_result_be_i}), .valid_i (sldu_result_req_i ), - .ready_o (sldu_result_ready ), + .ready_o (sldu_result_gnt_o ), .data_o ({sldu_result_id, sldu_result_addr, sldu_result_wdata, sldu_result_be} ), .valid_o (sldu_result_req ), .ready_i (sldu_result_gnt ) @@ -136,8 +132,6 @@ module operand_requester import ara_pkg::*; import rvv_pkg::*; #( strb_t masku_result_be; logic masku_result_req; logic masku_result_gnt; - logic masku_result_ready; - assign masku_result_gnt_o = masku_result_req_i && masku_result_ready; stream_register #(.T(stream_register_payload_t)) i_masku_stream_register ( .clk_i (clk_i ), .rst_ni (rst_ni ), @@ -145,7 +139,7 @@ module operand_requester import ara_pkg::*; import rvv_pkg::*; #( .testmode_i(1'b0 ), .data_i ({masku_result_id_i, masku_result_addr_i, masku_result_wdata_i, masku_result_be_i}), .valid_i (masku_result_req_i ), - .ready_o (masku_result_ready ), + .ready_o (masku_result_gnt_o ), .data_o ({masku_result_id, masku_result_addr, masku_result_wdata, masku_result_be} ), .valid_o (masku_result_req ), .ready_i (masku_result_gnt ) diff --git a/hardware/src/masku/masku.sv b/hardware/src/masku/masku.sv index 6ecdacbb4..36f823999 100644 --- a/hardware/src/masku/masku.sv +++ b/hardware/src/masku/masku.sv @@ -643,7 +643,7 @@ module masku import ara_pkg::*; import rvv_pkg::*; #( // Received a grant from the VRF. // Deactivate the request, but do not bump the pointers for now. - if (masku_result_gnt_i[lane]) begin + if (masku_result_req_o[lane] && masku_result_gnt_i[lane]) begin result_queue_valid_d[result_queue_read_pnt_q][lane] = 1'b0; result_queue_d[result_queue_read_pnt_q][lane] = '0; end @@ -673,7 +673,8 @@ module masku import ara_pkg::*; import rvv_pkg::*; #( // Finished committing the results of a vector instruction // When the masku acts as a master for the VRF, wait the grant from the operand requester - if (vinsn_commit_valid && commit_cnt_d == '0 && (!(vinsn_issue.op inside {[VMFEQ:VMSBC]}) || masku_result_gnt_i)) begin + if (vinsn_commit_valid && commit_cnt_d == '0 && (!(vinsn_issue.op inside {[VMFEQ:VMSBC]}) || + &(masku_result_req_o & masku_result_gnt_i))) begin // Mark the vector instruction as being done pe_resp.vinsn_done[vinsn_commit.id] = 1'b1; diff --git a/hardware/src/sldu/sldu.sv b/hardware/src/sldu/sldu.sv index 558493236..1acbc3d0b 100644 --- a/hardware/src/sldu/sldu.sv +++ b/hardware/src/sldu/sldu.sv @@ -413,7 +413,7 @@ module sldu import ara_pkg::*; import rvv_pkg::*; #( // Received a grant from the VRF. // Deactivate the request, but do not bump the pointers for now. - if (sldu_result_gnt_i[lane]) begin + if (sldu_result_req_o[lane] && sldu_result_gnt_i[lane]) begin result_queue_valid_d[result_queue_read_pnt_q][lane] = 1'b0; result_queue_d[result_queue_read_pnt_q][lane] = '0; end diff --git a/hardware/src/vlsu/vldu.sv b/hardware/src/vlsu/vldu.sv index 51c95e0da..8e76bc67c 100644 --- a/hardware/src/vlsu/vldu.sv +++ b/hardware/src/vlsu/vldu.sv @@ -354,7 +354,7 @@ module vldu import ara_pkg::*; import rvv_pkg::*; #( // Received a grant from the VRF. // Deactivate the request, but do not bump the pointers for now. - if (ldu_result_gnt_i[lane]) begin + if (ldu_result_req_o[lane] && ldu_result_gnt_i[lane]) begin result_queue_valid_d[result_queue_read_pnt_q][lane] = 1'b0; result_queue_d[result_queue_read_pnt_q][lane] = '0; end