Non block RAM based ROMs using muxing/LUTs can be done using simple arrays.
Using block rams for ROMs requires using a RAM primitive and simply never using the write enable on the RAM, making it a read only. However, this restricts ROM usage timing/pipelining/latency to being specified by the user - needing to specify if the RAM has input/output regsiters etc - is not autopipelineable.
Instead introduce 'autopipelineable pure function ROM primitive functions' that do not specify input and/or output regs. Instead similar to other pure funcs - pipeline regs are added as needed by the tool.
Non block RAM based ROMs using muxing/LUTs can be done using simple arrays.
Using block rams for ROMs requires using a RAM primitive and simply never using the write enable on the RAM, making it a read only. However, this restricts ROM usage timing/pipelining/latency to being specified by the user - needing to specify if the RAM has input/output regsiters etc - is not autopipelineable.
Instead introduce 'autopipelineable pure function ROM primitive functions' that do not specify input and/or output regs. Instead similar to other pure funcs - pipeline regs are added as needed by the tool.