qt中进行文本数据读取并显示波形图_利用 UltraScale+ 器件中的 PCI Express Gen3 集成块内置解扰器模块解开 PIPE 接口包的神秘面纱...

PIPE 接口上的数据在 Gen3 的速度下被加密。当调试 PCIe 问题时,能在 PCIe 链接上查看各个包会很有帮助。

若要实现此目的,用户需拥有协议链接分析器。由于其成本较高,能接触到此等设备的用户不多。随协议链接分析器提供的包分析工具很广泛,可对链接流量进行深入分析。

赛灵思 UltraScale+ 器件的 PCIe® Express Gen3 IP 集成块有一个功能,可让您集成一个解扰器模块,以便解密在 PIPE 接口上被加密的数据。尽管它不能提供与协议链接分析器相同数量的分析数据,但它可以在识别潜在问题方面提供帮助,而且在大部分情况下可帮助追踪问题的根本原因。

本文将详细介绍如何通过识别来自链路并进入 PCIe IP 的不同类型的 PCIe 包来分析解扰器模块的输出数据。

解扰器模块在 PCIe IP 配置 GUI 中被使能,具体如下:

a4952e83b4363ec2ed6ed410d864fb92.png

解扰器模块只在 Gen3 模式中被支持。

如果复选框变成灰色,要确保配置 GUI 的“Basic”标签中的链接速度被设为 8.0 GT/s。如果该选项不可用,请将“Basic”标签中的“Mode”设为“Advanced”。

为了追踪 PIPE 接口上有效 PCIe 包的起始点,该接口提供了两种信号:*_sync_header 和 *_start_block。

8e1ace01ee998a2e6b8a3e3a64166d4c.png

为了确认 rx_data 上的数据是否为有效包,请检查以下各项:
  • *_data_valid 已被有效
  • *_start_block 已被有效
  • *_sync_header 为“1”或“2”。如果该值是“1”,则表示是“Ordered Set”的起始点。如果该值是“2”,则表示是 TLP 或 DLLP 包的起始点。

被解扰的数据分析也可在仿真中进行。

以下的波形图来自与 IP 一起生成的 Gen3 示例设计的仿真。

952bd7776dbf70f78a5a47d92d69aef4.png

退出“Recovery.Speed”LTSSM 状态后的第一个包是 EIEOS(电气空闲退出有序集)。

0d80ebf9b25510e0e3b182ad5a4dc317.png

上文波形图中所示的 FF00FF00 就是 EIEOS。

被解扰信号上的第一个包将是 EIEOS。

如前文所述,*_start_block 必须有效,而且下文波形图中所示的 *_sync_header 信号应为“1”。

fda3e131c7746196f67ded700ee8a43a.png

一旦所有均衡状态都已完成,在进入 L0 状态之前,您应该看到 555555E1。

这就是 SDS(数据流起始点)。一旦您看到了 SDS,则意味着有序集交互已完成。接口上的下一个包类型将是初始流量控制信用,即,我们应在接口上看到 DLLP 包。

6d5b9a29ef424bd255d371960feab8c5.png

下面的波形图即显示了 DLLP 包。DLLP 包以 SDP(DLLP 包起始点 - ACF0)开始。在多通道设计时,数据将被跨通道分布。

5dd2f604fe3810fc734eab6cd0533bd5.png

InitFC1-P(Posted Data 的初始流量控制)以“40”开始。下文来自 Lecory 分析器的捕获显示 InitiFC1-P 标识符。

9e63674874857446df1267cd6d5cb882.png

在下文的波形图中,DLLP 包为 InitFC1-P。

5c419135c020360214c4a1d42e230082.png

DLLP 包格式共有四种:
  • ACK 或 Nak DLLP 包格式
  • 功耗管理 DLLP 包格式
  • 流量控制 DLLP 包格式
  • 供应商特定 DLLP 包格式

每一种 DLLP 包的长度都是 6 个符号。有关解码 DLLP 包内容的信息,请参阅 PCI Express 规范。在下文的波形图中,“60”是 InitFC-Cpl(Cpl 代表 completion)。“50”是 InitFC-NP(NP 代表 Non-Posted)。

22413a77710d44c60e39f403c8345da2.png

UpdateFC-P 以“80”开始。被解扰数据中的更新值为十六进制,因此需要将其转化为十进制,以便获得可用信用的准确数字。

6a7dbd5b9e73024da4d258bd530d24b9.png

有序集总是按通道来的。每条通道都有其自己的有序集。 DLLP 和 TLP 被跨通道分配;每条通道一个字节。

DLLP 只在 lane-0、lane-4 或 lane-8 中开始,即,F0 只能在 lane 0、4 或 8 上。TLP 可在任何通道上开始。

TXRATE 表示链路运行的速度。向 Gen3 速度的过渡在“Recovery.Speed”(0C)LTSSM 状态中发生,如以下波形图所示。

063ea84786449c07585b362af1d2017a.png

在 L0 状态之前以 Gen1/Gen2 速度运行的包未被加扰,它仅在 Gen3 速度下被加扰。在 PIPE 接口上以 Gen1/Gen2 速度运行的有序集可被直接读取。但是,所有速度的所有内容在 L0 状态中都会被扰码。下面的波形图显示了在 Gen1 速度时的捕获。

48856cce752b89cec0dc024f113d59bd.png

在这里,“4A”系指其 TS1 有序集。只有在速度如 TXRATE 所示变化至 Gen3 时才需要解扰器模块。

下列波形图中的 AAAAAAAA 表示一个 SKP 有序集。

5e22b80208f4cf615559fbe725d5f208.png

E1 表示 SKP_END 符号的定义详见如下所示的 PCIe 规范。

0582df126ee465daef18a7e097886f0e.png

下面的波形图显示了在 Gen3 链接上的一个 TS1 有序集。所示的“1E”表示在 Gen3 速度时的一个 TS1 有序集。

3a027247514f097b1306d6a53b1b84c0.png

621873bd096fa6e3c502ec6750d06791.png

下面的波形图显示了每条通道中的一个 TS1 有序集。它不会跨越多条通道。它在所有通道上都相同,只是通道号不同。在下面的波形图中,通道号分别为 00 和 01。

237fb4ea77f5d04d5d23f6020cd3bc9f.png

这里的“0E”是 Symbol-4。Symbol-4 在规范中的定义如下:

f04921b0d9e26795505fcbdaae40e65f.png

0E= 0000_1110。当我们将这些位映射到规范中的 Symbol-4 描述上时,它表示 Gen3 速度得到了支持。

Symbol-6 在 LTSSM 所处的不同状态中具有不同含义。在如下所示的波形图中,LTSSM 为“28”,则意味着它位于 phase-0 中。

b53e21cf7eea88f0e5254eaaecc10523.png

878bce3a65e0ad84ccccc71835e1bc77.png

Symbol-6 为 20,即 001_0000。由于它在 phase-0 中,则位 1:0 被设为“00”。

下面的波形图显示了一个完整的 TS1 有序集。

426735dc5758f90cef5db484e39fc2e6.png

下面的波形图显示了设置为 Gen3 速度的一个 TS2 有序集。“2D”表示它是一个 TS2 有序集

cac1338de856e4b4e53666e35a43322d.png

76b64699147d0a09e1025837cca38a25.png

至此,我们已讨论了有关有序集和 DLLP 的内容,那么现在我们来看一下如何在 PIPE 接口上识别 TLP。

每个 TLP 都以 STP(TLP 包起始点)标识开始。因此,在解扰器中查找具有 *_start_block = 1 和 *_sync_header= 2 的任何“nF”。

每个 STP 标识都是 4 个符号并表示 TLP 的开始。

STP 字段的定义详见下图所示:

f5cd80c69b67cf532f6a4c3ad5d04cbe.png

以下是 MemWr(存储器写入 TLP)的示例。请注意,这是一个 x4 链接,因此所有内容都被跨越分配。

下面的波形图取自示例设计仿真。

3f677de56320f65e1e1f290763e908f1.png

该波形图显示了来自主机测试平台而通过 PCIe 硬块的 CQ 接口进入用户逻辑的存储器写入传输事务。该传输事务在 PIPE 接口上具体理解如下:

开始从 LSB 读取:

DW0 = ClkCycle0-Byte0 (Lane-0 to Lane-3)-> “6F-80-20-1D”-> STP tokenDW1 = Header starts here -> ClkCycle0-Byte1 (Lane-0 to Lane-3)-> “40-00-00-01”-> Indicates Fmt/Type = 0x40 which is a 3DW MemWr request, Length = 1DW2 = ClkCycle0-Byte2 (Lane-0 to Lane-3)-> "00-00-00-0F”-> "0000- ReqID, Tag – 00, 1st DW Byte Enable = "F"DW3 = ClkCycle0-Byte3 (Lane-0 to Lane-3)-> “00-00-00-10” -> Address = 'h10DW4 = ClkCycle1-Byte0 (Lane-0 to Lane-3)-> “04-03-02-01” -> Payload (Byte0 to Byte3, 01-> MSB, 04-> LSB)

9f4903b659d1e319548783334ed71ee8.png

关注我们 dd65732a579c0222befb46c4d5d754a1.png c6cac344767c79dd5fb61056b509e7ed.png

9642e083088f7e9e06d2c714413d27e2.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值