xilinx Artix-7 FPGA GTP 仿真结果太慢不正确的问题解决办法
本文首发于hifpga.com
GTP生成的IP examplse Design做仿真时会发现RX根本解不出数据,然后各级检查,发现rxrestdone和rxreset是不正确的,也没有发现异常,
会不会是仿真时间不够,好吧,睡个午觉起来再看,居然有了,
要是仿真这么慢,那还怎么愉快地玩耍!GOOGLE大法好,XILINX的问题网上资料多,但最靠谱的还是XLINX官方论坛或提AR,唯一操蛋的就是官方中文论坛那个回复效率真的是西方式的悠闲!
果不其然是有办法解决这个仿真慢的问题的。
点进XILINX员工给出的链接,https://www.xilinx.com/support/answers/53561.html, 打开一看基本上就是说在gtwizard_0_exdes模块的参数中打开SIM_GTRESET_SPEEDUP 宏,如下图
按文档说明的是会跳过一些步复位流程来加速仿真的,但效果不是很明显。。。。。,原行是2.5ms,现在还是2.5,感觉没啥用啊……
尽管如此AR原文还是提供了关于GTP的很多有用信息,英文有困难的小伙伴看一下GOOGLE的AI机翻:
================================================================================================
Artix-7 FPGA GTP收发器的设计咨询:生产芯片的RX复位序列要求
描述
该答复记录涵盖了Artix-7 GTP收发器生产芯片的RX复位序列要求。
解
下面记录了在Artix-7 GTP生产收发器中发出GTRXRESET,RXPMARESET或RXRATE所需遵循的顺序。这些复位序列也可以在通用ES芯片上使用,但不是必需的。
这些序列在“ ISE 14.4.1设备包”或ISE 14.5 / Vivado 2013.1工具版本的7系列FPGA收发器向导v2.5生成的包装器中实现。重置序列已添加到《7系列FPGA GTP收发器用户指南》(UG482)的v1.4中。注意,在仿真中需要特别注意。请参见下面的“模拟的其他要求”部分。
在这些序列中,“ user_ *”表示用户输入。该信号以前直接连接到GT原语。现在它将触发如下所述的替代复位序列。
“ gt_ *”表示与GT原语的连接。下图说明了此新序列的适合位置。
“ DRP wr”表示对地址9'h011执行DRP写操作的功能。没有显示确切的DRP事务。
1)GTRXRESET:
当用户想要执行GTRXRESET时,必须遵循以下复位顺序。
脚步:
- 用户通过断言user_GTRXRESET触发重置请求。
- 设置并保持gt_GTRXRESET为高。这将导致gt_RXPMARESETDONE变为低电平。
- 发出DRP写入GTPE2_CHANNEL原语,DRP地址为9'h011,并将位[11]设置为1'b0。
- 为了确保仅修改DRP地址9h'011的bit [11],最好执行读-修改-写功能。
- 在完成DRP写入并检测到user_GTRXRESET为低时,将gt_GTRXRESET设置并保持为低。如果在完成DRP写操作后user_GTRXRESET仍然保持有效,则继续断言gt_GTRXRESET,直到user_GTRXRESET为低。
- 等待gt_RXPMARESETDONE的下降沿。
- 发出DRP写入GTPE2_CHANNEL原语,DRP地址9'h011,恢复位[11]的原始设置。必须在gt_RXPMARESETDONE从低切换到高之前完成此DRP写操作。gt_RXPMARESETDONE将保持低电平至少0.66 us。
笔记:
- 确保gt_GTRXRESET是寄存器的输出。
- 确保将RXPMARESET_TIME设置为5'h3。这应该是默认设置。
- 仅当SIM_GTRESET_SPEEDUP设置为FALSE时,以上序列才能正确模拟。如果SIM_GTRESET_SPEEDUP设置为TRUE,则必须绕过上述序列。
2)RXPMARESET:
当用户想要执行RXPMARESET时,必须遵循以下复位顺序。
脚步:
- 用户通过断言user_RXPMARESET来触发RXPMARESET请求。
- 发出DRP写入GTPE2_CHANNEL原语DRPADDR 9h011,并将位[11]设置为1b0。
- 为了确保仅修改DRPADDR 9h011的bit [11],最好执行读-修改-写功能。
- DRP写入完成后,将gt_RXPMARESET设置并保持为高。
- 等待RXPMARESETDONE变为低电平。
- 发出DRP写入GTPE2_CHANNEL原语DRPADDR 9h011,以恢复位[11]的原始设置。
- 在完成DRP写入并检测到user_RXPMARESET为低时,将gt_RXPMARESET设置并保持为低。如果在完成DRP写操作后user_RXPMARESET仍然保持为有效,则继续断言gt_RXPMARESET,直到user_RXPMARESET为低电平。
注意:确保gt_RXPMARESET是寄存器的输出。
3)RXRATE:
当用户想要通过RXRATE触发RX速率更改时,必须遵循以下顺序。
脚步:
- 用户通过更改user_RXRATE来触发RX速率更改请求。
- 发出DRP写入GTPE2_CHANNEL原语DRPADDR 9h011,将位[11]设置为1b0。
- 为了确保仅修改DRPADDR 9h011的bit [11],最好执行读-修改-写功能。
- 完成DRP写入后,将gt_RXRATE设置为user_RXRATE的值。
- 等待RXPMARESETDONE变低
- 发出DRP写入GTPE2_CHANNEL原语DRPADDR 9h011,以恢复位[11]的原始设置。必须在RXPMARESETDONE从低切换到高之前完成此DRP写操作。RXPMARESETDONE将保持低电平至少0.66 us。
注意:仅当SIM_GTRESET_SPEEDUP设置为FALSE时,以上序列才能正确模拟。如果SIM_GTRESET_SPEEDUP设置为TRUE,则必须绕过上述序列。请参见下面的“仿真的附加要求”。
GTP属性:
除了上面要求的顺序以外,还必须正确设置以下属性:
PMA_RSV2 = 32h'00002040。
模拟的附加要求
在由7系列FPGA收发器向导生成的包装器中实现了这些序列以实现正确的硬件操作时,用户可能会在仿真中看到RXOUTCLK,RXUSRCLK和RXUSRCLK2以不正确的时钟速率运行。
例如,对于启用了8b10b解码器且内部数据宽度为20的配置,时钟速率是GT速率除以16而不是正确的20除法。
若要解决/绕过仿真中的此行为并生成正确的时钟速率,请执行以下步骤:
- 将core_name_gtxreset_seq.v / .vhd中的DRP地址(drpaddr_o)设置为2C。默认情况下,此DRP地址设置为11,这是适用于硬件的设置。
可以将2C设置用作模拟的解决方法。
对于Verilog,请参阅core_name_gtrxreset_seq.v中的第251和324行。
对于VHDL,请参阅core_name_gtxreset_seq.vhd中的第244行。
注意:仅需要将其定义为仿真,而不是硬件操作。例如,在Verilog中,在`ifdef SIMULATION'中定义2C地址。 - 确保通过rtl层次结构将EXAMPLE_SIM_GTRESET_SPEEDUP参数拉到gt_channel级别。GT向导示例设计中需要执行此步骤。
- 确保将EXAMPLE_SIMULATION参数设置为1。
完成这些更改后,将在复位后约20us内在仿真中看到正确的时钟速率。