大家好,我是数字小熊饼干,一个练习时长两年半的ic打工人。我在两年前通过自学跨行社招加入了IC行业。现在我打算将这两年的工作经验和当初面试时最常问的一些问题进行总结,并通过汇总成文章的形式进行输出,相信无论你是在职的还是已经还准备入行,看过之后都会有有一些收获,如果看完后喜欢的话就请关注我吧~谢谢~
在上篇文章中我们对影响芯片功耗的几点因素进行了讨论,本篇文章我们讨论系统级低功耗设计方法和技术。
一、低功耗设计的5个层次
在不同的设计阶段,可采用不同的方式进行低功耗设计,比如可以将低功耗设计化为5个层次进行,自上而下分别为:系统级优化、行为级优化、RTL级优化、逻辑级优化和物理级优化。每个层次对功耗优化的效果也不尽相同,从上往下,依次减小。
二、系统级低功耗优化设计方法
系统层次的设计通常可以节约70%以上的功耗,通常由系统以及架构设计人员对系统层次的低功耗方案进行设计,他们会对系统的性能以及功耗的目标综合考虑,最终得到低功耗方案,并交由前端和后端人员进行实现。
2.1 低功耗优化设计方法
软件/硬件划分:
soc的功能实现可以划分为软件和硬件两个方面,因此不同的功能可以划分为软件或者硬件来做,如果一些资源密集型模块通过硬件实现,就能节约大量的功耗,因此要结合硬件和软件的优势来制定软件和硬件的划分。
算法优化:
算法也是影响功耗的一大因素,在设计时需要对算法尽可能的进行优化,比如:
-规整的算法有利于简化状态机,减少判断分支语句,降低功耗;
-分析算法需要多少存储器及进行多少次存储器访问,尽可能的减少不必要的访问;
-需要多少运算逻辑单元(如乘法器、除法器、加法器等),如何将这些运运算逻辑单元进行优化到最少,例如乘2,4,8这种2^n数时;
-减少不必要的乘法器使用,通过移位代替乘法;
-选择合适的计算精度,即满足需求,尤能减少数据位宽,降低运算模块的面积,进而减少功耗。
-对于大规模运算的应用(比如FFT),使用对数系统(Logarithmic number system,LNS)比使用线性系统更好。LNS在降低平均位元活跃度(也就是降低0到1之间的翻转)的同时使用加法和减法实现乘除法,使效率比线性系统更高。因此基于LNS算法来实现FFT可以节省大量的功耗,但是加法器和乘法器的宽度会增加,导致面积增加。