• Xilinx SelectIO资源的使用总结


    Virtex系列的FPGA的 基本I/O逻辑资源都包括组合输入、输出资源,三态输出控制、寄存器输入输出控制、SDR输入输出、DDR输出三态控制等。此外V5、V6器件还包括了IODELAY提供了对高分辨率可调整延迟单元的用户控制、SAME_EDGE 输出DDR模式,SAME_EDGA和SAME_EDGA_PIPELINED输入DDR模式等,以下主要是总结个人学习记录。

    一、输入输出延迟单元IODELAY
    每个I/O模块都包含一个可编程绝对的延迟单元IODELAY。它可以连接到ILOGIC/ISERDES或者OLOGIC/OSERDES模块。IODELAY有64个tap的环绕单元。通过选择IDELAYCTRL的参考时钟,可以改变这64个tap的延迟分辨率。IODELAY可以用于组合输入/输出通路、寄存器输入/输出通路,也可以在内部资源中直接使用。

    (1) 当用作IDELAY时,数据从IBUF或者内部资源输入,然后输出到ILOGIC/ISERDES。
    *零保持时间模式,此时IDELAY_TYPE =Default,这种模式不需要例化IDELAYCTRL基元。
    *固定时间延迟模式,此时IDELAY_TYPE= FIXED,这种模式下,配置时将延迟值预设置成由属性IDELAY_VALUE确定的Tap数。使用时必须例化IDELAYCTRL基元。
    *可变延迟模式,可以在配置后通过控制信号CE和INC来改变延迟,使用时必须例化IDELAY_CTRL。

    (2) 当中ODELAY时,数据从OLOGIC/OSERDES输入。配置时将预设值成由ODELAY_VALUE确定的Tap数,使用时必须例化IDELAYCTRL元件。

    (3) 当中双向延迟时,将IOB配置成双向模式,IODELAY交替延迟输入输出通过的延迟。有下面两种可配的模式

    *固定时间延迟模式,此时IDELAY_TYPE= FIXED,这种模式下,配置时将延迟值预设置成由属性IDELAY_VALUE确定的Tap数。使用时必须例化IDELAYCTRL基元。

    *可变延迟模式,可以在配置后通过控制信号CE和INC来改变延迟,使用时必须例化IDELAY_CTRL。

    一般情况下,如果只是例化了一个IDELAYCTRL,那么可以不添加LOC约束,但是当例化的IDELAYCTRL超过一个的时候就必须添加位置约束,否则会ISE软件在综合实现的时候就会报错。

    二、IDELAYCTR的使用
    如果IOBDELAY_TYPE属性被设置为FIXED或者VARIABLE,则必须在代码中例化IDELAYCTRL模块,IDELAYCTRL模块在其区域里连续标定各个延迟单位,简单总结下IDELAYCTRl的使用方法。

    (1) 无LOC约束的IDELAYCTRL
    当例化无LOC约束的IDELAYCTRL时,HDL代码中必须只例化一个IDELAYCTRL实例,ISE实现时会自动复制到整个器件的延迟单元时钟区域当中,这样每一个时钟区域都有消耗一个全局时钟资源比,使用的布局布线资源也比较高,进而使得芯片的功耗也比较大。

    当忽略RDY端口时,所以复制的IDELAYCTRL实例的RDY信号均不连接,但是当连接RDY端口时,例化一个宽度等于时钟区域数的与门,ISE实现时会自动连接到已经例化的所有IDELAYCTRL实例的RDY端口的信号与门输出。

    (2) 有LOC约束的IDELAYCTRL
    使用IDELAYCTRL模块最有效的方法是定义并且锁定代码中例化的所有的IDELAYCTRL实例的位置,Xilinx官方推荐在使用延迟单元时,应该定义并且锁定所有的ISERDES和IDELAY元件的位置,使用有LOC约束的IDELAYCTRL

    添加有LOC的IDELAYCTRL需要注意:
    一个IDELAYCTRL基元可同时覆盖一个clock region,而一个clock region包含不止一个IOB,在约束IDELAYCTRL基元LOC时,需要仔细定位该IOB属于哪个LOC的IDELAYCTRL。

    (3) 位置约束
    每一个IDELAYCTRL模块都有XY坐标位置,为了约束位置,IDELAYCTRL实例可以附带LOC属性,为IDELAYCTRL附加LOC属性可以在UCF文件中加入 INST “Instance name” LOC = IDELAYCTRL_X#Y#; 或者在HDL设计文件中直接嵌入LOC约束

    下列语法用于在HDL设计文件中嵌入LOC约束。

    // synthesis attribute loc of instance_name is "IDELAYCTRL_X#Y#";
    比如一个完整的实例:
    IODELAY #(
    .DELAY_SRC ( "O" ), //IODELAY源是ODATAIN
    .IDELAY_TYPE ( "FIXED" ), //静态延迟
    .ODELAY_VALUE ( 16 ), //固定延迟数为16个tap
    .REFCLK_FREQUENCY ( 200.0 ) //IDELAYCTRL参考时钟200MHz
    )IODELAY_INST
    (
    .C ( 1'b0 ), //可变模式下使用的时钟输入
    .CE ( 1'b0 ), // 是否启动递增/递减功能
    .DATAIN ( 1'b0 ),
    .IDATAIN ( 1'b0 ),
    .INC ( 1'b0 ), //tap延迟的递增/递减选择
    .ODATAIN ( LED ), //来自OLOGIC/OSERDES的信号
    .RST ( 1'b0 ),
    .T ( 1'b0 ), //用作ODELAY
    .DATAOUT ( LED )
    );
    IDELAYCTRL IDELAYCTRL_inst
    (
    .RDY ( RDY ), // 1-bit ready output
    .REFCLK ( System_Clk ), // 1-bit reference clock input
    .RST ( 1'b0 ) // 1-bit reset input
    );

    三、高级的SelectIO逻辑资源(ChipSync)
    高级SelectIO逻辑资源包括ISERDES和OSERDES,它可以支持非常高的I/O数据速率,允许内部逻辑以低于I/O的速率运行。BitSlip子模块,可以根据培训模式检测数据重新对齐边界。

    (1) ISERDES功能
    专用的解串器/串并转换器:ISERDES可以实现高速数据传输,完全不需要FPGA内部逻辑与输入数据频率匹配,此转换器支持SDR、DDR两种模式。在SDR模式下,串并转换器可以创建2、3、4、5、6、7、8位宽的并行字,在DDR模式下,串并转换器可以创建4、6、8、10位宽的并行字。

    BitSilp子模块:这个模块支持对进入FPGA内部资源的并行数据进行重新排序的功能,可以用来培训模式的源同步端口。

    (2) ISERDES宽度拓展方法
    每一个I/O模块中都有一主一从两个ISERDES模块,对于构建大于1:6串行转换器时需要用级联的方式将两个ISERDES连接起来。通过主ISERDES的SHIFOUT端口连接到从ISERDES的SHIFIN端口,可以将串并转换器的最大扩展到1:10(DDR模式)和1:8(SDR模式)。 扩展串并转换器位宽的原则如下:
    A、 两个ISERDES模块必须是相邻的主从对。
    B、 将主ISERDES的SERDES_MODE设置为MASTER,将从ISERDES的SERDES_MOD设置为Slaver。
    C、 将Slave的shifin端口连接到master的shifout端口。
    D、 Slave仅仅使用端口Q3~Q6作为输入端口。
    E、 Master和Slave的数据宽度相等。

    (3) OSERDES模块
    每一个OSERDES模块都包括一个用于数据和三态控制的专用转换器。数据和三态都可以配置成SDR和DDR模式,数据串行化可达6:1 ,如果使用宽度扩展的话,可以到达10:1,三端口串行化可达4:1。

    (4) OSERDES模块的扩展方法:Oserdes扩展和Iserdes扩展方式一致。

  • 相关阅读:
    Android Animation学习 实现 IOS 滤镜退出动画
    Android Camera 流程梳理
    iOS启动页广告XHLaunchAd
    实现百度外卖APP个人中心头像"浪"起来的动画效果
    iOS 常用控件集合 完整项目
    Python split()分割函数Python实现源码
    Selenium RC和Selenium Webdriver环境搭建(Python)
    Python rPyc 模块应用:在远端上执行命令,并且获取查询结果
    APP UI设计相关的一些链接
    IOS 开发的官方文档链接
  • 原文地址:https://www.cnblogs.com/lionsde/p/11072062.html
Copyright © 2020-2023  润新知