现在数字电路在芯片中占有极大的比重,数字逻辑也变得越来越复杂,所以必须从架构和算法上进行考虑。个人所略知的关于芯片架构的是,架构可以分为三种大的方向:1,数据流;2,控制流,3,总线流。数据流:数据从输入到输出是一条直线,并没有折回的数据,这是纯数据处理的一种架构,这种芯片功能应该是比较单一。2,控制流,这是基于状态机或者CPU形式的一种架构设计。简单点的芯片就采用状态机就够了,复杂的就必须采用CPU作为控制内核了,比如单片机就是以CPU为控制内核,外加RAM,ROM所形成的一类控制类芯片。3,总线流,这是基于总线的芯片设计架构,最熟悉的就是SOC类芯片,总线上连接着一个或多个CPU,RAM,ROM,I2C,UART等等之类的各种组件。由这些组件的不同排列组合,形成满足各种不同需求的芯片,例如不同的ARM类芯片。
算法,我所略知的是通信类的,例如,FIR,FFT,小波变换,三角函数变换等等,当然还有视频音频类的算法,对与这方面的内容就没有接触过了。总的来说,这类算法都是以数据处理为主要目的的,所以这些算法都要求有较强的数学功底。做算法开发,主要工具为MATLAB,都是先在MATLAB上做原型开发验证,再转化为RTL级的代码。
结合架构和算法,将芯片的总体结构搭建出来,为后续的工作做好了准备。
三、RTL代码
当算法工程师把芯片架构设计好,各种算法在MATLAB上通过了验证,以及其他必要条件的考量之后,便将工作交接给ASIC工程师去做RTL代码的翻译工作,就是将MATLAB上的算法翻译成RTL。这一步单纯从翻译的角度只需要一个文本编辑器就可以了。然而,还有后续的仿真验证工作,这部分的内容并不轻松。有时候根据公司的不同,根据项目的工作量大小,算法工程师与ASIC工程师在工作内容上是有交叉的,他们也承担将MATLAB转换为RTL的工作。RTL设计的时候也会考虑DFT(DesignForTest可测性设计)的问题,会在RTL代码中加入测试链,这个我就不太熟了。
四、仿真验证
这一步的工作比较关键,可以说是设计部分的第一个分水岭。仿真验证,视不同的公司,不同的项目,复杂度有非常大的不同。简单的,只要写一个较为完善的testbench验证完RTL代码的功能就行了;复杂的,将会在RTL验证环境下进行详细的验证,甚至可能用得到各种验证方法学UVM,VMM,OVM等等,这种复杂验证所用的语言一般采用SystemVerilog。验证软件可以采用cadence公司的NC_VERILOG,或者synopsys公司的VCS。此外,某些芯片还会采用FPGA,进行硬件在线仿真。这样能够获取关于芯片的更为详细的信息。但不管如何,无论是个人还是公司,都应该有对于仿真验证工作的一套完整和完善的流程方案。
五、工艺选择
六、综合、时序&功耗分析
主要工作内容:
1、准备好选定的工艺库文件(综合网表文件、时序文件库);
2、根据设计要求编写TCL约束脚本;
3,操作软件,生成约束报告;
4,分析约束报告,修改或调整不合理的约束或者修改RTL代码(RTL代码不会轻易修改,这要求在RTL设计时就要考虑这些约束要求,以便于能够通过约束分析)。
七、形式验证
综合出来的网表正确与否如何判定呢这需要用到形式验证技术,该技术与RTL的仿真不同,它是从数理逻辑出发,来对比两个网表在逻辑上的等效性。如果等效,则综合的网表就是符合要求的。用到的工具为synopsys公司的Formality形式验证工具。其实,形式验证是在每一次芯片的逻辑电路转换为另一种表达形式的时候都需要做的工作。具体来说,在综合生成网表后做一次,主要对比的文件为RTL仿真之后的文件和综合之后的网表,在布局布线之后还需要做一次,主要对比文件为综合之后的网表与布局布线之后的网表。
1、准备好待比较的两份文件及各种工艺技术库文件;
2、用TCL脚本编写脚本程序,设置其中一份文件为比较标准,其中一份为待比较文件;
3、运行Formality,分析生成的比较报告;
4、根据报告做出相应的调整与修改。
八、自动布局布线
剩下的工作就是合并整体的版图,并进行DRC、LVS的各种验证,通过之后就可以tapeout。之后再制定测试规范,这与反向设计的剩余步骤是一样的。另外,有时候版图还需要做ECO(EngineeringChangeOrder)工程修改命令,是指在原有的设计的基础上如果要作一些改动,可不必从头再来,可以在原来的布局上通过eco步骤快捷地完成设计。