今天突然想从一个数字电路设计工程师入门者的角度来分析下目前我所看到的东西,以及自己的展想推测。芯片设计是一个巨大的流程,包括数字模拟电路设计,物理后端设计,封装设计,测试设计等方面,作为世界上最复杂精密的制造业,IC设计无疑是最顶端的,技术密度含量最高的产业了。而且由于电子设备的大量应用,IC行业已经是正在向与传统行业,比如说能源,钢铁等传统比较强力的制造业的实力靠拢了,国家越来越重视行业的发展,因为它关系到信息安全,关系到国家的安全问题,可以说,但凡是涉及到国家安全的,都算是第一要务,所以近期以来才会有以紫光为名的,背后政府支撑的多起并购或者入股案的发生。
作为整个IC行业整个大河流的最前端,数字电路设计关系到后面的每一步的状况,为了最后芯片功能性能的要求的实现,所以对数字前端的要求特别多,而且为了不会出现问题,很多时候设计是采用了IP的形式,IP主要包括三种形式存在,一种是软核,主要是代码构成,复用性,可更改等都比较好;还有就是固核,采用的是网标的形式,看不懂具体的设计的情况,但可以看到相应的一些信息,设计到综合的信息,一般很难更改,很难看懂;最后一种就是硬核,也可以说是物理IP,主要是版图构成的,主要是与工艺相关,可复用性很差,只能在相应的工艺下使用;上面说的设计一般都是在SOC(System On Chip)设计的时候使用的吧?(这个不是很清楚,有时候会把SOC说成是升级版的ASIC).
ASIC设计,也被说成专用集成电路,很多东西都是需要根据工艺来重新设定的,相应的spec定义之后,选择工艺,选择器件库,进行电路设计都要根据这些,比如说工艺库有没有相应的reset的cell等等,都要考虑,如果有的话,就尽量调用工艺库;相应的模拟电路的设计也是根据具体的要求来设定的,数字电路的架构也是由人来决定的,相应的模块可能根据不同情况或者不同人会有改变;定义相应的spec和coding style对设计很关键;一般ASIC设计需要花费的时间会稍长一些,芯片也会稍贵一些;相应的spec定义内容很多,除却电路功能上的,一般会在面积,功耗,速度,漏电等很多方面进行限制;相应的会根据工艺的不同设定一个file来限定这些,设计的时候会参考这个file,一直更改设计到符合要求;设计的时候一般会考虑的比较悲观,但考虑到设计的复杂度和成本等很多因素,也会在考虑一些本可以去掉的悲观因素的时候去除掉这些悲观,比如说后端的时候的CPRR等;
数字前端是在RTL级做的设计,这是最适合做设计的一个level,太低的话会太麻烦,写起来太费力;太高的level则会在电路仿真或者是在综合的时候出现很多问题,所以才选择RTL级;另外,数字电路实际上就是基于逻辑的设计,逻辑上等效的单元,完全可以替换;很多东西不一定非要根据设计原理,只要在设计原理的基础上符合逻辑要求就可以了;比如说利用overflow或者underflow的情况,合理的舍去冗余逻辑等都会对设计产生不小的好处;一般设计的时候要避免使用latch,因为latch在时序分析的时候会产生很大的困扰。
反正前端的设计说到底就是切合spec,迎合后续的物理实现(physical implementation),test,封装等等,并且适当的简化逻辑,减少面积,功耗,提高速度等等,要知道有一个十倍法则,IC行业每一个阶段的错误的价格是不一样的,一般后一个步骤的错误产生的损失,是上一个步骤产生的错误的损失的十倍,这就是十倍法则;作为最前端的数字电路设计,在这个对schedule要求越来越严重的年代,越来越需要避免错误,因为前端错,后端必错,细心是IC设计成功的最大法宝。