dcache: Introduce an extra cycle latency to make timing
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>
Thu, 10 Oct 2019 00:25:16 +0000 (11:25 +1100)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>
Wed, 23 Oct 2019 01:30:49 +0000 (12:30 +1100)
commit174378b190fe47f12dc3f9ec90756a8f8df3f05f
treef6aeb41cb478e0a8a36f4a750b984da66cc6bdae
parentb513f0fb48638aa0df8fe7f76a388498eecc1b79
dcache: Introduce an extra cycle latency to make timing

This makes the BRAMs use an output buffer, introducing an extra
cycle latency. Without this, Vivado won't make timing at 100Mhz.

We stash all the necessary response data in delayed latches, the
extra cycle is NOT a state in the state machine, thus it's fully
pipelined and doesn't involve stalling.

This introduces an extra non-pipelined cycle for loads with update
to avoid collision on the writeback output between the now delayed
load data and the register update. We could avoid it by moving
the register update in the pipeline bubble created by the extra
update state, but it's a bit trickier, so I leave that for a latter
optimization.

Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
cache_ram.vhdl
dcache.vhdl