summaryrefslogtreecommitdiff
path: root/rtl/core/mmu/arbiter.sv
diff options
context:
space:
mode:
authorAlejandro Soto <alejandro@34project.org>2022-11-15 23:18:09 -0600
committerAlejandro Soto <alejandro@34project.org>2022-11-15 23:31:30 -0600
commitd9dfa098323bc9ffdc9e976bd4106efc75b2954a (patch)
tree60753d507eb5a936eb80ae30c0b239b7480c5e8e /rtl/core/mmu/arbiter.sv
parent8ab171864291c74d0a22cac911bc8a8aee8a7d5b (diff)
Implemente byte-enable signal in stores
Diffstat (limited to 'rtl/core/mmu/arbiter.sv')
-rw-r--r--rtl/core/mmu/arbiter.sv52
1 files changed, 30 insertions, 22 deletions
diff --git a/rtl/core/mmu/arbiter.sv b/rtl/core/mmu/arbiter.sv
index 3740539..5a75ddf 100644
--- a/rtl/core/mmu/arbiter.sv
+++ b/rtl/core/mmu/arbiter.sv
@@ -1,25 +1,27 @@
module core_mmu_arbiter
(
- input logic clk,
- rst_n,
-
- input logic bus_ready,
- input word bus_data_rd,
- data_data_wr,
- input ptr insn_addr,
- data_addr,
- input logic insn_start,
- data_start,
- data_write,
-
- output word bus_data_wr,
- output ptr bus_addr,
- output logic bus_start,
- bus_write,
- insn_ready,
- data_ready,
- output word insn_data_rd,
- data_data_rd
+ input logic clk,
+ rst_n,
+
+ input logic bus_ready,
+ input word bus_data_rd,
+ data_data_wr,
+ input ptr insn_addr,
+ data_addr,
+ input logic insn_start,
+ data_start,
+ data_write,
+ input logic[3:0] data_data_be,
+
+ output word bus_data_wr,
+ output logic[3:0] bus_data_be,
+ output ptr bus_addr,
+ output logic bus_start,
+ bus_write,
+ insn_ready,
+ data_ready,
+ output word insn_data_rd,
+ data_data_rd
);
enum int unsigned
@@ -31,6 +33,7 @@ module core_mmu_arbiter
ptr hold_addr;
word hold_data_wr;
logic active, hold_start, hold_write, hold_issue, hold_free, transition;
+ logic[3:0] hold_data_be;
assign insn_data_rd = bus_data_rd;
assign data_data_rd = bus_data_rd;
@@ -56,19 +59,20 @@ module core_mmu_arbiter
DATA: data_ready = bus_ready;
endcase
+ bus_data_wr = data_data_wr;
unique case(next_master)
INSN: begin
bus_addr = insn_addr;
bus_write = 0;
bus_start = insn_start;
- bus_data_wr = {32{1'bx}};
+ bus_data_be = 4'b1111;
end
DATA: begin
bus_addr = data_addr;
bus_write = data_write;
bus_start = data_start;
- bus_data_wr = data_data_wr;
+ bus_data_be = data_data_be;
end
endcase
@@ -77,6 +81,7 @@ module core_mmu_arbiter
bus_write = hold_write;
bus_start = 1;
bus_data_wr = hold_data_wr;
+ bus_data_be = hold_data_be;
end
end
@@ -89,6 +94,7 @@ module core_mmu_arbiter
hold_start <= 0;
hold_write <= 0;
hold_data_wr <= 0;
+ hold_data_be <= 0;
end else begin
master <= next_master;
active <= bus_start || (active && !bus_ready);
@@ -100,12 +106,14 @@ module core_mmu_arbiter
hold_start <= data_start;
hold_write <= data_write;
hold_data_wr <= data_data_wr;
+ hold_data_be <= data_data_be;
end
DATA: begin
hold_addr <= insn_addr;
hold_start <= insn_start;
hold_write <= 0;
+ hold_data_be <= 4'b1111;
end
endcase
end