本次分享华为公司的《大规模逻辑设计指导书》中的“可编程ASIC设计方法简介”的部分内容。
关键词 :可编程逻辑电路 ASIC FPGA。
摘 要 :本文根据当今可编程逻辑电路发展趋势, 论述了它对设计方法的影响 ,并着重介绍了一种不同以往的设计思想。
1 引言
随着集成电路技术的发展,集成电路的线宽越来越窄,设计规模越来越大,硬件设计正逐步走向SOC。以Xilinx 公司最新FPGA器件Virtex-E系列为例 ,采用的工艺是当今非常先进的0.18微米工艺 ,6层金属布线,电路最大规模可达300万门 ,时钟频率超过300MHz 。这就使可编程器件能 够获得以前只能在ASIC芯片上实现的某些特性, 如SOC等 ,具有ASIC特性。另外 ,随着设计规模的扩大,可编程器件的设计方法正逐步向ASIC靠拢。因此,从这种意义是说,大规模可编程逻辑电路是某种特殊的ASIC,即可编程ASIC。
当设计规模超过一万门时,原来采用原理图输入的设计方法就显得过于繁琐,一些设计手段已明显落后市场变化。因此,当我们面对大规模可编程ASIC设计时 ,应当从新认识过去我们建立起来的设计方法和设计手段。
从目前公司的发展来看,今后大规模可编程ASIC设计将占据一个非常重要的地位 ,可以说华为硬件工程师对可编程ASIC设计方法的掌握程度直接关系到华为的生死存亡。
公司迅速发展依赖于ASIC开发设计水平,当然也依赖于可编程器件开发设计水平。从目前公司的发展及国外主要厂商的发展实践来看,ASIC部将逐渐成为硬件开发的最主要部门 ,因此今后的发展趋势将是系统设计人员与ASIC设计人员逐步融合,目前即将成立的大规模逻辑电路设计研究部是这一发展趋势的必然结果 ,同时也是公司研发紧跟世界潮流的可靠保证。
成立大规模逻辑电路设计研究部,就是为了让所有的硬件工程师都懂得基本的ASIC设计方法,掌握可编程ASIC设计方法是系统设计人员与ASIC设计人员走向融合的第一步。
2 芯片设计发展趋势
2.1 芯片设计类型
随着设计手段和方法的改进,芯片设计成为硬件设计中最关键的部分。一般而言,根据速度与面积的关系,芯片设计可以分为三类:
第一类 面积优先
过去,由于受工艺限制,单位面积上可集成的电路规模较小,在设计中往往考虑的是如何有效利用芯片面积,降低设计规模,因此,传统的设计方法是以面积为考虑的第一要素。
此外,由于当时的EDA辅助设计工具发展不够完善,并且价格又相对十分昂贵,因此多以原理图输入为设计的主要手段,比较复杂的软件仿真无法实现,并且在多数情况下也无此必要今天,由于设计要求越来越高,面积优先的设计正逐步减少,但是,在许多设计中,面积仍是考虑的重要因素 甚至是决定性的。
第二类 速度优先
这里的速度有两方面含义:芯片工作速度与开发速度。
随着集成电路的发展,工艺尺寸越来越小,设计规模越来越大,设计复杂程度越来越高。与此同时,市场竞争越来越激烈,产品开发周期要求越来越短。谁能在最短的时间内开发出符合市场需要的相对稳定可靠的产品,谁就会在竞争中占据有利定位,反之,谁就有可能被淘汰出局。
残酷的市场竞争要求我们的设计,一方面,设计的芯片速度必须越来越快,以增加带宽,满足市场需要,另一方面,设计必须在最短的时间内完成,否则将面临死亡。因此, 在今后的大多数设计中,速度将起决定性的作用,而面积则处于从属地位,为了速度,有原则的牺牲面积是可以考虑的。
第三类 面积+速度
事实上,任何一个设计都必须同时考虑面积和速度,只是各有侧重点而已。之所以这样做是为了考虑综合成本。
1 为了降低生产成本,希望我们的设计尽可能最优,即速度最快,面积最小,但这会延长设计周期,降低“机会窗”利润。
2 为了尽快让产品上市,希望我们的设计能在最短的时间内开发成功,迅速抢占市场。但这有可能会牺牲产品的部分性能,为了迎合顾客需要而不断更新换代 ,从而增加生产和开发成本。
【注意】上述提到的三类芯片设计实际只是为了说明一个问题:谁是设计中考虑的第一要素 谁是第二要素 并根据他们的关系采取不同的开发策略。
2.2 芯片设计发展趋势
实际上,随着技术水平的发展,芯片设计正逐渐向速度优先靠拢,这是因为:
设计容量越来越大,越来越复杂,正向SOC( System On a Chip) 方向发展。
由于工艺的改进,芯片规模 (面积) 已不是制约设计主要因素,芯片工作频率 (速度) 是关键。如何提高芯片速度是设计者首要考虑的因素。
市场竞争日趋激烈,要求设计能在最短的时间内完成,时间就是生命,必须采用新的设计方法和手段,及相应规范化的措施来尽快缩短开发周期。
在今后的许多重要设计中,速度是关键,所有活动都是以 (速度) 为核心而开展,没有 (速 度) 就没有一切,在速度的前提下考虑面积。并且,随着工艺的发展 ,可编程器件特性在向ASIC发展,与此相适应,可编程设计方法也在向ASIC靠拢,即可编程ASIC设计。
2.3 根据市场需求和产品发展策略确定芯片开发策略。
事实上,芯片与产品 (系统) 的关系不外乎:
1. 系统决定芯片
这是由于:市场无法预测,产品主要是根据客户需要或其它因素才确定下来。
2. 芯片决定系统
当我们的市场把握能力很高时,能准确地预测市场走向,并依此决定我们的产品开发策略。此时 我们的芯片开发可以并且应当走在系统前面( 类似芯片预研)。
目前,我司大多数的芯片开发属于第一种情况。针对这类芯片开发,功能复杂的可以分几个阶段进行,每个阶段采取不同的开发策略。
第一阶段,抢占市场,快速推出相对稳定可靠的产品( 类似芯片预研)。
这种抢占市场的产品开发策略要求我们的芯片必须在最短的时间内完成开发。针对这种情况,芯片开发可采取如下对策:
第一阶段的开发 (开局版本) 以满足最基本需求为主,适当降低开发难度与工作量,保证产品如期上市和相对稳定性,为将来的版本升级争取时间。当然 如果能一次开发成功则更好。
芯片功能测试,软件测试与硬件测试相结合,尽可能完善。
器件的选型必须留有足够的余量,保证将来版本升级时不用更改单板。
芯片的基本功能必须正确,并采取一些通用的可靠性设计技术,保证芯片出现错误后系统能及时检测到并能自动对其进行恢复将可能的错误危害降低到最小程度。
第二阶段 芯片性能改进和功能扩展 (速度+面积)。
当产品上市之后,为了巩固阵地和进一步拓展市场:一方面 必须迅速提高芯片的可靠性,解决遗留问题。另一方面,由于市场变化很快,很有可能发现产品推出后,才发现要增加新的功能,或者需要在某些方面进行修改,以适应变化了的市场需要。因此:
跟踪网上器件运行状况,有针对性地加大硬件测试力度,查出芯片深层问题。
针对各种故障现象,专门编写仿真测试代码,加快故障解决进度。
增加各种故障检测和保护电路,提高芯片的可靠性。
根据需要,补充新功能,去掉不必要的电路,并进行适当的代码优化,确保芯片面积不超过,额定容量在该阶段,应综合考虑速度和面积。
第三阶段 降低成本 (面积优先)。
当产品已经获得规模应用时,成本因素是考虑的重点:
考虑转ASIC 同时进行电路优化,保证ASIC芯片面积最小。
当需要再增加芯片功能时,可以考虑优化电路,确保芯片面积不超过“额定容量”。
注意 上面提到的芯片开发三个阶段,并不是绝对的。它主要是用来说明,在芯片开发的不同时期,不同的设计,针对不同的奋斗目标,我们的开发策略或重心应有所不同。另外, 完整的开发阶段应当包含芯片预研阶段,这里不做重点讨论。
3 可编程ASIC设计
3.1 设计工程师基本素质要求
随着设计规模的增加,传统的设计方法已跟不上时代的发展需要。为了在最短的时间内将产品推向市场,要求我们的设计要快速可靠地完成。为此,我们的可编程ASIC设计应当是
能满足客户基本需要。
是稳定可靠的。
必须具备良好的可维护性和可继承性,容易改进和升级。
具有很好的可移植性,便于技术经验共享,加快设计进度。
设计规范,便于工程师进行技术交流和设计审查,保证设计质量。
这就要求我们的设计工程师
扎实的专业知识。
同步电路设计方法及异步电路处理技巧。
掌握硬件描述语言,如VHDL或Verilog语言。
熟悉各种先进的EDA设计工具,如综合工具,仿真工具,静态时序分析工具及相关厂家的设计流程等。
3.2 基本设计流程
可编程ASIC设计最基本的流程是
3.2.1 设计目标分析
设计目标分析主要目的是确定芯片应当完成哪些功能,对于大规模的设计,一般设计比较复杂,因此应当根据产品的发展计划,将设计目标分若干步骤来实现:
基本目标:对应开局版本,确定应完成的基本功能。
阶段目标:确定分多少阶段来逐步实现这些目标。
可能目标:分析未来可能要增加的功能。
ASIC计划:确定是否转ASIC,什么时候转ASIC。
在确定目标时,必须充分考虑各目标的实现难度和可行性。在基本目标确定之后,原则上不允许有改动,否则会对设计进度,士气造成恶劣影响。
在各个目标的实现过程中,要注意各版本的兼容性,包括对单板软件的影响,这就要求我们的器件在选型时必须留有足够的设计余量,保证升级时单板不会因此而修改。
3.2.2 功能模块划分
主要目的是让设计层次分明,条理清晰。另外,在确定功能模块划分过程中,能使设计者在总体上考虑芯片的各个问题,发现一些比较深层次的问题,这对设计能否实现是非常重要的。
3.2.3 确定关键电路时序和模块间接口时序 (总体方案)。
事实上,在功能模块划分过程中,就必须考虑时序方面的问题,有时在确定设计目标时,就得考虑关键电路时序。
当前我们的设计过程中存在这样一种现象:当我们把一个设计进行功能分解之后,是直接交各项目组负责完成,然后再进行系统联调,看看会出哪些问题,再去更改设计 。这是在凑电路,而不是在设计电路设计电路。尤其是数字电路,最关键的一环是,设计各模块间的接口时序确定关键电路的时序。这个工作必须在具体电路设计之前确定下来 。凡是设计过电路的人都经历过:我们在系统联调时经常发现彼此之间的配合出了问题,当我们的设计不能满足时序要求时,都会在那挖空心思地想办法改进电路,甚至更改整个设计。
![](https://i-blog.csdnimg.cn/blog_migrate/7b3c8d713d534f1cba8799e863e032a8.png)
在这里插入图片描述
我们来看一个实际例子,上图是某个设计原来准备采用的电路,该设计采用Xilinx的FPGA器件4062xla来实现,工作频率是32.768MHz( 即图中CLK频率)。设计原打算在每隔60ns输出一个数据,即DATA,然而,我们在设计之前,考虑到256x7的同步RAM延时可能比较大,如果在加上其后的同步RAM延时的话,估计在60ns之内很难完成 。
该部分电路是整个设计中的一个关键路径,因此,我们在进行具体设计之前,先对这种电路结构进行了验证。事实证明我们的担心是对的,正确的做法是,采用流水线方法 ,在256x7的RAM之后再加一个触发器,每个RAM都按60ns的速度读取数据,整个流程滞后60ns输出DATA。其它相关信号,在其它模块中,也随之滞后60ns输出。
因此,我们在做总体方案时,应该深入到模块间的时序划分,关键电路的时序确定,并以此指导各项目组,项目组各成员进行设计,这项工作的实质就是确定各模块设计需求。在设计之前,若选择的设计策略出现问题,则会极大增加设计实现的难度,影响产品开发的进程。
“时序是事先设计出来的 而不是事后测出来的”。***
往期精彩
本文完!!!
欢迎关注,更精彩的内容等着你!