一、SoC设计内容
1.1 总线设计
总线结构及互连设计直接影响芯片总体性能发挥,选用成熟的总线架构有利于SoC整体性能提升。对于系列化或综合性能要求高的SoC设计,就需要深入进行系统架构研究和优化,将总线频率和带宽提升到更高水平。目前SoC总线主要分成IP授权和开源两大类,主流商用总线选用ARM的AMBA系列、片上网络NoC总线、wishbone总线等。构建深度优化的总线架构,有利于SoC系统的性能提升,解决总线瓶颈让SoC芯片更具竞争力。
1.2 IP核复用技术
IP核指可以重复使用的、经过验证的拥有知识产权的电路模块,一般分为硬核、软核和固核三种。IP硬核是指经过预先布局、并对尺寸和功耗进行优化的、不能由设计者修改的电路模块,硬核提供的为掩膜;IP软核是指由VHDL/Verilog等硬件描述语言写出来的电路代码,与具体的工艺无关,可基于软核进行电路修改和工艺调整;固核是指由RTL描述和可综合网表文件描述的电路模块,可基于网表完成后续工艺调整和修改。
IP核复用是指利用成熟的IP核进行芯片设计,采用已有的功能模块,可大大减轻设计者的工作量并减少设计风险,同时缩短设计周期,快速迭代芯片产品,提供系统性能。IP核复用必须有很好的兼容性和可移植性,必须提供标准的接口以达到复用目的,同时提供良好的开发文档和参考手册帮助购买IP核的设计人员能够快速上手使用。
1.3 软硬件协同设计
由于市场和设计风险的压力,SoC软硬件协同设计尤为重要。软硬件协同的关键在于让软件提前介入芯片前期设计和方案论证过程,保证硬件设计和软件实现高效同步,能有效减少硬件设计过程中的设计风险,缩短嵌入式软件的开发调试时间。同时在协同验证环境中,能够及时发现软硬件中存在的问题,避免在最后集成测试阶段重新进行软硬件设计调整。
1.4 SoC设计验证技术
主要分为IP核验证、IP核与总线接口兼容性验证和系统级验证三个阶段,包括兼容性测试、边角测试、随机测试、pattern测试、回归regression测试和断言测试等。由于芯片越来越复杂,软件仿真开销大,硬件仿真验证成为一种重要的验证手段。验证工作约占整个设计工作的70%,如何提高验证覆盖率和验证效率是SoC设计验证部分最重要的研究内容。
1.5 芯片综合/时序分析技术
由于SoC系统复杂度和规模越来越庞大,多时钟、多电压等新挑战不断出现,对SoC的综合性研究提出了更高的要求。尤其是对时序分析,关键路径的特殊约束分析,要求研究人员具有深厚的SoC系统设计背景知识。与此同时,静态时序分析(STA)、代码规则检查也日趋复杂,后端仿真效率低下等问题,对总体设计人员和SoC系统提出了更苛刻的要求。
二、SoC设计流程
2.1 功能设计阶段
设计目标产品的应用场合,设定一些诸如功能、性能、接口规格、温度、功耗等指标,作为后续电路设计的输入依据。根据市场和公司需求,完成芯片总体结构、规格参数、模块划分、使用技术以及各个功能模块的详细定义。总体设计规划完成后,再制定各个维度的设计方案,比如:芯片设计方案、软件功能方案、封装方案、工艺确定等。芯片设计方案按照自顶向下方式,逐级分解设计模块,形成各个模块的设计方案。
2.2 设计描述和行为级验证
依据芯片总体设计需求,可将SoC划分成若干功能模块,并决定这些功能模块是否需要使用IP核。该过程直接影响SoC的内部架构及各模块的顶层信号互连,并在后续设计过程中起到决定性作用,因此需要非常仔细谨慎地选择产品和IP核。
对于不需要使用IP核的模块,可使用VHDL/Verilog等硬件描述语言完成硬件电路各模块的设计工作。同时定义各个模块的功能点,按照功能点进行功能仿真验证和行为级验证。行为级仿真验证不考虑时序延时,因此无法覆盖时序相关问题,只能保证设计的功能正确性。时序延时的正确性需要通过其他手段实现,比如STA静态时序分析、CDC/RDC代码规则检查等。
2.3 逻辑综合
确定设计描述后,可使用逻辑综合工具对代码进行综合。综合过程需要选择适当的逻辑器件库和SDC时序约束文件,作为合成逻辑电路的综合参数。设计人员需要确定SDC约束文件的正确性,如果是IP核,IP核厂商会提供原版SDC约束文件,但并不适合芯片全局的SDC约束。因此,无论是使用的IP核,还是编写的verilog代码,均需要整理编写SDC约束文件。同时,SDC约束文件也是CDC/RDC代码规则检查的输入文件之一。
2.4 布局布线和后仿真
布局是指将设计好的功能模块合理地安排在芯片上,规划好它们的位置。布线是指完成各个模块之间的互连连线。各个模块之间的连线相对较长,因此,产生的延迟会严重影响SoC性能,另外后端在实际布局布线过程中,可能会发现时序不满足,关键路径过长等问题,这些问题均需要通过定位分析的方式反馈给前端或者综合工具,进行布局布线调整。
后仿真是仿真带有SDF延时参数的仿真,后仿真用于测试芯片的时序是否满足要求,功能性仿真在前仿时已经验证通过,因此后仿真更关注于仿真过程中的setup、hold time情况。对于后仿真出现的问题,需要定位问题点,判断是否需要后端修复、ECO修复或RTL重综合。
三、SoC设计流程举例
下图是《SoC设计方法与实现》文中提到的设计流程,包括数字电路设计前端和后端的全流程。具体各个部分又包括:
- 硬件设计定义说明(Hardware Design Specification):硬件设计定义说明描述芯片总体结构、规格参数、模块划分、使用的总线,以及各个模块的详细定义等。
- 模块设计及IP复用(Module Design & IP Reuse):对于需要重新设计的模块进行设计;对于可复用的IP核,通常由于总线接口标准不一致需要做一定的修改。
- 顶层模块集成(Top Level Integration):顶层模块集成是将各个不同的功能模块,包括新设计的与复用的整合在一起,形成一个完整的设计。通常采用硬件描述语言对电路进行描述,其中需要考虑系统时钟/复位、I/O环等问题。
- 前仿真(Pre-layout Simulation):前仿真也叫RTL级仿真。通过HDL仿真器验证电路逻辑功能是否有效。在前仿真时,通常与具体的电路物理实现无关,没有时序信息。
- 逻辑综合(Logic Synthesis):逻辑综合是指使用EDA工具把由硬件描述语言设计的电路自动转换成特定工艺下的网表,即从RTL级的HDL描述通过编译与优化产生符合约束条件的门级网表。
- 版图布局规划(Floorplan):版图布局规划完成的任务是确定设计中各个模块在版图上的位置,主要包括:I/O规划,确定I/O的位置,定义电源和接地口的位置;模块放置,定义各种物理的组、区域或模块,对这些大的宏单元进行放置;供电设计,设计整个版图的供电网络,基于电压降(IR Drop)和电迁移进行拓扑优化。
- 功耗分析(Power Analysis):在设计中的许多步骤都需要对芯片功耗进行分析,从而决定是否需要对设计进行改进。在版图布局规划后,需要对电源网络进行功耗分析(PNA,Power Network Analysis),确定电源引脚的位置和电源线宽度。在完成布局布线后,需要对整个版图的布局进行动态功耗分析和静态功耗分析。除了对版图进行功耗分析以外,还应通过仿真工具快速计算动态功耗,找出主要的功耗模块或单元。
- 单元布局和优化(Placement & Optimization):单元布局和优化主要定义每个标准单元的摆放位置并根据摆放的位置进行优化。
- 静态时序分析(STA,Static Timing Analysis):STA是一种静态验证方法,通过对提取电路中所有路径上的延迟等信息的分析,计算出信号在时序路径上的延迟,找出违背时序约束的错误,如检查建立时间(Setup Time)和保持时间(Hold Time)是否满足要求。
- 形式验证(Formal Verification):形式验证也是一种静态验证方法,在整个设计流程中会多次引入形式验证用于比较RTL代码之间、门级网表与RTL代码之间,以及门级网表之间在修改之前与修改之后功能的一致性。
- 可测性电路插入(DFT,Design for Test):可测性设计是SoC设计中的重要一步。通常,对于逻辑电路采用扫描链的可测试结构,对于芯片的输入/输出端口采用边界扫描的可测试结构。基本思想是通过插入扫描链,增加电路内部节点的可控性和可观测性,以达到提高测试效率的目的。一般在逻辑综合或物理综合后进行扫描电路的插入和优化。
- 时钟树综合(Clock Tree Synthesis):SoC设计方法强调同步电路的设计,即所有的寄存器或一组寄存器是由同一个时钟的同一个边沿驱动的。构造芯片内部全局或局部平衡的时钟链的过程称为时钟树综合。分布在芯片内部寄存器与时钟的驱动电路构成了一种树状结构,这种结构称为时钟树。时钟树综合是在布线设计之前进行的。
- 布线设计(Routing):这一阶段完成所有节点的连接。
- 寄生参数提取(Parasitic Extraction):通过提取版图上内部互连所产生的寄生电阻和电容值,进而得到版图实现后的真实时序信息。这些寄宿生电路信息将用于做静态时序分析和后仿真。
- 后仿真(Post-layout Simulation):后仿真也叫门级仿真、时序仿真、带反标的仿真,需要利用在布局布线后获得的精确延迟参数和网表进行仿真,验证网表的功能和时序是否正确。后仿真一般使用标准延时(SDF,Standard Delay Format)文件来输入延时信息。
- ECO修改(ECO,Engineering Change Order):ECO修改是工程修改命令的意思。这一步实际上是正常设计流程的一个例外。当在设计的最后阶段发现个别路径有时序问题或逻辑错误时,有必要通过ECO对设计的局部进行小范围的修改和重新布线,并不影响芯片其余部分的布局布线。在大规模的IC设计中,ECO修改是一种有效、省时的方法,通常会被采用。
- 物理验证(Physical Verification):物理验证是对版图的设计规则检查(DRC,Design Rule Check)及逻辑图网表和版图网表比较(LVS,Layout Vs. Schematic)。DRC用以保证制造良率。LVS用以确认电路版图网表结构是否与其原始电路原理图(网表)一致。
四、SoC设计总结
芯片设计过程环环相扣,越往后芯片bug越少且修复的难度越大,ECO产生的人力成本和代价越高昂,因此设计过程应在前期筛选重大芯片bug发生,早期阶段能解决的芯片问题应尽早考虑和解决,减少迭代次数避免项目延期风险。按照SoC设计流程合理规划设计阶段,同时将各个阶段的工作认真仔细完成,借助EDA工具和有效验证手段,才能保证SoC芯片设计的正确性。