summaryrefslogtreecommitdiff
path: root/rtl/bus_master.sv
diff options
context:
space:
mode:
Diffstat (limited to 'rtl/bus_master.sv')
-rw-r--r--rtl/bus_master.sv31
1 files changed, 15 insertions, 16 deletions
diff --git a/rtl/bus_master.sv b/rtl/bus_master.sv
index ba6096c..4967d65 100644
--- a/rtl/bus_master.sv
+++ b/rtl/bus_master.sv
@@ -39,26 +39,25 @@ module bus_master
WAIT: ready = !avl_waitrequest;
endcase
- always_ff @(posedge clk) begin
- unique case(state)
- IDLE: begin
- avl_read <= 0;
- avl_write <= 0;
- end
-
- WAIT:
- if(!avl_waitrequest)
- state <= IDLE;
- endcase
-
- if(!avl_waitrequest && start) begin
- avl_address <= {addr, 2'b00};
+ always_ff @(posedge clk)
+ /* P. 16:
+ * A host must make no assumption about the assertion state of
+ * waitrequest when the host is idle: waitrequest may be high or
+ * low, depending on system properties. When waitrequest is asserted,
+ * host control signals to the agent must remain constant except for
+ * beginbursttransfer.
+ */
+ if((state == IDLE || !avl_waitrequest) && start) begin
+ state <= WAIT;
avl_read <= ~write;
avl_write <= write;
+ avl_address <= {addr, 2'b00};
avl_writedata <= data_wr;
- state <= WAIT;
+ end else if(state == WAIT && !avl_waitrequest) begin
+ state <= IDLE;
+ avl_read <= 0;
+ avl_write <= 0;
end
- end
initial begin
state = IDLE;