1.1.1 IC设计基本流程
IC设计基本流程包括两大类:正向设计流程(Top-Down)和反向设计流程(Bottom-Up)。正向设计流程指的是从顶层的功能设计开始,根据顶层功能的需要,细化并完成各个子功能,直至达到底层的功能模块。反向设计流程正好相反,设计者最先得到的是一些底层的功能模块,采用这些底层的功能模块搭建出一个高级的功能,按照这种方式继续直至顶层的设计。
在IC行业的最初阶段,EDA工具软件功能并不强大,所以两种方法都被采用。随着EDA工具软件功能的逐渐增强,正向设计流程得到了很好的支持并逐步成为主流的IC设计方法。这种方法符合设计者的思维过程:当拿到一个设计项目时,设计者首先想到的是整体电路需要达到哪些性能指标,进而采用高级语言尝试设计的可行性,再经过RTL级、电路级直至物理级逐渐细化设计,最终完成整个项目。
由于EDA厂商的工具软件不尽相同,每家厂商为了推销自己的产品,都制定了一套采用自己公司或合作公司旗下软件的设计流程。例如,SYNOPSYS公司、SIEMENS公司等都有一整套推荐流程,这些公司的推荐流程都可以在各自公司的主页上找到,这里不占用篇幅进行说明。尽管各家公司的推荐流程不同,但是整个IC设计的基本流程是确定的,图1-1所示为IC设计的基本流程。
图1-1 IC设计的基本流程
设计的最开始阶段一定是设计说明文档。这个设计说明文档主要包含了设计要实现的具体功能和期待实现的详细性能指标,包括电路的整体结构、输入/输出(I/O)接口、最低工作频率、可扩展性等参数要求。完成设计说明文档后,需要用行为级描述待设计的电路。行为级描述可以采用高级语言,如C/C++等,也可以采用HDL来编写。这个阶段的描述代码并不要求可综合,只需要搭建出一个满足设计说明的行为模型即可。
行为级描述之后是RTL级描述。这个阶段一般采用VHDL或Verilog HDL来实现。对于规模比较大的设计,一般是在行为级描述时采用C/C++搭建模型,在RTL级描述阶段,逐一对行为模型中的子程序进行代码转换,用HDL代码取代原有的C/C++代码,再利用仿真工具的接口,将转换成HDL代码的子程序加载到行为模型中,验证转换是否成功,并依次转换行为模型中的所有子程序,最终完成从行为级到RTL级的HDL代码描述。这样做的好处是减少了调试的工作量,如果一个子程序转换出现错误,那么只需要更改当前转换的子程序即可,避免了同时出现多个待修改子程序的杂乱局面。
RTL模型的正确与否是通过功能验证来确定的,这个阶段也被称为前仿真。前仿真的最大特点就是没有加入实际电路中的延迟信息,所以,前仿真的结果与实际电路结果还是有很大差异的。不过在前仿真过程中,设计者只关心RTL模型是否能完成预期的功能,所以又被称为功能验证。
当RTL模型通过功能验证后,就可进入逻辑综合与优化阶段。这个阶段主要由EDA工具软件完成,设计者可以给综合工具指定一些性能参数、工艺库等,使综合出来的电路符合自己的要求。
综合生成的文件是门级网表。这个网表文件包含了综合之后的电路信息,其中还包含了延迟信息。将这些延迟信息反标注到RTL模型中,进行时序分析,主要检测的是建立时间(Setup Time)和保持时间(Hold Time)。其中,建立时间的违例和保持时间较大的违例必须要修正,可以采用修正RTL模型或修改综合参数来完成。对于较小的保持时间违例,可以放在后续步骤中修正。对包含延迟信息的RTL模型进行仿真验证的过程被称为时序仿真,时序仿真的结果更加接近实际电路。
设计通过时序分析与时序仿真后,就可以进行版图规划、时钟树插入与布局布线。这个阶段是把综合后的电路按一定的规则进行排布,设计者可以添加一些参数对版图的大小和速度等性能进行约束。由于时钟网络的规模庞大,所以时钟树一般会在本阶段单独进行。布局布线的结果是生成一个物理版图,再对这个版图进行仿真验证,如果不符合要求,那么需要向上查找出错点,重新布局布线或修改RTL模型。如果版图验证符合要求,那么这个设计就可以送到工艺生产线上,进行实际芯片的生产。
当然,上述流程只是一个基本的过程,其中很多步骤都可以展开成很多细小的步骤,也有一些步骤(如形式验证)在这个流程中并没有体现。不过这个流程图可以包含基本的IC步骤,对于初学者已经足够了。另外,各公司推荐流程不同的原因是采用了不同的EDA工具软件来完成以上的IC基本流程。例如,前仿真阶段,可用于HDL仿真的EDA工具软件就有SYNOPSYS公司的VCS、CADENCE公司的Verilog-XL、SIEMENS公司的ModelSim等。