你好,这将是专家的问题:)你应该熟悉以下主题
如何为Serial-ATA配置GTXE2?
OOB信令既不工作RX_ElectricalIdle也不工作。
我为我的最终学士学位项目实施了一个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中,如果UG476兼容SATA设置,我会再次检查所有通用和端口。之后,我将我的包装器端口连接到MGT,并在必要时插入交叉时钟模块。
由于KC705板没有150 MHz参考时钟,我对Si570进行编程以提供此时钟作为" ProgUser_Clock"在每个董事会之后"启动"。此重新配置时,MGT处于断电模式(P2)。当Si570稳定时,MGT上电,使用后的通道PLL(CPLL)锁定。 6180个时钟周期。此CPLL_Locked事件释放GTX_TX | RX_Reset线路,在额外的270 | 1760个周期(所有周期@ 150 MHz - > 6,6 ns)之后导致GTX_TX | RX_ResetDone事件。
在chipcope中可以看到这种行为,使用稳定,不间断的辅助时钟(200 MHz,略微过采样)捕获。
因此GXTE2接线上电,可操作且所有时钟都稳定。
MGT有几个用于OOB信令的端口。在TX上,这些是:
在RX上:
试验:
经历:
只有实例有ca. 650行:(
请询问您是否需要更多信息,图片,代码......:)
电气空闲意味着MGT驱动两条LVDS线(TX_n / TX_p)的共模电压(V_cm)在0..2000 mV范围内。如果满足此条件,则共模delta电压小于100 mV,这称为ElectricalIdle条件。
OOB信号意味着MGT在LVDS线上发送电气空闲和正常数据符号(Db.2,8b / 10b表示法)的突发。 SATA / SAS定义3个OOB序列调用ComInit,ComWake,ComSAS,它们具有不同的突发/空闲持续时间。主机控制器和设备使用这些"莫尔斯信号"建立联系。
答案 0 :(得分:1)
所以我觉得我找到了问题的答案并想分享它们。
我开始模拟GTXE2_CHANNEL hardmacro。模拟表现为" false"作为硬件。所以我尝试在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序列几乎正确。所以我开始分辨两种解决方案:
TXPDELECIDLEMODE,这是一个选择TXElectricalIDLE行为的端口无法正常工作。所以我现在使用同步模式。
PCS_RSVD_ATTR是48位的无约束bit_vector泛型。如果您查看了secureip GTXE2_CHANNEL组件的包装器代码,您会发现bit_vector => std_logic_vector => string
的转换。在内部,所有仿制药都被视为DOWNTO范围。因此,将DOWNTO常量传递给GTXE2泛型非常重要!
所以现在你可以问他为什么使用范围常数和泛型?
Xilinx ISE最新版本14.7在处理无约束泛型中用户定义类型的向量时存在一个主要缺陷。向量的默认方向是TO。如果您将枚举的向量作为DOWNTO传递给无约束的泛型到组件中,则ISE正在反转向量元素并且"发出"组件中的TO范围向量!!
这尤其有趣"如果使用此泛型的设计层次结构不是平衡树...
如果您使用2个元素的枚举,则问题不存在 - >也许这个枚举被映射到一个布尔值。
Bug 1的解决方案:
我添加了一个超时计数器,其超时时间取决于当前的生成(时钟频率)和当前要发送的COM序列。如果超时,我生成自己的TXComFinished信号。不要使用来自GTX的原始TXComFinished信号或超时信号,因为有时此信号为高而COMWAKE将被发送,但此完成的选通仍然属于先前的COMRESET序列!< / p>
另一个Bug的解决方案:
RXElectricalIDLE不是无故障!为了解决这个问题,我在这条线上添加了一个过滤元素,它可以抑制该线上的尖峰。
所以目前我的控制器在带有SFP2SATA适配器的KC705板上以1.5 GHz的SATA Gen1运行,我认为这个问题已经解决了。