《SoC设计方法与实现(第2版)》主要结合SoC设计的整体流程,对SoC设计方法学及如何实现进行了全面介绍。全书共分14章,主要内容包括:SoC的设计流程、SoC的架构设计、电子级系统设计、IP核的设计与选择、RTL代码编写指南、先进的验证方法、低功耗设计技术、可测性设计技术及后端设计的挑战。书中不仅融入了很多来自于工业界的实践经验,还介绍了SoC设计领域的最新成果,可以帮助读者掌握工业化的解决方案,使读者能够及时了解SoC设计方法的最新进展。
郭炜,研究员。1982年获大连海事大学电子工程学士学位。1991年获美国路易斯安那州立大学电子工程学硕士学位,1991-2003年,任职于Motorola公司芯片设计部,曾任首席主任工程师(PrincipalStaffEngineer),研发项目负责人成功地负责过多个大规模设计项目的研发,具有丰富的IC设计及项目管理经验。2004-2007年任上海交通大学研究员。2007年10月至今,任天津大学研究员。自加入高校工作以来,一直从事SoC设计相关课程的教学及科研项目的研发和产业化开拓.主要研究方向:计算机系统结构。SoC设计、微处理器设计等。
第1章 SoC设计绪论
1.1 微电子技术概述
1.1.1 集成电路的发展
1.1.2 集成电路产业分工
1.2 SoC概述
1.2.1 什么是SoC
1.2.2 SoC的优势
1.3 SoC设计的发展趋势及面临的挑战
1.3.1 SoC设计技术的发展与挑战
1.3.2 SoC设计方法的发展与挑战
1.3.3 未来的SoC
本章参考文献
第2章 SoC设计流程
2.1 软硬件协同设计
2.2 基于标准单元的SoC芯片设计流程
本章参考文献
第3章 SoC设计与EDA工具
3.1 电子系统级设计与工具
3.2 验证的分类及相关工具
3.2.1 验证方法的分类
3.2.2 动态验证及相关工具
3.2.3 静态验证及相关工具
3.3 逻辑综合及综合工具
3.3.1 EDA工具的综合流程
3.3.2 EDA工具的综合策略
3.3.3 优化策略
3.3.4 常用的逻辑综合工具
3.4 可测性设计与工具
3.4.1 测试和验证的区别
3.4.2 常用的可测性设计
3.5 布局布线与工具
3.5.1 EDA工具的布局布线流程
3.5.2 布局布线工具的发展趋势
3.6 物理验证及参数提取与相关的工具
3.6.1 物理验证的分类
3.6.2 参数提取
3.7 著名EDA公司与工具介绍
3.8 EDA工具的发展趋势
本章参考文献
第4章 SoC系统结构设计
4.1 SoC系统结构设计的总体目标与各个阶段
4.1.1 功能设计阶段
4.1.2 应用驱动的系统结构设计阶段
4.1.3 平台导向的系统结构设计阶段
4.2 SoC中常用的处理器
4.2.1 通用处理器
4.2.2 DSP
4.2.3 可配置处理器
4.2.4 不同处理器的选择
4.3 SoC中常用的总线
4.3.1 AMBA总线
4.3.2 CoreConnect总线
4.3.3 Wishbone总线
4.3.4 AVALON总线
4.3.5 开放核协议
4.3.6 复杂的片上总线结构
4.4 SoC中典型的存储器
4.5 多核SoC的系统结构设计
4.5.1 可用的并发性
4.5.2 多核SoC设计中的系统结构选择
4.5.3 多核SoC的性能评价
4.5.4 几种典型的多核SoC系统结构
4.6 SoC中的软件结构
4.7 电子系统级(ESL)设计
4.7.1 ESL发展的背景
4.7.2 ESL设计基本概念
4.7.3 ESL设计的流程
4.7.4 ESL设计的特点
4.7.5 ESL设计的核心——事务级建模
4.7.6 事务级建模语言简介及设计实例
4.7.7 ESL设计的挑战
本章参考文献
第5章 IP复用的设计方法
5.1 IP的基本概念和IP分类
5.2 IP设计流程
5.2.1 设计目标
5.2.2 设计流程
5.3 IP的验证
5.4 IP核的选择
5.5 IP市场
5.6 IP复用技术面临的挑战
5.7 IP标准组织
5.8 基于平台的SoC设计方法
5.8.1 平台的组成与分类
5.8.2 基于平台的SoC设计方法流程与特点
5.8.3 基于平台的设计实例
本章参考文献
第6章 RTL代码编写指南
6.1 编写RTL代码之前的准备
6.1.1 与团队共同讨论设计中的问题
6.1.2 根据芯片结构准备设计说明书
6.1.3 总线设计的考虑
6.1.4 模块的划分
6.1.5 对时钟的处理
6.1.6 IP的选择及设计复用的考虑
6.1.7 对可测性的考虑
6.1.8 对芯片速度的考虑
6.1.9 对布线的考虑
6.2 可综合RTL代码编写指南
6.2.1 可综合RTL代码的编写准则
6.2.2 利用综合进行代码质量检查
6.3 调用Synopsys DesignWare来优化设计
本章参考文献
第7章 同步电路设计及其与异步信号交互的问题
7.1 同步电路设计
7.1.1 同步电路的定义
7.1.2 同步电路的时序收敛问题
7.1.3 同步电路设计的优点与缺陷
7.2 全异步电路设计
7.2.1 异步电路设计的基本原理
7.2.2 异步电路设计的优点与缺点
7.3 异步信号与同步电路交互的问题及其解决方法
7.3.1 亚稳态
7.3.2 异步控制信号的同步及其RTL实现
7.3.3 异步时钟域的数据同步及其RTL实现
7.4 SoC设计中的时钟规划策略
本章参考文献
第8章 综合策略与静态时序分析方法
8.1 逻辑综合
8.1.1 什么是逻辑综合
8.1.2 流程介绍
8.1.3 SoC设计中常用的综合策略
8.2 物理综合的概念
8.2.1 物理综合的产生背景
8.2.2 操作模式
8.3 实例——用Synopsys的工具Design Compiler (DC)进行逻辑综合
8.3.1 指定库文件
8.3.2 读入设计
8.3.3 定义工作环境
8.3.4 设置约束条件
8.3.5 设定综合优化策略
8.3.6 设计脚本举例
8.4 静态时序分析
8.4.1 基本概念
8.4.2 实例——用Synopsys的工具PrimeTime进行时序分析
8.5 统计静态时序分析
8.5.1 传统的时序分析的局限
8.5.2 统计静态时序分析的概念
8.5.3 统计静态时序分析的步骤
本章参考文献
第9章 SoC功能验证
9.1 功能验证概述
9.1.1 功能验证的概念
9.1.2 SoC功能验证的问题
9.1.3 SoC功能验证的发展趋势
9.2 功能验证方法与验证规划
9.3 系统级功能验证
9.3.1 系统级的功能验证
9.3.2 软硬件协同验证
9.4 仿真验证自动化
9.4.1 激励的生成
9.4.2 响应的检查
9.4.3 覆盖率的检测
9.5 形式验证
9.5.1 形式验证的理论基础
9.5.2 相等性检查在SoC中的应用
9.5.3 半形式验证在SoC中的应用
9.6 基于断言的验证
9.6.1 断言语言
9.6.2 基于断言的验证
9.6.3 断言的其他用途
本章参考文献
第10章 可测性设计
10.1 集成电路测试概述
10.1.1 测试的概念和原理
10.1.2 测试及测试矢量的分类
10.1.3 自动测试设备
10.2 故障建模及ATPG原理
10.2.1 故障建模的基本概念
10.2.2 常见故障模型
10.2.3 ATPG基本原理
10.2.4 ATPG的工作原理
10.2.5 ATPG工具的使用步骤
10.3 可测性设计基础
10.3.1 可测性的概念
10.3.2 可测性设计的优势和不足
10.4 扫描测试(SCAN)
10.4.1 基于故障模型的可测性
10.4.2 扫描测试的基本概念
10.4.3 扫描测试原理
10.4.4 扫描设计规则
10.4.5 扫描测试的可测性设计流程及相关EDA工具
10.5 存储器的内建自测
10.5.1 存储器测试的必要性
10.5.2 存储器测试方法
10.5.3 BIST的基本概念
10.5.4 存储器的测试算法
10.5.5 BIST模块在设计中的集成
10.6 边界扫描测试
10.6.1 边界扫描测试原理
10.6.2 IEEE 1149.1标准
10.6.3 边界扫描测试策略和相关工具
10.7 其他DFT技术
10.7.1 微处理器核的可测性设计
10.7.2 Logic BIST
10.8 DFT技术在SoC中的应用
10.8.1 模块级的DFT技术
10.8.2 SoC中的DFT应用
本章参考文献
第11章 低功耗设计
11.1 为什么需要低功耗设计
11.2 功耗的类型
11.3 低功耗设计方法
11.4 低功耗技术
11.4.1 工艺优化
11.4.2 电压优化
11.4.3 门控时钟技术
11.4.4 门级优化技术
11.4.5 低功耗SoC系统的动态管理
11.4.6 低功耗SoC设计技术的综合考虑
11.5 低功耗分析和工具
11.6 低功耗设计趋势
本章参考文献
第12章 后端设计
12.1 时钟树综合
12.2 布局规划
12.3 布线
12.4 ECO技术
12.5 功耗分析
12.6 信号完整性的考虑
12.6.1 信号完整性的挑战
12.6.2 压降和电迁移
12.6.3 信号完整性问题的预防、分析和修正
12.7 物理验证
12.8 可制造性设计/面向良品率的设计
12.8.1 DFM/DFY的基本概念
12.8.2 DFM/DFY方法
12.8.3 典型的DFM/DFY问题及解决方法
12.8.4 DFM/DFY技术的发展趋势
12.9 后端设计技术的发展趋势
本章参考文献
第13章 SoC中数模混合信号IP的设计与集成
13.1 SoC中的数模混合信号IP
13.2 数模混合信号IP的设计流程
13.3 基于SoC复用的数模混合信号(AMS)IP包
13.4 数模混合信号(AMS)IP的设计及集成要点
13.4.1 接口信号
13.4.2 模拟与数字部分的整体布局
13.4.3 电平转换器的设计
13.4.4 电源的布局与规划
13.4.5 电源/地线上跳动噪声的消除
13.4.6 其他方面的考虑
13.5 数模混合IP在SoC设计中存在的问题和挑战
13.6 SoC混合集成的新趋势
本章参考文献
第14章 I/O环的设计和芯片封装
14.1 I/O单元介绍
14.2 高速I/O的噪声影响
14.3 静电保护
14.3.1 ESD的模型及相应的测试方法
14.3.2 ESD保护电路的设计
14.4 I/O环的设计
14.4.1 考虑对芯片的尺寸的影响
14.4.2 考虑对芯片封装的影响
14.4.3 考虑对噪声的影响
14.4.4 考虑对芯片ESD的影响
14.5 SoC芯片封装
14.5.1 微电子封装的功能
14.5.2 微电子封装的发展趋势
14.5.3 当前的封装技术
14.5.4 封装技术发展的驱动力
本章参考文献
第15章 课程设计
15.1 基于ESL设计方法的Motion-JPEG视频解码器设计
15.1.1 实验内容
15.1.2 实验准备工作
15.1.3 SoCLib ESL仿真平台及MJPEG解码流程的介绍
15.1.4 实验1 构建基于SoCLib的单核SoC
15.1.5 实验2 构建基于SoCLib的MPSoC
15.1.6 实验3 系统软件开发——嵌入式操作系统及设备驱动设计
15.1.7 实验4 面向MJPEG解码的MPSoC系统优化
15.2 实验——基于ARM7TDMI处理器的SoC设计
15.2.1 任务目标
15.2.2 设计参考
15.2.3 建议使用的EDA工具
15.2.4 基本SoC设计方案
15.2.5 实验要求
15.3 项目进度管理
15.3.1 项目任务与进度阶段
15.3.2 进度的管理
本章参考文献
附录A Pthread多线程编程接口
附录B SoCLib系统支持包
1.系统需求说明
系统设计首先从确定所需的功能开始,包含系统基本输入和输出及基本算法需求,以及系统要求的功能、性能、功耗、成本和开发时间等。在这一阶段,通常会将用户的需求转换为用于设计的技术文档,并初步确定系统的设计流程。
2.高级算法建模与仿真
在确定流程后,设计者将使用如C和c++等高级语言创建整个系统的高级算法模型和仿真模型。目前,一些EDA工具可以帮助我们完成这一步骤。有了高级算法模型,便可以得到软硬件协同仿真所需的可执行的说明文档。此类文档会随着设计进程的深入而不断地完善和细化。
3.软硬件划分过程
这一环节包括软硬件划分和任务分配,是一个需要反复评估和修改直至满足系统需求的过程。设计者通过软硬件划分来决定哪些功能应该由硬件完成,哪些功能应该由软件来实现。软硬件划分的合理性对系统的实现至关重要。通常,在复杂的系统中,软件和硬件都比较复杂。有些功能既可以用软件实现也可以用硬件实现,这取决于所要达到的性能指标与实现的复杂程度及成本控制等因素。对比而言,两者各有千秋。
采用硬件作为解决方案的好处有:由于增加了特定的硬件实现模块,(通常是硬件加速器),因而可使系统的性能提升,仅就速度而言可以提高10倍,甚至100倍;增加的硬件所提供的功能可以分担原先处理器的部分功能,这一点有助于降低处理器的复杂程度,使系统整体显得简单。
硬件解决方案也存在一些不利的地方:添加新的硬件必然会提高成本,主要花费在购买妒和支付版权费等方面;硬件的研发周期通常都比较长,中等规模的开发团队开发一套复杂程度一般的硬件系统至少需要3个月的时间;要改正硬件设计存在的错误,可能需要再次流片;相比于软件设计工具,硬件设计工具(EDA)要昂贵许多,这也使得设计成本增加。
采用软件实现作为解决方案的好处有:软件产品的开发更灵活,修改软件设计的错误成本低、周期短;受芯片销量的影响很小,即使所开发的软件不用在某一特定芯片上,也可以应用到其他硬件设备上,因而市场的风险比较低。软件解决方案也存在着难以克服的不足之处:软件实现从性能上来说不及硬件实现;采用软件实现对算法的要求更高,这又对处理器的速度、存储器的容量提出了更严格的条件,一般还需要实时操作系统的支持。
表2-1列出了软件和硬件实现各自的优缺点。
软硬件划分的过程通常是将应用一一在特定的系统结构上映射,建立系统的事务级模型,即搭建系统的虚拟平台,然后在这个虚拟平台上进行性能评估,多次优化系统结构。系统结构的选择需要在成本和性能之间折中。高抽象层次的系统建模技术及电子系统级设计的工具使得性能的评估可视化、具体化。
4.软硬件同步设计
由于软硬件的分工已明确,芯片的架构及同软件的接口也已定义,接下来便可以进行软硬件的同步设计了。其中硬件设计包括RTL设计和集成、综合、布局布线及最后的流片。软件设计则包括算法优化、应用开发,以及操作系统、接口驱动和应用软件的开发。
……