summaryrefslogtreecommitdiff
path: root/rtl/bus_master.sv
diff options
context:
space:
mode:
authorAlejandro Soto <alejandro@34project.org>2022-11-02 23:19:48 -0600
committerAlejandro Soto <alejandro@34project.org>2022-11-02 23:19:48 -0600
commit4ef4190e67534168e1e64b810a09c0cd1338e2a9 (patch)
treec7e451ef6b153974b5bbf03321c2f9969f4dabea /rtl/bus_master.sv
parentfe7ae05a9acbc237e386e9841d63e12c4f5aae42 (diff)
Move bus/master.sv to bus_master.sv
Diffstat (limited to 'rtl/bus_master.sv')
-rw-r--r--rtl/bus_master.sv63
1 files changed, 63 insertions, 0 deletions
diff --git a/rtl/bus_master.sv b/rtl/bus_master.sv
new file mode 100644
index 0000000..e4a76d2
--- /dev/null
+++ b/rtl/bus_master.sv
@@ -0,0 +1,63 @@
+module bus_master
+(
+ input logic clk,
+ rst,
+
+ input logic[29:0] addr,
+ input logic start,
+ write,
+ output logic ready,
+ output logic[31:0] data_rd,
+ input logic[31:0] data_wr,
+
+ output logic[31:0] avl_address,
+ output logic avl_read,
+ avl_write,
+ input logic[31:0] avl_readdata,
+ output logic[31:0] avl_writedata,
+ input logic avl_waitrequest,
+ output logic[3:0] avl_byteenable
+);
+
+ enum {
+ IDLE,
+ WAIT
+ } state;
+
+ assign data_rd = avl_readdata;
+ assign avl_byteenable = 4'b1111; //TODO
+
+ always_comb
+ unique case(state)
+ IDLE: ready = 0;
+ WAIT: ready = !avl_waitrequest;
+ endcase
+
+ always_ff @(posedge clk) begin
+ unique case(state)
+ IDLE: begin
+ avl_read <= 0;
+ avl_write <= 0;
+ end
+
+ WAIT:
+ if(!start)
+ state <= IDLE;
+ endcase
+
+ if(!avl_waitrequest && start) begin
+ avl_address <= {addr, 2'b00};
+ avl_read <= ~write;
+ avl_write <= write;
+ avl_writedata <= data_wr;
+ state <= WAIT;
+ end
+ end
+
+ initial begin
+ state = IDLE;
+ avl_read = 0;
+ avl_write = 0;
+ end
+
+endmodule