1).数字Asic设计流程 前端到后端使用工具
a.通用型数字Asic(从上到下)
C/Verilog验证→行为级或寄存器传输级→代码综合得到门电路映射(约束)→自动布线→寄生参数提取→后仿真
【1】在验证算法时一般使用C语言或者Verilog来对系统算法进行建模,使用行为级描述来对算法功能的正确与否进行仿真。一般比较常用的方法是使用C语言在Matlab软件环境下进行算法验证。
【2】 算法验证完成之后,需要进行的工作就是将算法转化为对应的行为级或者寄存器传输级描述,并且对其进行功能仿真验证。在该阶段可以使用的工具有很多,常用的 有Active—HDL、Mentor的Modelsim系列软件和QuestaSim系列(前者使用三个核进行仿真,后者使用一个核,因此后者可以对不同语言环境下的描述进行混合仿真)。
【3】完成功能仿真之后需要进行的工作就是根据foundry提供的标准数字单元工艺库,对前面得到的表述一定功能的代码进行综合,得到代码对应的由标准单元库 中的门电路组成的实际电路映射。在综合的过程中,要根据设计规范来制定各种约束以使综合得到的电路映射能够满足设计的要求,同时也要注意综合报告中所给出 的违反约束的各个信息,并且利用这些信息来修改代码或者算法。在综合的过程中使用的工具最主要是Synopsys的DC和PC。
【4】做完综合之后,利用综合得到的实际电路映射、时序约束与foundry提供的与版图有关的工艺库就可以进行自动布局布线的操做了。此时常用的软件有Synopsys的ASTRO和Cadence的Se工具。
【5】 自动布局布线完成后就可以根据产生的版图文件信息提取寄生参数来进行包含寄生参数与互联延迟的后仿真了。一般常用的寄生参数提取工具有AVANTI的 STAR-RC和Cadence的DRECULA或Diva,两者都需要将自动布局布线得到的版图和工艺库文件导入软件中进行寄生参数提取。 Cadence的软件还可以通过导入版图,来对自动布局布线得到的版图中不满意的地方进行修补。
【6】 寄生参数提取结束后将得到的寄生参数信息与自动布局布线得到的网表导入PT进行包含寄生参数的时序参数提取,然后利用所提取的时序参数在底层网表中反标进行后仿真,观察后仿真的时序是否满足设计规范的要求。如果满足则设计基本完成,不满足还需要进行迭代修改。产生反标需要的时序文件的软件是PT,而将时序反标文件反标回综合后的网表并且进行后仿真的软件比较多,比如Modelsim和Nclaunch(NC主要针对大型系统,而Modelsim则主要是针 对小的设计,因为前者的工作平台是工作站后者是PC)。
b.全定制数字Asic或者混合信号ASIC(从下到上与从上到下结合)
当需要制作全定制的数字芯片时,传统的从上到下的设计流程就不完全奏效了。其中最大的不同就是全定制芯片为了实现更小的体积与功耗,更高的集成度将可能不采用厂家提供的标准数字单元库而是通过与foundry沟通自己设计满足自己需要的工艺库。比如Xilinx的FPGA芯片的设计采用的就是全定制的设计方法。
对于全定制设计而言,也需要采用算法验证、功能描述与仿真验证、综合、寄生参数提取与后仿真的过程,但是相对通用型Asic的设计而言,在做后仿真时全定制可以使用模拟仿真的方法进行后仿真而不需要进行时序反标的过程,因为在设计全定制Asic时使用的不是foundry提供的标准数字工艺库而是根据设计需要自己设计的数字工艺库。因此对于全定制的Asic设计而言,它的后仿真需要采用foundry提供的标准模拟库,由于不使用时序的反标而采用模拟仿真的方法后仿真得到最终版图对应信息,因此耗时可能比设计通用型的Asic更长。
全定制设计流程的使用软件,算法验证与功能仿真的软件同通用型使用的基本相同。但是在综合这一步就不太一样了,对于全定制的设计而言一般在设计时采用Cadence的软件比较多,因为全定制设计更象模拟电路设计。在综合这一步之前先要根据设计规范对每个模块进行时序与功耗的分配,并且最好能够细化到每 个门级电路。然后根据要求来构建设计所需要的设计者需要的单元库。因为全定制的ic综合这一步更象是利用设计者自己定义的库来搭积木的过程,人为的控制因素与经验也更加重要,在这里良好的布局可以使搭出的电路效率更高。
在这里可以先使用cadence的版图与电路图输入工具Virtuoso来根据设计规范的要求构建建立在单管基础上的基本单元库,然后再根据已经验证的算法和功能描述,利用所构建的基本单元库来得到整个芯片的电路图布局结构,最后根据芯片内各个信号的关系来进行电路布线的操作。以上的操作都可以在 Cadence的IC 5.1集成设计环境下的Virtuoso中完成,当完成布局布线后全定制Asic的版图基本就确定了,然后根据基于基本单元库所对应版图的全芯片电路来搭 建全芯片电路对应的全芯片版图。此时可以利用Cadence的Diva或者Drucla工具进行DRC、ERC、LVS检查,并且可以根据版图利用上述工 具进行参数提取。然后将提取得到的参数与搭建全芯片时所得到的全芯片网表或者全芯片电路进行后仿真。如果在后仿真时不想使用Cadence或者系统太大仿 真不了时,可以使用Hsim进行仿真。Hsim在使用时需要根据版图提取寄生参数和全芯片电路基于基本单元库的网表。(还有不清楚的地方,回来需要具体研 究下)
在进行通用型数字Asic设计时需要注意代码的风格,因为代码风格的好坏直接影响到综合软件的效果,风格规范的代码可以得到性能更高的芯片电路。另外,在写代码时还要注意尽量使用可综合的代码和能够避免系统出现毛刺与亚稳态的电路描述方法。
在进行全定制数字Asic设计时一定要注意单元库的建立,在建立时除了满足基本的逻辑功能外还要注意宽长比与所构造单元的功耗和延迟之间的关系,最好能够建立基于Verilog和电路图等多种不同表达方式的电路结构。这样便于后面的进一步分析与仿真。另外,在全定制数字IC设计中经常会把数字电路当成模拟电路来分析功耗与延迟,所以可以使用模数混合的方法来对所设计的基于自建单元库的电路进行仿真,从而可以相对全电路模拟仿真大幅度提高仿真的速度,相对全电路数字仿真得到更精确的延时信息。不过对于功耗的仿真还是只能使用全电路的模拟仿真。最为重要的一点是通用型数字IC的版图布局可以利用软件实现自动化,而全定制则更多的依靠有经验的版图设计师来实现。
2).模拟Asic前端到后端使用工具:
对于模拟Asic而言,在进行设计时是不能使用Verilog或者其他的语言对行为进行描述,目前已知的可以对模拟电路进行描述的语言大部分都是针对比较底层的基于单管级网表的语言,比如软件hspice和hsim所使用的面向管级网表连接关系的语言——spice。因此如果使用语言对电路进行描述的话, 在遇到比较大型的电路时使用门级或者管级网表就比较麻烦。所以,一般在进行模拟电路设计的时候可以使用图形化的方法来对模拟电路进行设计。比较常用的工具 有Cadence公司的Virtuso、Laker、Epd(workview),其中Cadence自带有仿真器spectre可以实现从电路图输入到 电路原理图仿真,以及根据电路图得到版图并且可以利用cadence的其他工具插件实现完整的版图验证,从而完成整个模拟电路芯片的设计流程。但是对于 Laker和Epd而言,这些软件所能完成的工作只是利用foundry模拟库中基本单元构建模拟电路图,所得到的只是模拟电路的网表,而不能对该模拟电路进行仿真,因此一般在使用laker或者EPD的时候都需要将得到的模拟电路转化为网表的形式,利用第三方的仿真软件进行仿真,比如使用hsim、 hspice或者pspice对得到的网表进行仿真。然后再使用第三方的版图软件进行版图设计和DRC、ERC、LVS检查,所以从设计的方便性上讲使用 Cadence的全系列设计软件进行模拟电路设计是最为方便的。
在得到模拟电路的版图后就可以根据版图提取寄生参数了,寄生参数的提取方法和前面所讲的数字电路的版图参数提取是完全相同的,利用提取得到的寄生参数就可以得到互联线所对应的延迟并且将该延迟或者是RC参数反标回模拟电路图中去,从而得到更符合实际版图情况的电路图。对该电路图仿真就可以完成后仿真,得到 更符合实际芯片工作情况的信号波形。
因此,在模拟电路设计中版图设计是非常重要的,一个有经验的版图设计师可以很好将各种模拟效应通过版图来避免,从而在相同设计的情况下得到性能更好的芯片 设计。另外,一个准确的模拟单元库对于得到更贴近实际流片测试结果的仿真波形也具有很大帮助的。可惜目前国内的foundry做的库都不是很理想,做的比较好的就只有TSMC、UMC这种大厂。
3).FPGA的设计:
FPGA的设计流程与数字Asic的设计流程比较类似,也需要功能仿真、综合、布局布线的过程,但是由于FPGA是针对特定用途通用芯片,所以在布局布线完成之后就可以直接将所做的设计代码直接下载到FPGA硬体中去了。
在进行针对FPGA的设计时,首先要做的就时利用工具对需要实现的算法进行功能验证,在这里可以使用的软件很多,比如Active—HDL、Mentor 的Modelsim系列软件和QuestaSim系列软件,或者使用FPGA厂商所提供的专用软件,比如Altera的Quartus II与Xilinx的 ISE都可以实现功能仿真,其中在FPGA厂商所提供的软件中都提供了第三方功能软件的接口,所以也可以通过厂商所提供的软件调用第三方的仿真软件。
在完成功能仿真后需要进一步完成的工作就是综合了,此时可以使用厂商自带软件的综合工具进行综合也可以使用第三方软件进行综合,其中比较著名的软件有 Synlicity公司的synplify与Synposys的FPGA Complier,通过这一步可以得到满足设计要求的针对不同型号FPGA的电路映射。需要注意的是,在进行综合时可以根据设计要求修改综合约束从而实现不同的设计要求。
完成综合后就可以对所做的设计进行布局布线了,此时必须使用FPGA厂商所提供的软件,因为布局布线与其各自的FPGA内部架构有密切的联系,因此各个厂商都有各自不同的布线算法。所以必须使用专用的工具进行布局布线。
在完成以上步骤之后就可以利用厂商所提供的软件进行布局布线后的时序参数仿真了,根据布局布线和FPGA的内部架构可以利用ISE或者Quartus II软件得到布局布线后的时序参数了,然后将该时序参数反标为综合后的网表进行后仿真就得到FPGA在实际工作时的波形了。
需要注意的是对于第三方仿真软件的调用一定要建立相应FPGA器件的基本单元库,只有有了这些库之后才可以调用第三方软件进行仿真。
在观察后仿真的波形正确后就可以将所做的设计通过电缆和厂商提供的工具软件下载到相应的FPGA器件中去了,此时FPGA工作得到的信号波形和后仿真应该是基本一致的。
对于FPGA而言,合理的算法代码实现与对所使用FPGA芯片的架构的了解除了可以帮助达到所需要的设计要求,同时还可以消耗更少的FPGA逻辑资源,从而可以用最少的资源实现最多的功能,达到最快的速度与最合理的功耗,也就是“多、快、好、省”的完成设计!