summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--rtl/bus_master.sv31
-rw-r--r--tb/sim/hazards.py2
2 files changed, 16 insertions, 17 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;
diff --git a/tb/sim/hazards.py b/tb/sim/hazards.py
index b89b15b..8699c47 100644
--- a/tb/sim/hazards.py
+++ b/tb/sim/hazards.py
@@ -1,6 +1,6 @@
SP = 256
-cycles = 256
+cycles = 1024
mem_dumps = [range(SP - 4, SP)]
def final():