-
Notifications
You must be signed in to change notification settings - Fork 112
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
Incorrect handling of OSERDES inputs in the techmap #1258
Comments
@acomodi FYI |
@mkurc-ant can you please create a smaller failing test case in xc7/tests/serdes? This behavior is typical, I'm surprised it wasn't caught earlier. |
For both @mkurc-ant and @acomodi reference, all input pins are connected to To be clear, when I say "inverter feature", I'm refering to a feature that sets bits. For the reasons above, some inverter features disable the inverter, to achieve the above behavior. Does that make sense? |
@litghost Yes, all of that makes sense to me. My findings that I described in this issue are based on a problem encountered with fasm2bels ran on the LiteX with DDR design. When eg. all T inputs of an OSERDES are connected to 0 (explicitly) they are routed to <const 0> by SymbiFlow with inverters disabled. However, when importing design decoded by fasm2bels to Vivado it complains about routing conflict. Vivado expects all those inputs to be routed to <const 1> and have inverters enabled. I have a tiny test that I synthesized with Vivado and observed how the routing + inverters behave. I can port it to use with SymbiFlow. |
That pattern is common in the 7-series fabric. Take a look at the bram techmap, it has logic to handle exactly what you are describing. |
I've added a test demonstrating this issue: #1261 |
While trying to make fasm2bels work on the minilitex_ddr design (#1220) I discovered the following behavior of vendor tools regarding OSERDES inputs connected to constants:
For data ports D1-D8:
For tri-state control ports T1-T4:
It seems that vendor tools never route
<const 0>
to the OSERDES.Similar behavior can be observed for
OCE
andTCE
ports. They are routed to<const 1>
when unconnected (I didn't check inverters though).Setting/clearing the parameter
IS_Dx_INVERTED
orIS_Tx_INVERTED
of anOSERDES
cell additionally toggles the presence/absence of the emitted fasm feature. So the feature value needs to be xored with the parameter prior to emission.The feature
IS_Dx_INVERTED
enables the inverter on the data line but the featureZINV_Tx
actually DISABLES the inverter on the tri-state input.The text was updated successfully, but these errors were encountered: