完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
您好,我正在使用GTX收发器。
txdata / rxdata宽度为20位。 接收的数据与传输的数据不匹配。 以下是我看到的一个例子。 传送 - 3e883h 收到 - e883b 我使用ILA观察了数据并将数据导出到excel。 经过观察,我注意到以下情况 旧的传输数据 - ba02d 新传输的数据 - 3e883 收到的数据 - e883b 看来接收到的数据是从old_txdata接收最重要的4位数据,然后是新txdata的最低有效12位。 我已经检查了多个值,同样如此。 有人可能知道为什么会发生这种情况。 提前致谢 亚当格罗普 |
|
相关推荐
7个回答
|
|
亚当,
GTX是一个管道。 对齐是协议的一部分。 如何定义字节,字,块,帧的开始和停止完全取决于您以及您选择的选项以及您提供的逻辑。 如果你看一个完整的解决方案例子,比如LWIP Ethernet,你会看到如何完成上述所有工作。 在没有定义启动或停止的原始数据中,没有对齐,因为接收不知道从哪里开始和停止。 对于Rx,它只是一个比特流。 对齐任务通常称为媒体访问控制器(MAC)。 它弄清楚究竟发生了什么。 由于链接可以随时启动,中断,然后重新启动,MAC负责处理所有这些。 Austin Lesea主要工程师Xilinx San Jose |
|
|
|
亚当,
这是我在之前的讨论中谈论的一部分...... 当数据在串行链路上发送时,它被串行化 - 它在单线上转换为比特流。 当接收器收到它时,需要反序列化。 然而,接收器只看到一串位,并且不知道这些是最初的20位字,或者更具体地说,一个20位字结束并且下一个字开始的位置。 因此,它只是随意选择一个起始点并将这些位组合成并行字。 这被称为“框架” - 当您通过串行链路发送数据时,框架将丢失。 因此,更高级别协议的责任是“恢复框架”。 在8b10中,这是通过使用逗号字符(K28.1)完成的。 逗号字符是一种字符,其位模式在数据流中是唯一的,并且可以由接收器检测以“调整”接收器的帧以匹配发送器。 在64b66b中,这有点复杂,并且通过前导码(每个64位添加额外的2位)来完成。 对齐通过变速箱处理,但需要GTX外部的状态机来管理RXGEARBOXSLIP输入以找到合适的框架。 您所看到的行为几乎可以肯定是因为 - 如果您没有放置任何东西来恢复成帧,您的RX数据将被错误地构建,并且您的RX数据将是数据流的一个位移版本(这是 正是你所描述的)。 因此,再一次,您不能仅通过GTX放置数据,就好像它相当于驱动TX的逻辑和接收RX的逻辑之间的20位直接有线连接。 您需要实现管理链接的协议。 再一次,我强烈建议你去看看Aurora,它会照顾你的大部分内容。 Avrum |
|
|
|
谢谢您的回复。
我将看一下使用以太网以更好地了解我做错了什么。 好奇的是,我正在使用SDI和XAPP592实现SMPTE SDI接口和Kintex-7 GTX收发器。 这里有一节介绍配置GTX,并指出SDI不使用逗号检测或rxslide。 当我查看GT包装器时,他们使用的收发器未配置为逗号检测。 这是因为有逻辑正在寻找SAV和EAV来对齐数据吗? |
|
|
|
@avrumw
感谢您的答复。 我只是想更好地理解收发器。 我希望能够使用GTX核心进行设计,并了解如何完成协议将为我做的事情或自定义协议。我是一个学习者,所以我必须尝试最好地了解正在发生的事情。 我确实在高速串行I / O上找到了一些参考资料,非常有帮助。 如果插入逻辑来查找sdi数据的SAV和EAV,则这是sdi协议构建数据的方式。 我确实读过64b / 66b,我仍然不太明白“差距”的原因。 我对它的理解是,由于比特率不是完全恒定的,因此必须有一个暂停或间隙来弥补这一点。 我再次感谢您提供的信息。 亚当格罗普 |
|
|
|
差距并不是特别复杂......
GTX的用户时钟域(txusrclk)以1/20的串行链路比特率运行。 GTX的接口(在txusrclk上运行)为20位宽。 所以每个txusrclk你给它20个新位序列化。 但是,如果您使用的是64b66b,则对于它传输的每个64位数据,它需要发送额外的2位前导码(这是64b66b的基础)。 所以在txusrclk方面,接口周期性地(平均每66个周期中有2个)请求您发送的数据中的间隙,以便为前导码的两位“腾出空间”。 因此,在33个txusrclks中,它只需要32个字的输入(因此32x20 = 640位数据)。 发送640位数据需要10个符号,每个符号为66位(因此为660位)。 它们以每个txusrclk 20位发送,因此需要33 txusrclk才能发送出去。 因此,有了这个差距,GTX所采用的数据量与输出的比特数相同。 Avrum |
|
|
|
好。
我认为事情现在开始有了一些意义。 还有一件事我很困惑。 我知道接收器需要数据边界才能正确地重新构建并行数据。 所以这可以通过逗号检测或在64b66b的情况下插入前导码或在SDI的情况下插入SAV / EAV,其中外部逻辑将提取前导码(01或10)或SAV / EAV(3ff 000 000)并正确对齐 数据。 我认为这就是我想要了解的。 取决于使用的两者中的哪一个由协议定义。 我理解正确吗? |
|
|
|
是。
-------------------------------------------------- ----------------------------别忘了回复,给予kudo并接受为解决方案--------- -------------------------------------------------- ------------------- |
|
|
|
只有小组成员才能发言,加入小组>>
2379 浏览 7 评论
2794 浏览 4 评论
Spartan 3-AN时钟和VHDL让ISE合成时出现错误该怎么办?
2261 浏览 9 评论
3335 浏览 0 评论
如何在RTL或xilinx spartan fpga的约束文件中插入1.56ns延迟缓冲区?
2427 浏览 15 评论
有输入,但是LVDS_25的FPGA内部接收不到数据,为什么?
755浏览 1评论
请问vc707的电源线是如何连接的,我这边可能出现了缺失元件的情况导致无法供电
543浏览 1评论
求一块XILINX开发板KC705,VC707,KC105和KCU1500
364浏览 1评论
1960浏览 0评论
681浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 03:54 , Processed in 1.098857 second(s), Total 57, Slave 51 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号