【C001】如何在Xilinx FPGA中实现高质量时钟输出

在xilinx的FPGA中,要实现高频时钟的输出,并保证时钟质量,最有效的方案是使用ODDR来产生。

例如,需要输出的时钟为CLK,用CLK来驱动ODDR,让ODDR在CLK的上升沿输出0或1,在CLK的下降沿输出1或0,从而产生一个时钟脉冲CLKOUT,CLKOUT的时钟频率和CLK完全相同。

ODDR位于IOB里面,如果CLK是由BUFG驱动的,那么从CLK到ODDR的路径在每次实现中是确定,从OODR到FPGA芯片PAD的路径和延迟也是确定的,由ODDR产生的时钟是一个稳定的高质量时钟。

一种常见的错误做法是:用CLK由BUFG驱动以后,直接连接到某个具有时钟输入能力的管脚(CC管脚)。因为,CC管脚只有用作时钟输入时才能直接输入到BUFG中,而BUFG输出到CC管脚,效果等同于输出到任何一个普通管脚。

这样应用方法是无法保证从BUFG到FPGA芯片PAD的走线长度的,而且一部分走线使用的是非专用布线资源。这种方法产生的时钟脉冲质量并不好。

SPartan6FPGA中, PLL产生的时钟不能直接连到FPGA的通用I/O上。如果硬件已经连上了,可通过在PLL输出与通用I/O之间增加ODDR2模块缓冲来解决。

ODDR2 #(
    .DDR_ALIGNMENT  ("NONE"     ), // Sets output alignment to "NONE", "C0" or "C1"
    .INIT           (1'b0       ), // Sets initial state of the Q output to 1'b0 or 1'b1
    .SRTYPE         ("SYNC"     )  // Specifies"SYNC" or "ASYNC" set/reset
) U_ODDR2_clkname (
    .Q      (oddr2_I/O-pin  ), // 1-bit DDR output data
    .C0     (clkname        ), // 1-bit clock input
    .C1     (~clkname       ), // 1-bit clock input
    .CE     (1'b1           ), // 1-bit clock enable input
    .D0     (1'b1           ), // 1-bit data input (associated with C0)
    .D1     (1'b0           ), // 1-bit data input (associated with C1)
    .R      (1'b0           ), // 1-bit reset input
    .S      (1'b0           )/ /  1-bit set input
);

  • 2
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值