Open roby2014 opened 1 year ago
The problem seems to be the iob_ram_dp_be
isn't being inferred correctly by Yosys. Although I believe true dual port memories like this should be supported to some extent, is it possible to try a simpler memory style for now?
I suspect it's because iob_ram_dp_be
requires transparency semantics (i.e. behaviour during collisions between memory ports or the read data returned while writing) that can't be implemented by the underlying hardware. Vendor tools tend to be more liberal here, you can mimic this behaviour in Yosys by passing -no-rw-check
to synth_ecp5
.
Yes I do believe its because of iob_ram_dp_be
, if I comment this section:
/*iob_ram_dp_be
#(
.HEXFILE(HEXFILE),
.ADDR_W(`SRAM_ADDR_W-2),
.DATA_W(`DATA_W)
)
main_mem_byte
(
.clk (clk),
// data port
.enA (d_valid),
.addrA (d_addr),
.weA (d_wstrb),
.dinA (d_wdata),
.doutA (d_rdata),
// instruction port
.enB (i_valid),
.addrB (i_addr),
.weB (i_wstrb),
.dinB (i_wdata),
.doutB (i_rdata)
);*/
It already compiles fine.
-no-rw-check
also solves the long time compilation issue.
Version
Yosys 0.24+10 (git sha1 69cbef966, gcc 12.2.0 -march=x86-64 -mtune=generic -O2 -fno-plt -fexceptions -fstack-clash-protection -fcf-protection -fPIC -Os)
On which OS did this happen?
Linux
Reproduction Steps
Expected Behavior
Bitstream generation.
Actual Behavior
Synthesis taking a lot of time. The log file has about ~36k lines (in 5/10 min of waiting).
Any idea what could be causing this? (after some research I found people talking about memory being instantiated in individual flip flops instead of BRAM)
I suppose the issue comes from
synth_ecp5
.The script that is run looks something like this:
This is the log file (it should help understand whats going on maybe): https://easyupload.io/7zsz70