Some initial issues to address are listed below.
The process(current_state, start, dump)
in storage
entity looks like it is
intended to implement a combinatorial element (gates), but the signal (port)
data_in
is not in the sensitivity list.
This is very likely to cause a difference between simulation and synthesis
behavior, since simulation will typically only react to the signals in the
sensitivity list, where synthesis will implement the combinatorial design and
react on all used signals, but may give a warning about incomplete sensitivity
list or inferred latches. If you are using VHDL-2008 then use can use a
sensitivity list of (all)
to have the process sensitivity to all used
signals, and otherwise you need to add missing signals manually.
The case current_state is
in process(current_state, start, dump)
lacks an
when others => ...
, so the synthesis tool has probably given you a warning
about inferred latches. This should be fixed by adding the when others =>
with and assign all signals driven by the process to the relevant value.
The use
clause lists:
use IEEE.std_logic_unsigned.all;
use IEEE.numeric_std.all;
But both of these should not be used at the same time, since they declare some
of the same identifiers, for example is unsigned
declared in both. Since the
RAM uses std_logic_unsigned
I suggest that you stick with that only, and
delete use of numeric_std
. For new code I would though recommend use of
numeric_std
.
Also the process(clk_in, reset, start)
in storage
entity implements a
sequential element (flip flop) sensitive to only rising edge of clk_in
, so
the two last signals in sensitivity list ..., reset, start)
are unnecessary,
but does not cause a problem.