Hola este será un punto de expertos preguntas :) Usted debe estar familiarizado con los siguientes temas
- Xilinx Multi-Gigabit-Transceptores (MGTs), en especial las 7 de la Serie GTX/GTH transceptores (GTXE2_CHANNEL)
- Serial-ATA Gen1, Gen2 y Gen3, especialmente Fuera de Banda (OOB) comunicación
Pregunta:
¿Cómo debe un GTXE2 ser configurado para Serial-ATA?
OOB que la señalización no es trabajo ni RX_ElectricalIdle ni ComInit.
Introducción:
He implementado un controlador SATA para mi final licenciatura en proyecto, que soporta múltiples proveedores y plataformas de dispositivos (Xilinx Virtex-5, Altera Stratix II, Altera Stratix IV). Ahora es el momento para que el puerto este controlador para el dispositivo siguiente familia: Xilinx 7-los dispositivos de la Serie, por el nombre de un Kintex-7 en un KC705 de la junta.
El controlador SATA tiene un adicional de la capa de abstracción en la capa física, que se basa en SAPIS y de la TUBERÍA 3.0. Así que para el puerto de la controladora SATA a un nuevo dispositivo de la familia, solo tengo que escribir un nuevo transceptor contenedor para una GTXE2 MGT.
Como de Xilinx del CoreGenerator no soporta SATA protocolos en el CoreGen asistente, empecé un transceptor proyecto desde cero y aplicar todos los ajustes necesarios, como la medida en que son formuladas por el asistente. Después de que he copiado el GTXE2_COMMON la creación de instancias en mi contenedor de módulo, ordenó a los medicamentos genéricos y de los puertos en un sentido completo esquema.
Como tercer paso, he conectado todos los puertos desconectados (los asistentes no asignar todos los valores !!) a sus valores por defecto (el valor predeterminado de UG476 o cero si no se ha definido).
En el paso 4 he comprobado todos los medicamentos genéricos y los puertos de nuevo contra el UG476 si son compatibles con la configuración de SATA. Después de que he conectado mi contenedor de puertos para la MGT y se inserta cruz-reloj de módulos si es necesario.
Como de la KC705 de la junta no tiene 150 MHz reloj de referencia, I programa de la Si570 para el suministro de este reloj como "ProgUser_Clock" después de cada junta de "arranque". MGT es en desconectar el modo (P2), mientras que esta reconfiguración. Cuando el Si570 es estable, la MGT está encendido, el Canal utilizado PLL (CPLL) bloquea después de ca. 6180 ciclos de reloj. Este CPLL_Locked eventos de lanzamientos de la GTX_TX|RX_Reset los cables, lo cual causa un GTX_TX|RX_ResetDone evento después adicionales 270/1760 ciclos (todos los ciclos de @ 150 MHz -> 6,6 ns).
Este comportamiento puede ser visto en chipscope, capturado con una estable e ininterrumpido de los auxiliares de reloj de 200 MHz, ligeramente muestreado).
Así que el GXTE2 costuras ser impulsada, operacionales y de todos los relojes son estables.
GTXE2 puertos para el control de la OOB de señalización:
MGT tiene varios puertos para OOB de señalización. En TX estos son:
- TX_ElectricalIdle - fuerzas TX en condición de inactividad eléctrica
- TX_ComInit - enviar una secuencia ComInit
- TX_ComWake - enviar una secuencia ComWake
- TX_ComFinish - secuencia fue enviar a -> listo para el siguiente comando
En RX:
- RX_ElectricalIdle - RX_n/TX_p son eléctricos condición de inactividad (interfaz de bajo nivel)
- RX_ComInit_Detected - una completa ComInit secuencia fue enviar
- RX_ComWake_Detected - una completa ComWake secuencia fue enviar
Detallada del error desciption:
- TX envía OOB secuencias si TX_ComInit es alto para un ciclo.
- RX_ElectricalIdle es siempre alta
Pruebas:
- SATA cable de retorno: cortar un cable SATA y soldadura de los cables apropiados ;) -- Estoy usando un especial de SFP a SATA adaptador, el cual se extiende la KC705 con un conector SATA - http://shop.trioflex.ee/product.php?id_product=73
- SMA de bucle invertido de cables: he movido el MGT y conectado los cables LVDS a la SMA tomas e instalado 2 cables SMA como cross-over.
- He programado mi viejo ML505 (Virtex-5) con onboard SATA conector para enviar ComInit secuencias. El 2 placas están conectadas con un especial SATA cable cruzado.
- He conectado un disco duro con un parcial despojado cable SATA a la KC705 (SFP2SATA adaptador) y conectado a un 2.5 GSps alcance (sí, las señales están submuestreada, pero es bueno ver las explosiones y los períodos de inactividad...).
Experiencias:
- Prueba 3 muestra transmitida OOB secuencias de Virtex-5 a Kintex-7, pero la ChipScope evento de disparo no se produce - Rx_ElectricalIdle es todavía alta.
- Prueba 4 muestra no transmisión OOB secuencias en el cable.
Debo publicar partes o el transceptor completo instanziation?
sólo la instancia de ca. 650 líneas :(
Apéndice:
Eléctrica de inactividad significa que el MGT unidades de ambos cables LVDS (TX_n/TX_p) con el voltaje de modo común (V_cm) que esté en el rango 0..2000 mV. Si se cumple esta condición, el modo común delta del voltaje es menor de 100 mV, lo que se conoce como ElectricalIdle condición.
OOB-señalización significa que el MGT transmite ráfagas eléctricas en reposo y normal de símbolos de datos (D10.2 en 8b/10b notación) en los cables LVDS. SATA/SAS define 3 OOB secuencias de llamada ComInit, ComWake, ComSAS que tienen diferentes ráfaga/reposo de duración. Los controladores de Host y los dispositivos de uso de estas "señales de Morse" para establecer un enlace.
Edit 1:
Después de la configuración de Voltaje Común Trim (RX_CM_TRIM) y (Diferencial de Control de Oscilación) TXDIFFCTRL a maxima y la conexión de TX_ElectricalIDLE y TX_ComInit a los botones, yo era capaz de ver algunos resultados:
- TX_ElectricalIDLE está funcionando, pero el TX OOB FSM no (TX_ComInit, TX_ComWake)
- si TX_ComInit es alto para siempre, el transceptor transmitts ALINEAR primitivas, pero a un cuarto de la correcta reloj alrededor de 375 MHz en lugar de 1.5 GHz
- RX_Electrical de INACTIVIDAD sigue sin funcionar
También trató de utilizar la alternativa OOB reloj, pero esto no tiene ningún efecto.