0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Xilinx高质量时钟输出ODDR原语的概述及使用方法

冬至子 来源:FPGA探索者 作者:FPGA探索者 2023-06-27 10:21 次阅读

一、ODDR概述及使用方法

ODDR(Output Double Data Rate,输出双倍数据速率):

在DDR接口中,ODDR用于发送时钟和数据;

SDR接口中,ODDR转发时钟(仍在时钟树内),输出端要直连到输出port,不可加逻辑,连接方式:输出时钟连接ODDR的C引脚,D1固定值1'b1, D2固定值1'b0,CE固定值1’b1,ODDR的输出Q连接到OBUF;

图片

时钟输入有限制,需要从SRCC或者MRCC专用时钟输入引脚输入,时钟输出可以在任何引脚上输出。当输出时钟时,即使使用的是时钟专用输入管脚去输出时钟,也等同于使用普通的GPIO管脚输出时钟。

输出时钟的最佳方法是使用ODDR来转发时钟 (假设输出的时钟是一个专用时钟网络上的时钟)。每个IOB(IO Bank)都具有ODDR功能。

这样做时,内部时钟一直停留在专用的时钟网络上,直到ODDR,永远不需要进入一般的路由结构。不建议直接将时钟带到OBUF,因为这需要内部时钟离开专用时钟网络,通过一般的fabric路由线路路由到OBUF。

对Spartan6里面,必须用ODDR寄存器输出。

二、时钟配置

加入ODDR代码,D1接高电平,D2接低电平,C接时钟,Q输出。

wire user_clk;
IBUFDS IBUFDS_inst_user_clk(
    .O(user_clk), // Buffer output
    .I(USRCLK_P_I), // Diff_p buffer input
    .IB(USRCLK_N_I) // Diff_n buffer input
);   

wire user_clk_bufg;
BUFG BUFG_inst_user_clk (
      .O(user_clk_bufg), // 1-bit output: Clock output
      .I(user_clk)
);

wire user_clk_bufg_oddr;
ODDR #(
      .DDR_CLK_EDGE("OPPOSITE_EDGE"), //"OPPOSITE_EDGE" or "SAME_EDGE"
      .INIT(1'b0),    // Initial value of Q: 1'b0 or 1'b1
      .SRTYPE("SYNC") // Set/Reset type: "SYNC" or "ASYNC"
 ) ODDR_out_clock_inst_user_clock (
     .Q(user_clk_bufg_oddr),   // 1-bit DDR output
     .C(user_clk_bufg),   // 1-bit clock input
     .CE(1'b1), // 1-bit clock enable input
     .D1(1'b1), // 1-bit data input (positive edge)
     .D2(1'b0), // 1-bit data input (negative edge)
     .R(),   // 1-bit reset
     .S()    // 1-bit set
);

 OBUFDS OBUFDS_inst_user_clock (
    .O (USER_SMA_CLOCK_P_O
    .OB(USER_SMA_CLOCK_N_O),     // Diff_n output
    .I (user_clk_bufg_oddr)      // Buffer input
 )

不加ODDR,布局布线后RTL图如下:

图片

加ODDR,布局布线后RTL图如下:

图片

布局布线的资源中,下图左侧显示没有加ODDR的,右侧是加入了ODDR,可见右侧输出时钟经BUFG后先到输出引脚附近的ODDR(蓝线和紫线交汇处),经ODDR转发后到PAD管脚输出。

图片

三、性能对比

按照Xilinx和网上的一些说法,加入ODDR后输出时钟的质量会更好。

图片

输出DDR可以转发一个时钟副本到输出。这对于传播具有相同延迟的时钟和DDR数据、以及生成多个时钟(其中每个时钟负载都有惟一的时钟驱动)非常有用。这是通过将ODDR的D1输入高电平并且D2输入低电平来实现的。Xilinx建议使用这种方案将时钟从FPGA逻辑转发到输出引脚。

如下图所示是加入ODDR前后的时序裕量和资源消耗对比,可以看到,对 WNS (Worst Negative Slack,最差负时序裕量)和 WHS (Worst Hold Slack,最差保持时序裕量)、资源使用在加入前后没有明显的区别。实测加入ODDR前后误码率基本一致,眼图扫描结果也一致。

图片

按照Xilinx的推荐,在输出时钟时最好还是把ODDR加上 。这个测试用例没有体现出ODDR的优势,也许在资源使用较多、时钟频率更高时才能体现。另外,这里只是输出了时钟,没有输出使用该时钟的数据。

很多人说时钟直接从BUFG输出到管脚会报错,必须加约束或者ODDR,目前我在ZYNQ7045上没有发现此问题。

ODDR****的使用场景还在于 OSERDES、 FPGA 的源同步的系统设计 ,用 ODDR使得随路时钟和数据在输出时是严格同步的,保证严格的相位对齐关系

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • SDR
    SDR
    +关注

    关注

    7

    文章

    232

    浏览量

    50381
  • RTL
    RTL
    +关注

    关注

    1

    文章

    385

    浏览量

    59657
  • GPIO
    +关注

    关注

    16

    文章

    1188

    浏览量

    51823
  • 时钟驱动器
    +关注

    关注

    0

    文章

    33

    浏览量

    13814
收藏 人收藏

    评论

    相关推荐

    protel输出高质量gerber

    图文并茂一步一步手把手教你输出高质量的gerber傻瓜式教学。。。。[hide] [/hide]
    发表于 12-12 15:43

    高质量C++、C编程指南

    高质量C++、C编程指南
    发表于 08-06 11:58

    高质量C&C++

    高质量C&C++
    发表于 08-16 19:45

    高质量C语言编程

    高质量c语言,精,精,精,精华
    发表于 07-22 13:48

    编写高质量C语言代码

    编写高质量C语言代码 编写高质量C语言代码 编写高质量C语言代码
    发表于 07-31 17:47

    高质量编程

    干货,《495个C语言问题》、《华为内部程序设计编码规范》、《C语言:陷阱和缺陷》、《高质量C编程[林锐]》
    发表于 02-27 19:39

    使用ODDR原语的重要性是什么?

    你好我将virtex5 LX50与具有应根据standardEIA / TIA-644 LVDS规范终止的输出数据的设备连接起来我在用着IBUFDS用于将输入LVDS转换为LVTTL,OBUFDS用于输出信号和时钟这是这样做的正
    发表于 06-17 14:59

    Xilinx原语使用方法

    Xilinx原语使用方法
    发表于 02-22 06:55

    请问怎么才能设计出高质量的印制线路板?

    怎么才能设计出高质量的印制线路板?
    发表于 04-23 06:57

    xilinx原语使用方法

    xilinx原语的使用,建议有一定经验的参考。
    发表于 12-17 11:58 13次下载

    xilinx 原语使用方法

    xilinx 原语使用方法
    发表于 10-17 08:57 11次下载
    <b class='flag-5'>xilinx</b> <b class='flag-5'>原语</b><b class='flag-5'>使用方法</b>

    xilinx原语使用方法

    xilinx原语使用方法
    发表于 10-19 08:50 15次下载
    <b class='flag-5'>xilinx</b><b class='flag-5'>原语</b><b class='flag-5'>使用方法</b>

    Xilinx原语使用方法有哪些

    Xilinx公司的原语按照功能分为10类,包括:计算组件、I/O端口组件、寄存器和锁存器、时钟组件、处理器组件、移位寄存器、配置和检测组件、RAM/ROM组件、Slice/CLB组件以及G比特收发器组件。下面分别对其进行详细介绍
    的头像 发表于 02-08 14:01 1385次阅读
    <b class='flag-5'>Xilinx</b><b class='flag-5'>原语</b><b class='flag-5'>使用方法</b>有哪些

    Xilinx原语使用方法

    Xilinx公司的原语按照功能分为10类,包括:计算组件、I/O端口组件、寄存器和锁存器、时钟组件、处理器组件、移位寄存器、配置和检测组件、RAM/ROM组件、Slice/CLB组件以及G比特收发器组件。下面分别对其进行详细介绍
    发表于 03-24 06:14 3次下载
    <b class='flag-5'>Xilinx</b><b class='flag-5'>原语</b><b class='flag-5'>使用方法</b>

    Xilinx高质量时钟输出ODDR原语

    在SDR接口中,ODDR转发时钟(仍在时钟树内),输出端要直连到输出port,不可加逻辑,连接方式:输出
    的头像 发表于 06-21 14:11 1448次阅读
    <b class='flag-5'>Xilinx</b>的<b class='flag-5'>高质量</b><b class='flag-5'>时钟</b><b class='flag-5'>输出</b><b class='flag-5'>ODDR</b><b class='flag-5'>原语</b>