Tricky,
Yes, you do. I wasn't sure if the constant array + synchronous read gets inferred but I just tested on Quartus 10 and it does.
So, simply replacing the
data_out <= ....
with
process(clk) begin
if rising_edge(clk) then
if en = '1' then
data_out <= rom_data(to_integer(unsigned(addr)));
end if;
end if;
end process;
Niveen,
no, I was talking about an "Intel HEX" file.
http://en.wikipedia.org/wiki/intel_hex Quartus has a built-in editor which lets you write such a file by hand.
You'll also find a number of tools in the internet to write/convert data into that format.