• Xilinx原语学习之时钟资源相关原语


    一直来,都是使用Vivado中自带的GMIItoRGMII IP核来完成GMII转RGMII的功能;尽管对GMII及RGMII协议都有一定的了解,但从没用代码实现过其功能。由于使用IP时,会涉及到MDIO配置IP寄存器的问题,觉得麻烦。因此决定用代码实现GMII转RGMII的功能。

    参考Lattice的开源代码,进行移植。移植后在Vivado中进行编译时没有问题,但一旦进行实现(Implementation)时就会有如下错误:

    [Place 30-574] Poor placement for routing between an IO pin and BUFG. 

    实在纳闷,于是深入挖掘原因。

    从编译的原理图来看,rgmii_rclk在输入端已被Vivado自动添加了一个IBUF以及BUFG;通过Vivado中的Synthesis的Settings,取消自动添加BUFG的选项;再实现时没有错误了,且可以生成bit文件;但时序严重不满足。

    查看之前使用GMIItoRGMII的IP工程中的Schematic,发现rgmii_rclk输入后添加了三个原语模块:IBUF、BUFR以及BUFG。其中IBUF是在信号输入端处添加了,BUFR是紧跟着IBUF,然后其输出的信号被内部的D触发器所使用,其中有一路直接连接到BUFG,然后通过BUFG输出到管脚(作为GMII的时钟输出)。

    藉此机会,想更进一步学习这几个原语的不同之处:

    -------------------------------------------------------------------------------------------------------------

    在Xilinx 7Series FPGA中,存在3种主要的时钟网络:BUFG,BUFR,BUFIO以及由他们所衍生出来的各种变种。它们之间的特点和区别如下:

    >>>BUFIO

    BUFIO是IO时钟网络,顾名思义,它只能驱动IO Block里面的逻辑,不能驱动CLB里面的LUT,REG等逻辑。BUFIO可以被如下节点驱动:

    1、SRCCs and MRCCs in the same clock region

    2、MRCCs in an adjacent clock regionusing BUFMRs

    3、MMCMs clock outputs 0-3 driving the HPC in the same clock region

    >>>BUFR

    BUFR是regional时钟网络,顾名思义,它的驱动范围只能局限在一个clock region的逻辑,但是它可以同时驱动IO和内部逻辑。BUFR可以被如下节点所驱动:

    1、所有能驱动BUFIO的节点

    2、MMCMs clock outputs 0-3

    3、General interconnect

    BUFIO和BUFR的主要区别可以用下图概括:

    >>>BUFG

    BUFG是全局时钟网络,这个大家最熟悉了,它可以驱动所有的IO和逻辑,并且可以被Transceiver所驱动。如果时钟信号要走全局时钟网络,必须通过这个BUFG来驱动,BUFG可以驱动所有的CLB,RAM,IOB。Zynq一共有22个BUFG全局时钟线。

    BUFR相比BUFG的最大优势是skew和功耗都比较小,在源同步的设计中,这一点也是很关键的。

    >>>BUFR和BUFMR有什么区别?

    BUFMR是7系列才有的时钟buffer,它是在有些源同步设计中逻辑IO跨上中下三个Bank;而BUFR仅仅能够驱动一个Bank,所以需要BUFMR级联BUFR来完成每个Bank的功能功能,如下图:

    >>>BUFH怎么用?

    BUFH,BUFH驱动区域中的水平全局时钟树,Xilinx的时钟是通过时钟树来分布的。可用于互联逻辑、SelectIO逻辑,DSP48E1模块或者Block RAM资源的时钟驱动。

    >>>时钟资源选择上是不是BUFG最优?

    这个要根据设计,很多AD DA需要源同步设计,如果上了BUFG由于时钟走线延迟较大;完全跟数据不同步,很难再进行正确的采样。接口设计的逻辑量一般比较小,不建议上全局。

    下面介绍下Xilinx时钟的管理:

    Xilinx芯片全局时钟资源的使用方法主要有下面5种:

    A、GCLK——>IBUFG——>BUFG

    IBUFG后面连接BUFG的方法是最基本的全局时钟资源的使用方法,其等效于BUFGP

    B、GCLKP&GCLKN——>IBUFGDS——>BUFG

    当输入时钟为差分信号时候,需要使用IBUFGDS原语。

    C、IBUFG+DCM+BUFG

    通过DCM(Digital clock manage)不仅能对时钟进行同步、移相、分频、倍频等变换,而且可以使用全局时钟的输出无抖动和小延迟。

    D、Logic + BUFG

    BUFG不但可使用IBUFG的输出,还可以驱动其他普通信号的输出。当某个信号的扇出非常大,并且要求抖动延迟最小时,可以使用BUFG驱动该信号,使得该信号利用全局时钟资源。

    E、Logic + DCM + BUFG

    DCM可以改变也可以控制变换普通时钟信号。

    -----------------------------------------------------

    附录,参考链接:

    Xilinx FPGA器件中时钟资源的说明以及使用

    https://www.jianshu.com/p/3da8c9eca03a

  • 相关阅读:
    Vue+element UI实现“回到顶部”按钮组件
    JS判断字符串长度的5个方法(区分中文和英文)
    从vue源码看Vue.set()和this.$set()
    mac下git安装与使用
    JS数组reduce()方法详解及高级技巧
    vue中router.go、router.push和router.replace的区别
    上传及更新代码到github(以及如何在vscode上提交自己的代码)
    VSCode打开多个项目文件夹的解决方法
    get请求和post请求的区别
    android 进程的优先级
  • 原文地址:https://www.cnblogs.com/lifei-chan/p/8683468.html
Copyright © 2020-2023  润新知