FPGA解决门控时钟问题

一. 网上的解决方案

我所在的是一家IC公司,很多IP里有用到门控,绝大多数是出于降低功耗而使用门控。一般情况下,如果不考虑功耗的话,也就是芯片一上电就让时钟工作,那么功能是不会影响的,无非就是多费点电(时钟翻转,不管是pmos管还是nmos管,从1变成0,电容要放电,从0变成1,电容要充电)。在fpga验证环境下影响也并不大。但是有些IP的功能是跟门控有关的,是不能直接把门控bypass掉的,我接触的一个IP(Display Processor)的功能跟门控就有关系,如果代码中直接写成clk_gate = clk_i,那么功能就受到影响,也就是不能正常显示。

网上门控的解决方案千篇一律。基本上就是按照Xilinx官方给出的方案,给时钟信号添加(* gated_clock = “true” *)属性,然后在综合选项gated_clock_conversion设置为on或者off,让工具去自动解决。工具会给门控时钟驱动的寄存器加上CE使能信号。在不使用门控的时候,fpga中的寄存器的CE信号默认是拉高的,也就是全部都使能1,所以也就没用上CE信号。但是很多IP设计者写的代码,工具是不能智能的识别出来的,导致Xilinx的门控时钟方案并不能解决门控时钟问题。

xilinx官方给出的门控方案可以参考下面链接,自己可以写个小模块尝试下:
https://support.xilinx.com/s/article/982650?language=en_US

二.网上方案亲测感受

我这边的项目中RTL代码一部分是自己的designer写的,一部分是IP,工程太大,很难去动代码。在不修改代码的情况下,使用Xilinx官方的解决方案,并不能解决掉门控问题。我对单个模块尝试的时候,发现门控时钟驱动的寄存器的CE端连接上了clk_en信号,证明门控起作用了。但是我对多个模块都采用这个方案之后,一部分寄存器实现了门控的逻辑,还有很多寄存器没有实现门控的逻辑。我怀疑是我做的有问题,然后把所有文件都检查了一遍,花了我几天时间也没找到我哪里有问题,再跟Xilinx的AE大神聊了下,给出的结论是:Xilinx FPGA中的门控方案只能解决一些简单的问题,大项目大系统中,vivado工具没那么智能。所以想来想去,还是用其他方案来解决。

三.新创的解决方案

我不单独说门控那一块了,我把整套方案都贴出来了。

1.从PCB上输入进来一个100MHz的时钟,进入到fpga内部需要经过IBUFG处理,这一步是必须的,需要自己在代码中处理。如果使用clock IP的话,那么IP会自动做好处理的。

2.100MHz时钟进来之后通过mmcme4_adv来分频,工程中有两种情况的时钟,第一种是不同频率的时钟;第二种是相同频率的时钟,但是门控使能clk_en信号不一样,所以也需要单独分频出一个时钟。所以要统计下工程中时钟到底有多少,fpga内的时钟资源也是有限的,也不能创建无数个时钟。可以打开原理图看下mmcme4_adv和BUFG就知道了,这些cell是不能打开看到里面细节的,说明这些是fpga里面的硬核,硬核数量是有限制的。

3.如果没用mmcme4_adv来做,而是用clock IP的话,那么受门控使能控制的输出时钟要选择No Buffer,不能给这样的时钟加BUFG,因为要考虑到下一步。

4.截止到目前已经获取到所需的分频时钟,但是这时候是普通信号,要让它们走全局时钟。不需要门控使能的使用BUFG,需要时钟门控的使用BUFGCE。

fpga时钟资源的介绍可以参考这篇文章:
https://blog.csdn.net/xvrixingkong/article/details/108747199?ops_request_misc=&request_id=&biz_id=102&utm_term=bufgce%E8%B5%84%E6%BA%90%E6%95%B0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-0-108747199.nonecase&spm=1018.2226.3001.4187

闭坑点:门控时钟最好在顶层创建,不要在代码例化的地方替换。时钟资源很多,有输入时钟,全局时钟,输出时钟等等,这些资源是有限制的,而且不能乱用,输入输出关系是有关系的,怎么连接可以参考上面介绍时钟资源的文章。

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
FPGA(Field-Programmable Gate Array)是一种可编程逻辑器件,它可以实现数字系统中的逻辑功能。在使用FPGA时,可能会遇到输出的门控时钟出现毛刺的问题。 毛刺是指在时钟信号上出现的短暂的高电平或低电平干扰,可能导致时钟信号的失真和系统的不稳定。 出现毛刺的原因有以下几个可能: 1. 信号串扰:毛刺可能是由于邻近信号线的电磁干扰引起的。在设计FPGA的时候,应该注意布线过程中信号线的规划和分离,尽量将时钟线和其他信号线远离。 2. 信号反射:毛刺也可能是由于信号反射引起的。信号反射可能发生在一些电气特性较差的组件或信号线之间,导致信号的不稳定。 3. 电源干扰:毛刺还可能是由于电源噪声和杂散电磁辐射引起的。在设计FPGA的电源系统时,应该减小电源噪声和杂散电磁辐射的影响。 为了解决毛刺问题,可以采取以下措施: 1. 控制信号线的布局:合理规划信号线的走向和布局,尽量远离干扰源,并与其他信号线进行隔离。 2. 优化时钟传输:可以采用差分信号传输方式,增加噪声抑制能力,减小时钟信号的干扰。 3. 电源滤波:对FPGA的电源进行滤波处理,减小电源噪声对时钟信号产生的影响。 4. 规避信号反射:在设计时,注意避免信号反射现象,合理选择信号线的终端和匹配电阻等。 综上所述,门控时钟出现毛刺是由多种因素引起的,需要在设计和布局时综合考虑,采取相应的措施来减小时钟信号的干扰,确保系统的稳定性和可靠性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值