Open rowanG077 opened 5 years ago
Simulation will have to match the synthesized RAMs, so this "picking" based on types will have to be done at the Haskell-level.
@martijnbastiaan That fifo sync uses asynchronous read ports, so might not synthesize to a blockRAM, which only have synchronous read ports.
@martijnbastiaan Although the address generator for the read port is based register-backed, which the synthesis tools might merge into the RAM; thus allowing synthesis to a blockRAM.
Only one way to find out: run it through a couple of synthesis tools
Just adding a few more (possibly Xilinx centric) features I would like blockRams to have:
I'm happy to help out writing templates and testing, especially on Xilinx devices.
Currently I think the BlockRam part of the Clash API could really use some kind of overhaul.
I see a few issues with the current situation:
blockRAM1
for instance).I think we could move towards a situation where we have a single blockRAM function. And the actual implementation is inferred based on the types and parameters.
At least I know that Intel Quartus and the Cyclone V FPGA would support such a situation on the hardware level but I'm unfamiliar with other platform to make a call in that direction.