Xilinx-7系列器件的IO逻辑资源(二)

上篇文章介绍了ILOGIC的IDDR,这篇介绍一下ODDR。

简介

ODDR,归属于OLOGIC的范围内。是一种位于名叫IOB(FPGA的输出单元,离IO最近的逻辑块)的逻辑资源,能够以最快的速度到达FPGA的IO口上。顾名思义,DDR输出专用,何为DDR输出,即双倍速率输出,比较常见的应用有以太网的GMII转为RGMII输出,目的是节约时钟资源也节省了IO资源。一下为OLOGIC设计的框图:
在这里插入图片描述
话不多说,接下来直接介绍ODDR原语的使用。

ODDR

  1. 模式介绍:
    ODDR和IDDR类似,也有两种模式,分别为OPPOSITE_EDGE Mode和SAME_EDGE Mode,功能描述也如上一篇文章所述,OPPOSITE_EDGE表示在时钟上升沿输出Q1端的数据,下降沿输出Q2端的数据,注意,这边的Q1和Q2表示和FPGA内部相连的端口,输出表示FPGA的IO口。以下是OPPOSITE_EDGE的时序图:
    在这里插入图片描述
    同理,SAME_EDGE模式下,Q1、Q2两个端口的数据在同一个时钟上升沿被读取,但是Q2的数据会在时钟的下降沿被输出,时序图如下所示:
    在这里插入图片描述
    重要说明
    从上面的两种模式来看可能看不出什么,但是实际上ODDR有一个重要作用,那就是时钟输出(时钟增殖)。一般来说我们需要使用FPGA给外部芯片提供一个时钟引脚的时候都需要通过专用的时钟输出引脚,否则会导致时钟输出存在延迟,导致和数据段对不上这个问题(注:低频条件下问题不大,例如RGB屏幕显示,但总归是不好),所以我们可以通过一个ODDR原语,将内部时钟进行增殖输出到一个IO口,变成一个独立的时钟,这样一来就能保证时钟的延迟最小,同时驱动能力强(因为是独立的时钟源),具体的调用方法是另Q1为1,Q2为0,输入时钟的上升沿输出Q1(1),下降沿输出Q2(0),达到时钟增殖的目的(具体的代码在后面统一给出)。

  2. 原语框图
    在这里插入图片描述
    注意:这边虽然说复位和置位是一个端口,但实际上它们不能同时工作(同时给1),所以在例化的时候要分开给,或者其中一个直接不给信号(具体调用方法在后面)。

  3. 端口介绍
    在这里插入图片描述
    如上所述,复位和置位信号不可同时使用。

  4. 参数输入
    在这里插入图片描述
    以上参数包含了模式选择、初始值还有置位复位信号的作用类型(参考数电中学过的一些芯片,会有同步和异步的模式,和那个一样,于此就不多介绍了)。

  5. 代码介绍
    话不多说,直接上案例:

// Verilog版本例子
// ODDR: Output Double Data Rate Output Register with Set, Reset
// and Clock Enable.
// 7 Series
// Xilinx HDL Language Template, version 2022.2
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
);
// End of ODDR_inst instantiation
--VHDL版本例子
Library UNISIM;
use UNISIM.vcomponents.all;
-- ODDR: Output Double Data Rate Output Register with Set, Reset
-- and Clock Enable.
-- 7 Series
-- Xilinx HDL Language Template, version 2022.2
ODDR_inst : ODDR
generic map(
 DDR_CLK_EDGE => "OPPOSITE_EDGE", -- "OPPOSITE_EDGE" or "SAME_EDGE"
 INIT => '0', -- Initial value for Q port ('1' or '0')
 SRTYPE => "SYNC") -- Reset Type ("ASYNC" or "SYNC")
port map (
 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 input
 S => S -- 1-bit set input
);
-- End of ODDR_inst instantiation

接下来是调用的示例:

//1. 时钟输出调用示例:
ODDR #(
 .DDR_CLK_EDGE("SAME_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(clk_out), // 1-bit DDR output
 .C(clk_in), // 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'b0), // 1-bit reset
 .S() // 1-bit set
);

//2. 数据输出模式调用
ODDR #(
 .DDR_CLK_EDGE("SAME_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(data_out), // 1-bit DDR output
 .C(clk_in), // 1-bit clock input
 .CE(1'b1), // 1-bit clock enable input
 .D1(DATA1), // 1-bit data input (positive edge)
 .D2(DATA2), // 1-bit data input (negative edge)
 .R(RESET), // 1-bit reset
 .S() // 1-bit set
);

结语

ODDR的作用还有很多,本人学识尚浅,只用到过以上所述的内容,如果有朋友发现错误或者有更好的使用方法,欢迎评论区指出。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Xilinx K7系列内核电源是指用于驱动Xilinx Kintex-7系列FPGA芯片的电源系统。K7系列芯片是一种高性能可编程逻辑器件,需要提供稳定的电源来确保其正常工作。 K7系列内核电源通常采用直流电源供应,其电压和电流要求在芯片的应用手册中有详细说明。为了满足K7芯片的电源需求,可以使用多种电源模块,如开关电源或稳压模块。这些模块能够提供稳定的电压和电流,以满足芯片的工作要求。 在选择K7系列内核电源时,需要根据芯片的功率和工作条件来确定适当的电源。一般而言,功耗较高的芯片需要更高电流的电源。此外,还应考虑电源的稳定性、效率和可靠性等因素。 另外,K7系列内核电源还需要提供适当的电源滤波措施,以减少噪音和干扰对芯片的影响。这可以通过添加电容、电感和滤波器等元件来实现。 总之,Xilinx K7系列内核电源是为了满足Kintex-7系列FPGA芯片工作要求而设计的电源系统。选择合适的电源模块和滤波措施,并确保电源稳定、可靠,是保证K7系列芯片正常工作的重要因素。 ### 回答2: Xilinx K7系列内核电源非常重要,它提供了为FPGA芯片的正常运行和性能发挥所必需的稳定电源供应。K7系列FPGA芯片通常需要不同的电压供应,包括核心电压(VCCINT)、IO电压(VCCIO)、配置电压(VCCO)、时钟电压(VCCCLK)等。 在设计K7系列FPGA内核电源时,需要考虑多个关键因素。首先,电源必须提供稳定的电压,以确保FPGA芯片在高性能工作的情况下能够正常运行,并避免系统崩溃或数据损坏。其次,电源应具有良好的电流传输能力,以满足FPGA芯片在高负载工况下的电流需求。此外,电源的纹波和噪声应尽量小,以避免对FPGA芯片的干扰。 为了满足这些要求,常见的做法是使用电源模块或电源芯片来提供所需的电压和电流。这些电源模块或芯片通常具有稳压器、滤波器和保护电路等功能,可以确保电压稳定并过滤掉噪声。 此外,在设计K7系列FPGA内核电源时,还需要考虑整个系统的功耗和能效。通过优化电路设计、选择低功耗的电源模块、合理布局和散热等措施,可以最大限度地提高系统的能效和性能。 综上所述,Xilinx K7系列内核电源是确保FPGA芯片稳定运行和性能发挥的关键组成部分。正确设计和优化内核电源,可以增强系统的可靠性、稳定性和性能,提高系统整体的能效。 ### 回答3: Xilinx K7系列是一款高性能的FPGA系列,其内核电源是该系列中一个重要的组成部分。内核电源是指给FPGA内部的逻辑单元和外围设备提供电源供应的模块。 Xilinx K7系列的内核电源采用了电压调节器(Voltage Regulators)来提供所需要的工作电压。通常情况下,FPGA内核电源的电压是由外部电源提供的,并通过电压调节器进行调节和过滤,以保证内核电压的稳定性和精确性。 内核电源的设计在FPGA的正常工作中起着至关重要的作用。它不仅需要提供足够的电流供应,以满足所有的逻辑单元和外围设备的工作需求,还需要保证内核电压的稳定性,以确保FPGA的正常运行和性能。 为了满足不同的应用需求,Xilinx K7系列提供了多个内核电源引脚,以支持不同的电源配置选项。用户可以根据实际需求选择使用单一的电源源或者使用多个电源源进行并联或串联,以提供更高的电流输出能力或更高的电源电压精度。 总的来说,Xilinx K7系列内核电源是FPGA系列中至关重要的组成部分,它为FPGA的正常工作提供了稳定且精确的电源供应。用户可以根据实际需求选择合适的电源配置,以满足不同的应用需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值