-
Notifications
You must be signed in to change notification settings - Fork 249
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Gowin: failed route io with ddr #1275
Comments
There's actually very little going on on the apicula side, but a future nextpnr fix will split each of IOLOGICA and IOLOGICB into two directions: IOLOGIC in and IOLOGIC out. This allows us to combine two IOLOGICs at once to work with IOBUF, which addresses issue YosysHQ/nextpnr#1275 The nature of the fixes in this PR is such that it will work with the old version of nextpnr and everything that successfully passes through netxpnr will work. Signed-off-by: YRabbit <[email protected]>
Corrects the situation when it is impossible to use IOBUF with two IOLOGIC elements at the same time - input and output. Addresses YosysHQ#1275 This is done by dividing one IOLOGIC Bel into two - input IOLOGIC and output IOLOGIC plus checking for compatibility of the cells located there. At the moment, this check is simple and allows only the combination of DDR and DDRC primitives. Signed-off-by: YRabbit <[email protected]>
Your problem has been considered and patches for apicula and nextpnr-himbaechel have been prepared. It's slow official way. But you can manually fix gowin_pack yourself, and also fix and compile nextpnr. |
Thanks, its build input output with manual placed IOBUF, but now crashed with generated:
nextpnr_himbaechel::assertion_failure: Assertion failure: out_iob == net_only_drives(ctx, ci.ports.at(tx_port).net, is_iob, id_OEN, true) (/Users/andry/hobby/fpga/nextpnr/himbaechel/uarch/gowin/pack.cc:458) |
yeah, about that. The point here is that DDR and other IOLOGIC are located directly in the IO cell and have clear, non-switched wires to IOBUF. I can't put anything in there in the middle between DDR and IO. And if we look at what you want to implement, let’s say, using VOUT: yosys -p "read_verilog top.v; synth_gowin -vout top.vg" Then we will see the inverter on the OEN wire. If you use DDR, then this is no longer a wire that can be cut and an inverter inserted there. So I'm afraid I can't help much here. |
Yes, sample is wrong, without inversion it is builded. I think, need clear error message instead assertion failure.
nextpnr_himbaechel::assertion_failure: Assertion failure: in_iob != nullptr && in_iob->bel != BelId() (/Users/andry/hobby/fpga/nextpnr/himbaechel/uarch/gowin/pack.cc:591) |
Corrects the situation when it is impossible to use IOBUF with two IOLOGIC elements at the same time - input and output. Addresses YosysHQ#1275 This is done by dividing one IOLOGIC Bel into two - input IOLOGIC and output IOLOGIC plus checking for compatibility of the cells located there. At the moment, this check is simple and allows only the combination of DDR and DDRC primitives. Signed-off-by: YRabbit <[email protected]>
Corrects the situation when it is impossible to use IOBUF with two IOLOGIC elements at the same time - input and output. Addresses #1275 This is done by dividing one IOLOGIC Bel into two - input IOLOGIC and output IOLOGIC plus checking for compatibility of the cells located there. At the moment, this check is simple and allows only the combination of DDR and DDRC primitives. Signed-off-by: YRabbit <[email protected]>
failed route IOBUF with ODDR and IDDR together:
nextpnr-himbaechel:
ERROR: Can't place iddr_rwds at X0Y16/IOLOGICA because it's already taken by oddr_rwds
nextpnr-gowin:
ERROR: Cell 'iddr_rwds' cannot be bound to bel 'R29C15_IOLOGICB' since it is already bound to cell 'oddr_rwds'
The text was updated successfully, but these errors were encountered: