--- Quote Start ---
If you define a ROM with unregistered address and registered output, you're effectively creating a registered address and unregistered output, as far as see. Any reason not to go this way?
--- Quote End ---
No real compelling reason.
The reason I tried to avoid this is because it is counterintuitive. The timing and pipeline of the design are heavily based on the registered address. Furthermore, the registered addresss is used for other purposes besides indexing the ROM, so again, it seems more natural to register the address. Of course that registering the output is equivalent. Just that in this case, it makes less intuitive to understand the code and the simulation.
Btw, at one point I thought the reason that the ROM was not inferred, was because the registered address was being used for other purposes. This can't really be done on the hardware, because I understand the core can't access the registered side of the RAM address. Quartus would need to duplicate the register. But removing this behavior doesn't help. Seems like the only way is to register the output.
--- Quote Start ---
IF(clk'event AND clk='1') THEN
Data_out <= std_logic_vector( to_unsigned(Content(conv_integer(Address)),width_data));
END IF;
...
Quartus II 7.2 Infers a ROM with unregistered outputs
--- Quote End ---
I'm not expert on VHDL, but I understand the code is actually using registered outputs, isn't it? I know that Quartus would "translate" this to registered address with unregistered output, which is equivalent. But that's not what I wanted (for reasons explained above).