推荐答案
测试一下
题目
从BUFG输出的时钟,是不能直接连接普通I/O管脚输出的,会报错,若要将全局时钟输出,有两种方法:一是直接将BUFG的输入连接普通I/O管脚输出,或者将BUFG的输出经由ODDR2后再连接I/O管脚输出。需要注意的是,将CLOCK_DED…
参考答案与知识点
参考答案
在FPGA设计中,全局时钟缓冲器(BUFG)驱动的是芯片内部的全局时钟网络,该网络具有低延迟、低抖动和专用路由路径。若将BUFG的输出直接连接到普通I/O管脚,会导致布局布线时无法建立合法的物理连接,从而引发错误。原因是普通I/O管脚必须通过专用的输出路径驱动,而BUFG的输出端没有连接到I/O逻辑所需的输出驱动器或ODDR等专用单元。
两种推荐的解决方法:
1. 将BUFG的输入端(即全局时钟的源信号)直接连接到普通I/O管脚输出。这样时钟信号不经过全局时钟网络,而是作为普通信号输出,但会丧失全局时钟的低抖动特性,适用于对时钟质量要求不高的场景。
2. 将BUFG的输出接入ODDR2(或ODDR)原语,再将ODDR2的输出连接到I/O管脚。ODDR2内部包含专用的输出路径和时钟反向逻辑,能够将内部时钟信号正确转化为I/O标准输出,同时保留全局时钟的时序优势。这是最常用的方法,尤其当需要将内部时钟输出到外部器件(如示波器或下级FPGA)时。
关于CLOCK_DEDICATED_ROUTE属性:设置该属性为FALSE会强制工具忽略BUFG输出到I/O的直接连接规则,将错误(ERROR)降为警告(WARNING)。但这样做相当于绕过了全局时钟网络与I/O之间的合法路由,时钟信号将不再走专用时钟树,而是通过普通布线资源传输,导致时序不可控、抖动增大、建立/保持时间违反等风险,因此不推荐在实际项目中使用。
易错点:考生容易混淆BUFG输入和输出的区别,误以为从BUFG输出直接连I/O可行;或误认为ODDR2只能用于DDR数据,而忽略其时钟输出功能。需要牢记全局时钟网络与普通I/O资源之间的物理隔离,以及专用属性仅用于特殊调试场景。
涉及知识点
- BUFG与全局时钟网络
- 普通I/O管脚驱动要求
- ODDR2原语功能
- CLOCK_DEDICATED_ROUTE属性
- 物理布局布线规则
- 时钟输出方法