FPGA中的原语
FPGA中的原语(Language Templates)
一、什么是原语
二、原语讲解
2.1 IBUFDS
2.2 BUFG
BUFG
是 Vivado 提供的 全局时钟缓冲器(Global Clock Buffer),它的作用是:
将一个普通时钟信号(如外部晶振输入)连接到 FPGA 内部的全局时钟网络(Global Clock Tree),保证整个 FPGA 芯片内部所有时序单元可以同步工作。
那为什么需要 BUFG?
FPGA 是一个时序电路,每个触发器、状态机、计数器等都依赖统一的全局时钟。
而从外部引脚进来的时钟(例如 PL_CLK_P/PL_CLK_N
)只是普通信号:
- 没有经过专用时钟树缓冲;
- 无法直接驱动大量触发器;
- 会导致严重的时钟偏斜(clock skew);
- Vivado 会报时钟相关的 Place & Route 错误或严重 timing violation;
使用BUFG的好处:
- 全局驱动:将时钟驱动到整个 FPGA 内部
- 消除时钟偏斜:所有逻辑单元同时接受一个“均衡”的时钟
- 必须走时钟树:Vivado 综合器只允许 BUFG 的输出进入
posedge clk
等时序逻辑 - 布局优化:Vivado 能做出专门优化策略,满足时序需求
!!!如果不在时钟输入里面加BUFG,可能会导致仿真OK,结果综合后跑不了,并且在Timing Report中看到非常大的clock skew。
正确设计结构需要:
1 | IBUFDS → BUFG → clk → always @(posedge clk) |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 JERRY'S BLOG!