本教材的目的是通过Arm Cortex-A技术和相关IP块和接口的例子,让有抱负和实践的SoC设计师了解SoC设计和技术的基本原理和技术发展。详细讨论了整个SoC设计过程,从内存和互连到验证、制造和生产。本教材的特色亮点之一是专注解析低功耗SoC设计,另外还包括Zynq芯片SystemC模型在内的大量补充材料。这本教科书的目标是在该领域寻求更新知识的本科毕业生、硕士生或工程师。假设读者对RTL、汇编语言和操作系统已有一定的了解。
前??言
在过去的50年里,硅技术在不断地进步。在不断创新和小型化的推动下,越来越多的功能被集成到单一芯片上。如今,包含处理器、存储器、传感器、模拟电路在内的整个系统都可以集成到单个芯片上,即系统芯片或SoC(片上系统),在严苛的面积限制与功耗、能量预算下仍能提供更强劲的性能表现。本书的目的是让SoC设计师了解 SoC设计和技术的基本原理和最新发展。SoC中的处理器运行着大量的软件代码。这些代码中的大部分都可以在许多平台上移植,但是底层组件(如设备驱动程序)依赖于硬件并且可能占用大量 CPU 资源。使用自定义加速器硬件可以减少电力消耗。虽然这本书强调硬件设计元素,但也探讨了协同设计,即硬件与软件协同设计的过程。本书假设读者已经理解了处理器结构、计算机技术以及软硬件设计的基础知识。
本书适用人群
本书适用于已经具有使用诸如Verilog、VHDL之类的RTL进行硬件设计的经验,并且已了解汇编语言编程和操作系统的基本原理,也就是说,基本完成了计算机科学或电子工程学位前两年的课程学习的人。
本书讲授的许多内容适用于各类系统架构师,包括那些正在设计云级应用程序、定制加速器或物联网设备的人员,以及那些正在进行FPGA(Field-Programmable Gate Array,现场可编程门阵列)设计的人,第8章涉及的设计验证细节可能正是那些使用标准单元设计半定制硅的人所感兴趣的。
在线附加材料的Git知识库可在 />该知识库包含一个Zynq super FPGA设备的SystemC模型,采用阻塞TLM样式编码。使用与真正的硅相同的引导映像运行ARM A9 Linux内核就足够了。
本书主要内容
本书包含9章,每章都尽量涉及SoC设计的不同方面。
第1章回顾了基本的计算机架构,定义了后面章节中使用的术语。尽管硬件的TLM视图可能是新内容,但是读者对这些材料的大部分内容还是很熟悉的。SoC是知识产权(Intellectual Property,IP)块的组合。
第2章描述了构成典型SoC的许多标准IP块,包括处理器、存储器、输入/输出设备和中断。
第3章介绍了IP块之间的互连,包括处理器总线和片上网络(Networks-on-Chip,NoC)的演进。
第4章讲述了系统架构的基本原理,包括总线的规模、排队论和仲裁策略。本章还讨论了调试支持。
第5章介绍了ESL建模,其中整个系统芯片的仿真模型(也称为虚拟平台)被放在一起。ESL模型可以用于测试和开发软件,以及进行架构探索。在这个模型中,可以在较高的层次上检查所提议的系统实现的吞吐量、能耗和芯片面积。
第6章提出了进一步的架构探索,包括为特定应用程序设计自定义加速器。Bluespec和Chisel这两种语言被描述为 RTL 的替代品,用于设计入门,并且涵盖了高层次综合(High-Level Synthesis,HLS)的基本原则。
第7章是SoC形式化验证的入门内容,比较了形式化芯片与缺陷追踪和首次即正确方案的效用。本章介绍了一些有用的形式化验证技巧。
第8章介绍了用于制造物理硅的半定制制造流程,并涵盖了当今使用FinFET的深亚微米器件的先进验证和可变性缓解技术。
第9章介绍了当第一个SoC样本从晶圆加工厂返回时应该做些什么,包括启动一个操作系统和检查环境兼容性(考虑操作温度和非预期射频辐射)。
致??谢
非常感谢Andy Hopper教授,他是我的博士生导师,一直是我灵感和方向的源泉,也是我在该行业和计算机实验室的老板,是他把我带进了芯片设计领域。我也非常感谢已故的M. G. Scroggie,他是Foundations of Wireless的主要作者,我在整个童年时期都在反复阅读这本书,当然我也尝试过像他那样,把广度和深度结合起来,希望有人感受到本书的价值,就像我发现他的书有价值一样。我还要感谢那些在计算机实验室工作的人,是他们的帮助让本书顺利结束,包括David Chisnall、Robert Mullins、Omer Sella和Milos Puzovic。最后我还要感谢我的妻子Aldyth,感谢她在过去的一年里对我的种种包容,以前经常在其他书的致谢部分读到类似的话语,现在我深谙其义。
另外我还要感谢所有为这本书提供了大量资料的ARM公司的工作人员,有些人还提供了许多信息和建议。他们是Rahul Mathur、Anup Gangwar、Antony Harris、Edwin Dankert、Daryl Stewart、Jim Dodrill、Christophe Lopez、Aurelien Merour、Jean-Luc Pelloie。还要感谢Khaled Benkrid让这本书的出版成为可能;感谢Liz Warman让我的工作走上正轨,并协助我经历整个过程;感谢Shuojin Hang和 Francisca Tan为本书划定了范围,并审查了初稿。
作者简介
David J. Greaves博士是英国剑桥大学计算机科学专业的高级讲师和剑桥大学Corpus Christi学院的研究员。他出生在伦敦,家里有很多工程类教科书、电路图,还有电信设备。他的祖父在电视广播刚出现时就自己造了一台电视机,他的父亲曾在EMI和IBM工作,开发了调制解调器和计算机接口。随着IBM总部从英国迁至朴次茅斯,他们全家搬到了汉普郡的罗姆西地区。
普莱西罗克庄园也坐落在罗姆西,与IBM英国研究实验室一同位于赫斯利公园(Hursley Park)。在无线电通信和计算领域,这些研究中心过去是世界领先的研究中心,现在仍然是。年轻的Greaves是这两个站点的常客和实习生,到17岁时,他设计并制造了自己的第一台计算机,所用的芯片大部分是用喷灯从旧电路板上拆下来的;所用的软件,包括DOS和Pascal编译器,都是从头开始编写的。
在他的A-level学习中,Greaves为Commodore PET计算机设计了局域网,该设计发表在Wireless World杂志上,并进行了商业复制。
作为剑桥大学圣约翰学院的本科生,他在专业音频领域开发了MIDI(Music Instrument Digital Interface,乐器数字接口)和低噪声前置放大器,为各种小型电子公司提供咨询服务。他最后一年的学位项目是设计了一个完全数字化的键盘乐器,该项目在Wireless World连载,并被世界各地的许多爱好者复制。他的主要兴趣在于编译器的设计和实现,这是受到了圣约翰Martin Richards博士的鼓励,正是Richards博士开发了BCPL,它是C语言的前身。
Greaves在攻读博士学位期间设计了他的第一块硅芯片,研究领域是城域网。他设计了光纤收发器,通过横跨剑桥的新安装的光纤发送了第一批单模信号。1995年,Greaves与Acorn计算机公司(Acorn Computer)合作,并担任剑桥独立电视台(ITV)试验项目的首席网络架构师,该项目是在剑桥有限公司(Cambridge Cable Ltd)的路边柜中安装ATM交换机,并向大约50户家庭提供视频点播服务。20年后,剑桥最后一家电影租赁店关门了。
1995年,他还完成了CSYN的设计,这是第一个 Verilog 编译器,专门用于FPGA的硬件合成。这个编译器在剑桥科学园的一些公司中广泛分发,也用于本科教学,它被授权给一家跨国公司与自己的FPGA系列产品捆绑销售。
Greaves拜访了ARM公司,当时ARM刚从Acorn公司分离出来,只有六名工程师,他们在简陋的房子里办公。在大学里,Greaves用捐赠的ARM电路板开设了一门新的实践课程,学生在课上编写汇编语言和Verilog,学习基础的硬件和软件接口,这些课程至今仍在进行,课程内容也演变成了这本书。
Greaves曾在至少10家初创公司的董事会或技术咨询委员会任职,曾指导或考察过60多名博士生,他在通信和电子领域至少拥有五项国际专利。他的公司Tenison EDA在被收购之前,曾直接向所有主要芯片制造商提供工具,目前他的研究兴趣仍然停留在设计自动化和科学计算加速的编译工具领域。
大卫·J. 格雷夫斯
(David J. Greaves)
英国剑桥大学计算机科学专业高级讲师、Corpus Christi学院研究员,曾在至少10家初创公司的董事会或技术咨询委员会任职,指导或考察过60多名博士生。他在通信和电子领域至少拥有5项国际专利。1995年,他研究出了CSYN,这是第一个Verilog 编译器,专门用于现场可编程门阵列的硬件合成,这个编译器在剑桥科学园的本地公司中广泛采用。他目前的研究兴趣主要为设计自动化和科学加速的编译工具。
吴勇1999年毕业于西安电子科技大学技术物理系电子材料与元器件专业,2006年获得西安电子科技大学技术物理学院材料物理化学专业硕士学位,自1999年起,一直在西安电子科技大学微电子研究所、微电子学院从事教学、科研和管理工作。2017年,任职于西安电子科技大学芜湖研究院担任执行院长一职。2021年担任芜湖市人大代表。目前主要从事碳化硅功率器件制备及应用、汽车电子相关领域的研究,承担安徽省、芜湖市科研项目14项,发表发明专利100余项,在国内核心期刊发表论文20余篇。
目??录
译者序
前言
致谢
作者简介
第1章?SoC1
1.1?Soc概述1
1.1.1?历史回顾1
1.1.2?简单微处理器的网表级连接3
1.1.3?微型计算机的全网表与存储
器映射4
1.1.4?分离读写数据总线6
1.2?微控制器7
1.3?后续内容9
1.4?SoC的设计流程9
1.4.1?功能模型11
1.4.2?架构分区12
1.4.3?架构分区和协同设计13
1.4.4?IP块14
1.4.5?综合15
1.4.6?仿真15
1.4.7?后端设计流程16
1.4.8?手机实例18
1.4.9?SoC设计实例Helium
210项目18
1.5?SoC技术23
1.6?总结24
练习24
第2章?处理器、存储器和IP块25
2.1 处理器内核25
2.1.1 指令级架构26
2.1.2?矢量指令28
2.1.3?自定义指令28
2.1.4?经典五级流水线28
2.2?超标量处理器30
2.3?多核处理33
2.4?缓存设计 35
2.5?中断和中断控制器40
2.6?存储器技术42
2.6.1?逻辑布局和物理布局44
2.6.2?掩膜编程只读存储器45
2.6.3?静态随机访问存储器45
2.6.4?同步静态随机访问存储器47
2.6.5?双端口SRAM48
2.6.6?动态RAM49
2.6.7?EA-ROM54
2.6.8?浮栅型EA-ROM与闪存55
2.6.9?新兴的存储器技术56
2.6.10?处理器速度与存储器速度57
2.7?SoC I/O功能块58
2.7.1?UART58
2.7.2?使用GPIO的并行端口61
2.7.3?GPIO引脚62
2.7.4?计数器/定时器块64
2.7.5?DMA控制器65
2.7.6?网络和流媒体设备67
2.7.7?视频控制器和帧存储器68
2.7.8?门铃和邮箱块69
2.7.9?性能管理单元70
2.8?总结70
练习70
参考文献71
第3章?SoC互连72
3.1?互连要求72
3.1.1?协议适配器74
3.1.2?片上协议类别78
3.1.3?简单总线结构78
3.1.4?有序和无序互连83
3.1.5?AMBA AXI互连 84
3.1.6?基于目录一致性索引的互连86
3.1.7?深入的总线操作88
3.2?基本互连拓扑结构91
3.2.1?单发起者简易总线92
3.2.2?多发起者共享总线93
3.2.3?桥接总线结构93
3.3?基于数据包交换的简单互连96
3.3.1?SoC多重访问与片内互连97
3.3.2?用于多重访问的折叠总线98
3.4?NoC98
3.4.1?NoC的路由与交换101
3.4.2?VC102
3.4.3?NoC死锁103
3.4.4?基于信用的数据流控制106
3.4.5?AMBA 5 CHI108
3.5?高级互连拓扑结构110
3.6?互连构建块115
3.7?远距离互连118
3.7.1?跨域118
3.7.2?亚稳态理论119
3.7.3?CD跨域桥120
3.7.4?谐波时钟121
3.7.5?跨PD122
3.8?串行化和解串123
3.8.1?PCIe和SATA接口协议125
3.8.2?CCIX、CXL和NVLink接口
协议125
3.9?自动拓扑综合126
3.9.1?域分配126
3.9.2 确定FIFO 缓冲容量126
3.9.3?确定链路宽度127
3.10?总结127
练习128
参考文献129
第4章?系统设计131
4.1?设计目标131
4.2?并行加速理论133
4.3?FIFO 队列理论和QoS135
4.3.1?经典单任务模型和开放队列
模型136
4.3.2?加急服务队列 138
4.3.3?统计复用增益 140
4.3.4?QoS监管 141
4.4?设计权衡143
4.4.1?散热设计144
4.4.2?折叠、重构时序和重编码 145
4.5?存储器系统的设计权衡149
4.6?SoC能耗最小化155
4.6.1?电源、电阻和电容155
4.6.2?动态能量和动态功耗156
4.6.3?静态功耗158
4.6.4?布线和电容建模159
4.6.5?兰道尔极限与可逆计算161
4.6.6?门延迟时间与供电电压的函
数关系162
4.6.7?反相器的SPICE仿真163
4.6.8?动态电压和频率调整164
4.6.9?动态时钟门控166
4.6.10?动态电源门控168
4.6.11?能源使用的趋势170
4.7?可测性和调试集成设计171
4.7.1?应用程序调试171
4.7.2?多核调试集成173
4.7.3?调试导航和JTAG175
4.7.4?其他DAP设施176
4.7.5?边界和通用路径扫描176
4.7.6?用于SRAM存储器的BIST
(MBIST)177
4.8?可靠性和安全性178
4.9?基于硬件的安全性179
4.9.1?可信平台及核心计算机模块179
4.9.2?可信执行模式180
4.9.3?基于能力的保护181
4.9.4?时钟源181
4.9.5?锁相环和时钟树182
4.9.6?时钟偏斜和多周期路径183
4.10?总结185
练习185
参考文献186
第5章?电子系统级建模187
5.1?建模抽象187
5.2?互连建模191
5.2.1?随机互连建模192
5.2.2?周期精准互连建模192
5.3?SystemC建模库193
5.3.1?SystemC结构网表194
5.3.2?SystemC线程和方法195
5.3.3?SystemC绘图功能及其图形
界面197
5.3.4?提高建模效率198
5.4?TLM199
5.4.1?OSCI TLM 1.0标准 200
5.4.2?OSCI TLM 2.0标准202
5.4.3?TLM时序模型 (TLM+T) 204
5.4.4?TLM的松散时序建模205
5.4.5?松散时序TLM下的建模
冲突207
5.4.6?非阻塞式TLM编码208
5.4.7?具有松散时序和时间解耦下
的典型ISS设置209
5.4.8?用于桥接不同建模风格的
TLM事务处理器209
5.4.9?LocalLink协议的ESL模型210
5.5?不同抽象级别的处理器建模211
5.5.1?ISS的形式和其变体212
5.5.2?使用C预处理器适配固件213
5.5.3?ESL缓存建模和DMI
(直接存储器接口)215
5.6?功耗、性能和面积的ESL建模216
5.6.1?使用RTL估算操作频率和
功耗216
5.6.2?典型的宏观性能方程:
SRAM实例218
5.6.3?典型的宏观性能方程:
DRAM实例220
5.6.4?宏观相位和模式功耗估算
公式222
5.6.5?基于电子表格的能量核算223
5.6.6?估算布线长度的Rent法则224
5.6.7?TLM中的动态能量建模227
5.6.8?DVFS和电源门控的ESL
建模227
5.7?学习案例:使用Zynq平台(Prazor)
建模228
5.8?总结228
练习229
参考文献229
第6章?架构设计探索231
6.1?硬件和软件设计分区232
6.2?设计空间探索235
6.2.1?DSE工作流程238
6.2.2?基于C语言的功能模型239
6.2.3?功能模型重构为ESL241
6.2.4?子系统的微架构242
6.2.5?互连优化243
6.3?冒险245
6.3.1?数组存储冒险246
6.3.2?使用保持寄存器来克服结构
性冒险247
6.3.3?别名冒险248
6.3.4?FIFO缓冲区和双端口IP块248
6.4?自定义加速器251
6.4.1?加速器通信252
6.4.2?多个子任务255
6.4.3?自定义加速器实例1CRC
加速器255
6.4.4?自定义加速器实例2FPGA
云加速器256
6.5?超级FPGA258
6.6?渐近分析260
6.6.1?示例1层级缓存261
6.6.2?示例2big.LITTLE262
6.6.3?示例3NoC拓扑结构
权衡264
6.6.4?示例4静态功耗和动态
功耗的权衡267
6.7?虚拟平台实例269
6.7.1?Prazor/Zynq虚拟平台269
6.7.2?协同设计实例MPEG视
频压缩269
6.8?设计输入语言272
6.8.1?功能单元273
6.8.2?Accellera IP-XACT277
6.8.3?硬件构造语言281
6.8.4?Handel-C283
6.8.5?Bluespec System Verilog284
6.9?高层次综合287
6.9.1?HLS可综合子集和流程 288
6.9.2?迭代中利用并行操作共享变
量优化逻辑295
6.10?总结302
练习303
参考文献305
第7章?形式化方法和基于断言
的设计308
7.1?形式语言与工具309
7.1.1?验证覆盖311
7.1.2?属性完整性 312
7.1.3?形式化规范的完成条件313
7.2?断言313
7.2.1?谓词和属性的语法形式316
7.2.2?ABD316
7.2.3?回归测试317
7.3?使用断言的仿真317
7.3.1?仿真和动态验证318
7.3.2?自动激励生成定向与约
束随机验证318
7.3.3?仿真与形式化验证的比较320
7.4?属性规范语言321
7.4.1?PSL四级语法结构323
7.4.2?扩展正则表达式和SERES323
7.4.3?System Verilog断言325
7.5?形式化接口协议检查器325
7.6?等效性检查328
7.6.1?布尔等效性检查329
7.6.2?顺序等效性检查330
7.6.3?X态传播检查332
7.6.4?对数据路径中的元素进行模
型检查335
7.7?连接性检查337
7.8?安全检查策略337
7.9?总结338
练习339
参考文献339
第8章?SoC后端流程341
8.1?设计收敛的演变342
8.2?VLSI版图结构346
8.2.1?VLSI的发展348
8.2.2?未来工艺参数的预测352
8.3?RTL354
8.3.1?RTL结构阐述356
8.3.2?不可综合RTL361
8.3.3?RTL仿真算法364
8.3.4?EDS365
8.3.5?惯性延迟和传输延迟365
8.3.6?基于最小时间隙的计算/提交
建模方法366
8.3.7?数模混合仿真367
8.3.8?逻辑综合372
8.3.9?RTL中的阵列和RAM
实现375
8.3.10?存储宏单元编译器376
8.3.11?传统RTL编码与软件工具
生成代码的比较376
8.3.12?综合目标377
8.4?芯片类型和分类380
8.4.1?基于标准单元库的半定制
设计383
8.4.2?标准单元数据385
8.4.3?SPICE特性描述386
8.4.4?工艺、电压和温度变量386
8.4.5?电迁移387
8.4.6?基于波形的标准单元属性388
8.4.7?噪声特性分析390
8.5?门阵列391
8.5.1?传输晶体管多路复用器392
8.5.2?FPGA393
8.5.3?结构化ASIC396
8.5.4?FPGA SoC仿真工具397
8.6?布局和电源规划397
8.7?流程步骤399
8.7.1?布局400
8.7.2?时钟树插入402
8.7.3?布线402
8.7.4?时序和功耗验证403
8.7.5?布线后优化404
8.7.6?版图一致性检查404
8.7.7?最终确认和流片404
8.8?生产测试405
8.8.1?通用验证方法学和开放验证
方法学405
8.8.2?测试程序生成406
8.8.3?晶圆探针检测408
8.8.4?封装器件测试409
8.9?芯片封装和MCM410
8.10?工程变更指令 412
8.11?ASIC成本RE和NRE413
8.12?STA和时序最终确认415
8.12.1?STA类型最大时序分析
和最小时序分析415
8.12.2?最大时序分析416
8.12.3?最小时序分析417
8.12.4?工艺角418
8.12.5?提前到达和延迟到达419
8.12.6?时序模型库文件422
8.12.7?多模式多工艺角分析424
8.12.8?信号完整性426
8.12.9?耦合电容426
8.12.10?串扰分析426
8.12.11?转换时间约束426
8.12.12?片上差异427
8.12.13?线延迟差异429
8.12.14?电压波动429
8.12.15?先进STA技术429
8.12.16?时序收敛431
8.13?总结431
练习432
参考文献433
第9章?系统集成434
9.1?固件434
9.2?上电启动436
9.3?成败评价439
参考文献440
缩写词汇表441