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

news/2024/11/17 0:50:59/

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.1IDDRE1 #(.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 instantiationassign 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 beginclk = 1'b1;rst <= 1'b1;#200 rst <= 1'b0;#10repeat(100) begin#5 din = {$random}%2;#5 din = {$random}%2;endendalways #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.1ODDRE1 #(.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 instantiationendmodule

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 beginclk = 1'b1;rst <= 1'b1;#200 rst <= 1'b0;#12repeat(100) begin#10 din_1 = {$random}%2;din_2 = {$random}%2;endendalways #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.ppmy.cn/news/238793.html

相关文章

从git上拉取项目

目录 一、前期准备&#xff0c;获取git下载链接 二、idea下载 2.1.打开git下载界面 2.2.进入下载界面 2.3.下载前期配置 2.4.输入账号密码 2.5.下载完成后idea打开 2.6.下载完成后文件目录展示 三、命令行下载 3.1.打开所需要下载的项目路径 3.2.进入黑窗口 …

某鱼APP x-sign x-mini-wua x-sgext 分析成果

百度到的算法都是HOOK模拟器 感觉不是很稳定所以自己研究 对分析算法有兴趣的朋友私我&#xff0c;欢迎定制其他APP算法 def get_sign(Pm):#这里是加密需要的字段arg0 Pm[appKey]arg1 Pm[utdid] "&"arg1 arg1 Pm[uid] "&"arg1 arg1 Pm[r…

智头条|欧盟达成《人工智能法》协议,全球前沿科技齐聚AWE 2023

行业动态 华为云联手多方推进数字化&#xff0c;软通动力深度参与 华为云宣布启动“‘百城万企’应用现代化中国行”&#xff0c;旨在推动应用现代化进程、助力数字中国高质量落地。软通动力是该行动的参与者之一&#xff0c;共同探索符合区域特点、产业趋势、政企现状的数字化…

solr高级查询应用---按字段分组查询(group)

solr的group查询类似于关系数据库的group by&#xff0c;可以用于一个或者几个字段去重、显示一个group的前几条记录等。 下面&#xff0c;进行简单的实战操作&#xff0c;以下solr中的测试数据&#xff0c;参考&#xff1a;https://blog.csdn.net/weixin_43231076/article/de…

Solr之Facet与FacetPivot的使用和区别

1、基本定义理解 Facet是根据field来进行分组统计&#xff0c;可以得出所有指定Field的统计结果&#xff0c;具体有哪些参数配置&#xff0c;参考&#xff1a;https://blog.csdn.net/weixin_43231076/article/details/102685185 FacetPivot与Facet的功能很相似&#xff0c;但是…

yota3无第三方recovery root方法

注&#xff1a;本人系统版本是201902251&#xff1b;硬件yota3 4128G&#xff1b; 我这也是参照别人的帖子root的&#xff0c;记录了自己遇到的问题&#xff0c;提醒诸位而已&#xff0c;原贴地址 http://blog.sina.com.cn/s/blog_53755b940102xxhl.html#cmt_5CAADCA4-7BB65A06…

Java闭锁之使用FutureTask实现预加载

目录 FutureTask介绍使用场景实例解析 FutureTask介绍 FutureTask也可以用作闭锁&#xff1b;FutureTask的计算是通过Callable来实现的&#xff0c;相当于一种可生成结果的Runnable&#xff0c;并且可以处于3种状态&#xff0c;分别是等待运行&#xff08;waiting to run&…

OpenStack介绍

OpenStack 1. OpenStack1.1 简介1.2 OpenStack和KVM有什么关系和区别&#xff1f;1.3 编写语言 2. 主要模块介绍2.1 OpenStack计算设施 - Nova1. API服务器&#xff08;nova-api&#xff09;2. 消息队列&#xff08;Rabbit MQ Server&#xff09;3. 运算工作站&#xff08;nova…