summaryrefslogtreecommitdiff
path: root/rtl/cache/defs.sv
diff options
context:
space:
mode:
authorAlejandro Soto <alejandro@34project.org>2023-09-24 20:58:04 -0600
committerAlejandro Soto <alejandro@34project.org>2023-09-24 22:14:57 -0600
commit15230c6cd2190a1efd61c2758bf56de37f3fe8da (patch)
tree9d8a04daadb4192cf4aeb44b8e86389a9ba130d3 /rtl/cache/defs.sv
parent146168ca340e435eae6e30e99c06d752719089e3 (diff)
rtl/cache: implement
Diffstat (limited to 'rtl/cache/defs.sv')
-rw-r--r--rtl/cache/defs.sv64
1 files changed, 64 insertions, 0 deletions
diff --git a/rtl/cache/defs.sv b/rtl/cache/defs.sv
new file mode 100644
index 0000000..2566058
--- /dev/null
+++ b/rtl/cache/defs.sv
@@ -0,0 +1,64 @@
+`ifndef CACHE_DEFS_SV
+`define CACHE_DEFS_SV
+
+typedef logic[3:0] word_be;
+typedef logic[15:0] line_be;
+typedef logic[127:0] line;
+
+// Choca con typedef en core/uarch.sv
+`ifndef WORD_DEFINED
+typedef logic[31:0] word;
+`define WORD_DEFINED
+`endif
+
+/* Tenemos 512MiB de SDRAM, el resto del espacio es I/O (uncached). Usamos
+* 512 líneas direct-mapped de 16 bytes cada una. El core solo realiza
+* operaciones alineadas. Por tanto, cada dirección de 32 bits consta de:
+ * - 2 bits que siempre son 0 (traducidos a byteenable por core)
+ * - 2 bits de offset (ya que para cache la unidad direccionable es la word)
+ * - 9 bits de index
+ * - 16 bits de tag
+ * - 3 bits que son == 0 si cached, != 0 si uncached
+ */
+typedef logic[1:0] addr_mbz;
+typedef logic[1:0] addr_offset;
+typedef logic[8:0] addr_index;
+typedef logic[15:0] addr_tag;
+typedef logic[2:0] addr_io_region;
+typedef logic[26:0] addr_cacheable;
+
+typedef enum logic[1:0]
+{
+ INVALID,
+ SHARED,
+ EXCLUSIVE,
+ MODIFIED
+} line_state;
+
+typedef struct packed
+{
+ logic[1:0] ttl;
+ logic read,
+ inval,
+ reply;
+ addr_tag tag;
+ addr_index index;
+ line data;
+} ring_req;
+
+`define TTL_END 2'b00
+`define TTL_MAX 2'b11
+
+typedef struct packed
+{
+ logic valid;
+ addr_tag tag;
+ addr_index index;
+} token_lock;
+
+typedef struct packed
+{
+ token_lock e2, e1, e0;
+} ring_token;
+
+`endif