diff options
| author | Alejandro Soto <alejandro@34project.org> | 2023-10-04 18:06:48 -0600 |
|---|---|---|
| committer | Alejandro Soto <alejandro@34project.org> | 2023-10-04 18:06:48 -0600 |
| commit | cb1c2ce13066d7ef64d92699d005a67858ff06a8 (patch) | |
| tree | b5ef55f9756e96ea01d396c89189c54f8f2a1876 /rtl/cache/cache_control.sv | |
| parent | 8741aef09939f7775cb66058c59cbc8e321f4372 (diff) | |
| parent | 84ac4c10f1e3ca4f779a19a1b0a2c43c5e18e37d (diff) | |
Merge remote-tracking branch 'origin/comentarios' into arqui2
Diffstat (limited to 'rtl/cache/cache_control.sv')
| -rw-r--r-- | rtl/cache/cache_control.sv | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/rtl/cache/cache_control.sv b/rtl/cache/cache_control.sv index 46d4638..33d380a 100644 --- a/rtl/cache/cache_control.sv +++ b/rtl/cache/cache_control.sv @@ -28,6 +28,7 @@ module cache_control output ring_token out_token, output logic out_token_valid, + // Señales para la SRAM input addr_tag tag_rd, input line data_rd, input line_state state_rd, @@ -88,9 +89,11 @@ module cache_control */ assign unlock_line = !core_waitrequest; + // Replace si no coinciden las tags y el estado no es INVALID assign replace = tag_rd != core_tag && state_rd != INVALID; - assign last_hop = in_hold.ttl == `TTL_END; - assign snoop_hit = tag_rd == in_hold.tag; + assign last_hop = in_hold.ttl == `TTL_END; //Indica si es el último salto + assign snoop_hit = tag_rd == in_hold.tag; //Snoop hit si coinciden las tags + // Aceptar snoop si no es el último nodo y se tiene un mensaje válido assign accept_snoop = in_hold_valid && !last_hop && (in_hold.inval || !in_hold.reply); assign may_send = may_send_if_token_held && in_token_valid; @@ -104,7 +107,7 @@ module cache_control 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; + 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; @@ -139,11 +142,13 @@ module cache_control unique case (state) ACCEPT: begin + // Si es el último nodo en recibir el mensaje y la request no es de lectura if (last_hop && !in_hold.read) begin - end_reply = in_hold_valid; + end_reply = in_hold_valid; // Se termina el paso de ese mensaje in_data_ready = 1; end + // Si no es el último salto y hay reply if (!last_hop && in_hold.reply && !in_hold.inval) in_data_ready = 1; |
