Xilinx IDDR与ODDR原语的使用

文章目录

  • ODDR原语
    • [1. OPPOSITE_EDGE 模式](#1. OPPOSITE_EDGE 模式)
    • [2. SAME_EDGE 模式](#2. SAME_EDGE 模式)

ODDR原语

例化模板:

bash 复制代码
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_inst (
      .Q(Q),   // 1-bit DDR output
      .C(C),   // 1-bit clock input
      .CE(CE), // 1-bit clock enable input
      .D1(D1), // 1-bit data input (positive edge)
      .D2(D2), // 1-bit data input (negative edge)
      .R(R),   // 1-bit reset
      .S(S)    // 1-bit set
   );

这里的 D1 和 D2 是数据的两个输入端口,输出端口会在上升沿这里需要注意的是 set和 reset 同时只能有一个被置高,也因此,描述端口时,使用的 S/R。除了这些端口外,ODDR原语还包含一些可用属性,

这里简单描述下 ODDR 的两种操作模式:

1. OPPOSITE_EDGE 模式

在该模式中,时钟的两个边沿被用来以两倍的吞吐量从 FPGA 逻辑中捕获数据。这种结构与 virtex-6 的实现比较相似。两个输出都提供给 IOB 的数据输入或者三态控制输入。使用OPPOSITE_EDGE 模式的输出 DDR 时序图如图 46-4 所示:

在该模式下,输入数据在两个边沿被采样,可以看到输出端 OQ 上首先输出的是 D1A,随后再输出 D2A。

该模式下,上升沿读取D1数据,并在时钟周期的前半个周期输出,下降沿读取D2数据,并在时钟周期的后半个周期输出。

2. SAME_EDGE 模式

在该模式下,数据可以在相同的时钟边沿送给 IOB。相同的时钟沿将数据送给 IOB 可以避免建立时间违规,并允许用户使用最小的寄存器来执行更高的 DDR 频率来进行寄存器的延迟,而不是使用 CLB 寄存器。图 46-5 显示了使用 SAME_EDGE 模式的输出 DDR 的时序图:

可以看到,在该模式下,输出端 OQ 同样也是先输出 D1 端采集到的值,再输出 D2 端采集到的值。

该模式下,时钟周期的上升沿同时读取D1,D2数据,并在前半个时钟周期输出D1,后半个时钟周期输出D2。

用法举例说明:

一般我们使用GMII在一个时钟周期内有8bit数据发送,当我们使用RGMII时需要发送4bit数据,此时我们可以用ODDR进行传输,使用4个ODDR例化。

bash 复制代码
genvar i;
generate 
	for (i = 0;i < 4;i= i+1)
	begin :  ODDR_rgmii_txd	
		
	   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_rgmii_txd (
		  .Q(rgmii_txd[i]  ),    // 1-bit DDR output
		  .C(gmii_tx_clk   ),    // 1-bit clock input
		  .CE(1'b1         ),    // 1-bit clock enable input
		  .D1(gmii_txd[i]  ),    // 1-bit data input (positive edge)
		  .D2(gmii_txd[i+4]),    // 1-bit data input (negative edge)
		  .R(~reset_n      ),    // 1-bit reset
		  .S(1'b0          )     // 1-bit set   与R不能同时为1
	   );
    end
endgenerate
相关推荐
思尔芯S2C4 小时前
思尔芯RCF RTL自动分割工具,助力大规模AI/HPC芯片原型验证
人工智能·fpga开发·内存模型·自动编译·ddr5·prototyping·原型验证
Terasic友晶科技19 小时前
答疑解惑|Agilex 3 FPGA QSPI时钟设置注意事项
fpga开发·de23-lite·terasic·qspi flash
国科安芯1 天前
卫星星务计算机数据管理中SEU容错机制的技术实现研究——以AS32S601存储器ECC架构为例
网络·单片机·算法·fpga开发·架构·云计算·risc-v
国科安芯1 天前
卫星电推进系统阀门驱动控制中的宽温域高可靠MCU应用研究——基于AS32S601电气特性与辐照试验数据的工程分析
单片机·嵌入式硬件·fpga开发·云计算·信息与通信·卫星·抗辐射芯片
郝旭帅电子设计团队2 天前
图像处理是什么
图像处理·fpga开发·郝旭帅电子设计团队·郝旭帅
ARM|X86+FPGA工业主板厂家2 天前
基于ARM+FPGA平台在精密测控领域的应用:8路同步IEPE振动采集系统
arm开发·fpga开发
weixin_452600692 天前
D2632大电流低差压可调线性稳压器介绍,D2632可替换MIC29302
fpga开发·机器人·无人机·电动工具·车载摄像头
ARM|X86+FPGA工业主板厂家2 天前
基于ARM+FPGA平台在精密测控领域的应用:ZYNQ千兆以太网高速数据记录仪
arm开发·fpga开发
cmc10282 天前
275.需要双边沿触发时,直接对时钟取反会不会出问题
fpga开发
ARM|X86+FPGA工业主板厂家2 天前
基于ARM+FPGA平台在精密测控领域的应用:ZYNQ FPGA图像预处理加速系统
arm开发·fpga开发