<br><br>On Thursday, May 6, 2021, Luke Kenneth Casson Leighton &lt;<a href="mailto:lkcl@lkcl.net">lkcl@lkcl.net</a>&gt; wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><br></div><div>a normal SRAM you would expect a 1 clock cycle delay, all good.  except here, an *extra* cycle of delay is added.  after assertion of the read it is *two* cycles before the data appears on the read data output.</div><div><br></div><div>i have no idea why, and i&#39;m not skilled enough at VHDL to work out how to remove it.</div></blockquote><div><br></div><div>illustration, control_writeback:</div><div><br></div><div><a href="https://github.com/antonblanchard/microwatt/blob/master/dcache.vhdl#L990">https://github.com/antonblanchard/microwatt/blob/master/dcache.vhdl#L990</a></div><div><br></div><div>the logic there is reading all its decisions from r1.  dout.valid etc, the data itself, all comes from r1.</div><div><br></div><div>r1 was set up with a single clock delay from r0, r0 was set up combinatorially.</div><div><br></div><div>the question i have is: is control_writeback making its decisions from the *current* r1 or is it making its decisions from the *future* r1?</div><div><br></div><div>i have seen VHDL set values that get used in the same cycle, like variables in normal software programs.  very odd to have that in an HDL.</div><div><br></div><div>how does dout.valid get set? it is equal to r1.ls_valid.  for LOADs, how does r1.ls_valid get set? in NC_LOAD_ACK and RELOAD_WAIT_ACK.</div><div><br></div><div>all good... except... does that setting of r1.ls_valid get picked up *in the same cycle* by control_writeback? or does control_writeback react to the values in r1 on the *next* cycle?</div><div><br></div><div>this is an aspect of VHDL that has me confused.  also, if it is the *next* cycle it would explain why we are seeing a 2 cycle delay on LD cache reads.</div><div><br></div><div>l.</div><div><br></div><br><br>-- <br>---<br>crowd-funded eco-conscious hardware: <a href="https://www.crowdsupply.com/eoma68" target="_blank">https://www.crowdsupply.com/eoma68</a><br><br>