summaryrefslogtreecommitdiff
path: root/platform/wavelet3d/gfx_sched.sv
diff options
context:
space:
mode:
authorAlejandro Soto <alejandro@34project.org>2024-05-03 12:01:36 -0600
committerAlejandro Soto <alejandro@34project.org>2024-05-03 12:01:36 -0600
commitd6dcfc10f26056485cb260af93027047a6aa8d30 (patch)
tree358a7e69c13fe51f7348bba893c2489db9b022fc /platform/wavelet3d/gfx_sched.sv
parent405c0287c80c34b0e9dfb9d9326b86d12433b4c4 (diff)
platform/wavelet3d: implement sched domain crossbar
Diffstat (limited to '')
-rw-r--r--platform/wavelet3d/gfx_sched.sv32
1 files changed, 12 insertions, 20 deletions
diff --git a/platform/wavelet3d/gfx_sched.sv b/platform/wavelet3d/gfx_sched.sv
index ebffd1a..b3cbc41 100644
--- a/platform/wavelet3d/gfx_sched.sv
+++ b/platform/wavelet3d/gfx_sched.sv
@@ -1,17 +1,17 @@
module gfx_sched
+import gfx::*;
(
- input logic clk,
- rst_n,
+ input logic clk,
+ rst_n,
+ srst_n,
- gfx_axil.m axim,
- input gfx::irq_lines irq
-);
+ gfx_axil.m axim,
- import gfx::*;
+ input irq_lines irq
+);
logic axi_ready, axi_valid, bram_ready, bram_read, bram_write, bram_write_next,
- mem_instr, mem_la_read, mem_la_write, mem_ready, mem_valid,
- sync_rst_n, rst_done, select_bram;
+ mem_instr, mem_la_read, mem_la_write, mem_ready, mem_valid, select_bram;
word bram[SCHED_BRAM_WORDS];
word axi_rdata, bram_rdata, mem_addr, mem_la_addr, mem_rdata, mem_wdata;
@@ -22,7 +22,7 @@ module gfx_sched
assign bram_addr = mem_addr[$bits(bram_addr) + SUBWORD_BITS - 1:SUBWORD_BITS];
assign mem_ready = (axi_valid & axi_ready) | bram_ready;
assign mem_rdata = bram_ready ? bram_rdata : axi_rdata;
- assign select_bram = ~|(mem_la_addr & ~((1 << ($bits(bram_addr) + SUBWORD_BITS)) - 1));
+ assign select_bram = ~|mem_la_addr[$bits(mem_la_addr) - 1:$bits(bram_addr) + SUBWORD_BITS];
assign bram_write_next = mem_la_write & select_bram;
defparam core.ENABLE_COUNTERS = 0;
@@ -40,7 +40,7 @@ module gfx_sched
picorv32 core
(
.clk,
- .resetn(sync_rst_n),
+ .resetn(srst_n),
.trap(),
.mem_valid,
@@ -77,7 +77,7 @@ module gfx_sched
picorv32_axi_adapter axi
(
.clk,
- .resetn(sync_rst_n),
+ .resetn(srst_n),
.mem_axi_awvalid(axim.awvalid),
.mem_axi_awready(axim.awready),
@@ -123,20 +123,12 @@ module gfx_sched
always_ff @(posedge clk or negedge rst_n)
- if (!rst_n) begin
- rst_done <= 0;
- sync_rst_n <= 0;
-
+ if (~rst_n) begin
axi_valid <= 0;
bram_read <= 0;
bram_ready <= 0;
bram_write <= 0;
end else begin
- if (rst_done)
- sync_rst_n <= 1;
- else
- rst_done <= 1;
-
axi_valid <= ~select_bram | (axi_valid & ~axi_ready);
bram_read <= mem_la_read & select_bram;
bram_write <= bram_write_next;