网上的流程都差不多,这篇知乎文章和这个CSDN博客说的还可以。
这里力求让人弄懂数字IC前端设计到底有哪些步骤。以一个fabless公司的视角来确定数字IC前端设计流程,从想做一个芯片开始,到送给后端结束,后面可能会补充ECO相关的内容。
1.确定项目需求
前期的市场调研部分就不赘述了,简而言之,这个芯片做出来得有用,能卖出去。卖的好不好取决两点,一个是芯片的功能,二个是芯片的价格。
考虑这两大因素,需要在这一步确定芯片的具体指标,即制定芯片的规约(Spec,specification),通常以文表的形式表现:
- 物理实现
制作工艺(代工厂及工艺尺寸);
裸片面积(DIE大小);
封装。
- 性能指标
速度(时钟频率)
功耗
- 功能指标
功能描述
接口定义
2.系统级设计
这一步对应的工作是芯片设计行业的天花板——架构工程师,其实前面Spec的编写也是架构工程师工作的一部分。在这一步之前,要做什么已经定下来了,这里开始考虑的是怎么做,能不能做到,有什么取舍。
这一步主要是搭建顶层架构,建模并做高层次的仿真,制定设计分工。
搭建顶层架构这块就是将一个大的芯片分解成一个个小的模块,并将这一个个模块连起来,实现整体的功能。个人理解就是现在芯片太复杂了,工程师不可能从0开始搭建一个芯片,很多需要用到已有的设计。不管是公司已经有的技术,还是去买外面的IP,能用现有的东西从简化开发的角度肯定是好的。这个视频挺好,能快速理解手机SOC架构,截个图放下面:

建模并做高层次的仿真这块的工具有matlab、C++和python。带入实验室项目思考,可能比较像我们做物理层通信FPGA实现的时候,先用matlab把整个功能实现出来。即验证架构的合理性,证明能实现预期的功能。
制定设计分工这块理解就是根据划分的模块和后续工作安排工作计划和工作。即根据后续流程估计工作量,安排工作小组和工作内容。
3.前端设计
这块是我目前将要从事的工作。读研期间听说在成为一名前端设计工程师之前,先做几年功能验证工程师?这点先存疑,但是打听到的消息说是,一般公司里,设计和验证的比例大致是1:2,所以验证的实习/秋招会比设计好找。
博主这里想探讨一下什么是前端设计,假设把前端设计比喻成一个黑盒,暂不考虑和架构、后端的反复的交互(虽然现实肯定存在),那么它的输入是什么,输出是什么,又是怎样从输入得到输出的。总结如下:

输入,在架构设计阶段,应当已经出了一份正式的架构设计文档和一套配备的高层次的仿真模型。架构设计文档定义了芯片的工作原理和一些实现的算法;高层次的仿真模型(C/matlab等)进一步定义了芯片的输入输出模型,为验证的一致性原则提供参考标准。
输出,前端设计的输出是给到后端的,前端给后端的东西叫做网表(Netlist)。这里的网表特指门级网表,而且该门级网表需要满足一定的限制,能够让后端工程师通过该门级网表得到一个电路图。
如何从输入得到输出:
从工程开发的角度来看,从按照设计文档写出RTL代码到门级网表有三个阶段——转换、优化、映射。这些是EDA工具自动完成的,工程师需要做的是写好RTL代码,引入约束,验证功能是否正确。
转换指的是将RTL代码转化成初始的未优化的电路。
优化指的是删去电路中的冗余单元并对不满足限制条件的路径进行优化。
映射指的是电路映射到制造商提供的工艺库上。
从上面的输入到输出可以看到,要从一份架构设计文档到一份可以交接给后端的门级网表,仅仅写RTL代码是不够的,中间需要验证代码对不对,后续博客将详细讲述前端的具体流程。