From 1aeb760d093189486efbf5adf3292881eda94eb0 Mon Sep 17 00:00:00 2001 From: Julian Blake Kongslie Date: Sun, 24 Jul 2022 14:59:03 -0700 Subject: Writeback cache using explicit altsyncram instead of inferred memory. --- hdl/defs.svh | 3 +- hdl/mem_broadcast.sv | 2 + hdl/mem_cache.sv | 191 ++++++++++++++++++++++++++++++++++++++------------- hdl/top.sv | 6 +- 4 files changed, 150 insertions(+), 52 deletions(-) (limited to 'hdl') diff --git a/hdl/defs.svh b/hdl/defs.svh index 73fddaf..dc4a243 100644 --- a/hdl/defs.svh +++ b/hdl/defs.svh @@ -5,7 +5,7 @@ `define PDP_ADDRESS_BITS 15 -`define NUM_PDPS 4 +`define NUM_PDPS 8 `define UART_BYTE_BITS 8 @@ -56,5 +56,6 @@ typedef struct packed { typedef struct packed { pdp_line_address_t address; bit snoop; + bit data_valid; ram_line_t data; } mem_to_core_t; diff --git a/hdl/mem_broadcast.sv b/hdl/mem_broadcast.sv index 599be28..e86873e 100644 --- a/hdl/mem_broadcast.sv +++ b/hdl/mem_broadcast.sv @@ -48,6 +48,8 @@ module mem_broadcast if (!pdp_valid[ram_data.tag-1]) begin pdp_valid[ram_data.tag-1] = 1; pdp_data[ram_data.tag-1].address = hold_data.address[`PDP_ADDRESS_BITS-1:$clog2(`RAM_LINE_WORDS)]; + pdp_data[ram_data.tag-1].snoop = 0; + pdp_data[ram_data.tag-1].data_valid = 1; pdp_data[ram_data.tag-1].data = hold_data.data; hold_valid = 0; end diff --git a/hdl/mem_cache.sv b/hdl/mem_cache.sv index 181d8d7..e7fcac7 100644 --- a/hdl/mem_cache.sv +++ b/hdl/mem_cache.sv @@ -6,8 +6,6 @@ module mem_cache ( input bit clock , input bit reset - , input bit clear - , output bit core_command_ready , input bit core_command_valid , input core_to_mem_t core_command_data @@ -32,6 +30,7 @@ module mem_cache typedef struct packed { bit valid; + bit dirty; address_tag_t address; } tag_t; @@ -40,73 +39,171 @@ module mem_cache ram_line_t data; } cache_entry_t; - (* ramstyle = "no_rw_check, M9K" *) cache_entry_t cache [(1<