summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulianCamacho <jjulian.341@gmail.com>2023-10-05 01:11:09 -0600
committerJulianCamacho <jjulian.341@gmail.com>2023-10-05 01:11:09 -0600
commit955599919d88872512f1cc564619de586db43ea1 (patch)
tree83196e2d3db1b2a3fda33e096ac6cb707da1e77e
parent6f4837bace160fdeb0d1d378f179734fba4a92bc (diff)
cache control comments
-rw-r--r--rtl/cache/cache_control.sv10
1 files changed, 9 insertions, 1 deletions
diff --git a/rtl/cache/cache_control.sv b/rtl/cache/cache_control.sv
index 80490cd..b31b6a8 100644
--- a/rtl/cache/cache_control.sv
+++ b/rtl/cache/cache_control.sv
@@ -176,11 +176,16 @@ module cache_control
CORE: begin
if (replace) begin
+ // Para la línea actual, guardar en el state file que
+ // ahora el estado es INVALID
state_wr = INVALID;
write_state = 1;
if (state_rd == MODIFIED)
writeback = 1;
+
+ // Dependiendo del estado de la línea y de si el core quiere
+ // hacer un write
end else unique case ({state_rd, core_write})
{INVALID, 1'b0}: begin
send = 1;
@@ -303,12 +308,15 @@ module cache_control
if (writeback)
mem_begin = 1;
- // Colisiones de bus
+
+ // Si el envío de un mensaje falló, el anillo intenta enviarlo de nuevo
+ // Reintentar si hay colisiones de bus
retry = (mem_read_end && (write_data || write_state)) || (mem_wait && mem_begin);
// Nótese la diferencia con un assign, ya que send puede cambiar más abajo
lock_line = send;
+ // Reintentar si quiere enviar, pero no puede porque el token no lo permite
if (send && !may_send && !locked)
retry = 1;