XilinxZynq-嵌入式系统设计与实现:基于ArmCortex-A9双核处理器和Vivado的设计方法pdf下载pdf下载

XilinxZynq-嵌入式系统设计与实现:基于ArmCortex-A9双核处理器和Vivado的设计方法百度网盘pdf下载

作者:
简介:本篇主要提供XilinxZynq-嵌入式系统设计与实现:基于ArmCortex-A9双核处理器和Vivado的设计方法pdf下载
出版社:电子工业出版社
出版时间:2019-11
pdf下载价格:0.00¥

免费下载


书籍下载


内容介绍

产品特色


内容简介

本书是作者在已经出版的 《Xilinx Zynq-7000嵌入式系统设计与实现:基于ARM Cortex-A9双核处理器和Vivado的设计方法》 一书的基础上进行修订而成的。 本书新修订后内容增加到30章。修订后,本书的一大特色就是加入了Arm架构及分类、使用PetaLinux工具在Zynq-7000 SoC上搭建Ubuntu操作系统,以及在Ubuntu操作系统环境下搭建Python语言开发环境,并使用Python语言开发应用程序的内容。本书修订后。进一步降低了读者学习Arm Cortex-A9嵌入式系统的门槛,并引入了在Zynq-7000 SoC上搭建Ubuntu操作系统的新方法。此外,将流行的Python语言引入到Arm嵌入式系统中,进一步拓宽了在Arm嵌入式系统上开发应用程序的方法。

作者简介

著名的嵌入式技术和EDA技术专家,长期从事电子设计自动化方面的教学和科研工作,与全球多家知名的半导体厂商和EDA工具厂商大学计划保持紧密合作。目前已经出版嵌入式和EDA方面的著作近60部,内容涵盖电路仿真、电路设计、可编程逻辑器件、数字信号处理、单片机、嵌入式系统、片上可编程系统等。典型的代表作有《Xilinx FPGA设计**指南》、《Altium Designer13.0电路设计、仿真与验证**指南》、《Xilinx FPGA数字设计:从门级到行为级的双重描述》、《Xilinx FPGA数字信号处理**指南:从HDL、模型到C的描述》、《STC单片机原理及应用》、《Altium Designer15.0电路仿真、设计、验证与工艺实现**指南》、《STC单片机C语言程序设计》、《Cypress WICED物联网开发指南:从传感器、无线接入到云端的设计与实现》,以及《模拟电子系统设计指南(基础篇):从半导体、分立元件到ADI集成电路的分析与实现》。

目录

目 录
第 章 Zynq - 7000 SoC设计导论 1
1.1 全可编程片上系统基础知识 1
1.1.1 全可编程片上系统的演进 1
1.1.2 SoC与MCU和CPU的比较 3
1.1.3 全可编程SoC诞生的背景 4
1.1.4 可编程SoC系统技术特点 5
1.1.5 全可编程片上系统中的处理器类型 5
1.2 Arm架构及分类 6
1.2.1 M - Profile 7
1.2.2 R - Profile 9
1.2.3 A - Profile 10
1.3 Zynq - 7000 SoC功能和结构 11
1.3.1 Zynq - 7000 SoC产品分类及资源 12
1.3.2 Zynq - 7000 SoC的功能 12
1.3.3 Zynq - 7000 SoC处理系统PS的构成 14
1.3.4 Zynq - 7000 SoC可编程逻辑PL的构成 19
1.3.5 Zynq - 7000 SoC内的互联结构 20
1.3.6 Zynq - 7000 SoC的供电引脚 22
1.3.7 Zynq - 7000 SoC内MIO到EMIO的连接 23
1.3.8 Zynq - 7000 SoC内为PL分配的信号 28
1.4 Zynq - 7000 SoC在嵌入式系统中的优势 30
1.4.1 使用PL实现软件算法 30
1.4.2 降低功耗 32
1.4.3 实时减负 33
1.4.4 可重配置计算 34
第 章 AMBA规范 35
2.1 AMBA规范及发展 35
2.1.1 AMBA 1 36
2.1.2 AMBA 2 36
2.1.3 AMBA 3 36
2.1.4 AMBA 4 37
2.1.5 AMBA 5 38
2.2 AMBA APB规范 40
2.2.1 AMBA APB写传输 40
2.2.2 AMBA APB读传输 42
2.2.3 AMBA APB错误响应 43
2.2.4 操作状态 44
2.2.5 AMBA 3 APB信号 44
2.3 AMBA AHB规范 45
2.3.1 AMBA AHB结构 45
2.3.2 AMBA AHB操作 46
2.3.3 AMBA AHB传输类型 48
2.3.4 AMBA AHB猝发操作 50
2.3.5 AMBA AHB传输控制信号 53
2.3.6 AMBA AHB地址译码 54
2.3.7 AMBA AHB从设备传输响应 55
2.3.8 AMBA AHB数据总线 58
2.3.9 AMBA AHB传输仲裁 59
2.3.10 AMBA AHB分割传输 64
2.3.11 AMBA AHB复位 67
2.3.12 关于AHB数据总线的位宽 67
2.3.13 AMBA AHB接口设备 68
2.4 AMBA AXI4规范 69
2.4.1 AMBA AXI4概述 69
2.4.2 AMBA AXI4功能 70
2.4.3 AMBA AXI4互联结构 78
2.4.4 AXI4 - Lite功能 79
2.4.5 AXI4 - Stream功能 80
第 章 Zynq - 7000系统公共资源及特性 83
3.1 时钟子系统 83
3.1.1 时钟子系统架构 83
3.1.2 CPU时钟域 84
3.1.3 时钟编程实例 86
3.1.4 时钟子系统内的生成电路结构 87
3.2 复位子系统 91
3.2.1 复位子系统结构和层次 92
3.2.2 复位流程 93
3.2.3 复位的结果 94
第 章 Zynq调试和测试子系统 95
4.1 JTAG和DAP子系统 95
4.1.1 JTAG和DAP子系统功能 97
4.1.2 JTAG和DAP子系统I/O信号 99
4.1.3 编程模型 99
4.1.4 Arm DAP控制器 101
4.1.5 跟踪端口接口单元(TPIU) 102
4.1.6 Xilinx TAP控制器 102
4.2 CoreSight系统结构及功能 103
4.2.1 CoreSight结构概述 103
4.2.2 CoreSight系统功能 104
第 章 Cortex - A9处理器及指令集 107
5.1 应用处理单元概述 107
5.1.1 基本功能 107
5.1.2 系统级视图 108
5.2 Cortex - A9处理器结构 110
5.2.1 处理器模式 111
5.2.2 寄存器 113
5.2.3 流水线 118
5.2.4 分支预测 118
5.2.5 指令和数据对齐 119
5.2.6 跟踪和调试 121
5.3 Cortex - A9处理器指令集 122
5.3.1 指令集基础 122
5.3.2 数据处理操作 125
5.3.3 存储器指令 130
5.3.4 分支 131
5.3.5 饱和算术 133
5.3.6 杂项指令 134
第 章 Cortex - A9片上存储器系统结构和功能 138
6.1 L1高速缓存 138
6.1.1 高速缓存背景 138
6.1.2 高速缓存的优势和问题 139
6.1.3 存储器层次 140
6.1.4 高速缓存结构 140
6.1.5 缓存策略 145
6.1.6 写和取缓冲区 147
6.1.7 缓存性能和命中速度 147
6.1.8 无效和清除缓存 147
6.1.9 一致性点和统一性点 149
6.1.10 Zynq - 7000中Cortex - A9 L1高速缓存的特性 151
6.2 存储器顺序 153
6.2.1 普通、设备和强顺序存储器模型 154
6.2.2 存储器属性 155
6.2.3 存储器屏障 155
6.3 存储器管理单元 159
6.3.1 MMU功能描述 160
6.3.2 虚拟存储器 161
6.3.3 转换表 162
6.3.4 页表入口域的描述 165
6.3.5 TLB构成 167
6.3.6 存储器访问顺序 169
6.4 侦听控制单元 170
6.4.1 地址过滤 171
6.4.2 SCU主设备端口 171
6.5 L2高速缓存 171
6.5.1 互斥L2 - L1高速缓存配置 173
6.5.2 高速缓存替换策略 174
6.5.3 高速缓存锁定 174
6.5.4 使能/禁止L2高速缓存控制器 176
6.5.5 RAM访问延迟控制 176
6.5.6 保存缓冲区操作 176
6.5.7 在Cortex - A9和L2控制器之间的优化 177
6.5.8 预取操作 178
6.5.9 编程模型 179
6.6 片上存储器 180
6.6.1 片上存储器概述 180
6.6.2 片上存储器功能 181
6.7 系统地址分配 186
6.7.1 地址映射 186
6.7.2 系统总线主设备 188
6.7.3 I/O外设 188
6.7.4 SMC存储器 188
6.7.5 SLCR寄存器 188
6.7.6 杂项PS寄存器 189
6.7.7 CPU私有寄存器 189
第 章 Zynq - 7000 SoC的Vivado基本设计流程 190
7.1 创建新的工程 190
7.2 使用IP集成器创建处理器系统 192
7.3 生成顶层HDL并导出设计到SDK 197
7.4 创建应用测试程序 199
7.5 设计验证 202
7.5.1 验证前的硬件平台准备 202
7.5.2 设计验证的具体实现 203
7.6 SDK调试工具的使用 205
7.6.1 打开前面的设计工程 205
7.6.2 导入工程到SDK 205
7.6.3 建立新的存储器测试工程 205
7.6.4 运行存储器测试工程 206
7.6.5 调试存储器测试工程 207
7.7 SDK性能分析工具 209
第 章 Arm GPIO的原理和控制实现 213
8.1 GPIO模块原理 213
8.1.1 GPIO接口及功能 214
8.1.2 GPIO编程流程 217
8.1.3 I/O接口 218
8.1.4 部分寄存器说明 218
8.1.5 底层读/写函数说明 220
8.1.6 GPIO的API函数说明 220
8.2 Vivado环境下MIO读/写控制的实现 221
8.2.1 调用底层读/写函数编写GPIO应用程序 221
8.2.2 调用API函数编写控制GPIO应用程序 224
8.3 Vivado环境下EMIO读/写控制的实现 226
8.3.1 调用底层读/写函数编写GPIO应用程序 227
8.3.2 调用API函数编写控制GPIO应用程序 232
第 章 Cortex - A9异常与中断原理及实现 236
9.1 异常原理 236
9.1.1 异常类型 237
9.1.2 异常处理 241
9.1.3 其他异常句柄 242
9.1.4 Linux异常程序流 243
9.2 中断原理 244
9.2.1 外部中断请求 244
9.2.2 Zynq - 7000 SoC内的中断环境 247
9.2.3 中断控制器的功能 248
9.3 Vivado环境下中断系统的实现 252
9.3.1 Cortex - A9处理器中断及异常初始化流程 252
9.3.2 Cortex - A9 GPIO控制器初始化流程 252
9.3.3 导出硬件设计到SDK 253
9.3.4 创建新的应用工程 253
9.3.5 运行应用工程 256
第 章 Cortex - A9定时器原理及实现 257
10.1 定时器系统架构 257
10.1.1 CPU私有定时器和看门狗定时器 257
10.1.2 全局定时器/计数器 258
10.1.3 系统级看门狗定时器 259
10.1.4 3重定时器/计数器 261
10.1.5 I/O信号 264
10.2 Vivado环境下定时器的控制实现 264
10.2.1 打开前面的设计工程 265
10.2.2 创建SDK软件工程 265
10.2.3 运行软件应用工程 267
第 章 Cortex - A9 DMA控制器原理及实现 268
11.1 DMA控制器架构 268
11.2 DMA控制器功能 271
11.2.1 考虑AXI交易的因素 272
11.2.2 DMA管理器 273
11.2.3 多通道数据FIFO(MFIFO) 274
11.2.4 存储器―存储器交易 274
11.2.5 PL外设AXI交易 274
11.2.6 PL外设请求接口 275
11.2.7 PL外设长度管理 276
11.2.8 DMAC长度管理 277
11.2.9 事件和中断 278
11.2.10 异常终止 278
11.2.11 安全性 280
11.2.12 IP配置选项 282
11.3 DMA控制器编程指南 282
11.3.1 启动控制器 282
11.3.2 执行DMA传输 282
11.3.3 中断服务例程 282
11.3.4 寄存器描述 283
11.4 DMA引擎编程指南 284
11.4.1 写微代码编程用于AXI交易的CCRx 284
11.4.2 存储器到存储器传输 284
11.4.3 PL外设DMA传输长度管理 287
11.4.4 使用一个事件重新启动DMA通道 289
11.4.5 中断一个处理器 289
11.4.6 指令集参考 290
11.5 编程限制 291
11.6 系统功能之控制器复位配置 292
11.7 I/O接口 293
11.7.1 AXI主接口 293
11.7.2 外设请求接口 293
11.8 Vivado环境下DMA传输的实现 294
11.8.1 DMA控制器初始化流程 295
11.8.2 中断控制器初始化流程 295
11.8.3 中断服务句柄处理流程 296
11.8.4 导出硬件设计到SDK 296
11.8.5 创建新的应用工程 297
11.8.6 运行软件应用工程 303
第 章 Cortex - A9安全性扩展 305
12.1 TrustZone硬件架构 305
12.1.1 多核系统的安全性扩展 307
12.1.2 普通世界和安全世界的交互 307
12.2 Zynq - 7000 APU内的TrustZone 308
12.2.1 CPU安全过渡 309
12.2.2 CP15寄存器访问控制 310
12.2.3 MMU安全性 310
12.2.4 L1缓存安全性 311
12.2.5 安全异常控制 311
12.2.6 CPU调试TrustZone访问控制 311
12.2.7 SCU寄存器访问控制 312
12.2.8 L2缓存中的TrustZone支持 312
第 章 Cortex - A9 NEON原理及实现 313
13.1 SIMD 313
13.2 NEON架构 315
13.2.1 与VFP的共性 315
13.2.2 数据类型 316
13.2.3 NEON寄存器 316
13.2.4 NEON指令集 318
13.3 NEON C编译器和汇编器 319
13.3.1 向量化 319
13.3.2 检测NEON 319
13.4 NEON优化库 320
13.5 SDK工具提供的优化选项 321
13.6 使用NEON内联函数 324
13.6.1 NEON数据类型 325
13.6.2 NEON内联函数 325
13.7 优化NEON汇编器代码 327
13.8 提高存储器访问效率 328
13.9 自动向量化实现 329
13.9.1 导出硬件设计到SDK 329
13.9.2 创建新的应用工程 330
13.9.3 运行软件应用工程 331
13.10 NEON汇编代码实现 331
13.10.1 导出硬件设计到SDK 331
13.10.2 创建新的应用工程 332
13.10.3 运行软件应用工程 333
第 章 Cortex - A9外设模块结构及功能 334
14.1 DDR存储器控制器 334
14.1.1 DDR存储器控制器接口及功能 335
14.1.2 AXI存储器接口 337
14.1.3 DDR核和交易调度器 338
14.1.4 DDRC仲裁 338
14.1.5 DDR存储器控制器PHY 340
14.1.6 DDR初始化和标定 340
14.1.7 纠错码 341
14.2 静态存储器控制器 342
14.2.1 静态存储器控制器接口及功能 343
14.2.2 静态存储器控制器和存储器的信号连接 344
14.3 四 - SPI Flash控制器 345
14.3.1 四 - SPI Flash控制器功能 347
14.3.2 四 - SPI Flash控制器反馈时钟 349
14.3.3 四 - SPI Flash控制器接口 349
14.4 SD/SDIO外设控制器 351
14.4.1 SD/SDIO控制器功能 352
14.4.2 SD/SDIO控制器传输协议 353
14.4.3 SD/SDIO控制器端口信号连接 356
14.5 USB主机、设备和OTG控制器 356
14.5.1 USB控制器接口及功能 358
14.5.2 USB主机操作模式 361
14.5.3 USB设备操作模式 363
14.5.4 USB OTG操作模式 365
14.6 吉比特以太网控制器 365
14.6.1 吉比特以太网控制器接口及功能 367
14.6.2 吉比特以太网控制器接口编程向导 368
14.6.3 吉比特以太网控制器接口信号连接 372
14.7 SPI控制器 373
14.7.1 SPI控制器的接口及功能 374
14.7.2 SPI控制器时钟设置规则 376
14.8 CAN控制器 376
14.8.1 CAN控制器接口及功能 377
14.8.2 CAN控制器操作模式 379
14.8.3 CAN控制器消息保存 380
14.8.4 CAN控制器接收过滤器 381
14.8.5 CAN控制器编程模型 382
14.9 UART控制器 383
14.10 I2C控制器 387
14.10.1 I2C速度控制逻辑 388
14.10.2 I2C控制器的功能和工作模式 388
14.11 XADC转换器接口 390
14.11.1 XADC转换器接口及功能 391
14.11.2 XADC命令格式 392
14.11.3 供电传感器报警 392
14.12 PCI - E接口 393
第 章 Zynq - 7000内的可编程逻辑资源 395
15.1 可编程逻辑资源概述 395
15.2 可编程逻辑资源功能 396
15.2.1 CLB、Slice和LUT 396
15.2.2 时钟管理 396
15.2.3 块RAM 398
15.2.4 数字信号处理 - DSP Slice 398
15.2.5 输入/输出 399
15.2.6 低功耗串行收发器 400
15.2.7 PCI - E模块 401
15.2.8 XADC(模拟 - 数字转换器) 402
15.2.9 配置 402
第 章 Zynq - 7000内的互联结构 404
16.1 系统互联架构 404
16.1.1 互联模块及功能 404
16.1.2 数据路径 406
16.1.3 时钟域 407
16.1.4 连接性 408
16.1.5 AXI ID 409
16.1.6 寄存器概述 409
16.2 服务质量 410
16.2.1 基本仲裁 410
16.2.2 高级QoS 410
16.2.3 DDR端口仲裁 411
16.3 AXI_HP接口 411
16.3.1 AXI_HP接口结构及特点 411
16.3.2 接口数据宽度 415
16.3.3 交易类型 416
16.3.4 命令交替和重新排序 416
16.3.5 性能优化总结 416
16.4 AXI_ACP接口 417
16.5 AXI_GP接口 418
16.6 AXI信号总结 418
16.7 PL接口选择 422
16.7.1 使用通用主设备端口的Cortex - A9 423
16.7.2 通过通用主设备的PS DMA控制器(DMAC) 423
16.7.3 通过高性能接口的PL DMA 426
16.7.4 通过AXI ACP的PL DMA 426
16.7.5 通过通用AXI从(GP)的PL DMA 426
第 章 Zynq - 7000 SoC内定制简单AXI - Lite IP 429
17.1 设计原理 429
17.2 定制AXI - Lite IP 429
17.2.1 创建定制IP模板 429
17.2.2 修改定制IP设计模板 432
17.2.3 使用IP封装器封装外设 436
17.3 打开并添加IP到设计中 440
17.3.1 打开工程和修改设置 440
17.3.2 添加定制IP到设计 442
17.3.3 添加XDC约束文件 445
17.4 导出硬件到SDK 446
17.5 建立和验证软件应用工程 446
17.5.1 建立应用工程 447
17.5.2 下载硬件比特流文件到FPGA 449
17.5.3 运行应用工程 450
第 章 Zynq - 7000 SoC内定制复杂AXI Lite IP 451
18.1 设计原理 451
18.1.1 VGA IP核的设计原理 451
18.1.2 移位寄存器IP核的设计原理 453
18.2 定制VGA IP核 454
18.2.1 创建定制VGA IP模板 454
18.2.2 修改定制VGA IP模板 455
18.2.3 使用IP封装器封装VGA IP 459
18.3 定制移位寄存器IP核 460
18.3.1 创建定制SHIFTER IP模板 460
18.3.2 修改定制SHIFTER IP模板 462
18.3.3 使用IP封装器封装SHIFTER IP 463
18.4 打开并添加IP到设计中 464
18.4.1 打开工程和修改设置 464
18.4.2 添加定制IP到设计 466
18.4.3 添加XDC约束文件 470
18.5 导出硬件到SDK 471
18.6 建立和验证软件工程 472
18.6.1 建立应用工程 472
18.6.2 下载硬件比特流文件到FPGA 476
18.6.3 运行应用工程 477
第 章 Zynq - 7000 AXI HP数据传输原理及实现 478
19.1 设计原理 478
19.2 构建硬件系统 479
19.2.1 打开工程和修改设置 479
19.2.2 添加并连接AXI DMA IP核 480
19.2.3 添加并连接FIFO IP核 482
19.2.4 连接DMA中断到PS 485
19.2.5 验证和建立设计 487
19.3 建立和验证软件工程 487
19.3.1 导出硬件到SDK 488
19.3.2 创建软件应用工程 488
19.3.3 下载硬件比特流文件到FPGA 497
19.3.4 运行应用工程 497
第 章 Zynq - 7000 ACP数据传输原理及实现 499
20.1 设计原理 499
20.2 打开前面的设计工程 499
20.3 配置PS端口 499
20.4 添加并连接IP到设计 500
20.4.1 添加IP到设计 501
20.4.2 系统连接 501
20.4.3 分配地址空间 502
20.5 使用SDK设计和实现应用工程 504
20.5.1 创建新的软件应用工程 504
20.5.2 导入应用程序 504
20.5.3 下载硬件比特流文件到FPGA 507
20.5.4 运行应用工程 508
第 章 Zynq - 7000软件和硬件协同调试原理及实现 509
21.1 设计目标 509
21.2 ILA核原理 510
21.2.1 ILA触发器输入逻辑 510
21.2.2 多触发器端口的使用 510
21.2.3 使用触发器和存储限制条件 510
21.2.4 ILA触发器输出逻辑 512
21.2.5 ILA数据捕获逻辑 512
21.2.6 ILA控制与状态逻辑 513
21.3 VIO核原理 513
21.4 构建协同调试硬件系统 514
21.4.1 打开前面的设计工程 514
21.4.2 添加定制IP 514
21.4.3 添加ILA和VIO核 515
21.4.4 标记和分配调试网络 516
21.5 生成软件工程 518
21.6 S/H协同调试 520
第 章 Zynq - 7000 SoC启动和配置原理及实现 527
22.1 Zynq - 7000 SoC启动过程 527
22.2 Zynq - 7000 SoC启动要求 527
22.2.1 供电要求 528
22.2.2 时钟要求 528
22.2.3 复位要求 528
22.2.4 模式引脚 528
22.3 Zynq - 7000 SoC内的BootROM 530
22.3.1 BootROM特性 530
22.3.2 BootROM头部 531
22.3.3 启动设备 535
22.3.4 BootROM多启动和启动分区查找 538
22.3.5 调试状态 539
22.3.6 BootROM后状态 540
22.4 Zynq - 7000 SoC器件配置接口 543
22.4.1 描述功能 544
22.4.2 器件配置流程 545
22.4.3 配置PL 549
22.4.4 寄存器概述 550
22.5 生成SD卡镜像文件并启动 551
22.5.1 SD卡与XC7Z020接口设计 551
22.5.2 打开前面的设计工程 552
22.5.3 创建第一级启动引导 553
22.5.4 创建SD卡启动镜像 553
22.5.5 从SD卡启动引导系统 555
22.6 生成QSPI Flash镜像并启动 556
22.6.1 QSPI Flash接口 556
22.6.2 创建QSPI Flash镜像 557
22.6.3 从QSPI Flash启动引导系统 558
22.7 Cortex - A9双核系统的配置和运行 558
22.7.1 构建双核硬件系统工程 558
22.7.2 添加并互联IP核 559
22.7.3 导出硬件设计到SDK中 561
22.7.4 设置板级包支持路径 561
22.7.5 建立FSBL应用工程 562
22.7.6 建立CPU0应用工程 562
22.7.7 建立CPU1板级支持包 566
22.7.8 建立CPU1应用工程 566
22.7.9 创建SD卡镜像文件 570
22.7.10 双核系统运行和测试 571
22.7.11 双核系统的调试 571
第 章 Zynq - 7000 SoC内XADC原理及实现 574
23.1 ADC转换器接口结构 574
23.2 ADC转换器功能 575
23.2.1 XADC的命令格式 576
23.2.3 供电传感器报警 576
23.3 XADC IP核结构及信号 577
23.4 开发平台上的XADC接口 578
23.5 在Zynq - 7000 SoC内构建数模混合系统 579
23.5.1 打开前面的设计工程 579
23.5.2 配置PS端口 579
23.5.3 添加并连接XADC IP到设计 580
23.5.4 查看地址空间 582
23.5.5 添加用户约束文件 583
23.5.6 设计处理 583
23.6 使用SDK设计和实现应用工程 584
23.6.1 生成新的应用工程 584
23.6.2 导入应用程序 585
23.6.3 下载硬件比特流文件到FPGA 591
23.6.4 运行应用工程 591
第 章 Linux开发环境的构建 592
24.1 构建虚拟机环境 592
24.2 安装和启动Ubuntu 14.04客户机操作系统 595
24.2.1 新添加两个磁盘 595
24.2.2 设置CD/DVD(SATA) 596
24.2.3 安装Ubuntu 14.04 597
24.2.4 更改Ubuntu 14.04操作系统启动设备 600
24.2.5 启动Ubuntu 14.04操作系统 600
24.2.6 添加搜索链接资源 600
24.3 安装FTP工具 601
24.3.1 Windows操作系统下LeapFTP安装 601
24.3.2 Ubuntu操作系统环境下FTP安装 602
24.4 安装和启动SSH和GIT组件 603
24.4.1 安装和启动SSH组件 603
24.4.2 安装和启动GIT组件 604
24.5 安装交叉编译器环境 604
24.5.1 安装32位支持工具包 604
24.5.2 安装和设置SDK 2015.4工具 605
24.6 安装和配置Qt集成开发工具 606
24.6.1 Qt集成开发工具功能 606
24.6.2 构建PC平台Qt环境 607
24.6.3 构建Arm平台Qt环境 613
第 章 构建Zynq - 7000 SoC内Ubuntu硬件运行环境 622
25.1 建立新的设计工程 622
25.2 添加IP核路径 623
25.3 构建硬件系统 623
25.3.1 添加和配置ZYNQ7 IP 624
25.3.2 添加和配置VDMA IP核 625
25.3.3 添加和配置AXI Display Controller IP核 626
25.3.4 添加和配置HDMI Transmitter IP核 627
25.3.5 添加和配置VGA IP核 627
25.3.6 连接用户自定义IP核 627
25.3.7 添加和配置Processor System Reset IP核 630
25.3.8 连接系统剩余部分 630
25.4 添加设计约束文件 632
25.5 导出硬件文件 633
第 章 构建Zynq - 7000 SoC内Ubuntu软件运行环境 635
26.1 u - boot原理及实现 635
26.1.1 下载u - boot源码 635
26.1.2 u - boot文件结构 636
26.1.3 u - boot工作模式 637
26.1.4 u - boot启动过程 637
26.1.5 编译u - boot 650
26.1.6 链接脚本文件结构 652
26.2 内核结构及编译 654
26.2.1 内核结构 654
26.2.2 下载Linux内核源码 655
26.2.3 内核版本 655
26.2.4 内核系统配置 655
26.2.5 Bootloader 启动过程 658
26.2.6 Linux内核启动过程 660
26.2.7 编译内核 662
26.3 设备树原理及实现 662
26.3.1 设备树概述 662
26.3.2 设备树数据格式 663
26.3.3 设备树的编译 664
26.4 文件系统原理及下载 664
26.5 生成Ubuntu启动镜像 665
26.5.1 生成FSBL文件 666
26.5.2 生成BOOT.bin启动文件 666
26.5.3 制作SD卡 668
26.5.4 复制BOOT. bin文件 670
26.5.5 复制编译后的内核文件 670
26.5.6 复制编译后的设备树文件 671
26.5.7 复制文件系统 671
26.6 启动Ubuntu操作系统 672
第 章 Linux环境下简单字符设备驱动程序的开发 674
27.1 驱动程序的必要性 674
27.2 Linux操作系统下的设备文件类型 675
27.3 Linux驱动的开发流程 676
27.4 驱动程序的结构框架 676
27.4.1 加载和卸载函数模块 676
27.4.2 字符设备中重要的数据结构和函数 677
27.5 编写makefile文件 683
27.6 编译驱动程序 684
27.7 编写测试程序 685
27.8 运行测试程序 686
第 章 Linux环境下包含中断机制驱动程序的开发 688
28.1 设计原理 688
28.2 编写包含中断处理的驱动代码 688
28.2.1 驱动程序头文件 688
28.2.2 驱动的加载和卸载函数 689
28.2.3 file_operations初始化 691
28.3 编写makefile文件 691
28.4 编译驱动程序 692
28.5 测试驱动程序 693
第 章 Linux环境下图像处理系统的构建 694
29.1 系统整体架构和功能 694
29.2 OV5640摄像头性能 695
29.2.1 摄像头捕获模块的硬件 696
29.2.2 SCCB接口规范 696
29.2.3 写摄像头模组寄存器操作 697
29.2.4 读摄像头模组寄存器操作 698
29.2.5 摄像头初始化流程 700
29.3 Vivado HLS实现拉普拉斯算子滤波算法的设计 701
29.3.1 Vivado HLS工具的性能和优势 701
29.3.2 拉普拉斯算法与HDL之间的映射 703
29.4 图像处理系统的整体构建 706
29.5 图像处理系统软件的设计 708
29.5.1 Ubuntu桌面系统的构建 708
29.5.2 Qt图像处理程序的开发 708
29.6 嵌入式图像处理系统测试 710
第 章 Zynq-7000 SoC上构建和实现Python应用 712
30.1 设计所需的硬件环境 712
30.2 构建PetaLinux开发环境 712
30.2.1 PetaLinx开发环境概述 712
30.2.2 安装32位库 714
30.2.3 安装并测试tftp服务器 714
30.2.4 下载并安装PetaLinux 715
30.3 构建嵌入式系统硬件 717
30.3.1 下载并安装Vivado 2018.2集成开发环境 717
30.3.2 添加板级支持包文件 717
30.3.3 建立新的Vivado工程 717
30.3.4 构建硬件系统 718
30.4 构建嵌入式Python开发环境 721
30.5 构建PC端Python开发环境 723
30.6 服务器和客户端Python的开发 724
30.6.1 服务器端Python的开发 725
30.6.2 客户端Python的开发 726
30.7 设计验证 728
30.7.1 启动服务器程序 728
30.7.2 启动客户端程序 729

前言/序言

  前言
  本书是在作者已经出版的《Xilinx Zynq-7000嵌入式系统设计与实现:基于ARM Cortex-A9双核处理器和Vivado的设计方法》一书基础上修订而成。主要修订内容包括:
  (1)删除原书第一章Zynq-7000 SoC的Vivado设计流程一节的内容,增加了Arm架构与分类一节的内容,系统介绍了Arm架构与不同处理器IP之间的关系,使得读者能更加系统了解并掌握Arm架构与Cortex-M、Cortex-R和Cotex-A框架下不同处理器IP之间的对应关系。
  (2)本书增加了第30章,该章主要介绍了PetaLinx 2018.2工具,以及通过该工具在Xilinx SoC器件上构建Ubuntu操作系统环境的方法。需要指出,与本书前面使用传统的方法搭建Ubuntu操作系统环境相比,通过Xilinx公司自己的PetaLinx工具,使得在Xilinx Zynq-7000 SoC以及在UltraScale MPSoC上搭建Ubuntu操作系统环境更加便捷高效,显著降低了构建操作系统运行环境的难度,更加有利于初学者的入门学习。
  (3)作为本书的亮点之一,在使用PetaLinx工具构建嵌入式操作系统运行环境的基础上,构建了嵌入式Python语言开发环境,并在所构建的环境下使用Python语言开发了应用程序。为了比较Python语言在arm Cortex-A9嵌入式处理器上的运行性能,同时在PC/笔记本电脑上也构建了Python语言开发环境,并使用Python语言开发了应用程序。因此,实现了Zynq-7000 SoC作为服务器,以及PC/笔记本电脑作为客户端的网络交互和数据传输功能。
  (4)修改并更正了书中的一些错误。
  考虑到Vivdo集成开发环境的主要功能和开发界面没有明显的不同,因此,书中所有案例仍然保留原来的开发版本。但是,增加的一章内容使用了较新的PetaLinux 2018.2环境。
  总体来说,通过本书这一次的修订,使得介绍嵌入式系统设计的内容更加条理化,读者更加容易系统学习基于Arm Cortex-A9处理器的嵌入式系统硬件和软件设计方法,进一步降低了学习Arm嵌入式系统和Xilinx Zynq-7000 SoC的难度。
  由于作者水平有限,书中难免有不足之处,恳请读者批评指正,以帮助读者今后进一步提高图书的编写质量。同时,也要感谢电子工业出版社的张迪编辑为本书的出版所做出的辛勤工作,也要感谢作者曾经带过并且已经毕业的研究生张艳辉,协助作者修订了本书,使得作者可以将更加精彩的内容奉献给国内广大的读者。
  作者
  2019.09于北京