diff options
| author | Alejandro Soto <alejandro@34project.org> | 2024-06-01 14:55:11 -0600 |
|---|---|---|
| committer | Alejandro Soto <alejandro@34project.org> | 2024-06-01 15:10:06 -0600 |
| commit | 8fb28df31fcee15c82a57ed3988e8eb0f23a32b6 (patch) | |
| tree | 6249df65aa75e5f33cd0c35add513748fe829476 | |
| parent | 41a944b7577833e7dad6f2bee74ccc0082cc5717 (diff) | |
rtl/gfx: fix bugs found in gfx_shader_bind testbench
Diffstat (limited to '')
| -rw-r--r-- | rtl/gfx/gfx_shader_front.sv | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/rtl/gfx/gfx_shader_front.sv b/rtl/gfx/gfx_shader_front.sv index 543b534..31dc5b4 100644 --- a/rtl/gfx/gfx_shader_front.sv +++ b/rtl/gfx/gfx_shader_front.sv @@ -269,7 +269,8 @@ import gfx::*; if_beats #($bits(icache_line_tag)) pending_in(), pending_out(); - logic accessed_write, accessed_write_enable, burst, fetch_done, hit_write, + logic access_lost_1, access_lost_2, access_lost_3, access_lost_4, accessed_4, + accessed_write, accessed_write_enable, burst, fetch_done, hit_write, in_flush, hit_commit, hit_write_enable, retry_4, retry_5, rollback, tag_hit, valid_1, valid_2, valid_3, valid_4, valid_5, valid_write, valid_write_enable; @@ -349,7 +350,7 @@ import gfx::*; valid_4 <= valid_3; valid_5 <= valid_4; - burst <= valid_3 & ~tag_hit & ~read.accessed & (~read.valid | read.hit); + burst <= valid_3 & ~read.accessed & ~access_lost_3 & (~read.valid | (read.hit & ~tag_hit)); end always_ff @(posedge clk) begin @@ -409,21 +410,26 @@ import gfx::*; cache[hit_write_line].hit <= hit_write; read_addr_1 <= read_addr; + access_lost_1 <= rollback | (fetch_done & ~hit_commit & pending_out.rx.valid); read_hold <= cache[read_addr_1.line_tag.line]; read_addr_2 <= read_addr_1; + access_lost_2 <= access_lost_1; read <= read_hold; read_addr_3 <= read_addr_2; + access_lost_3 <= access_lost_2; data_4 <= data_3[read_addr_3.word_num[2]]; retry_4 <= ~tag_hit | ~read.valid; + accessed_4 <= read.accessed; hit_commit <= valid_3 & tag_hit & read.valid; read_addr_4 <= read_addr_3; + access_lost_4 <= access_lost_3; data_5 <= data_4[read_addr_4.word_num[1]]; retry_5 <= retry_4; - rollback <= burst & (~request_valid | ~pending_in.tx.valid); + rollback <= ~access_lost_4 & ~accessed_4 & (~request_valid | ~pending_in.tx.valid); read_addr_5 <= read_addr_4; insn <= data_5[read_addr_5.word_num[0]]; |
