diff options
| author | Alejandro Soto <alejandro@34project.org> | 2022-11-09 07:47:35 -0600 |
|---|---|---|
| committer | Alejandro Soto <alejandro@34project.org> | 2022-11-09 07:47:51 -0600 |
| commit | e2888796fae6f620e7774d598fe88b8ee48a5884 (patch) | |
| tree | 7bd997211462e8a7bfafc65b2d3159547883b52d /rtl | |
| parent | b6af88a04f281483e8fef961eb4d0b2bf60ee7f0 (diff) | |
Fix bus protocol errors in bus master
Diffstat (limited to 'rtl')
| -rw-r--r-- | rtl/bus_master.sv | 31 |
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; |
