I'm programming FPGA boards (Artix 7 to be exact) and I recently noticed that, in order to be synthesized into block RAM, an array of storage must have synchronous reading, otherwise it will only be synthesized into a register file.
Example of async read (can't become block RAM):
always @(*)
rd_data <= mem[addr];
Example of sync read (may become block RAM if other conditions are plausible):
always @(posedge clk)
rd_data <= mem[addr];
Why can't a block of storage with asynchronous read be a block RAM on Xilinx FPGA?
