首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为串行ATA配置7系列GTXE2收发器(Gen1/2/3)

为串行ATA配置7系列GTXE2收发器(Gen1/2/3)
EN

Stack Overflow用户
提问于 2014-08-14 20:14:27
回答 1查看 1.6K关注 0票数 2

你好,这将是一个专家的问题:)您应该熟悉以下主题

  • Xilinx多千兆收发信机,特别是7系列GTX/GTH收发器(GTXE2_CHANNEL)
  • 串行-ATA Gen1,Gen2和Gen3,特别是带外通信

问题:

如何为Serial配置GTXE2?

OOB信令既不能工作,RX_ElectricalIdle也不能工作,ComInit也不能工作。

简介:

我为我的最后一个学士项目实现了一个SATA控制器,它支持多个供应商/设备平台(Xilinx Virtex-5,Altera Stratix II,Altera Stratix IV)。现在是时候将这个控制器移植到下一个设备系列:Xilinx7-Series设备,在KC705板上命名一个Kintex-7。

SATA控制器在物理层中有一个额外的抽象层,这是基于SAPIS和PIPE3.0的。因此,为了将SATA控制器移植到一个新的设备系列,我只需为GTXE2 MGT编写一个新的收发器包装器。

由于Xilinx的CoreGenerator不支持CoreGen向导中的SATA协议,我从头开始了一个收发信机项目,并根据向导的要求应用了所有必要的设置。之后,我将GTXE2_COMMON实例化复制到包装器模块中,将泛型和端口排序到一个含义完整的模式中。

作为第三步,我连接了所有未连接的端口(向导没有分配所有的值!)到它们的默认值( UG476中的默认值,如果没有定义,则为0)。

在步骤4中,如果所有泛型和端口与UG476设置兼容,则再次检查它们。之后,我将包装器端口连接到MGT,并在必要时插入跨时钟模块。

由于KC705板没有150个MHz参考时钟,我在每个板“启动”之后将Si570作为"ProgUser_Clock“提供这个时钟。在此重新配置时,MGT处于下电模式(P2)。当Si570稳定时,MGT启动,使用的通道锁相环锁定后,大约6180时钟周期。此CPLL_Locked事件释放GTX_TX|RX_Reset连接,这将在额外的2701760循环(所有循环@150个MHz -> 6,6ns)后导致GTX_TX|RX_ResetDone事件。

这种行为可以在chipscope中看到,它是用稳定的、不间断的辅助时钟捕获的(200 MHz,略有过采样)。

因此,GXTE2接缝将被供电,运行和所有时钟是稳定的.

控制OOB信令的GTXE2端口:

MGT有几个用于OOB信令的端口。在TX上,这些问题是:

  • TX_ElectricalIdle -迫使TX进入电空闲状态
  • TX_ComInit -发送ComInit序列
  • TX_ComWake -发送ComWake序列
  • TX_ComFinish - sequence将->发送给下一个命令。

关于RX:

  • RX_ElectricalIdle - RX_n/TX_p处于电空闲状态(低电平接口)
  • RX_ComInit_Detected -一个完整的ComInit序列被发送
  • RX_ComWake_Detected -一个完整的ComWake序列被发送

详细错误指示:

  1. 如果TX_ComInit在一个周期内高,则TX不发送OOB序列。
  2. RX_ElectricalIdle总是很高

测试:

  1. SATA回环电缆:切断一根SATA电缆并焊接相应的电线;) --我正在使用一种特殊的SFP来连接SATA适配器,它用KC705连接器- product=73扩展了SATA。
  2. SMA回环电缆:我移动了MGT,将LVDS电线连接到SMA插孔上,并安装了2根SMA电缆作为交叉。
  3. 我用车载ML505连接器编程了我的旧ComInit (Virtex-5),以发送ComInit序列。这两个板与一个特殊的SATA交叉电缆连接.
  4. 我用部分剥离的SATA电缆连接到KC705 (SFP2SATA适配器),并连接了2.5 GSps范围(是的,信号采样不足,但看到突发和空闲周期.)。

经验:

  • 测试3显示了从Virtex-5到Kintex-7之间传输的OOB序列,但是没有发生ChipScope触发器事件-- Rx_ElectricalIdle仍然很高。
  • 测试4显示电缆上没有传输OOB序列。

我应该张贴部分或完整的收发器实例化吗?

只有实例有大约650行:(

请询问您是否需要更多的信息,图像,代码,.)

附录:

电空闲是指MGT以共模电压(V_cm)驱动两个LVDS线(TX/TX_p),其范围为0..2 0 0 mV。如果满足此条件,共模δ电压小于100 mV,称为ElectricalIdle条件。

OOB-信令意味着MGT在LVDS线路上发送电空闲和正常数据符号( 8b/10b符号中的D10.2)的突发。SATA/SAS定义了3种OOB序列,分别称为ComInit、ComWake、ComSAS,它们具有不同的突发/空闲时间。主机控制器和设备使用这些“摩尔斯信号”来建立链接。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-23 15:03:32

因此,我想我找到了一些问题的答案,并想与大家分享。

我开始模拟GTXE2_CHANNEL硬宏。仿真就像硬件一样是“假”的。因此,我尝试在Verilog中模拟MGT,并在这里使用了一个实例模板:http://forums.xilinx.com/t5/7-Series-FPGAs/Using-v7gtx-as-sata-host-PHY-and-there-is-issue-bout-ALIGN/td-p/374203

该模板模拟ElectricalIDLE条件,OOB序列基本正确。因此,我开始区分这两种解决方案:

  1. TXPDELECIDLEMODE是一个用于选择TXElectricalIDLE行为的端口,它不像预期的那样工作。所以现在我使用的是同步模式。
  2. PCS_RSVD_ATTR是一个48位的无约束bit_vector泛型。如果查看secureip GTXE2_CHANNEL组件的包装代码,就会发现来自bit_vector => std_logic_vector => string的转换。在内部,所有的泛型都被视为DOWNTO ranged。因此,向GTXE2泛型传递DOWNTO常量是很重要的!

现在你可以问他为什么要用常量和泛型?

直到最新版本14.7,Xilinx在处理无约束泛型中的用户定义类型向量方面有一个重大缺陷。向量的默认方向是。如果您将枚举的向量作为DOWNTO传递到无约束的泛型到组件中,则ISE将反转向量元素,并在组件中“发射”a到远程向量!

如果使用这种通用的设计层次结构不是一棵平衡的树,这就特别“有趣”了。

如果您使用的是两个元素的枚举,问题是不存在->,也许这个枚举被映射到一个布尔值。

哪些任务仍未完成?

  1. TXComFinish仍然不承认发送OOB序列。
  2. 我必须研究这两个错误修复在合成和测量的OOB序列的范围-这可能会持续几天:)

编辑1:

Bug 1的解决方案:

我添加了一个超时计数器,它的超时取决于当前的生成(时钟频率)和要发送的当前COM序列。如果达到超时,我将生成自己的TXComFinished信号。不要使用来自GTX的原始TXComFinished信号的超时信号,因为有时这个信号很高,而COMWAKE将被发送,但是这个已完成的选通仍然属于以前的COMRESET序列!

另一个Bug的解决方案:

RXElectricalIDLE不是没有故障的!为了解决这个问题,我在这条线上添加了一个过滤器元素,它抑制了这条线上的尖峰。

,所以目前我的控制器正在SATA Gen1上运行,在带有SFP2SATA适配器的KC705板上运行1.5 GHz,我认为这个问题已经解决了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25316821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档