IDDR、ODDR、IDEALY2和ODELAY2详解

文章目录

  • 前言
  • 一、IDDR原语
  • 二、ODDR原语
  • 三、IDELAYCTRL原语
  • 四、IDELAY原语
    • 4.1、参数配置 :
    • 4.2、端口说明 :
    • 4.3、延时控制时序图
  • 五、ODELAY原语

前言

本文参考XILINX手册UG471

一、IDDR原语

参考xilinx手册UG471

    IDDR #(
        .DDR_CLK_EDGE   ("SAME_EDGE_PIPELINED"    ),
        .INIT_Q1        (1'b0                     ),
        .INIT_Q2        (1'b0                     ),
        .SRTYPE         ("SYNC"                   ) 
    )   
    IDDR_u0     
    (   
        .Q1             (w_rec_data[rxd_i]          ), // 1-bit output for positive edge of clock 
        .Q2             (w_rec_data[rxd_i +4]       ), // 1-bit output for negative edge of clock
        .C              (w_rxc_bufio                ),  
        .CE             (1                          ),
        .D              (w_rxd_idly[rxd_i]          ),  
        .R              (0                          ),   
        .S              (0                          )   
    );

在数据的传输过程中,我们经常可以碰见双沿传输数据到FPGA,或者FPGA传输双沿数据给外部芯片,最常见的例子就是DDR芯片。这里说明一下,FPGA内部处理的数据都是单沿数据,那么双沿数据的变换只能发生在FPGA的IOB上面,这里有特定的硬件结构可以实现上面单沿变双沿的方法,也就是使用原语进行一些列的操作。
D:为输入的双倍速率的数据,即D在时钟的上升沿和下降沿都会发生切换,一个时钟周期发送2bit数据,
CE:为时钟使能信号
C:为时钟信号
S,R:为复位和置位信号
Q1,Q2:为单倍速率的输出数据
IDDR主要有三种工作模式,分别是:OPPOSITE_EDGE, SAME_EDGESAME_EDGE_PIPELINED ,代码里采用的是第三种方式。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

二、ODDR原语

ODDR #(
    .DDR_CLK_EDGE    ("OPPOSITE_EDGE"       ),
    .INIT            (1'b0                  ),
    .SRTYPE          ("SYNC"                ) 
) 
ODDR_u 
(
    .Q               (o_txd[txd_i]          ),  
    .C               (w_txc                 ),
    .CE              (1                     ),
    .D1              (w_send_d1[txd_i]      ),    
    .D2              (w_send_d2[txd_i]      ),    
    .R               (0                     ),
    .S               (0                     ) 
);

接口与IDDR一致,就是输入输出相反而已,有OPPOSITE_EDGE模式和SAME_EDGE俩种方式,代码里采用OPPOSITE_EDGE模式
在这里插入图片描述
在这里插入图片描述

三、IDELAYCTRL原语

IDELAYCTRL其实是个辅助模块,只要咱们使用了IDELAY或者ODELAY,IDELAYCTRL必须被使用,要不然就无法正常工作。因为IDELAY或者ODELAY的延迟精度是由IDELAYCTRL的输入时钟决定的,它会不断矫正IDELAY2和ODELAY2,将误差限制在一定范围,一般为200MHz。

(* IODELAY_GROUP = "rgmii_rx_delay" *) 
IDELAYCTRL  IDELAYCTRL_inst (
    .RDY(),                      // 1-bit output: Ready output
    .REFCLK(idelay_clk),         // 1-bit input: Reference clock input
    .RST(1'b0)                   // 1-bit input: Active high reset input
);

在这里插入图片描述

四、IDELAY原语

IDELAY被称为信号延迟模块,它的作用就是把信号延迟一段时间。对于一些需要对齐的输入信号来说,这至关重要。在7系列FPGA中,它被称为IDELAYE2。IDELAYE2可以将信号延迟0~31节,在这区间任意可调,并且在参考时钟为200M时,每节的延迟精度为78ps(1/(32×2×FREF),FREF为IDELAYCTRL的参考时钟)。

(* IODELAY_GROUP = "rgmii" *)
IDELAYE2 #(
   .CINVCTRL_SEL            ("FALSE"        ),          // Enable dynamic clock inversion (FALSE, TRUE)
   .DELAY_SRC               ("IDATAIN"      ),           // Delay input (IDATAIN, DATAIN)
   .HIGH_PERFORMANCE_MODE   ("FALSE"        ), // Reduced jitter ("TRUE"), Reduced power ("FALSE")
   .IDELAY_TYPE             ("FIXED"        ),           // FIXED, VARIABLE, VAR_LOAD, VAR_LOAD_PIPE
   .IDELAY_VALUE            (0              ),                // Input delay tap setting (0-31) 0.15625
   .PIPE_SEL                ("FALSE"        ),              // Select pipelined mode, FALSE, TRUE
   .REFCLK_FREQUENCY        (200.0          ),        // IDELAYCTRL clock input frequency in MHz (190.0-210.0, 290.0-310.0).
   .SIGNAL_PATTERN          ("DATA"         )          // DATA, CLOCK input signal
)
IDELAYE2_inst (
   .CNTVALUEOUT             (), // 5-bit output: Counter value output
   .DATAOUT                 (w_rxc_idelay   ),         // 1-bit output: Delayed data output
   .C                       (),                     // 1-bit input: Clock input
   .CE                      (),                   // 1-bit input: Active high enable increment/decrement input
   .CINVCTRL                (),       // 1-bit input: Dynamic clock inversion input
   .CNTVALUEIN              (),   // 5-bit input: Counter value input
   .DATAIN                  (),           // 1-bit input: Internal delay data input
   .IDATAIN                 (i_rxc          ),         // 1-bit input: Data input from the I/O
   .INC                     (),                 // 1-bit input: Increment / Decrement tap delay input
   .LD                      (),                   // 1-bit input: Load IDELAY_VALUE input
   .LDPIPEEN                (),       // 1-bit input: Enable PIPELINE register to load data input
   .REGRST                  ()            // 1-bit input: Active-high reset tap-delay input
);

在这里插入图片描述

4.1、参数配置 :

  1. IDELAY_TYPE:有四种模式FIXED, VARIABLE, VAR_LOAD, VAR_LOAD_PIPE,默认为FIXED。
    FIXED:固定的延迟值,设置静态的延时参数0-31,如:IDELAY_VALUE = 25,表示延时为25级,一旦配置后续无法更改
    VAR_LOAD:动态加载tap值,该模式下使用LD装载输入端将CNTVALUEIN的值载入,使用CE和NC实现加减1,与时钟同步
    在这里插入图片描述

VARIABLE:动态调节延时值,由输入管脚值决定,与时钟C同步
在这里插入图片描述

VAR_LOAD_PIPE: 与VAR_LOAD模式类似,并CNTVALUEIN值

  1. DELAY_SRCIDATAIN:输入数据来自IBUF,DATAIN:输入数据来自FPGA逻辑。
  2. HIGH_PERFORMANCE_MODE:TRUE: 减少输出抖动,但会增加功耗
  3. IDELAY_VALUE :在FXED模式,指定延时级数taps;在VARIABLE模式下的初始值,即加载的tap初始值;另外两种模式自动忽略,不使用,置0
  4. SIGNAL_PATTERN :输入信号是数据还是时钟
  5. REFCLK_FREQUENCY :参考时钟,确定每个延时tap的精度;200M时,1个tap=78ps
  6. CINVCTRL_SEL :使能CINVCTRL_SEL管脚来动态切换输入时钟的极性。
  7. PIPE_SEL :选择pipeline模式,只用于VAR_LOAD_PIPE模式

4.2、端口说明 :

  1. C : 时钟输入,用于VARIABLE, VAR_LOAD, VAR_LOAD_PIPE模式
  2. REGRST : Pipeline寄存器的复位,只用于VAR_LOAD_PIPE 模式。
  3. LD : 在VARIABLE 模式,加在IDELAYE2延时的值IDELAY_VALUE;在VAR_LOAD模式下,将输入CNTVALUEIN装载,LD,CD,INC配合使用
  4. CE :使能增加/减少的功能
  5. INC :增加或减少tap delays数量
  6. CINVCTRL :动态转换时钟极性,时钟极性改变后,至少延迟俩个时钟才稳定
  7. CNTVALUEIN :接收FPGA内部逻辑用于动态装载延迟级数,用于VAR_LOAD模式
  8. IDATAIN :输入数据来自IBUF
  9. DATAIN : 输入数据来自FPGA逻辑
  10. LDPIPEEN :使能流水线寄存器装载到DELAY2的延迟级数值,只在VAR_LOAD_PIPE有效
  11. DATAOUT : 延迟后的数据输出
  12. CNTVALUEOUT :实际延迟级数taps输出,用于FPGA内部监测

4.3、延时控制时序图

1、VARIABLE模式时序图

  • 时钟1:时钟C上升沿检测到延迟级数复位(LD为高),加载IDELAY_VALUE,即输出延时为tap0.
  • 时钟2:时钟C上升沿检测到CE和INC为高,即增加一级延时,输出延时变为tap1
  • 时钟3:此时全部为0,输出延时保持不变,直到下一次检测到LD、CE和INC。

在这里插入图片描述
2、VAR_LOAD模式时序图

  • 时钟0:LD、CE和INC都为低,无事发生
  • 时钟1:检测到LD,此时加载用户输入的CNTVALUEIN 5’b00010,即输出延时级数为tap2
  • 时钟2:INC和CE为高,输出延时级数加1变为tap3
  • 时钟3,有一次检测到LD,在此加载用户输入CNTVALUEIN,此时输入为5b01010,即tap10
    在这里插入图片描述

五、ODELAY原语

ODELAY和IDEALY的使用方式差不多,只不过ODELAY是用作输出信号的延迟。另外,HR BANK内没有ODELAY,HP BANK才有,被称为ODELAYE2。使用ODELAYE2时同样需要例化IDELAYCTRL。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/483403.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C++11】:统一的列表初始化|声明|STL变化

​ 🎬慕斯主页:修仙—别有洞天 ♈️今日夜电波:マイノリティ脈絡—ずっと真夜中でいいのに。 0:24━━━━━━️💟──────── 4:02 🔄 …

已知屏幕分辨率和屏幕尺寸,JavaScript如何计算屏幕PPI像素密度

返回主目录:OpenLayers扩展组件系列汇总目录:常用OpenLayers地图扩展组件ol-ext、ol-cesium、ol-layerswitcher、ol-geocoder和ol-wind等扩展库 前言 本章作为补充章,用于讲解使用ol-ext组件的前置知识。 要想知道 PPI 是什么,我们需要先理解“像素”这个概念,那么什么是…

【C++算法】洛谷P1102:A-B数对,思路,lower_bound,upper_bound,二分答案,代码详解

文章目录 1)解题思路2)三种情况3)代码 题目链接:P1102 A-B 数对 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 1)解题思路 这道题要求我们在序列中找到 A − B C A-BC A−BC 的数对的个数,下标不同的数…

注解总结,Java中的注解,springboot中的注解

注解总结 1、Junit 开始执行的方法:初始化资源,执行完之后的方法:释放资源 测试方法,必须是:公有、非静态、无参无返回值的 在一个类中,可以定义多个测试方法,每个测试方法可以单独运行&#…

XUbuntu22.04之安装Plantuml(二百二十三)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

llvm后端

SelectionDAGBuilder是LLVM(Low Level Virtual Machine)编译器中的一个重要组件,它负责将LLVM中间表示(Intermediate Representation,IR)转换为SelectionDAG(选择有向无环图)的形式。…

Nacos部署(四)Docker部署Nacos2.3.x集群环境

😊 作者: 一恍过去 💖 主页: https://blog.csdn.net/zhuocailing3390 🎊 社区: Java技术栈交流 🎉 主题: Nacos部署(四)Docker部署Nacos2.3.x集群环境 ⏱…

adams卸载与安装

adams 卸载后重新安装lnstaller could not read the log directory of the existing installerto backup and restore.Installer will now exit. ADAMS软件卸载安装【adams吧】_百度贴吧 (baidu.com)

阿里云OSS存储的视频如何加水印

OSS是不能进行视频添加水印的,可以图片添加水印。 您可以在视频点播中进行配置: https://help.aliyun.com/zh/vod/user-guide/video-watermarks?spma2c4g.11186623.0.i2 原来的业务代码都是使用python 对oss的 视频进行上传 的,上传的视频路径已经保存到…

提高效率与寿命:坚持正确的码垛机器人操作流程

在工业生产中,码垛机器人以其提升效率、减少损耗、降低成本等优势,成为众多行业不可或缺的重要设备。然而,与所有精密机械一样,码垛机器人的使用寿命很大程度上取决于正确的操作流程。科学规范的操作不仅保障生产顺利进行&#xf…

关于 Microsoft Visual Studio

关于 Microsoft Visual Studio References References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/

EPO企业生产运营数智化平台助力制造企业迈向智能制造

随着“中国制造2025”和工业4.0的不断推进,越来越多的制造企业准备迈入智能制造和智慧制造领域,实现数智化管理。企业通过搭建EPO企业生产运营平台,结合自身业务现状和数字化需求,从各个业务场景、部门人员、产品组成等方面进行分…

XSS一-WEB攻防-XSS跨站反射型存储型DOM型标签闭合输入输出JS代码解析

演示案例: XSS跨站-输入输出-原理&分类&闭合XSS跨站-分类测试-反射&存储&DOM #XSS跨站-输入输出-原理&分类&闭合 漏洞原理:接受输入数据,输出显示数据后解析执行 基础类型:反射(非持续),存储(…

内网渗透(二)必须了解Windows域环境

★★免责声明★★ 文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与学习之用,读者将信息做其他用途,由Ta承担全部法律及连带责任,文章作者不承担任何法律及连带责任。 1、Windows域环境简介 Windows域是计算机网络的一种形式…

鸿蒙一次开发,多端部署(十二)资源使用

在页面开发过程中,经常需要用到颜色、字体、间距、图片等资源,在不同的设备或配置中,这些资源的值可能不同。有两种方式处理: 应用资源:借助资源文件能力,开发者在应用中自定义资源,自行管理这些…

知识管理入门:轻松选择合适的知识管理软件

你是不是经常觉得自己的大脑像个杂乱的仓库,各种信息、知识和想法在里面乱窜,找不到头绪?别担心,知识管理软件来帮你解决这个问题啦!今天,我们就来聊聊知识管理软件这个神奇的工具,新手也能轻松…

MongoDB知识

1、部署MongoDB (1)new好一个mongo文件之后执行 (出现mongodb.key)记得放行端口 openssl rand -base64 666 > mongodb.key (2)放到一个docker-compose.yml之后docker-compose up -d执行 version: 3.…

网络安全实训Day11

写在前面 IPSec来喽。有时候把xmind直接粘贴过来会有顺序错位的情况,又被气晕 网络安全实训-网络安全技术 IPSec VPN IPSec 用于保障IP协议安全性的技术 相关概念 工作模式 传输模式:只对数据提供安全保护,不封装公网头部 隧道模式&#…

leetcode 239.滑动窗口最大值

题目 思路 这是单调队列的经典题目。 最基本思路就是(拿窗口大小为3说明): 从队列中已经有三个元素开始。先要pop掉第一个元素,然后再push进新的元素,最后返回这三个元素中最大的那一个。 pop和push操作都很简单&a…

正弦实时数据库(SinRTDB)的部署架构

为了适应各种类型的项目需求,正弦实时数据库支持单机部署、双主高可用集群部署、混合部署模式,各部署模式的特点如下: 单机部署 应用于风力发电、光伏、火电 等厂、站级监控系统。支持组态、实时计算、报警服务、报表统计等业务。 双主高可…