I've just been comparing previous commits of code, commenting out the latest and slowly adding bits to see where compilation goes wrong.
I haven't added everything back yet but I got this error after adding one more condition:
Error (276003): Cannot convert all sets of registers into RAM megafunctions when creating nodes. The resulting number of registers remaining in design exceeds the number of registers in the device or the number specified by the assignment max_number_of_registers_from_uninferred_rams. This can cause longer compilation time or result in insufficient memory to complete Analysis and Synthesis
Looks like there's a bug which results in Quartus stalling when more than one of these errors are found.
// Happy with this 1 condition..
if( vicPixelRowData & 8'h80 ) begin
frameBuffer[ frameBufferIndex + 0 ] <= 1;
end
// Got 276003 error when addition this condition..
if( vicPixelRowData & 8'h40 ) begin
frameBuffer[ frameBufferIndex + 1 ] <= 1;
end
// Quartus freezes at 2% compilation when adding this condition - 276003 error is no longer reported
if( vicPixelRowData & 8'h20 ) begin
frameBuffer[ frameBufferIndex + 2 ] <= 1;
end
Indeed I am doing something really bad design-wise - this is effectively 8-port RAM.. but I thought it was good to report the Quartus issue all the same.