SRIO IP介绍 (三) SRIO IP时钟、复位及例程分析

1.时钟

        首先,在讲时钟之前,其实我们用户实际进行数据传输的时候,只需要考虑log_clk即可,这里介绍其他时钟,只是为了加深对于核底层的理解。

        phy_clk是主内核时钟,gt_pcs_clk用于串行收发器接口。gt_clk不由PHY使用,但由串行收发器接口使用。gt_pcs_clk是gt_clk的速率的一半。作为一般规则,phy_clk等于(gt_clk * 操作链路宽度)/4。因此,对于以2x操作的核,phy_clk是gt_clk的频率的一半。如果内核向下训练到1x模式,则phy_clk必须切换到gt_clk速率的四分之一。串行收发器还需要使用收发器专用时钟引脚的参考时钟(refclk)。在生成内核时选择参考时钟频率(可用选项取决于架构和线路速率)。

        下面给出参考时钟和线速率的关系:

        这个表列举出了常见的线速率所对应的参考时钟,当然,在VIVADO里面输入了一个线速率之后,参考时钟只能固定的选某几个频率。这个表的意义就在于,如果板子上参考时钟是125M,那么,线速率就可以选1.25,2.5,3.125, 5,6.25Gbps。如果板子参考时钟是156.25M,那么线速率只能选3.125或6.25Gbps。就不需要一个一个试,到底多大的线速率可以用156.25的参考时钟。

        LOG在log_clk域上操作。为了获得最佳吞吐量,log_clk应该至少与phy_clk一样快。

        下面给出几种常用通道下,线速率与各时钟之间的对应关系:

        4X(4通道模式):

        2X(2通道模式):

          1X(1通道模式):

          通过上表,我们也能看出来phy_clk和log_clk时钟频率是一样的,正好呼应了前面所说的,为了获得最佳吞吐量,log_clk应该至少和phy_clk一样快,默认情况下,他俩确实是一样的。

        对于时钟参考的设计,如下图所示:

        MMCM乘法器和分频器的值取决于参考时钟频率和线速率。在4x配置中,log_clk和gt_clk共享BUFG。在1x配置中,log_data和phy_data共享一个BUFG(不需要BUFGMUX,因为只有一个可能的phy_data速率)。此外,如果在Vivado IDE中选择了Unified Clock选项,则log_clk和phy_clk需要具有相同的速率。这意味着log_clk/cfg_clk的BUFG可以被移除,并且log_clk/cfg_clk被绑定到phy_clk。BUFG是全局缓冲,它的输入是IBUFG的输出,BUFG的输出到达FPGA内部的IOB、CLB、选择性块RAM的时钟延迟和抖动最小。

        最后总结一句,其实只要知道log_clk的频率是多少,和线速率以及通道数是什么关系就可以了,其实数据传输的本质其实就是,用多少时间,传多少数据,搞清楚这些,SRIO IP的使用就没什么大问题了。

2.复位

        通过以上的介绍,大家也看到了时钟有好多个,但是我们关心的只是其中的某一两个就可以,同样,复位也是如此,接下来会在官方例程中给大家作简单介绍。

        每个时钟域具有相关联的复位。复位应在相应时钟域的最少四个时钟周期内置位,并同步解除置位(注意,如果内核被训练下降,phy_clk的运行速度低于原始速率,复位仍必须在四个完整周期内置位)。

        内置的复位参考设计模块(srio_rst.v)具有单个复位输入sys_rst。此信号为异步输入。该模块将复位同步到每个时钟域,并扩展脉冲以满足最小复位周期要求。

3. 例程分析

        

        1. instruction_list.vh模块

        主要包括一些参数信息,传递给其他模块使用。 

        2.maintenance_list.vh

        包含在srio_quick_start中的此文件包含示例设计发出的维护说明。当然,这个模块我们也是不需要关心的。

        3.srio_clk模块

        它是HDL时钟模块,用于生成内核时钟。可以看到,就是之前咱们所介绍的几个时钟信号。

        4.srio_rst模块

        示例重置模块,从sys_rst输入生成必要的重置并对其进行排序。其实之前也说过,它的核心其实就是脉冲扩展,必须复位达到至少4个时钟周期。

        

        其他的复位也是同样的方式进行脉冲扩展,以达到上述的要求。

        5.srio_request_gen模块

        此模块生成要发送到链接伙伴的请求事务。它使用事务类型进行参数化,以便仅发送适合于端口并由核心支持的事务。其实一句话,就是发送数据相关的模块,看它的端口信号一下就清楚了。

 

        6.srio_response_gen模块

        该文件包含创建对传入事务的响应的逻辑(如果它们是响应生成数据包类型)。简而言之就是与接收数据有关的模块,同样,看它的端口信号

        最后,对于其他没有介绍到的模块,我们一般情况下是用不到的。大家学习SRIO IP的目的,我想也都是为了收发自己特定格式的数据吧,这个在第二讲已经做了很详细的解释说明。对于仿真部分,这里就不展开进行了。

        

 

  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱你等于1+1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值