Open rw1nkler opened 4 years ago
This bug is a result of Vivado not handling explicit BUFHCE's which is equivilant from a bitstream standpoint from using the BUFHCE site route-through psuedo pip. The solution to this bug is to change how fasm2bels handles this. In the case where a BUFHCE site is configured as a route through (e.g. BUFHCE(.CE(1'b1), ...)
), then fasm2bels should enable the pseudo pip rather than emitting a BUFHCE
cell.
There are examples of how this is done for the ILOGIC and OLOGIC sites here:
GitHubLibrary to convert a FASM file into BELs importable into Vivado. - SymbiFlow/symbiflow-xc-fasm2bels
During the work on merging #1419 I figured out that the basic BUFGMUX example works differently on Arty Board and Nexys Video.
The example uses three LEDs:
On the Arty Board, the example works as intended. On Nexys Video, when the switch is set to led[2] frequency, the led[0] stops to blink. The same error was occurring for the Basys3 board.
The failing example was the following:
It turned out that the problem is related to the intermediate BUFG, which connects PLL and BUFGMUX. Since the BUFGMUX is also a buffer, I removed the additional BUFG, which resolved the problem. Nevertheless, the failing example can be handled properly by Vivado.
In SymbiFlow the correct BUFGMUX nets are connected through BUFHCE. For some reason, the failing net in case of Nexys Video is connected directly to BUFG output.
A correct BUFGMUX input net:
A failing BUFGMUX input net:
Both examples were passing the
diff_fasm
step. In the recent BUFGMUX test, the additional BUFG has been removed which resolved the issue. Still, the inconsistent behavior may indicate that there is a bug in the tools.