summaryrefslogtreecommitdiff
path: root/rtl/cache/offsets.sv
diff options
context:
space:
mode:
authorAlejandro Soto <alejandro@34project.org>2024-01-21 06:23:46 -0600
committerAlejandro Soto <alejandro@34project.org>2024-02-20 11:11:17 -0600
commitf3b18ead59ae02f95dabbf0a1dea40873a816975 (patch)
tree8979e50f2a37f66a4cd27e937b480efe60d72cf7 /rtl/cache/offsets.sv
parenta8bc5a353ea997f73209b39377ee15a73e471237 (diff)
rtl: refactor filenames and directory hierarchy
Diffstat (limited to 'rtl/cache/offsets.sv')
-rw-r--r--rtl/cache/offsets.sv91
1 files changed, 0 insertions, 91 deletions
diff --git a/rtl/cache/offsets.sv b/rtl/cache/offsets.sv
deleted file mode 100644
index 7769394..0000000
--- a/rtl/cache/offsets.sv
+++ /dev/null
@@ -1,91 +0,0 @@
-`include "cache/defs.sv"
-
-module cache_offsets
-(
- input addr_offset core_offset, // El offset es un input pero no
- // un output porque se mapea
- input word_be core_byteenable,
- input word core_writedata,
- input line core_readdata_line,
- data_rd,
-
- output line core_data_wr,
- core_writedata_line,
- output word core_readdata, // Readdata pasa de ser una line
- // en el input a una word por el
- // offset
- output line_be core_byteenable_line
-);
-
- // Este módulo sirve para simplificar offsets, para que sean transparentes
- // para la cache. El caché nunca ve la parte de offset que hay en las
- // direccciones.
-
- // El core trabaja en words. El caché en lines, esto es el puente entre
- // ambos tipos de datos.
-
- line line_mask;
-
- // El byteenable (be) se utiliza cuando se quiere leer o escribir en cache
- // un solo byte, en lugar de una word entera
- word be_extend, mask3, mask2, mask1, mask0;
- word_be be3, be2, be1, be0;
-
- // Concatena la misma word 4 veces.
- assign core_writedata_line = {4{core_writedata}};
-
- // Se prepara la mask de byte enable para cada word.
- assign core_byteenable_line = {be3, be2, be1, be0};
-
- // Concatenar para extender a una word ([31:0]). El valor de be determina
- // a cuál word se va a extender.
- assign be_extend = {{8{core_byteenable[3]}}, {8{core_byteenable[2]}},
- {8{core_byteenable[1]}}, {8{core_byteenable[0]}}};
-
- // Máscara para toda la línea
- assign line_mask = {mask3, mask2, mask1, mask0};
-
- // Se preserva lo que no hay que cambiar (data_rd & ~line_mask) y se aplica
- // la máscara a lo que sí hay cambiar (core_writedata_line & line_mask).
- assign core_data_wr = (core_writedata_line & line_mask) | (data_rd & ~line_mask);
-
- always_comb begin
- mask3 = 0;
- mask2 = 0;
- mask1 = 0;
- mask0 = 0;
-
- be3 = 0;
- be2 = 0;
- be1 = 0;
- be0 = 0;
-
- // Elegir la word que se va a retornar según el valor de offset
- unique case (core_offset)
- 2'b00: begin
- be0 = core_byteenable;
- mask0 = be_extend;
- core_readdata = core_readdata_line[31:0];
- end
-
- 2'b01: begin
- be1 = core_byteenable;
- mask1 = be_extend;
- core_readdata = core_readdata_line[63:32];
- end
-
- 2'b10: begin
- be2 = core_byteenable;
- mask2 = be_extend;
- core_readdata = core_readdata_line[95:64];
- end
-
- 2'b11: begin
- be3 = core_byteenable;
- mask3 = be_extend;
- core_readdata = core_readdata_line[127:96];
- end
- endcase
- end
-
-endmodule