您好,这将是一个专家问题:) 您应该熟悉以下主题
- Xilinx 多千兆位收发器 (MGT),尤其是 7 系列 GTX/GTH 收发器 (GTXE2_CHANNEL)
- 串行 ATA Gen1、Gen2 和 Gen3,尤其是带外 (OOB) 通信
问题:
应该如何为 Serial-ATA 配置 GTXE2?
OOB 信号在 RX_ElectricalIdle 和 ComInit 中都不起作用。
介绍:
我为我的最后一个本科项目实现了一个 SATA 控制器,它支持多个供应商/设备平台(Xilinx Virtex-5、Altera Stratix II、Altera Stratix IV)。现在是时候将该控制器移植到下一个器件系列:Xilinx 7 系列器件,即 KC705 板上的 Kintex-7。
SATA 控制器在物理层中有一个额外的抽象层,它基于 SAPIS 和 PIPE 3.0。因此,要将 SATA 控制器移植到新的设备系列,我只需为 GTXE2 MGT 编写一个新的收发器包装器。
由于 Xilinx 的 CoreGenerator 不支持 CoreGen 向导中的 SATA 协议,我从头开始了一个收发器项目,并根据向导的要求应用了所有必要的设置。之后,我将 GTXE2_COMMON 实例复制到我的包装模块中,将泛型和端口排序为一个有意义的完整模式。
作为第三步,我将所有未连接的端口(向导不会分配所有值!!)连接到它们的默认值(来自 UG476 的默认值,如果未定义,则为零)。
在第 4 步中,如果它们与 SATA 设置兼容,我会再次对照 UG476 检查所有泛型和端口。之后,我将包装器端口连接到 MGT 并在必要时插入交叉时钟模块。
由于 KC705 板没有 150 MHz 参考时钟,我对 Si570 进行编程以在每个板“启动”后将此时钟作为“ProgUser_Clock”提供。在重新配置时,MGT 处于断电模式 (P2)。当 Si570 稳定时,MGT 上电,使用的通道 PLL (CPLL) 在 ca 后锁定。6180 个时钟周期。此 CPLL_Locked 事件释放 GTX_TX|RX_Reset 线,这会在额外的 270|1760 个周期(所有周期 @ 150 MHz -> 6.6 ns)后导致 GTX_TX|RX_ResetDone 事件。
这种行为可以在chipscope中看到,使用稳定、不间断的辅助时钟(200 MHz,略微过采样)捕获。
所以 GXTE2 接缝上电、运行和所有时钟都稳定。
GTXE2 端口控制 OOB 信令:
MGT 有几个用于 OOB 信令的端口。在 TX,这些是:
- TX_ElectricalIdle - 强制 TX 进入电气空闲状态
- TX_ComInit - 发送一个 ComInit 序列
- TX_ComWake - 发送 ComWake 序列
- TX_ComFinish - 序列已发送 -> 准备好下一个命令
在 RX 上:
- RX_ElectricalIdle - RX_n/TX_p 处于电气空闲状态(低级接口)
- RX_ComInit_Detected - 发送了完整的 ComInit 序列
- RX_ComWake_Detected - 发送了完整的 ComWake 序列
详细错误说明:
- 如果 TX_ComInit 在一个周期内为高电平,则 TX 不发送 OOB 序列。
- RX_ElectricalIdle 始终为高电平
测试:
- SATA 环回电缆:剪断 SATA 电缆并焊接适当的电线;)——我正在使用特殊的 SFP 到 SATA 适配器,它通过 SATA 连接器扩展 KC705 - http://shop.trioflex.ee/product.php ?id_product=73
- SMA 环回电缆:我移动了 MGT 并将 LVDS 线连接到 SMA 插孔,并安装了 2 条 SMA 电缆作为交叉线。
- 我用板载 SATA 连接器对旧的 ML505 (Virtex-5) 进行了编程,以发送 ComInit 序列。2 块板通过特殊的 SATA 交叉电缆连接。
- 我将带有部分剥离 SATA 电缆的 HDD 连接到 KC705(SFP2SATA 适配器)并连接了 2.5 GSps 示波器(是的,信号采样不足,但很高兴看到突发和空闲时间......)。
经验:
- 测试 3 显示从 Virtex-5 传输到 Kintex-7 的 OOB 序列,但未发生 ChipScope 触发事件 - Rx_ElectricalIdle 仍然为高电平。
- 测试 4 显示电缆上没有传输的 OOB 序列。
我应该发布零件还是完整的收发器实例化?
只有实例有 ca。650行:(
请询问您是否需要更多信息,图像,代码,... :)
附录:
电气空闲意味着 MGT 以 0..2000 mV 范围内的共模电压 (V_cm) 驱动两条 LVDS 线 (TX_n/TX_p)。如果满足此条件,则共模增量电压小于 100 mV,称为 ElectricalIdle 条件。
OOB 信令意味着 MGT 在 LVDS 线上传输电空闲和正常数据符号(8b/10b 表示法中的 D10.2)突发。SATA/SAS 定义了 3 个 OOB 序列,称为 ComInit、ComWake、ComSAS,它们具有不同的突发/空闲持续时间。主机控制器和设备使用这些“莫尔斯信号”来建立链接。