Xilinx Zynq-7000嵌入式系统设计与实现:基于Arm Cortex-A9双核处理器和

Xilinx Zynq-7000嵌入式系统设计与实现:基于Arm Cortex-A9双核处理器和
作 者: 何宾
出版社: 电子工业出版社
丛编项:
版权说明: 本书为公共版权或经版权方授权,请支持正版图书
标 签: 暂缺
ISBN 出版时间 包装 开本 页数 字数
未知 暂无 暂无 未知 0 暂无

作者简介

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

内容简介

本书是作者在已经出版的 《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嵌入式系统上开发应用程序的方法。

图书目录

目 录

第 章 Zynq - 7000 SoC设计导论\t1

1.1 全可编程片上系统基础知识\t1

1.1.1 全可编程片上系统的演进\t1

1.1.2 SoC与MCU和CPU的比较\t3

1.1.3 全可编程SoC诞生的背景\t4

1.1.4 可编程SoC系统技术特点\t5

1.1.5 全可编程片上系统中的处理器类型\t5

1.2 Arm架构及分类\t6

1.2.1 M - Profile\t7

1.2.2 R - Profile\t9

1.2.3 A - Profile\t10

1.3 Zynq - 7000 SoC功能和结构\t11

1.3.1 Zynq - 7000 SoC产品分类及资源\t12

1.3.2 Zynq - 7000 SoC的功能\t12

1.3.3 Zynq - 7000 SoC处理系统PS的构成\t14

1.3.4 Zynq - 7000 SoC可编程逻辑PL的构成\t19

1.3.5 Zynq - 7000 SoC内的互联结构\t20

1.3.6 Zynq - 7000 SoC的供电引脚\t22

1.3.7 Zynq - 7000 SoC内MIO到EMIO的连接\t23

1.3.8 Zynq - 7000 SoC内为PL分配的信号\t28

1.4 Zynq - 7000 SoC在嵌入式系统中的优势\t30

1.4.1 使用PL实现软件算法\t30

1.4.2 降低功耗\t32

1.4.3 实时减负\t33

1.4.4 可重配置计算\t34

第 章 AMBA规范\t35

2.1 AMBA规范及发展\t35

2.1.1 AMBA 1\t36

2.1.2 AMBA 2\t36

2.1.3 AMBA 3\t36

2.1.4 AMBA 4\t37

2.1.5 AMBA 5\t38

2.2 AMBA APB规范\t40

2.2.1 AMBA APB写传输\t40

2.2.2 AMBA APB读传输\t42

2.2.3 AMBA APB错误响应\t43

2.2.4 操作状态\t44

2.2.5 AMBA 3 APB信号\t44

2.3 AMBA AHB规范\t45

2.3.1 AMBA AHB结构\t45

2.3.2 AMBA AHB操作\t46

2.3.3 AMBA AHB传输类型\t48

2.3.4 AMBA AHB猝发操作\t50

2.3.5 AMBA AHB传输控制信号\t53

2.3.6 AMBA AHB地址译码\t54

2.3.7 AMBA AHB从设备传输响应\t55

2.3.8 AMBA AHB数据总线\t58

2.3.9 AMBA AHB传输仲裁\t59

2.3.10 AMBA AHB分割传输\t64

2.3.11 AMBA AHB复位\t67

2.3.12 关于AHB数据总线的位宽\t67

2.3.13 AMBA AHB接口设备\t68

2.4 AMBA AXI4规范\t69

2.4.1 AMBA AXI4概述\t69

2.4.2 AMBA AXI4功能\t70

2.4.3 AMBA AXI4互联结构\t78

2.4.4 AXI4 - Lite功能\t79

2.4.5 AXI4 - Stream功能\t80

第 章 Zynq - 7000系统公共资源及特性\t83

3.1 时钟子系统\t83

3.1.1 时钟子系统架构\t83

3.1.2 CPU时钟域\t84

3.1.3 时钟编程实例\t86

3.1.4 时钟子系统内的生成电路结构\t87

3.2 复位子系统\t91

3.2.1 复位子系统结构和层次\t92

3.2.2 复位流程\t93

3.2.3 复位的结果\t94

第 章 Zynq调试和测试子系统\t95

4.1 JTAG和DAP子系统\t95

4.1.1 JTAG和DAP子系统功能\t97

4.1.2 JTAG和DAP子系统I/O信号\t99

4.1.3 编程模型\t99

4.1.4 Arm DAP控制器\t101

4.1.5 跟踪端口接口单元(TPIU)\t102

4.1.6 Xilinx TAP控制器\t102

4.2 CoreSight系统结构及功能\t103

4.2.1 CoreSight结构概述\t103

4.2.2 CoreSight系统功能\t104

第 章 Cortex - A9处理器及指令集\t107

5.1 应用处理单元概述\t107

5.1.1 基本功能\t107

5.1.2 系统级视图\t108

5.2 Cortex - A9处理器结构\t110

5.2.1 处理器模式\t111

5.2.2 寄存器\t113

5.2.3 流水线\t118

5.2.4 分支预测\t118

5.2.5 指令和数据对齐\t119

5.2.6 跟踪和调试\t121

5.3 Cortex - A9处理器指令集\t122

5.3.1 指令集基础\t122

5.3.2 数据处理操作\t125

5.3.3 存储器指令\t130

5.3.4 分支\t131

5.3.5 饱和算术\t133

5.3.6 杂项指令\t134

第 章 Cortex - A9片上存储器系统结构和功能\t138

6.1 L1高速缓存\t138

6.1.1 高速缓存背景\t138

6.1.2 高速缓存的优势和问题\t139

6.1.3 存储器层次\t140

6.1.4 高速缓存结构\t140

6.1.5 缓存策略\t145

6.1.6 写和取缓冲区\t147

6.1.7 缓存性能和命中速度\t147

6.1.8 无效和清除缓存\t147

6.1.9 一致性点和统一性点\t149

6.1.10 Zynq - 7000中Cortex - A9 L1高速缓存的特性\t151

6.2 存储器顺序\t153

6.2.1 普通、设备和强顺序存储器模型\t154

6.2.2 存储器属性\t155

6.2.3 存储器屏障\t155

6.3 存储器管理单元\t159

6.3.1 MMU功能描述\t160

6.3.2 虚拟存储器\t161

6.3.3 转换表\t162

6.3.4 页表入口域的描述\t165

6.3.5 TLB构成\t167

6.3.6 存储器访问顺序\t169

6.4 侦听控制单元\t170

6.4.1 地址过滤\t171

6.4.2 SCU主设备端口\t171

6.5 L2高速缓存\t171

6.5.1 互斥L2 - L1高速缓存配置\t173

6.5.2 高速缓存替换策略\t174

6.5.3 高速缓存锁定\t174

6.5.4 使能/禁止L2高速缓存控制器\t176

6.5.5 RAM访问延迟控制\t176

6.5.6 保存缓冲区操作\t176

6.5.7 在Cortex - A9和L2控制器之间的优化\t177

6.5.8 预取操作\t178

6.5.9 编程模型\t179

6.6 片上存储器\t180

6.6.1 片上存储器概述\t180

6.6.2 片上存储器功能\t181

6.7 系统地址分配\t186

6.7.1 地址映射\t186

6.7.2 系统总线主设备\t188

6.7.3 I/O外设\t188

6.7.4 SMC存储器\t188

6.7.5 SLCR寄存器\t188

6.7.6 杂项PS寄存器\t189

6.7.7 CPU私有寄存器\t189

第 章 Zynq - 7000 SoC的Vivado基本设计流程\t190

7.1 创建新的工程\t190

7.2 使用IP集成器创建处理器系统\t192

7.3 生成顶层HDL并导出设计到SDK\t197

7.4 创建应用测试程序\t199

7.5 设计验证\t202

7.5.1 验证前的硬件平台准备\t202

7.5.2 设计验证的具体实现\t203

7.6 SDK调试工具的使用\t205

7.6.1 打开前面的设计工程\t205

7.6.2 导入工程到SDK\t205

7.6.3 建立新的存储器测试工程\t205

7.6.4 运行存储器测试工程\t206

7.6.5 调试存储器测试工程\t207

7.7 SDK性能分析工具\t209

第 章 Arm GPIO的原理和控制实现\t213

8.1 GPIO模块原理\t213

8.1.1 GPIO接口及功能\t214

8.1.2 GPIO编程流程\t217

8.1.3 I/O接口\t218

8.1.4 部分寄存器说明\t218

8.1.5 底层读/写函数说明\t220

8.1.6 GPIO的API函数说明\t220

8.2 Vivado环境下MIO读/写控制的实现\t221

8.2.1 调用底层读/写函数编写GPIO应用程序\t221

8.2.2 调用API函数编写控制GPIO应用程序\t224

8.3 Vivado环境下EMIO读/写控制的实现\t226

8.3.1 调用底层读/写函数编写GPIO应用程序\t227

8.3.2 调用API函数编写控制GPIO应用程序\t232

第 章 Cortex - A9异常与中断原理及实现\t236

9.1 异常原理\t236

9.1.1 异常类型\t237

9.1.2 异常处理\t241

9.1.3 其他异常句柄\t242

9.1.4 Linux异常程序流\t243

9.2 中断原理\t244

9.2.1 外部中断请求\t244

9.2.2 Zynq - 7000 SoC内的中断环境\t247

9.2.3 中断控制器的功能\t248

9.3 Vivado环境下中断系统的实现\t252

9.3.1 Cortex - A9处理器中断及异常初始化流程\t252

9.3.2 Cortex - A9 GPIO控制器初始化流程\t252

9.3.3 导出硬件设计到SDK\t253

9.3.4 创建新的应用工程\t253

9.3.5 运行应用工程\t256

第 章 Cortex - A9定时器原理及实现\t257

10.1 定时器系统架构\t257

10.1.1 CPU私有定时器和看门狗定时器\t257

10.1.2 全局定时器/计数器\t258

10.1.3 系统级看门狗定时器\t259

10.1.4 3重定时器/计数器\t261

10.1.5 I/O信号\t264

10.2 Vivado环境下定时器的控制实现\t264

10.2.1 打开前面的设计工程\t265

10.2.2 创建SDK软件工程\t265

10.2.3 运行软件应用工程\t267

第 章 Cortex - A9 DMA控制器原理及实现\t268

11.1 DMA控制器架构\t268

11.2 DMA控制器功能\t271

11.2.1 考虑AXI交易的因素\t272

11.2.2 DMA管理器\t273

11.2.3 多通道数据FIFO(MFIFO)\t274

11.2.4 存储器―存储器交易\t274

11.2.5 PL外设AXI交易\t274

11.2.6 PL外设请求接口\t275

11.2.7 PL外设长度管理\t276

11.2.8 DMAC长度管理\t277

11.2.9 事件和中断\t278

11.2.10 异常终止\t278

11.2.11 安全性\t280

11.2.12 IP配置选项\t282

11.3 DMA控制器编程指南\t282

11.3.1 启动控制器\t282

11.3.2 执行DMA传输\t282

11.3.3 中断服务例程\t282

11.3.4 寄存器描述\t283

11.4 DMA引擎编程指南\t284

11.4.1 写微代码编程用于AXI交易的CCRx\t284

11.4.2 存储器到存储器传输\t284

11.4.3 PL外设DMA传输长度管理\t287

11.4.4 使用一个事件重新启动DMA通道\t289

11.4.5 中断一个处理器\t289

11.4.6 指令集参考\t290

11.5 编程限制\t291

11.6 系统功能之控制器复位配置\t292

11.7 I/O接口\t293

11.7.1 AXI主接口\t293

11.7.2 外设请求接口\t293

11.8 Vivado环境下DMA传输的实现\t294

11.8.1 DMA控制器初始化流程\t295

11.8.2 中断控制器初始化流程\t295

11.8.3 中断服务句柄处理流程\t296

11.8.4 导出硬件设计到SDK\t296

11.8.5 创建新的应用工程\t297

11.8.6 运行软件应用工程\t303

第 章 Cortex - A9安全性扩展\t305

12.1 TrustZone硬件架构\t305

12.1.1 多核系统的安全性扩展\t307

12.1.2 普通世界和安全世界的交互\t307

12.2 Zynq - 7000 APU内的TrustZone\t308

12.2.1 CPU安全过渡\t309

12.2.2 CP15寄存器访问控制\t310

12.2.3 MMU安全性\t310

12.2.4 L1缓存安全性\t311

12.2.5 安全异常控制\t311

12.2.6 CPU调试TrustZone访问控制\t311

12.2.7 SCU寄存器访问控制\t312

12.2.8 L2缓存中的TrustZone支持\t312

第 章 Cortex - A9 NEON原理及实现\t313

13.1 SIMD\t313

13.2 NEON架构\t315

13.2.1 与VFP的共性\t315

13.2.2 数据类型\t316

13.2.3 NEON寄存器\t316

13.2.4 NEON指令集\t318

13.3 NEON C编译器和汇编器\t319

13.3.1 向量化\t319

13.3.2 检测NEON\t319

13.4 NEON优化库\t320

13.5 SDK工具提供的优化选项\t321

13.6 使用NEON内联函数\t324

13.6.1 NEON数据类型\t325

13.6.2 NEON内联函数\t325

13.7 优化NEON汇编器代码\t327

13.8 提高存储器访问效率\t328

13.9 自动向量化实现\t329

13.9.1 导出硬件设计到SDK\t329

13.9.2 创建新的应用工程\t330

13.9.3 运行软件应用工程\t331

13.10 NEON汇编代码实现\t331

13.10.1 导出硬件设计到SDK\t331

13.10.2 创建新的应用工程\t332

13.10.3 运行软件应用工程\t333

第 章 Cortex - A9外设模块结构及功能\t334

14.1 DDR存储器控制器\t334

14.1.1 DDR存储器控制器接口及功能\t335

14.1.2 AXI存储器接口\t337

14.1.3 DDR核和交易调度器\t338

14.1.4 DDRC仲裁\t338

14.1.5 DDR存储器控制器PHY\t340

14.1.6 DDR初始化和标定\t340

14.1.7 纠错码\t341

14.2 静态存储器控制器\t342

14.2.1 静态存储器控制器接口及功能\t343

14.2.2 静态存储器控制器和存储器的信号连接\t344

14.3 四 - SPI Flash控制器\t345

14.3.1 四 - SPI Flash控制器功能\t347

14.3.2 四 - SPI Flash控制器反馈时钟\t349

14.3.3 四 - SPI Flash控制器接口\t349

14.4 SD/SDIO外设控制器\t351

14.4.1 SD/SDIO控制器功能\t352

14.4.2 SD/SDIO控制器传输协议\t353

14.4.3 SD/SDIO控制器端口信号连接\t356

14.5 USB主机、设备和OTG控制器\t356

14.5.1 USB控制器接口及功能\t358

14.5.2 USB主机操作模式\t361

14.5.3 USB设备操作模式\t363

14.5.4 USB OTG操作模式\t365

14.6 吉比特以太网控制器\t365

14.6.1 吉比特以太网控制器接口及功能\t367

14.6.2 吉比特以太网控制器接口编程向导\t368

14.6.3 吉比特以太网控制器接口信号连接\t372

14.7 SPI控制器\t373

14.7.1 SPI控制器的接口及功能\t374

14.7.2 SPI控制器时钟设置规则\t376

14.8 CAN控制器\t376

14.8.1 CAN控制器接口及功能\t377

14.8.2 CAN控制器操作模式\t379

14.8.3 CAN控制器消息保存\t380

14.8.4 CAN控制器接收过滤器\t381

14.8.5 CAN控制器编程模型\t382

14.9 UART控制器\t383

14.10 I2C控制器\t387

14.10.1 I2C速度控制逻辑\t388

14.10.2 I2C控制器的功能和工作模式\t388

14.11 XADC转换器接口\t390

14.11.1 XADC转换器接口及功能\t391

14.11.2 XADC命令格式\t392

14.11.3 供电传感器报警\t392

14.12 PCI - E接口\t393

第 章 Zynq - 7000内的可编程逻辑资源\t395

15.1 可编程逻辑资源概述\t395

15.2 可编程逻辑资源功能\t396

15.2.1 CLB、Slice和LUT\t396

15.2.2 时钟管理\t396

15.2.3 块RAM\t398

15.2.4 数字信号处理 - DSP Slice\t398

15.2.5 输入/输出\t399

15.2.6 低功耗串行收发器\t400

15.2.7 PCI - E模块\t401

15.2.8 XADC(模拟 - 数字转换器)\t402

15.2.9 配置\t402

第 章 Zynq - 7000内的互联结构\t404

16.1 系统互联架构\t404

16.1.1 互联模块及功能\t404

16.1.2 数据路径\t406

16.1.3 时钟域\t407

16.1.4 连接性\t408

16.1.5 AXI ID\t409

16.1.6 寄存器概述\t409

16.2 服务质量\t410

16.2.1 基本仲裁\t410

16.2.2 高级QoS\t410

16.2.3 DDR端口仲裁\t411

16.3 AXI_HP接口\t411

16.3.1 AXI_HP接口结构及特点\t411

16.3.2 接口数据宽度\t415

16.3.3 交易类型\t416

16.3.4 命令交替和重新排序\t416

16.3.5 性能优化总结\t416

16.4 AXI_ACP接口\t417

16.5 AXI_GP接口\t418

16.6 AXI信号总结\t418

16.7 PL接口选择\t422

16.7.1 使用通用主设备端口的Cortex - A9\t423

16.7.2 通过通用主设备的PS DMA控制器(DMAC)\t423

16.7.3 通过高性能接口的PL DMA\t426

16.7.4 通过AXI ACP的PL DMA\t426

16.7.5 通过通用AXI从(GP)的PL DMA\t426

第 章 Zynq - 7000 SoC内定制简单AXI - Lite IP\t429

17.1 设计原理\t429

17.2 定制AXI - Lite IP\t429

17.2.1 创建定制IP模板\t429

17.2.2 修改定制IP设计模板\t432

17.2.3 使用IP封装器封装外设\t436

17.3 打开并添加IP到设计中\t440

17.3.1 打开工程和修改设置\t440

17.3.2 添加定制IP到设计\t442

17.3.3 添加XDC约束文件\t445

17.4 导出硬件到SDK\t446

17.5 建立和验证软件应用工程\t446

17.5.1 建立应用工程\t447

17.5.2 下载硬件比特流文件到FPGA\t449

17.5.3 运行应用工程\t450

第 章 Zynq - 7000 SoC内定制复杂AXI Lite IP\t451

18.1 设计原理\t451

18.1.1 VGA IP核的设计原理\t451

18.1.2 移位寄存器IP核的设计原理\t453

18.2 定制VGA IP核\t454

18.2.1 创建定制VGA IP模板\t454

18.2.2 修改定制VGA IP模板\t455

18.2.3 使用IP封装器封装VGA IP\t459

18.3 定制移位寄存器IP核\t460

18.3.1 创建定制SHIFTER IP模板\t460

18.3.2 修改定制SHIFTER IP模板\t462

18.3.3 使用IP封装器封装SHIFTER IP\t463

18.4 打开并添加IP到设计中\t464

18.4.1 打开工程和修改设置\t464

18.4.2 添加定制IP到设计\t466

18.4.3 添加XDC约束文件\t470

18.5 导出硬件到SDK\t471

18.6 建立和验证软件工程\t472

18.6.1 建立应用工程\t472

18.6.2 下载硬件比特流文件到FPGA\t476

18.6.3 运行应用工程\t477

第 章 Zynq - 7000 AXI HP数据传输原理及实现\t478

19.1 设计原理\t478

19.2 构建硬件系统\t479

19.2.1 打开工程和修改设置\t479

19.2.2 添加并连接AXI DMA IP核\t480

19.2.3 添加并连接FIFO IP核\t482

19.2.4 连接DMA中断到PS\t485

19.2.5 验证和建立设计\t487

19.3 建立和验证软件工程\t487

19.3.1 导出硬件到SDK\t488

19.3.2 创建软件应用工程\t488

19.3.3 下载硬件比特流文件到FPGA\t497

19.3.4 运行应用工程\t497

第 章 Zynq - 7000 ACP数据传输原理及实现\t499

20.1 设计原理\t499

20.2 打开前面的设计工程\t499

20.3 配置PS端口\t499

20.4 添加并连接IP到设计\t500

20.4.1 添加IP到设计\t501

20.4.2 系统连接\t501

20.4.3 分配地址空间\t502

20.5 使用SDK设计和实现应用工程\t504

20.5.1 创建新的软件应用工程\t504

20.5.2 导入应用程序\t504

20.5.3 下载硬件比特流文件到FPGA\t507

20.5.4 运行应用工程\t508

第 章 Zynq - 7000软件和硬件协同调试原理及实现\t509

21.1 设计目标\t509

21.2 ILA核原理\t510

21.2.1 ILA触发器输入逻辑\t510

21.2.2 多触发器端口的使用\t510

21.2.3 使用触发器和存储限制条件\t510

21.2.4 ILA触发器输出逻辑\t512

21.2.5 ILA数据捕获逻辑\t512

21.2.6 ILA控制与状态逻辑\t513

21.3 VIO核原理\t513

21.4 构建协同调试硬件系统\t514

21.4.1 打开前面的设计工程\t514

21.4.2 添加定制IP\t514

21.4.3 添加ILA和VIO核\t515

21.4.4 标记和分配调试网络\t516

21.5 生成软件工程\t518

21.6 S/H协同调试\t520

第 章 Zynq - 7000 SoC启动和配置原理及实现\t527

22.1 Zynq - 7000 SoC启动过程\t527

22.2 Zynq - 7000 SoC启动要求\t527

22.2.1 供电要求\t528

22.2.2 时钟要求\t528

22.2.3 复位要求\t528

22.2.4 模式引脚\t528

22.3 Zynq - 7000 SoC内的BootROM\t530

22.3.1 BootROM特性\t530

22.3.2 BootROM头部\t531

22.3.3 启动设备\t535

22.3.4 BootROM多启动和启动分区查找\t538

22.3.5 调试状态\t539

22.3.6 BootROM后状态\t540

22.4 Zynq - 7000 SoC器件配置接口\t543

22.4.1 描述功能\t544

22.4.2 器件配置流程\t545

22.4.3 配置PL\t549

22.4.4 寄存器概述\t550

22.5 生成SD卡镜像文件并启动\t551

22.5.1 SD卡与XC7Z020接口设计\t551

22.5.2 打开前面的设计工程\t552

22.5.3 创建第一级启动引导\t553

22.5.4 创建SD卡启动镜像\t553

22.5.5 从SD卡启动引导系统\t555

22.6 生成QSPI Flash镜像并启动\t556

22.6.1 QSPI Flash接口\t556

22.6.2 创建QSPI Flash镜像\t557

22.6.3 从QSPI Flash启动引导系统\t558

22.7 Cortex - A9双核系统的配置和运行\t558

22.7.1 构建双核硬件系统工程\t558

22.7.2 添加并互联IP核\t559

22.7.3 导出硬件设计到SDK中\t561

22.7.4 设置板级包支持路径\t561

22.7.5 建立FSBL应用工程\t562

22.7.6 建立CPU0应用工程\t562

22.7.7 建立CPU1板级支持包\t566

22.7.8 建立CPU1应用工程\t566

22.7.9 创建SD卡镜像文件\t570

22.7.10 双核系统运行和测试\t571

22.7.11 双核系统的调试\t571

第 章 Zynq - 7000 SoC内XADC原理及实现\t574

23.1 ADC转换器接口结构\t574

23.2 ADC转换器功能\t575

23.2.1 XADC的命令格式\t576

23.2.3 供电传感器报警\t576

23.3 XADC IP核结构及信号\t577

23.4 开发平台上的XADC接口\t578

23.5 在Zynq - 7000 SoC内构建数模混合系统\t579

23.5.1 打开前面的设计工程\t579

23.5.2 配置PS端口\t579

23.5.3 添加并连接XADC IP到设计\t580

23.5.4 查看地址空间\t582

23.5.5 添加用户约束文件\t583

23.5.6 设计处理\t583

23.6 使用SDK设计和实现应用工程\t584

23.6.1 生成新的应用工程\t584

23.6.2 导入应用程序\t585

23.6.3 下载硬件比特流文件到FPGA\t591

23.6.4 运行应用工程\t591

第 章 Linux开发环境的构建\t592

24.1 构建虚拟机环境\t592

24.2 安装和启动Ubuntu 14.04客户机操作系统\t595

24.2.1 新添加两个磁盘\t595

24.2.2 设置CD/DVD(SATA)\t596

24.2.3 安装Ubuntu 14.04\t597

24.2.4 更改Ubuntu 14.04操作系统启动设备\t600

24.2.5 启动Ubuntu 14.04操作系统\t600

24.2.6 添加搜索链接资源\t600

24.3 安装FTP工具\t601

24.3.1 Windows操作系统下LeapFTP安装\t601

24.3.2 Ubuntu操作系统环境下FTP安装\t602

24.4 安装和启动SSH和GIT组件\t603

24.4.1 安装和启动SSH组件\t603

24.4.2 安装和启动GIT组件\t604

24.5 安装交叉编译器环境\t604

24.5.1 安装32位支持工具包\t604

24.5.2 安装和设置SDK 2015.4工具\t605

24.6 安装和配置Qt集成开发工具\t606

24.6.1 Qt集成开发工具功能\t606

24.6.2 构建PC平台Qt环境\t607

24.6.3 构建Arm平台Qt环境\t613

第 章 构建Zynq - 7000 SoC内Ubuntu硬件运行环境\t622

25.1 建立新的设计工程\t622

25.2 添加IP核路径\t623

25.3 构建硬件系统\t623

25.3.1 添加和配置ZYNQ7 IP\t624

25.3.2 添加和配置VDMA IP核\t625

25.3.3 添加和配置AXI Display Controller IP核\t626

25.3.4 添加和配置HDMI Transmitter IP核\t627

25.3.5 添加和配置VGA IP核\t627

25.3.6 连接用户自定义IP核\t627

25.3.7 添加和配置Processor System Reset IP核\t630

25.3.8 连接系统剩余部分\t630

25.4 添加设计约束文件\t632

25.5 导出硬件文件\t633

第 章 构建Zynq - 7000 SoC内Ubuntu软件运行环境\t635

26.1 u - boot原理及实现\t635

26.1.1 下载u - boot源码\t635

26.1.2 u - boot文件结构\t636

26.1.3 u - boot工作模式\t637

26.1.4 u - boot启动过程\t637

26.1.5 编译u - boot\t650

26.1.6 链接脚本文件结构\t652

26.2 内核结构及编译\t654

26.2.1 内核结构\t654

26.2.2 下载Linux内核源码\t655

26.2.3 内核版本\t655

26.2.4 内核系统配置\t655

26.2.5 Bootloader 启动过程\t658

26.2.6 Linux内核启动过程\t660

26.2.7 编译内核\t662

26.3 设备树原理及实现\t662

26.3.1 设备树概述\t662

26.3.2 设备树数据格式\t663

26.3.3 设备树的编译\t664

26.4 文件系统原理及下载\t664

26.5 生成Ubuntu启动镜像\t665

26.5.1 生成FSBL文件\t666

26.5.2 生成BOOT.bin启动文件\t666

26.5.3 制作SD卡\t668

26.5.4 复制BOOT. bin文件\t670

26.5.5 复制编译后的内核文件\t670

26.5.6 复制编译后的设备树文件\t671

26.5.7 复制文件系统\t671

26.6 启动Ubuntu操作系统\t672

第 章 Linux环境下简单字符设备驱动程序的开发\t674

27.1 驱动程序的必要性\t674

27.2 Linux操作系统下的设备文件类型\t675

27.3 Linux驱动的开发流程\t676

27.4 驱动程序的结构框架\t676

27.4.1 加载和卸载函数模块\t676

27.4.2 字符设备中重要的数据结构和函数\t677

27.5 编写makefile文件\t683

27.6 编译驱动程序\t684

27.7 编写测试程序\t685

27.8 运行测试程序\t686

第 章 Linux环境下包含中断机制驱动程序的开发\t688

28.1 设计原理\t688

28.2 编写包含中断处理的驱动代码\t688

28.2.1 驱动程序头文件\t688

28.2.2 驱动的加载和卸载函数\t689

28.2.3 file_operations初始化\t691

28.3 编写makefile文件\t691

28.4 编译驱动程序\t692

28.5 测试驱动程序\t693

第 章 Linux环境下图像处理系统的构建\t694

29.1 系统整体架构和功能\t694

29.2 OV5640摄像头性能\t695

29.2.1 摄像头捕获模块的硬件\t696

29.2.2 SCCB接口规范\t696

29.2.3 写摄像头模组寄存器操作\t697

29.2.4 读摄像头模组寄存器操作\t698

29.2.5 摄像头初始化流程\t700

29.3 Vivado HLS实现拉普拉斯算子滤波算法的设计\t701

29.3.1 Vivado HLS工具的性能和优势\t701

29.3.2 拉普拉斯算法与HDL之间的映射\t703

29.4 图像处理系统的整体构建\t706

29.5 图像处理系统软件的设计\t708

29.5.1 Ubuntu桌面系统的构建\t708

29.5.2 Qt图像处理程序的开发\t708

29.6 嵌入式图像处理系统测试\t710

第 章 Zynq-7000 SoC上构建和实现Python应用\t712

30.1 设计所需的硬件环境\t712

30.2 构建PetaLinux开发环境\t712

30.2.1 PetaLinx开发环境概述\t712

30.2.2 安装32位库\t714

30.2.3 安装并测试tftp服务器\t714

30.2.4 下载并安装PetaLinux\t715

30.3 构建嵌入式系统硬件\t717

30.3.1 下载并安装Vivado 2018.2集成开发环境\t717

30.3.2 添加板级支持包文件\t717

30.3.3 建立新的Vivado工程\t717

30.3.4 构建硬件系统\t718

30.4 构建嵌入式Python开发环境\t721

30.5 构建PC端Python开发环境\t723

30.6 服务器和客户端Python的开发\t724

30.6.1 服务器端Python的开发\t725

30.6.2 客户端Python的开发\t726

30.7 设计验证\t728

30.7.1 启动服务器程序\t728

30.7.2 启动客户端程序\t729