diff --git a/core/external_interfaces.sv b/core/external_interfaces.sv index 6a2c93a..5d5c1eb 100644 --- a/core/external_interfaces.sv +++ b/core/external_interfaces.sv @@ -139,17 +139,8 @@ interface l1_arbiter_request_interface; logic request; logic ack; - function l2_request_t to_l2 (input bit[L2_SUB_ID_W-1:0] sub_id); - to_l2.addr = addr[31:2]; - to_l2.rnw = rnw; - to_l2.be = be; - to_l2.is_amo = is_amo; - to_l2.amo_type_or_burst_size = is_amo ? amo : size; - to_l2.sub_id = sub_id; - endfunction - modport master (output addr, data, rnw, be, size, is_amo, amo, request, input ack); - modport slave (import to_l2, input addr, data, rnw, be, size, is_amo, amo, request, output ack); + modport slave (input addr, data, rnw, be, size, is_amo, amo, request, output ack); modport formal (input addr, data, rnw, be, size, is_amo, amo, request, ack); endinterface diff --git a/core/l1_arbiter.sv b/core/l1_arbiter.sv index 9d8757b..972713f 100755 --- a/core/l1_arbiter.sv +++ b/core/l1_arbiter.sv @@ -40,142 +40,83 @@ module l1_arbiter l1_arbiter_return_interface.slave l1_response[L1_CONNECTIONS-1:0] ); - l2_request_t[L1_CONNECTIONS-1:0] l2_requests; + l2_request_t [L1_CONNECTIONS-1:0] l2_requests; logic [L1_CONNECTIONS-1:0] requests; logic [L1_CONNECTIONS-1:0] acks; + logic [((L1_CONNECTIONS == 1) ? 0 : ($clog2(L1_CONNECTIONS)-1)) : 0] arb_sel; logic push_ready; logic request_exists; + //////////////////////////////////////////////////// + //Implementation + //Interface to array + generate for (genvar i = 0; i < L1_CONNECTIONS; i++) begin + assign requests[i] = l1_request[i].request; + assign l1_request[i].ack = acks[i]; + end endgenerate - ////////////////////////////////////// - genvar i; - - generate - for (i=0; i = 0; i--) begin - if (requests[i]) begin - l2.addr = l2_requests[i].addr; - l2.rnw = l2_requests[i].rnw; - l2.be = l2_requests[i].be; - l2.is_amo = l2_requests[i].is_amo; - l2.amo_type_or_burst_size = l2_requests[i].amo_type_or_burst_size; - l2.sub_id = l2_requests[i].sub_id; - end - end + acks = '0; + acks[arb_sel] = l2.request_push; end - generate - for (i=0; i