Showing results for 
Show  only  | Search instead for 
Did you mean: 
Registered: ‎10-26-2010

Spartan-6 GTP Comma Alignment

I have a setup with 2 boards, each with a Spartan-6LX150T, sending a simple, custom protocol to one another.  I am using a 16-bit (well, 20-bit since 8B/10B encoding is enabled) data interface, clock correction, and comma alignment circuitry enabled.  I am using ISE 12.4 tools on Windows XP.


My comma characters are all sent on the LSB of the TXDATA, so I have set ALIGN_COMMA_WORD = 1.  Using Chipscope, I have verified that when the boards are connected together, the clock correction circuit is working (no RX overflow/underflow conditions) and that the comma alignment circuit is working in that my data pattern is produced on the RXDATA bus most of the time.


Therein lies my problem.  Since I have set ALIGN_COMMA_WORD = 1, I believe that my comma character should always be located in the LSB location of the 16-bit RXDATA bus based on the UG.  This is true a good percentage of the time, but other times I get a "byte-slip" where the comma ends up on the MSB of the pattern and all data is shifted by a byte.  The data is never corrupt, just shifted by a byte.  Here is a sample...


Good data pattern:   95BC B5B5 95BC B5B5 ....

Bad data pattern   :   B595 BCB5 B595 BCB5 ....


Am I mistaken that setting ALIGN_COMMA_WORD = 1 means that the comma will be output in the LSB?


Is this an issue with clock correction being included?


I read a few forum posts where it was suggested that after an initial, good alignment was detected, one should disable the comma alignment circuit by setting RXENMCOMMAALIGN0/1 and RXENPCOMMAALIGN0/1 to '0'.  I did this, but I still get this strange "byte-slip" phenomenon.


I've also implemented a manual-alignment circuit that disables the automatic comma alignment and uses RXSLIDE instead.  I am able to achieve the initial alignment, but again get the byte-slipping.


I've almost hit my wits end.  What am I missing?


Thank you for any tips or advice in advance.

0 Kudos
2 Replies
Xilinx Employee
Xilinx Employee
Registered: ‎04-06-2010

You are mistaken that ALIGN_COMMA_WORD means to align to the first byte. If you read the User Guide, it'll tell you that it will align to either an odd or even boundary. If you select 2, then it will align to only an even boundary.

Hope this helps.
0 Kudos
Registered: ‎04-14-2011

I have the same issue here. At the moment I try to simulate a connection between ML605 and SP605. In hardware I could establish the connection with the IBERT cores and it works without any bit errors. (Same external oscillator).

Now I want to use 16 bit data path on both sides, but the Spartan 6 GTP receiver does not align to the even byte boundary although the comma alignment is set to even in the wizzard and the data path to 16 bit width. At the moment I cannot test this in hardware, the SP605 is in use by another colleague, but I have to get the simulation working for further work.

What do I wrong? I use ISE 14.3 with the GTP wizzard 1.11. ALIGN_COMMA_WORD_1 is set to 2, the comma value is set to K28.1. In the other direction (SP605 -> ML605) the alignment works correctly, the comma is aligned to the lowbyte by the GTX receiver. I can see the issue in ModelSim PE 10.1 and ISim.

0 Kudos