Add robustness to comma-detection and reset generation. #8
Reference in New Issue
Block a user
No description provided.
Delete Branch "added_robustness"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
This patch addresses issues I occasionally observed:
I have experienced occurrences when the GTX deasserts RXBYTEISALIGNED
while the RXLOSSOFSYNC is not asserted.
The comma-alignment state machine can be stuck in 'idle' believing
all is well when in fact RXBYTEISALIGNED is deasserted.
The proposed patch monitors RXBYTEISALIGNED in addition to
RXLOSSOFSYNC in 'idle' state. This ensures that a proper
resynchronization is performed if either RXLOSSOFSYNC or
RXBYTEISALIGNED is asserted.
The synchronizer (inst_cdc_fast_stat) which takes the pulse
width/delay to the EVR clock domain relies on a proper
reset sequence for correct operation.
It is possible, however, that the 'evr_clk' (which is generated
from the recovered RX clock) is not ticking at all when 'xuser_RESET'
resets said synchronizer. If e.g., there is no GTX reference clock
present (because it requires i2c initialization which is performed
at a later stage, by software) then the EVR clock may not be ticking
and prevent the destination side of the synchronizer from being reset. This
has the consequence of 'width' and 'delay' never being
updated.
The proposed patch asserts the synchronizer reset while the RX PLL
and/or MMCM are not locked.
I have tested this patch (by power-cycling and restarting many times)
and verified that it solves our problem.
merged
mentioned in commit
5bf9caae3a