本文对bufg/bufgce/bufh/bufhce简单介绍,便于后续查看。
原语的使用:在vivado中找到所要用的原语,直接将其实例化到设计中即可。
下图为 7 系列 fpga 时钟架构图:

bufg
全局时钟缓冲。它的输入是ibufg的输出,bufg的输出到达fpga内部的iob、clb、选择性块ram的时钟延迟和抖动最小。bufg连接的是芯片中的专用时钟资源,能减少信号的传输延时,提高驱动能力。bufg可以到达设备上的任何时钟点。
注意:如果内部产生的时钟,只在局部模块使用,可以考虑不使用bufg。一个bufg只能驱动一个时钟。
bufg bufg_inst (
.o(clk0), // 1-bit output: clock output.
.i(clk) // 1-bit input: clock input.
);
bufgce
带有使能端的全局时钟缓冲,使能端为高电平有效,即ce=0,q=0.否则,q=i。
除此之外,还有bufgce_1,和bufgce区别在于,当ce=0时,q=1。
bufgce #(
.ce_type("sync"), // async, hardsync, sync
.is_ce_inverted(1'b0), // programmable inversion on ce
.is_i_inverted(1'b0), // programmable inversion on i
.sim_device("ultrascale") // ultrascale
)
bufgce_inst (
.o(clk0), // 1-bit output: buffer
.ce(ce), // 1-bit input: buffer enable
.i(clk) // 1-bit input: buffer
);

bufh

水平时钟缓冲器,其允许通过水平时钟行访问单个时钟区域中的全局时钟线。 水平时钟缓冲器 (bufh) 通过 hrow 驱动到该区域中的每个时钟点。
bufh bufh_inst (
.o(clk0), // 1-bit output: clock output
.i(clk) // 1-bit input: clock input
);
bufhce
带有使能端,以独立启用或禁用跨越单个时钟区域的时钟。每个时钟区域最多可支持 12 个时钟。
bufhce #(
.ce_type("sync"), // "sync" (glitchless switching) or "async" (immediate switch)
.init_out(0) // initial output value (0-1)
)
bufhce_inst (
.o(clk0), // 1-bit output: clock output
.ce(ce), // 1-bit input: active high enable
.i(clk) // 1-bit input: clock input
);

bufmr
多时钟区域缓冲器。将时钟信号驱动到时钟区域内的专用时钟网络,与全局时钟树无关。
注意其允许区域和i/o时钟跨3个垂直相邻的时钟区域。
bufmr bufmr_inst (
.o(clk0), // 1-bit output: clock output (connect to bufios/bufrs)
.i(clk) // 1-bit input: clock input (connect to ibuf)
);

bufr
区域时钟缓冲器,可以驱动现有时钟区域中的i / o逻辑和逻辑资源(clb,block ram等)【驱动区域时钟树】

bufmrce
多了使能,如果在多个时钟区域中需要本地时钟,则bufmrce可以驱动相邻时钟区域中的多个bufr组件,以进一步扩展该时钟功能。

ibuf
介绍
输入缓冲,综合的时候,工具会自动给输入信号连接ibuf。
ibuf ibuf_inst (
.o(o), // 1-bit output: buffer output
.i(i) // 1-bit input: buffer input
);
ibufds
重点是差分。
ibufgds的输入端仅仅与芯片的专用全局时钟输入管脚有物理连接,与普通io和其它内部clb等没有物理连接,因此差分信号进入片内之后不经过ibufds缓冲是无法直接处理的,即无法使用。
另外还有 ibufds、ibufgds和obufds。这些都是差分信号缓冲器,均用于不同电平接口之间的缓冲和转换。
如下为ibufds原语:
两个电平接口,可认为是主从信号。主信号和从信号是同一个逻辑信号,但是相位相反
ibufds ibufds_inst (
.o(o), // 1-bit output: buffer output
.i(i), // 1-bit input: diff_p buffer input (connect directly to top-level port)
.ib(ib) // 1-bit input: diff_n buffer input (connect directly to top-level port)
);
发表评论