diff options
Diffstat (limited to 'rtl/cache/ring.sv')
| -rw-r--r-- | rtl/cache/ring.sv | 77 |
1 files changed, 0 insertions, 77 deletions
diff --git a/rtl/cache/ring.sv b/rtl/cache/ring.sv deleted file mode 100644 index d934fb7..0000000 --- a/rtl/cache/ring.sv +++ /dev/null @@ -1,77 +0,0 @@ -`include "cache/defs.sv" - -module cache_ring -( - input logic clk, - rst_n, - - input addr_tag core_tag, - input addr_index core_index, - - input ring_req in_data, // lo que se recibe - input logic in_data_valid, // este caché está recibiendo - in_data_ready, - - input logic out_data_ready, // este caché está listo para enviar - output ring_req out_data, // lo que se envía - output logic out_data_valid, // este caché está enviando datos - - input line data_rd, // datos de la línea - - input logic send, - send_read, - send_inval, - set_reply, - output logic out_stall, - in_hold_valid, - last_hop, - output ring_req in_hold -); - - // in_hold: el paquete actual - ring_req send_data, fwd_data, stall_data, out_data_next; - - assign last_hop = in_hold.ttl == `TTL_END; //Indica si es el último salto - - assign out_data = out_stall ? stall_data : out_data_next; - assign out_data_next = send ? send_data : fwd_data; - assign out_data_valid = out_stall || send || (in_hold_valid && !last_hop && in_data_ready); - - assign send_data.tag = core_tag; - assign send_data.ttl = `TTL_MAX; // Acá se inicializa el valor máximo de TTL - assign send_data.data = fwd_data.data; // Esto evita muchos muxes - assign send_data.read = send_read; - assign send_data.index = core_index; - assign send_data.inval = send_inval; - assign send_data.reply = 0; - - always_comb begin - fwd_data = in_hold; - fwd_data.ttl = in_hold.ttl - 2'b1; - - if (set_reply) begin - fwd_data.data = data_rd; - fwd_data.reply = 1; - end - end - - always_ff @(posedge clk or negedge rst_n) - if (!rst_n) begin - in_hold_valid <= 0; - out_stall <= 0; - end else begin - if (in_data_ready) - in_hold_valid <= in_data_valid; - - out_stall <= out_data_valid && !out_data_ready; - end - - always_ff @(posedge clk) begin - if (in_data_ready) - in_hold <= in_data; - - if (!out_stall) - stall_data <= out_data_next; - end - -endmodule |
