Xilinx原语——IDDR与ODDR的使用(Ultrascale系列)

news2024/11/26 23:35:33

Xilinx原语——IDDR与ODDR的使用(Ultrascale系列)

  • 一、IDDR
    • 1.1 OPPOSITE_EDGE
    • 1.2 SAME_EDGE
    • 1.3 SAME_EDGE_PIPELINED
    • 1.4 三种模式异同
  • 二、ODDR
  • 三、IDDR与ODDR仿真
    • 3.1 IDDR仿真
      • 3.1.1 IDDR顶层
      • 3.1.2 TestBench
      • 3.1.3 仿真结果
    • 3.2 ODDR仿真
      • 3.2.1 ODDR顶层文件
      • 3.2.2 TestBench
      • 3.3.3 仿真结果

  对于各个系列的器件,IDDR与ODDR都存在一定的差别,在使用前需要根据自己的器件型号选择相应的IDDR与ODDR,下面以kintex ultrascale系列器件为例。

一、IDDR

  IDDR的输入输出引脚包括时钟输入C、时钟取反输入CB、数据输入D(在时钟信号C的上升沿与下降沿都发生变化)、异步复位R(高电平有效)与数据输出Q1和数据输出Q2。
在这里插入图片描述
  IDDR的原语如下:

   IDDRE1 #(
      .DDR_CLK_EDGE("OPPOSITE_EDGE"), // IDDRE1 mode (OPPOSITE_EDGE, SAME_EDGE, SAME_EDGE_PIPELINED)
      .IS_CB_INVERTED(1'b0),          // Optional inversion for CB
      .IS_C_INVERTED(1'b0)            // Optional inversion for C
   )
   IDDRE1_inst (
      .Q1(Q1), // 1-bit output: Registered parallel output 1
      .Q2(Q2), // 1-bit output: Registered parallel output 2
      .C(C),   // 1-bit input: High-speed clock
      .CB(CB), // 1-bit input: Inversion of High-speed clock C
      .D(D),   // 1-bit input: Serial Data Input
      .R(R)    // 1-bit input: Active-High Async Reset
   );

  对于Kintex ultrascale的IDDRE1,有三种模式:OPPOSITE_EDGE、SAME_EDGE、 SAME_EDGE_PIPELINED,这三种模式下,输出信号Q1与Q2采样的数据分别是在时钟信号C的上升沿处的数据和下降沿处的数据,这是一致的。但是Q1与Q2发生变化的时间对于三种模式是有区别的。

1.1 OPPOSITE_EDGE

  在OPPOSITE_EDGE模式下,输出信号Q1在上升沿处对输入信号D进行采样,同时在该上升沿处Q1输出变为采样值;而输出信号Q2在下降沿处对输入信号D进行采样,同时在该下降沿处Q2输出变为采样值,如下图所示。
在这里插入图片描述

1.2 SAME_EDGE

  在SAME_EDGE模式下,输出信号Q1与Q2发生变化的时间都是在上升沿处,但是不在同一个上升沿,两个变化的时间相差一个时钟周期。输出信号Q1在上升沿处对输入信号D进行采样,同时在该上升沿处Q1输出变为采样值;而输出信号Q2在下降沿处对输入信号D进行采样,同时在下一个上升沿沿处Q2输出变为采样值,如下图所示。
在这里插入图片描述

1.3 SAME_EDGE_PIPELINED

  在SAME_EDGE_PIPELINED模式下,输出信号Q1与Q2发生变化的时间都是在上升沿处,而且在同一个上升沿。输出信号Q1在上升沿处对输入信号D进行采样,同时在下一个上升沿处Q1输出变为采样值;而输出信号Q2在下降沿处对输入信号D进行采样,同时在下一个上升沿沿处Q2输出变为采样值,如下图所示。
在这里插入图片描述

1.4 三种模式异同

相同点不同点
OPPOSITE_EDGEQ1采样的是上升沿处D的值,Q2采样的是下降沿处D的值Q1与Q2数据发生变化是在不同的边沿,Q1数据发生变化是在采样的上升沿处,Q2数据发生变化是在采样的下降沿处
SAME_EDGEQ1采样的是上升沿处D的值,Q2采样的是下降沿处D的值与OPPOSITE_EDGE 模式不同的是:Q1与Q2数据发生变化是在相同的边沿,但是相差一个时钟周期,Q1数据发生变化是在采样的上升沿处,Q2数据发生变化是在采样的下降沿的下一个上升沿
SAME_EDGE_PIPELINEDQ1采样的是上升沿处D的值,Q2采样的是下降沿处D的值Q1与Q2数据发生变化是在相同的边沿,与SAME_EDGE 模式不同的是:Q1与Q2变化发生在同一个上升沿,都是在下一个上升沿处

二、ODDR

  ODDR的输入输出引脚包括数据输入D1、数据输入D2、时钟信号C、异步复位信号SR(高电平有效)和数据输出Q(在时钟信号C的上升沿和下降沿均会发生变化)。
在这里插入图片描述

  ODDR的原语如下:

   ODDRE1 #(
      .IS_C_INVERTED(1'b0),      // Optional inversion for C
      .IS_D1_INVERTED(1'b0),     // Unsupported, do not use
      .IS_D2_INVERTED(1'b0),     // Unsupported, do not use
      .SIM_DEVICE("ULTRASCALE"), // Set the device version for simulation functionality (ULTRASCALE)
      .SRVAL(1'b0)               // Initializes the ODDRE1 Flip-Flops to the specified value (1'b0, 1'b1)
   )
   ODDRE1_inst (
      .Q(Q),   // 1-bit output: Data output to IOB
      .C(C),   // 1-bit input: High-speed clock input
      .D1(D1), // 1-bit input: Parallel data input 1
      .D2(D2), // 1-bit input: Parallel data input 2
      .SR(SR)  // 1-bit input: Active-High Async Reset
   );

  与IDDR不同的是,ODDR只有一种模式——OPPOSITE_EDGE,在该模式下:数据输出Q在上升沿处的数据变为在上升沿处对输入数据D1的采样值,在下降沿处变为在上升沿处对输入数据D2的采样值,如下图所示。
在这里插入图片描述

三、IDDR与ODDR仿真

3.1 IDDR仿真

3.1.1 IDDR顶层

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2023/06/05 20:10:15
// Design Name: 
// Module Name: iddr_top
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//

module iddr_top
(
    input         clk   ,
    input         rst   ,
    input         din   ,
    output        dout_1,
    output        dout_2

    );

wire  clk_opposite;

//  <-----Cut code below this line---->

   // IDDRE1: Dedicated Double Data Rate (DDR) Input Register
   //         Kintex UltraScale
   // Xilinx HDL Language Template, version 2021.1

   IDDRE1 #(
      .DDR_CLK_EDGE("SAME_EDGE_PIPELINED"), // IDDRE1 mode (OPPOSITE_EDGE, SAME_EDGE, SAME_EDGE_PIPELINED)
      .IS_CB_INVERTED(1'b0),          // Optional inversion for CB
      .IS_C_INVERTED(1'b0)            // Optional inversion for C
   )
   IDDRE1_inst (
      .Q1(dout_1), // 1-bit output: Registered parallel output 1
      .Q2(dout_2), // 1-bit output: Registered parallel output 2
      .C(clk),   // 1-bit input: High-speed clock
      .CB(clk_opposite), // 1-bit input: Inversion of High-speed clock C
      .D(din),   // 1-bit input: Serial Data Input
      .R(rst  )    // 1-bit input: Active-High Async Reset
   );

   // End of IDDRE1_inst instantiation

assign clk_opposite = ~clk;

endmodule

3.1.2 TestBench

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2023/06/05 20:17:59
// Design Name: 
// Module Name: tb_iddr_oddr
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//
module tb_iddr_oddr();
reg clk,rst;
reg  din;
wire dout_1,dout_2;

initial begin
    clk = 1'b1;
    rst <= 1'b1;
    #200 
    rst <= 1'b0;
    #10
    repeat(100) begin
        #5 
        din = {$random}%2;
        #5 
        din = {$random}%2;
    end

end

always #5 clk = ~clk;

iddr_top iddr_top_inst
(
    .clk   (clk   ),
    .rst (rst ),
    .din   (din   ),
    .dout_1(dout_1),
    .dout_2(dout_2)
);

endmodule

3.1.3 仿真结果

  分别对三种模式进行仿真,可以看到仿真结果与前面的理论结果一致。

(1)OPPOSITE_EDGE模式

在这里插入图片描述
(2)SAME_EDGE模式

在这里插入图片描述
(3)SAME_EDGE_PIPELINED模式

在这里插入图片描述

3.2 ODDR仿真

3.2.1 ODDR顶层文件

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2023/06/05 20:10:29
// Design Name: 
// Module Name: oddr_top
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//

module oddr_top(
    input         clk   ,
    input         rst   ,
    input         din_1 ,
    input         din_2 ,
    output        dout   
);

//   ODDRE1    : In order to incorporate this function into the design,
//   Verilog   : the following instance declaration needs to be placed
//  instance   : in the body of the design code.  The instance name
// declaration : (ODDRE1_inst) and/or the port declarations within the
//    code     : parenthesis may be changed to properly reference and
//             : connect this function to the design.  All inputs
//             : and outputs must be connected.

//  <-----Cut code below this line---->

   // ODDRE1: Dedicated Double Data Rate (DDR) Output Register
   //         Kintex UltraScale
   // Xilinx HDL Language Template, version 2021.1

   ODDRE1 #(
      .IS_C_INVERTED(1'b0),      // Optional inversion for C
      .IS_D1_INVERTED(1'b0),     // Unsupported, do not use
      .IS_D2_INVERTED(1'b0),     // Unsupported, do not use
      .SIM_DEVICE("ULTRASCALE"), // Set the device version for simulation functionality (ULTRASCALE)
      .SRVAL(1'b0)               // Initializes the ODDRE1 Flip-Flops to the specified value (1'b0, 1'b1)
   )
   ODDRE1_inst (
      .Q(dout),   // 1-bit output: Data output to IOB
      .C(clk),   // 1-bit input: High-speed clock input
      .D1(din_1), // 1-bit input: Parallel data input 1
      .D2(din_2), // 1-bit input: Parallel data input 2
      .SR(rst  )  // 1-bit input: Active-High Async Reset
   );

   // End of ODDRE1_inst instantiation
					
endmodule

3.2.2 TestBench

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2023/06/05 20:17:59
// Design Name: 
// Module Name: tb_iddr_oddr
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//

module tb_iddr_oddr();
reg clk,rst;
reg  din_1,din_2;
wire dout;

initial begin
    clk = 1'b1;
    rst <= 1'b1;
    #200 
    rst <= 1'b0;
    #12
    repeat(100) begin
        #10 
        din_1 = {$random}%2;
        din_2 = {$random}%2;
    end

end

always #5 clk = ~clk;

oddr_top oddr_top_inst
(
    .clk  (clk  ),
    .rst  (rst  ),
    .din_1(din_1),
    .din_2(din_2),
    .dout (dout ) 
);

endmodule

3.3.3 仿真结果

  对ODDR进行仿真,可以看到仿真结果与前面的理论结果一致。在上升沿处,输出dout与上上升沿处输入din_1的值一致;在下降沿处,输出dout与上升沿处输入din_2的值一致。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

5.2.9 无分类编址和CIDR

5.2.9 无分类编址和CIDR 前面我们知道&#xff0c;为了更加合理的使用IP地址&#xff0c;采用了子网划分的方法&#xff0c;事实证明子网划分这种网络编址&#xff0c;能够节省IP网络地址&#xff0c;但是到了1993年的时候因特网的增长速度还是让人们感觉到了这些技术它无法阻…

移动信道的多普勒扩展及相干时间

本专栏包含信息论与编码的核心知识&#xff0c;按知识点组织&#xff0c;可作为教学或学习的参考。markdown版本已归档至【Github仓库&#xff1a;https://github.com/timerring/information-theory 】或者公众号【AIShareLab】回复 信息论 获取。 文章目录 移动信道的多普勒扩…

深眸科技专注机器视觉的研发与创新,开启工业自动化、智能化进程

在智能制造、工业效能提升的社会背景之下&#xff0c;中国制造2025战略持续落实&#xff0c;工业制造业转型升级加速&#xff0c;作为人工智能领域重要技术之一的机器视觉&#xff0c;凭借着高精度、高准确度等优势检测能力&#xff0c;不断渗透进工业领域&#xff0c;并呈现出…

全网最全,性能测试-全链路压测问题总结,一篇概全...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 全链路压测可以给…

JavaEE(系列21) -- 传输层协议UDP 和 TCP

目录 1. 应用层和传输层的联系 2. UDP协议 2.1 UDP简介 2.2 UDP格式 2.2.1 目的端口和源端口 2.2.2 报文长度 2.2.3 校验和 3. TCP协议 3.1 TCP简介 3.2 TCP格式 3.2.1 数据偏移和选项(option) 3.2.2 保留项 3.2.3 6位控制位 3.2.4 32位序号和32位确认序号…

华为OD机试真题 Java 实现【滑动窗口】【2023 B卷 100分】,附详细解题思路

一、题目描述 有一个N个整数的数组,和一个长度为M的窗口,窗口从数组内的第一个数开始滑动直到窗口不能滑动为止,每次窗口滑动产生一个窗口和(窗口内所有数和和),求窗口滑动产生的所有窗口和的最大值。 二、输入描述 第一行输入一个正整数N,表示整数个数。(0<N<…

WebGPU 纹理与纹理类型基础 (D3D对纹理的描述比较详细)

纹理与纹理类型&#xff0c;D3D 官方文档描述的比较详细&#xff1a; 介绍 Direct3D 11 纹理 纹理资源是一个结构化的数据集合&#xff0c;用纹素的形式存储。纹素texel代表纹理的最小单位&#xff0c;可以被管线读写。与缓冲区不同&#xff0c;纹理可以在着色器中被纹理采…

中国电源管理芯片上市企业研发投入占比超10%,上海贝岭产品品类持续增加

近年来&#xff0c;中国电源管理芯片市场规模一直保持增长趋势&#xff0c;尽管中国电源管理芯片厂商起步较晚&#xff0c;但是在政策扶持背景下&#xff0c;集成电路国产产品对进口产品的替代效应明显&#xff0c;中国集成电路产品的品质和市场认可度日渐提升&#xff0c;部分…

而立之年——回顾我的渗透测试之路

为什么要转行 因为混得不好。 在成为渗透测试工程师之前&#xff0c;我干过很多工作。由于上学的时候天天打没戏摸鱼啥也不会&#xff0c;我的工作基本上都是体力活。包括但不限于&#xff1a;工厂普工、销售&#xff08;没有干销售的才能&#xff09;、搬运工、摆地摊等&…

JMeter性能测试系列一初识JMeter

1.JMeter介绍 Apache组织的Stefano Mazzocchi是JMeter项目的创始人。编写JMeter最初的目的是为了测试server的性能(后期被Tomcat替代)。随后&#xff0c;JMeter在Apache组织内部开始被其他项目所使用&#xff0c;并最终推广出来&#xff0c;成为独立的软件项目并不断更新&…

sa-token多端登陆实现,PC,APP登陆分别设置token过期时间

sa-token多端登陆实现&#xff0c;PC&#xff0c;APP登陆分别设置token过期时间 Sa-Token 介绍 Sa-Token 是一个轻量级 Java 权限认证框架&#xff0c;主要解决&#xff1a;登录认证、权限认证、单点登录、OAuth2.0、分布式Session会话、微服务网关鉴权 等一系列权限相关问题。…

hive on spark亲自编译,详细教程

hive on spark 进行编译操作 软件 hive 2.3.6 spark 2.0.0版本 hadoop-2.7.6版本 操作流程&#xff1a; hadoop-2.7.6 1、安装hadoop不说了。简单。 spark-2.0.0 2、下载spark-2.0.0的源码. https://archive.apache.org/dist/spark/spark-2.1.0/ 这个下载spark各个版本…

Logback自定义DBAppender保存系统日志到数据库

在系统中采用了spring boot logback&#xff0b;slf4j的日志框架&#xff0c;将系统日志记录到数据库。 相关参考来源&#xff1a; 官方文档-DBAppender Logback输出日志到自定义MySQL数据库&#xff08;重写DBAppender&#xff09; logback日志框架中filter的使用 1. 添加依…

【新版】系统架构设计师 - 系统配置与性能评价

个人总结&#xff0c;仅供参考&#xff0c;欢迎加好友一起讨论 文章目录 架构 - 系统配置与性能评价考点摘要系统性能概述性能指标性能调整阿姆达尔解决方案性能评价方法 架构 - 系统配置与性能评价 考点摘要 性能指标&#xff08;★★&#xff09;阿姆达尔解决方案&#xff…

java SSM 教师管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM 教师管理系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和 数据库&#xff0c;系统主要采用B…

工业深度学习软件 从标注 训练 到测试 再到现场部署

工业深度学习软件 从标注 训练 到测试 再到现场部署 M7000技术规格表 Producer Specification 影像系统 Imaging Sys 适配相机 supported cameras 支持海康&#xff0c;迈德威视&#xff0c;度申2D相机&#xff08;可根据需求增加适配其他厂家相机&#xff09; Support for Hi…

22AP30 H.265 编解码处理器

22AP30 H.265 编解码处理器 主要特点 SVP&#xff08;Smart Vision Processing&#xff09;  图像分析工具推理引擎&#xff08;NNIE&#xff09; − 支持多种图像分析工具 − 1.2Tops运算性能 处理器内核  ARM Cortex A53 四核1.15GHz − 32KB L1 I-Cache&#xff0c;32KB…

小程序页面事件与wxs脚本

文章和代码已经归档至【Github仓库&#xff1a;https://github.com/timerring/front-end-tutorial 】或者公众号【AIShareLab】回复 小程序 也可获取。 文章目录 小程序视图与逻辑页面导航声明式导航编程式导航导航传参 页面事件下拉刷新事件上拉触底事件上拉触底案例 自定义编…

一级建造师执业资格考试--工程管理--速学36记--联想法

第一记&#xff1a;项目管理 第二记&#xff1a;项目管理的核心 第三记&#xff1a;项目总承包方的工作程序 第四记&#xff1a;项目质量控制体系建立 第五记&#xff1a;项目质量控制体系运行 第六记&#xff1a;施工过程质量验收不合格的处理方法 第七记&#xff1a;装配式混…

33:避免遮掩继承而来的名称

我们都知道在下面的代码中&#xff1a; int x;//global变量 void someFunc() {double x;//local变量cin >> x;//读一个新值赋予local变量x } 上述读取数据的语句指涉的是local变量x&#xff0c;而不是global变量x&#xff0c;因为内层作用域的名称会遮掩外围作用域的名…