"IEEE 1801或更为业内所熟知的UPF标准,是描述电源意图(power intent)、设计及验证电源管理架构的一套方法学。这个标准自推出以来经历了4次大的更新,而不同版本之间的兼容性问题也使该标准成为EDA领域最难支持的标准之一。"
十年前,低功耗领域的两项标准终于在业界期待下进行了融合,在达成这个结果之前,行业内经过了巨头站队、各自为营的过程,其结果是给用户体验造成了困扰。这个标准就是现在的IEEE 1801标准,现在业界也称为低功耗标准格式(UPF)。
在这个标准出来之前,功耗已经成为最令全行业头痛的问题之一,连续多年来,都是国际会议上的焦点议题。彼时,工艺持续在按照摩尔定律演进,功耗也可以持续改善。虽然晶体管缩小了,但是单位面积上功耗不降反升,甚至有人预测若不对此做出相应的功耗改善,芯片功耗的能量密度将会赶上火箭发动机喷射口的能量密度。
渐渐地业内企业不再寄希望于工艺方面出现奇迹,所以必须进行设计相关的功耗降低,也就是电源管理,这其中包括多电压、电源关断、电压岛等方法。但是其结果就是整个设计流程变得碎片化,流程中每个工具都有不同的文件格式,极难实现自动化。
因此,用户急需一套统一的标准,一个可以描述电源意图的工具成为了市场的需求。诺基亚的全球IC工具经理Mika Naula在当时表示,他对功耗标准的要求就是MISS(make it simple, silly)和KISS(keep it simple, stupid)。希望能有一个可用、可维护和支持验证的标准,这样有助于工具之间的互操作性。
在此背景下,业界第一个低功耗的标准CPF (Common Power Format) 于2007年出炉了。通过CPF,设计师终于可以定义他们的功耗策略和框架了,而且因为是标准规范格式,只需要一次,工程师所定义的功耗意图就可以应用在整个芯片设计开发的流程之中。
这样大大简化了这个流程,真正做到事半功倍的效果。 这个本应给全行业带来更多便利的工具却成为了EDA巨头争夺的战场,与CPF相应的UPF标准也被开发出来。这两个标准语义不同,当时的用户评价CPF和UPF做功耗意图时是一样的,但是在细节上却是各行其道,用户在使用工具时不得不选边站队,让两个标准相互融合的呼声也越来越高。
IEEE 1801发展演进
2007年3月
Silicon Integration Initiative(Si2)组织发布了CPF 1.0,该标准由42条命令组成,可以描述低功耗意图。该标准不仅可以显著有效地降低了芯片的功耗,基于CPF的全流程设计实现了跨团队之间的高效沟通协作。同年,Accellera组织通过了UPF 1.0草案。UPF 1.0由32个命令组成。
2008年
Si2组织发布了CPF 1.1。由于Accellera组织将UPF贡献给IEEE,同年IEEE发布了IEEE 1801-2009标准,也被称为UPF 2.0。该标准向后兼容UPF 1.0,同时吸纳了CPF的一些概念。对比1.0版本,UPF 2.0最大的不同是引入了supply_set的概念,一个supply_set有6个function,从而检查会更加完善。
2011年
CPF 2.0发布。新版本优化了层级流程、增强了验证仿真相关流程,同时提高了与IEEE 1801的互操作性。
2011年5月
促成日后电源格式融合的里程碑事件是Si2宣布对IEEE开放低功耗方法论 (OpenLPM)。方法融合的直接好处是增强了采用混合低功耗格式设计流程中不同格式之间的互操作性。从长远来看,方法论的趋同也成为了标准格式融合的快车道,让两个标准尽快达成一致。
2013年
自Si2把CPF 2.0贡献给IEEE之后,这一年IEEE 1801-2013(UPF 2.1)发布,其中包含11条新的UPF命令,此版本象征了CPF和UPF的正式融合。该版本对先前的命令做了进一步改进、引入了电源模型和中继器策略,以及一些电源管理单元定义命令。UPF 2.1共包含86个命令:46个功耗意图、6个电源管理和34个Query命令。
2014年
此后不久,2014年发布了UPF 2.1的修订版——IEEE 1801a-2014(UPF 2.2)。此修正案中没有引入新命令,也没有弃用或删除任何命令。该版本纠正了UPF 2.1中的错误。改正了与电源状态、电源、优先规则和电源管理单元位置的语义相关的歧义和不一致之处。
2015年
IEEE 1801-2015(UPF 3.0)定稿并获得批准。该标准引入了11条新命令。一共由62条命令组成:51个功耗意图、6个电源管理和5个Query命令。新增内容包括电源状态和状态转换的功能增强,以及对IC设计流程不同阶段电源意图连续改进的支持。该版本还引入了详细的信息模型,作为增强包UPF功能和查询功能的基础。此外,它现在还支持在虚拟原型应用中进行系统级功耗分析的组件功耗建模。
2018年
到目前为止最新IEEE 1801-2018(UPF 3.1)发布。此版本是IEEE 1801的重要里程碑,添加了多项新功能并明确了现有功能,同时保持了先前版本之间一定程度的向后兼容性。
随着低功耗设计方法学的演进以及越来越多的用户开始使用UPF,UPF标准会持续迭代升级,而这种升级包含但不限于对现有语义不完整或有歧义的地方进行修改,UPF也将满足用户更加多元的需求。
UPF经历了多代更迭才发展到现在,然而用户在使用UPF的时候出于使用习惯等原因未必会使用最新版。
在某些情况下,当设计迁移到新标准时,属性规范可能会导致错误,这表明设计中存在潜在问题,来自Liberty和UPF的信息存在冲突。因此工程师还需要编辑UPF文件并确保在电源意图中指定了正确的信息集。
多版本导致歧义
IEEE 1801虽然一步步趋于完善,但对用户的使用也产生了一定的困扰,尤其是各个版本之间存在语义、语法上的歧义甚至是冲突。
而目前市面上常用的EDA工具往往不能很好地兼容各个UPF版本,这也就使得芯片工程师不得不迁就EDA工具。 下面仅举几例说明UPF各版本之间的差异。
一. UPF语法上的不一致, 但语义都是一样的
1) 对电源状态表(Power State Table)的支持:
UPF1.0 步骤一:定义supply_ports的电源状态
add_port_state vdd1 -state {s08 0.8} -state {off off} add_port_state vdd2 -state {s09 0.9} -state {off off} add_port_state vss -state {s0 0}步骤二:列出supply_ports之间的状态关系
create_pst PST1 -supplies {vdd1 vdd2 vss} add_pst_state M1 -pst PST1 -state {s08 s09 s0} add_pst_state M2 -pst PST1 -state {s08 off s0 }UPF2.0 步骤一:定义supply_sets的电源状态
create_supply_set SS1 -function {power vdd1} -function {ground vss} create_supply_set SS2 -function {power vdd2} -function {ground vss} add_power_state SS1 -state {on -supply_expr { (power == {FULL_ON 0.8}) && (ground == {FULL_ON 0.0}) } add_power_state SS2 -state {on -supply_expr { (power == {FULL_ON 0.9}) && (ground == {FULL_ON 0.0}) }步骤二:列出supply_sets之间的状态关系
add_power_state pd1 -state {m1 -logic_expr { SS1==on && SS2==on }}二. 语义不一致
审核编辑:刘清
全部0条评论
快来发表一下你的评论吧 !