数字IC的设计流程如图1—1所示。如果只关注设计流程的主干部分,则可以看出主要分为3步。第1步由数字IC设计工程师编写电路设计文件,该文件常用Verilog设计语言描述,实际上就是一个文本,称为寄存器传输层(Register Transfer Level,RTL)设计文件,用任何文本编辑器都能打开。第2步将RTL输入综合工具,被工具转换为实际电子元器件的连接,称为综合(Synthesis)。该工具输出的元器件连接文件称为网表,也是纯文本的。第3步是将综合网表输入后端布局布线工具中,该工具能将文本形式的网表变为实际电路图,类似于常见的PCB图,称为版图(Layout)。版图的绘制无外乎两个问题:一个是元器件如何摆放,即布局问题(Place),第2个是元器件如何连接,即布线问题(Route)。数字版图的绘制过程大部分由计算机自动完成,因此称为自动布局布线(Automatic Place and Route,APR),很多时候也直接称为PR。版图为Foundry能够识别的通用格式,Foundry根据它来制造芯片。制造芯片的过程称为流片,由设计厂将版图交付给Foundry的行为称为交付流片(TapeOut)。
图1—1 数字IC设计流程
在3个主要流程之外,尚存在其他工序,其中,验证和验收(SignOff)是负责对设计质量进行把控和最终验收的。数字前端设计完成后,要将RTL设计文件提交给数字验证,用以确认设计的正确性和合理性。一旦发现错误,会反馈给设计者进行修改,如此反复迭代,最终交付到综合阶段的RTL设计文件都是经过验证的合格品。对RTL设计文件的验证和仿真行为称为前仿,即版图成形前的仿真。在验证过程中,由验证人员编写的测试平台(Testbench)文件是对实际应用环境的仿真,虽然该文件不用于综合和版图绘制,但为发现设计中的错误提供了依据,应当将其地位看作与RTL设计文件同等重要。当后端完成版图设计后,还要经过时序和功耗检查,只有合格后才能交给Foundry,这种检查叫作SignOff检查。若检查无法通过,首先是数字后端工程师自己努力,重新绘制版图或微调元器件位置,若无法达到目的,再修改综合策略,重新综合,并绘制版图,若仍无法达到目的,要反馈到前端IC设计,在RTL上进行调整。在SignOff合格后,还要将最终网表和延迟信息提供给验证人员,由他们进行后仿,以便对芯片设计的时序功能做最后的验收检查。所谓后仿,就是版图成形后的仿真。
可测性设计(Design For Test,DFT)也是一个附属工序,它的原理是在芯片中加入一些附属电路,这些电路与芯片的主要功能无关,但有了它们,可以在芯片的生产过程中使用测试机台快速判断芯片的功能是否完好、内部结构是否正常。如果芯片中包含DFT电路,则测试机台可以向芯片的某些引脚发送事先准备好的测试向量,在芯片的另一些引脚上采样芯片对测试向量的反应。将事先准备好的预期效果与实际采样到的结果进行对比,从而判断芯片的内部功能是否正常。DFT功能也常常被称为扫描(Scan),即用测试机台扫描芯片内部之意。DFT检查的对象是生产差错造成的芯片损坏,它不能检查设计问题。设计问题应该由验证工序来检查。DFT对于芯片来讲并不是必需的,一些低成本的芯片没有插入DFT电路,在设计流程上,直接从电路综合过渡到后端设计。
平时人们常说的前端设计和后端设计,区别在于设计的对象是抽象的还是具体的。前端设计的是抽象电路,它只描述功能,而不是具体电路,而后端设计的是具体电路,不仅要知道该电路需要哪些元器件,还要一一确认这些元器件的摆放位置。电路综合是前端和后端的分界线,综合之前没有元器件而只有功能,综合之后,设计才有了具体化的元器件。当然,有经验的前端设计工程师也往往强调心中有电路,但所谓心中的电路并非最终的实际电路,而是功能相似的概念性电路。在心中画电路的目的是认清设计架构,并避免潜在的设计隐患。