6.XilinxRapidIO核仿真与包时序分析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
6.XilinxRapidIO核仿真与包时序分析
转⾃https:///liujinggang/p/10123498.html
⼀、软件平台与硬件平台
软件平台:
操作系统:Windows 8.1 64-bit
开发套件:Vivado2015.4.2
硬件平台:
评估板:ZYNQ-7 ZC706 Evaluation Board
⼆、介绍
上篇⽂章的最后⼀⼩节已经对例⼦⼯程进⾏仿真并通过命令 log_wave –r /* 记录了所有信号的波形,这篇⽂章主要介绍RapidIO核的仿真以及包时序的分析。
调试SRIO核时必须对包在不同接⼝的传输过程有⼀个清晰的了解,能够识别出不同接⼝上包的类型并正确的解析出包的内容。
本⽂详细的介绍了SRIO包(控制符号与数据字符)在不同接⼝上的组成与传输过程,并深⼊到逻辑层、传输层以及物理层来观察RapidIO串⾏物理层包的传输细节。整个包与信号分析的过程完全基于RapidIO提供的例⼦⼯程,例⼦⼯程的产⽣与源代码的分析已经在上⼀篇⽂章《Xilinx RapidIO核例⼦⼯程源码分析》(链接:
https:///liujinggang/p/10091216.html)提到过,这⾥不再赘述。最后,本⽂会利⽤RapidIO核做⼀个回环测试(Loopback Test)的⼯程在ZC706上运⾏,由于RapidIO是⼀个付费的IP核,所以⽣成bit⽂件需要License,没有License的可以在官⽹(https:///products/intellectual-property/ef-di-srio-gen2.html#overview)申请⼀个30天的评估版License试⽤,评估版的License⽣成的bit⽂件运⾏⼀段时间以后会⾃动失效,要想永久使⽤必须购买官⽅的License。
三、例⼦⼯程结构
下图整个例⼦⼯程的结构层次
它由⼀个仿真顶层的testbench和两个SRIO核顶层组成。其中顶层的testbench⽂件srio_sim.v连接了两个srio例⼦设计顶层,其中⼀个例⼦设计顶层叫做
srio_example_top_primary,它代表请求⽅的RapidIO设备;另⼀个例⼦设计顶层叫做srio_example_top_mirror,它代表响应⽅的RapidIO设备。
SRIO例⼦⼯程顶层⽂件srio_example_top.v例化了SRIO核的所有组件以及需要在硬件上执⾏的必要模块。这些模块包括:
1、时钟域复位模块(srio_clk.v和srio_rst.v)
2、配置结构(cfg_fabric.v)
3、请求事务与响应事务⽣成模块(srio_resquest_gen.v和srio_response_gen.v)
4、维护事务⽣成模块(srio_quick_start.v)
顶层模块srio_example_top中例化了srio_quick_start模块,它与SRIO的维护端⼝相连,⽤来⽣成维护事务(Maintenance Transactions)。这个模块⽤来向本地(Local)或远程(Remote)的配置寄存器空间发送⼀组固定的指令集,⽤户可以编辑maintenance_list.v来添加、修改或移除维护事务。
srio_request_gen在顶层模块srio_example_top进⾏例化,它⽤来产⽣I/O事务或消息(MESSAGE)事务,但仅仅SRIO核⽀持的事务类型能被产⽣,这个模块也存储了期望的响应事务并与实际接收到的响应事务进⾏对⽐⽤来确定整个事务交互过程的正确性。
srio_response_gen也在顶层模块srio_example_top进⾏例化,它⽤来产⽣请求事务对应的响应事务。
整个例⼦⼯程结构层次的软件框架如下图所⽰,其中左边的srio_example_top模块表⽰请求⽅的RapidIO设备,⽽右边的DUT Mirror表⽰响应⽅的RapidIO设备,它们的内部结构完全相同,区别仅仅在于⼀个作为请求⽅⽽另⼀个为响应⽅。
SRIO核的原理框图以及接⼝如下图所⽰
为了⽅便说明,上图每⼀个接⼝都⽤相应的数字标注出来。它们分别为
Initiator/Target IO Port(接⼝1)
例⼦⼯程中SRIO核全部为默认参数,所以端⼝类型默认被配置为Initiator/Target,在Initiator/Target接⼝类型中请求事务与响应事务在不同的AXI4-Stream通道上进⾏传输。SRIO核的端⼝类型也能被配置为Condensed I/O类型,在Condensed I/O接⼝类型中请求事务与响应事务在同⼀AXI4-Stream通道上进⾏传输,所以Condensed I/O相⽐于Initiator/Target类型来说接⼝更加精简。本⽂仍然采⽤默认的Initiator/Target接⼝类型来分析每个包的传输过程。
接⼝1的数据传输协议为AXI4-Stream协议,它的接⼝定义如下:
s_axis_ireq_* 表⽰Initiator请求事务的传输通道(i = initiator ,req = request)
m_axis_iresp_* 表⽰Initiator响应事务的传输通道(i = initiator ,resp = response)
m_axis_treq_* 表⽰Target请求事务的传输通道(t = target ,req = request)
s_axis_iresp_* 表⽰Target响应事务的传输通道(t = target , resp = response)
Maintenance Port(接⼝2)
接⼝2的数据传输协议为AXI4-Lite协议,⽤来传输维护事务。它的接⼝定义如下:
s_axi_maintr_* 表⽰维护事务的传输端⼝(maintr = maintenance)
LOG Configuration Fabric(接⼝3)
接⼝3的数据传输协议为AXI4-Lite协议,它是逻辑层的配置结构端⼝,包括本地(Local)配置端⼝和远程(Remote)配置端⼝。它的接⼝定义如下: s_axi_cfgl_* 表⽰本地配置端⼝(cfg = configuration,l = local)
m_axi_cfgr_* 表⽰远程配置端⼝(cfg = configuration,r = remote)
LOG Transport Interface(接⼝4)
接⼝4的数据传输协议为AXI4-Stream协议,它是逻辑层与Buffer的数据传输接⼝,包括发送和接收两个通道。它的接⼝定义如下:
m_axis_buft_* 表⽰发送端⼝(buf = buffer,t = transmit)
s_axis_ bufr_* 表⽰接收端⼝(buf = buffer,r = receive)
BUF Link Interface(接⼝5)
接⼝5的数据传输协议为AXI4-Stream协议,它是Buffer层与物理层的数据传输接⼝,包括发送和接收两个通道。它的接⼝定义如下:
m_axis_phyt_* 表⽰发送端⼝(phy= physical,t = transmit)
s_axis_ phyr_* 表⽰接收端⼝(phy = physical,r = receive)
BUF Configuration Fabric(接⼝6)
接⼝6的数据传输协议为AXI4-Lite协议,它是Buffer层的配置端⼝。它的接⼝定义如下:
s_axi_bcfg_* 表⽰Buffer层配置端⼝(b = buffer,cfg = configuration)
PHY Serial Interface(接⼝7)
接⼝7为物理层串⾏链路接⼝,它是物理层数据与串⾏收发器(Serial Transceivers)数据交换通道,它的接⼝定义如下所⽰:
信号⽅向功能
gttx_data[32*LW-1 : 0]Output发送给串⾏收发器(Serial Transceivers)的数据
gttx_charisk[4*LW-1 : 0]Output gttx_data信号中有效字节指⽰信号。当这个信号某⼀位为0时,gttx_data中对应的字节为包的有效字节。
gttx_inhibit[LW-1:0]Output 串⾏收发器的通道使能位。如果最低位(bit-0)为1,表⽰发送通道0(Lane0)不使能,其余依次类推
gtrx_data[32*LW-1:0]Input从串⾏收发器(Serial Transceivers)接收的数据
gtrx_charisk[4*LW-1:0]Input gtrx_data信号中有效字节指⽰信号。当这个信号某⼀位为0时,gttx_data中对应的字节为包的有效字节。
gtrx_chariscomma[4*LW-1:0]Input gtrx_data信号中comma指⽰信号。如果最低位(bit-0)为1,表⽰gtrx_data[7:0]是包含comma的字符,其余依次类推
gtrx_disperr[4*LW-1:0]Input gtrx_data信号中不⼀致错误(Disparity Error)指⽰信号。如果最低位(bit-0)为1,表⽰
gtrx_data[7:0]中存在不⼀致错误,其余依次类推
gtrx_notintable[4*LW-1:0]Input gtrx_data信号中not-in-table错误指⽰信号。Table 指的是8b/10b编码解码表。如果最低位(bit-0)为1,表⽰gtrx_data[7:0]中8b/10b解码错误,其余依次类推
gtrx_chanbondseq[LW-1:0]Input 串⾏收发器每个链路的通道绑定序列(Channel Bonding Sequence)指⽰信号,如果最低位(bit-0)为1,表⽰链路0(Lane0)收到了⼀串通道绑定序列,其余依次类推
gtrx_chanisaligned[LW-1:0]Input 串⾏收发器每个链路的通道对齐(Channel Alignment)指⽰信号,如果最低位(bit-0)为1,表⽰链路0(Lane0)已经实现了通道对齐,其余依次类推
gtrx_chanbonden Output串⾏收发器通道绑定使能信号
gtrx_reset_req Input 串⾏请求复位信号。例如,由于串⾏收发器接收通路弹性FIFO的上溢(overflow)或下溢(underflow),
gtrx_reset Output串⾏收发器的复位信号
gtrx_reset_done[LW-1:0]Input 串⾏收发器每个链路的复位完成指⽰信号,如果最低位(bit-0)为1,表⽰链路0(Lane0)已经复位完成,其余依次类推
PHY Configuration Fabric(接⼝8)
接⼝8的数据传输协议为AXI4-Lite协议,它是物理层(Physical)的配置端⼝。它的接⼝定义如下:
s_axi_cfgp_* 表⽰物理层配置端⼝(cfg = configuration,p = physical)
Transceiver Interface(接⼝9)
接⼝9为串⾏收发器⾼速数据传输接⼝,每条串⾏数据传输线均为⼀对差分信号。它的接⼝定义如下:
srio_rxpN ,srio_rxnN:N为通道号,接收链路差分对,N的值为1、2或4。
srio_txpN ,srio_txnN:N为通道号,发送链路差分对,N的值为1、2或4。
四、SRIO核包时序分析
上篇⽂章《Xilinx RapidIO核例⼦⼯程源码分析》(链接:https:///liujinggang/p/10091216.html)的最后⼀⼩节已经详细介绍了仿真的全部流程以及利⽤log_wave –r /*命令记录所有信号波形的⽅法,这⾥不再赘述。这⼀节默认⼤家已经仿真完毕(仿真结束⼤约需要20min左右时间,仿真完毕记得保存波形),并得到了仿真的波形,下⾯就对其中重要的波形进⾏分析。
在分析之前,在重新回顾⼀下RapidIO串⾏物理层的包与控制符号的格式
串⾏物理层的包: