ARMCortex-M0全可编程SoC原理及实现:面向处理器、协议、外设、编程和操作系统pdf下载pdf下载

ARMCortex-M0全可编程SoC原理及实现:面向处理器、协议、外设、编程和操作系统百度网盘pdf下载

作者:
简介:本篇主要提供ARMCortex-M0全可编程SoC原理及实现:面向处理器、协议、外设、编程和操作系统pdf下载
出版社:清华大学出版社
出版时间:2017-02
pdf下载价格:0.00¥

免费下载


书籍下载


内容介绍

编辑推荐

  1. 知识融合 将ARM公司开源的Cortex-M0 IP用于典型嵌入式系统设计,内容涵盖了处理器架构、指令集、汇编语言、协议、接口、C语言、操作系统等方面的知识。
  2. 深入分析 在本书中,通过Xilinx 7系列现场可编程门阵列(FPGA)实现Cortex-M0嵌入式系统硬件设计;通过Keil μVision5集成开发环境,实现软件程序设计。此外,通过软件和硬件开发工具提供的仿真、调试和跟踪功能,深度分析了处理器内部架构、处理器与存储器和外设之间的通信机制,以及软件和硬件协同设计方法。
  3. 知识*威 在编写本书的过程中,ARM公司课程开发团队提供了大量的教学参考资料,包括设计案例、教学课件以及技术文档等。使得本书能从硬件和软件两个方面准确反映Cortex-M0嵌入式系统的设计和实现方法。
  4. 实例丰富 提供了Cortex-M0典型应用的设计案例、设计代码和参考资料,便于读者自学,快速动手实践。

内容简介

  《ARM Cortex-M0 全可编程SoC原理及实现:面向处理器、协议、外设、编程和操作系统》以ARM公司免费开放的CortexM0 DesignStart处理器 IP核为基础,以CortexM0处理器架构、AMBA规范、外设、汇编语言、C语言、CMSIS、驱动程序开发以及RTX操作系统为主线,详细介绍了通过Xilinx Vivado以及Keil μVision5集成开发环境构建CortexM0全可编程嵌入式系统的硬件和软件设计方法。

  全书共分18章,主要内容包括: 全可编程SoC设计导论、CortexM0 CPU结构、CortexM0指令集、CortexM0低功耗特性、AHBLite总线结构分析、CortexM0汇编语言编程基础、CortexM0 DesignStart架构、Xilinx Artix7 FPGA结构、CortexM0嵌入式系统设计与实现、7段数码管控制器设计与实现、中断系统设计与实现、定时器设计与实现、UART串口控制器设计与实现、VGA控制器设计与实现、DDR3存储器系统设计与实现、CortexM0 C语言编程基础、CMSIS和驱动程序开发、RTX操作系统原理及应用。

  本书可作为讲授ARM CortexM0嵌入式系统课程以及CortexM0可编程SoC系统设计课程的教学参考用书,也可作为学习Xilinx Vivado集成开发环境和Verilog HDL语言的参考用书。


作者简介

  何宾,著名的嵌入式技术和EDA技术专家,长期从事电子设计自动化方面的教学和科研工作,与全球多家知名的半导体厂商和EDA工具厂商大学计划保持紧密合作。目前已经出版嵌入式和EDA方面的著作30余部,内容涵盖电路仿真、电路设计、可编程逻辑器件、数字信号处理、单片机、嵌入式系统、片上可编程系统等。典型的代表作有《Xilinx FPGA设计*威指南》《Xilinx FPGA数字设计——从门级到行为级的双重描述》《Xilinx FPGA数字信号处理*威指南——从HDL、模型到C的描述》《Xilinx All Programmable Zynq-7000 嵌入式系统设计与实现》《模拟与数字系统协同设计*威指南——Cypress集成开发环境》《STC单片机原理及应用》《STC单片机C语言程序设计》《Altium Designer 13.0电路设计、仿真与验证*威指南》《Altium Designer 15.0电路仿真、设计、验证与工艺实现*威指南》。

内页插图

目录

第1章全可编程SoC设计导论

1.1SoC基础知识

1.1.1SoC的概念

1.1.2SoC与MCU及CPU的比较

1.1.3典型的商用SoC器件

1.2SoC设计流程

1.3SoC体系架构

1.4全可编程SoC技术

1.4.1基于软核的全可编程SoC

1.4.2基于硬核的全可编程SoC

1.5全可编程SoC设计流程

第2章CortexM0 CPU结构

2.1ARM处理器类型

2.2CortexM系列处理器概述

2.2.1CortexM系列处理器的特点

2.2.2CortexM系列处理器的性能参数

2.3CortexM0处理器性能和结构

2.3.1CortexM0处理器的性能

2.3.2CortexM0处理器的结构

2.4CortexM0处理器寄存器组

2.4.1通用寄存器

2.4.2堆栈指针

2.4.3程序计数器

2.4.4链接寄存器

2.4.5组合程序状态寄存器

2.4.6中断屏蔽特殊寄存器

2.4.7特殊寄存器

2.5CortexM0存储器空间映射

2.6CortexM0程序镜像原理及生成方法

2.7CortexM0的端及分配

2.8CortexM0处理器异常及处理

2.8.1异常原理

2.8.2异常优先级

2.8.3向量表

2.8.4异常类型

第3章CortexM0指令集

3.1Thumb指令集

3.2CortexM0汇编语言格式

3.3寄存器访问指令: MOVE

3.4存储器访问指令: LOAD

3.5存储器访问指令: STORE

3.6多数据访问指令: LDM和STM

3.7堆栈访问指令: PUSH和POP

3.8算术运算指令

3.8.1加法指令

3.8.2减法指令

3.8.3乘法指令

3.8.4比较指令

3.9逻辑操作指令

3.10移位操作指令

3.10.1右移指令

3.10.2左移指令

3.11反序操作指令

3.12扩展操作指令

3.13程序流控制指令

3.14存储器屏蔽指令

3.15异常相关指令

3.16休眠相关指令

3.17其他指令

3.18数据插入和对齐操作

第4章CortexM0低功耗特性

4.1低功耗要求

4.2CortexM0低功耗特性及优势

4.2.1CortexM0低功耗特性

4.2.2CortexM0低功耗结构

4.3CortexM0休眠模式

4.4唤醒中断控制器

4.5降低功耗的其他方法

第5章AHBLite总线结构分析

5.1总线及分类

5.1.1总线的概念

5.1.2总线分类

5.2ARM AMBA系统总线

5.3AMBA3 AHBLite总线

5.3.1AHBLite概述

5.3.2AHBLite总线操作

5.4AHBLite总线结构

5.4.1全局信号

5.4.2AHBLite主设备接口

5.4.3AHBLite从设备接口

5.4.4地址译码器和多路复用器

5.5AHBLite总线时序

5.5.1无等待基本读传输

5.5.2有等待基本读传输

5.5.3无等待基本写传输

5.5.4有等待基本写传输

5.6硬件实现

第6章CortexM0汇编语言编程基础

6.1Keil MDK开发套件

6.1.1下载MDK开发套件

6.1.2安装MDK开发套件

6.1.3MDK程序处理流程

6.2CortexM0汇编语言程序设计

6.2.1建立新设计工程

6.2.2工程参数设置

6.2.3添加汇编文件

6.2.4汇编语言语法

6.3.lst文件分析

6.4.map文件分析

6.5.hex文件分析

6.6软件仿真和调试

6.6.1查看CortexM0寄存器内容

6.6.2查看CortexM0存储器内容

6.6.3查看监视窗口的内容

6.7汇编语言其他常用语法介绍

6.7.1标识符的命名规则

6.7.2变量

6.7.3常数

6.7.4EQU命令

6.7.5IMPORT/EXTERN命令

6.7.6子程序调用

6.7.7宏定义和使用

第7章CortexM0 DesignStart架构

7.1获取CortexM0 DesignStart

7.2CortexM0 DesignStart顶层符号

7.2.1中断

7.2.2状态输出

7.2.3事件信号

7.3AHBLite接口

7.4将CortexM0 DesignStart集成到系统的方法

第8章XILINX Artix7 FPGA结构

8.1Artix7器件逻辑资源

8.2可配置逻辑块

8.2.1可配置逻辑块概述

8.2.2查找表

8.2.3多路复用器

8.2.4进位逻辑

8.2.5存储元素

8.2.6分布式RAM(只有SLICEM)

8.2.7只读存储器(ROM)

8.2.8移位寄存器(只有SLICEM)

8.3时钟资源和时钟管理单元

8.3.17系列FPGA时钟资源

8.3.27系列内部时钟结构

8.3.37系列FPGA时钟管理模块

8.4块存储器资源

8.5专用的DSP模块

8.6输入/输出块

8.6.1I/O特性概述

8.6.2Artix7中的I/O列和类型

8.6.3I/O电气资源

8.6.4I/O逻辑资源

8.7XADC模块

8.8吉比特收发器

8.9PCIE模块

8.10配置模块

8.11互连资源

第9章CortexM0嵌入式系统设计与实现

9.1设计目标

9.2CortexM0 SoC系统的构建

9.2.1启动Vivado 2016集成开发环境

9.2.2创建新的设计工程

9.2.3添加CortexM0处理器源文件

9.2.4添加系统主时钟IP核

9.3设计文件修改和分析

9.3.1AHB总线地址译码器

9.3.2AHB总线从设备多路复用器

9.3.3AHB片上存储器外设

9.3.4AHB LED外设

9.3.5AHBLITE_SYS顶层文件

9.4程序代码的编写

9.4.1建立新设计工程

9.4.2工程参数设置

9.4.3添加和编译汇编文件

9.4.4分析HEX文件与汇编文件的关系

9.4.5添加HEX文件到当前工程

9.5RTL详细描述和分析

9.6仿真原理和行为级仿真

9.6.1仿真实现的不同功能

9.6.2Vivado所支持的仿真工具

9.6.3行为级仿真实现

9.6.4添加信号并仿真

9.6.5仿真结果分析

9.7设计综合和分析

9.7.1综合过程的关键问题

9.7.2设计综合选项

9.7.3Vivado支持的属性

9.7.4执行设计综合

9.7.5查看综合报告

9.8创建实现约束

9.8.1实现约束的原理

9.8.2I/O规划器功能

9.8.3引脚位置约束的实现

9.9设计实现和分析

9.9.1实现过程原理

9.9.2设计实现选项

9.9.3设计实现

9.9.4查看布局布线后的结果

9.9.5查看实现后的报告

9.9.6功耗分析

9.9.7静态时序分析

9.10实现后时序仿真

9.11生成编程文件

9.12下载比特流文件到FPGA

9.13生成并下载外部存储器文件

第10章7段数码管控制器设计与实现

10.1设计目标

10.2打开前面的设计工程

10.3添加并分析7段数码管控制器源文件

10.3.1添加7段数码管控制器源文件

10.3.2分析7段数码管控制器源文件

10.4修改并分析顶层设计文件

10.5编写程序代码

10.5.1建立新设计工程

10.5.2工程参数设置

10.5.3添加和编译汇编文件

10.5.4添加HEX文件到当前工程

10.6设计综合

10.7添加约束条件

10.8设计实现

10.9下载比特流文件

10.10系统在线调试原理

10.11系统在线调试实现

10.11.1建立新的调试工程

10.11.2添加调试网络

10.11.3在线测试分析

第11章中断系统设计与实现

11.1设计目标

11.2中断控制器原理

11.2.1NVIC特点

11.2.2NVIC映射

11.2.3NVIC寄存器

11.3进入和退出异常句柄的过程

11.3.1进入中断句柄的过程

11.3.2退出中断句柄的过程

11.4打开前面的设计工程

11.5添加并分析按键消抖模块源文件

11.5.1添加按键消抖模块源文件

11.5.2分析按键消抖模块源文件

11.6修改并分析顶层设计文件

11.7编写程序代码

11.7.1建立新设计工程

11.7.2工程参数设置

11.7.3软件初始化中断

11.7.4添加和编译汇编文件

11.7.5添加HEX文件到当前工程

11.8设计综合

11.9添加约束条件

11.10设计实现

11.11下载比特流文件

第12章定时器设计与实现

12.1设计目标

12.2打开前面的设计工程

12.3添加并分析定时器模块源文件

12.3.1定时器模块设计原理

12.3.2添加定时器源文件

12.3.3分析定时器源文件

12.4修改并分析顶层设计文件

12.5编写程序代码

12.5.1建立新设计工程

12.5.2工程参数设置

12.5.3添加和编译汇编文件

12.5.4添加HEX文件到当前工程

12.6设计综合

12.7设计实现

12.8下载比特流文件

第13章UART串口控制器设计与实现

13.1设计目标

13.2串行通信基础

13.2.1串行和并行通信之间的比较

13.2.2串行通信的类型

13.3通用异步收发数据格式和编码

13.3.1数据格式

13.3.2字符编码规则

13.4UART串口控制器的实现原理

13.4.1UART发送器

13.4.2UART接收器

13.4.3发送器/接收器FIFO

13.5打开前面的设计工程

13.6添加并分析UART模块源文件

13.6.1添加UART模块源文件

13.6.2分析UART模块源文件

13.7修改并分析顶层设计文件

13.8编写程序代码

13.8.1建立新设计工程

13.8.2工程参数设置

13.8.3添加和编译汇编文件

13.8.4添加HEX文件到当前工程

13.9设计综合

13.10添加约束条件

13.11设计实现

13.12下载比特流文件

第14章VGA控制器设计与实现

14.1设计目标

14.2VGA工作原理

14.2.1VGA连接器

14.2.2CRT原理

14.2.3VGA接口信号

14.2.4VGA时序

14.3VGA显示硬件实现原理

14.3.1VGA图像缓冲区

14.3.2VGA控制台

14.3.3VGA控制器存储器空间

14.4打开前面的设计工程

14.5添加并分析VGA模块源文件

14.5.1添加VGA模块源文件

14.5.2分析VGA模块源文件

14.6修改其他设计

14.6.1添加并分析顶层设计文件

14.6.2修改时钟生成器输出频率

14.6.3修改波特率时钟

14.7编写程序代码

14.7.1建立新设计工程

14.7.2工程参数设置

14.7.3添加和编译汇编文件

14.7.4添加HEX文件到当前工程

14.8设计综合

14.9添加约束条件

14.10设计实现

14.11下载比特流文件

第15章DDR3存储器系统设计与实现

15.1计算机搭载的存储器设备

15.2存储器类型

15.2.1易失性存储器

15.2.2非易失性存储器

15.3系统设计目标

15.3.1硬件构建目标

15.3.2软件编程目标

15.4DDR3 SDRAM控制器设计原理

15.4.1DDR3 SDRAM存储器结构

15.4.2DDR3 SDRAM控制器结构

15.4.3DDR3 SDRAM的读写访问时序

15.5DDR3 SDRAM控制器系统设计与实现

15.5.1打开前面的设计工程

15.5.2设计DDR3 SDRAM存储器控制器

15.5.3修改系统设计文件

15.5.4编写程序代码

15.5.5设计综合

15.5.6设计实现

15.5.7下载比特流文件

第16章CortexM0 C语言编程基础

16.1C语言处理流程

16.2C语言镜像文件内容和存储

16.2.1C语言镜像文件的内容

16.2.2C语言镜像文件的存储位置

16.3启动代码的分析

16.4C语言中数据的存储空间

16.5C语言数据类型及实现

16.5.1C语言支持的数据类型

16.5.2数据类型修饰符

16.6C语言编程CortexM0

16.6.1定义中断向量表

16.6.2定义堆和堆栈

16.6.3读写外设寄存器

16.6.4汇编调用C函数

16.6.5C语言调用汇编语言

16.6.6C语言嵌入汇编语言

16.7C语言驱动的设计和实现

16.7.1打开前面的设计工程

16.7.2建立新的软件设计工程

16.7.3软件工程参数设置

16.7.4创建并添加汇编文件

16.7.5创建并添加头文件

16.7.6创建并添加C文件

16.7.7添加HEX文件到当前工程

16.7.8设计综合

16.7.9设计实现

16.7.10下载比特流文件

16.8C语言重定向及实现

16.8.1打开前面的设计工程

16.8.2打开前面的软件设计工程

16.8.3修改启动引导文件

16.8.4导入并修改retarget.c文件

16.8.5修改C设计文件

16.8.6添加HEX文件到当前工程

16.8.7设计综合

16.8.8设计实现

16.8.9下载比特流文件

第17章CMSIS和驱动程序开发

17.1引入CMSIS的必要性

17.2CMSIS的优势

17.3CMSIS的框架

17.4使用CMSIS访问不同资源

17.4.1访问NVIC

17.4.2访问特殊寄存器

17.4.3访问特殊指令

17.4.4访问系统

17.5软件驱动程序的设计

17.5.1软件驱动程序的功能

17.5.2AHB外设驱动设计

17.6动态图形交互系统设计

17.6.1动态图形交互硬件平台

17.6.2触摸屏显示控制方法

17.6.3触摸屏触摸控制方法

17.6.4打开前面的设计工程

17.6.5触摸屏控制器模块的设计实现

17.6.6修改顶层设计文件

17.6.7C语言程序的设计和实现

17.6.8设计综合

17.6.9添加约束条件

17.6.10设计实现

17.6.11下载比特流文件

第18章RTX操作系统原理及应用

18.1RTOS的优势

18.2操作系统的概念

18.3操作系统支持特性

18.3.1SysTick定时器

18.3.2堆栈指针

18.3.3SVC

18.3.4PendSV

18.4RTX内核架构的特点

18.5RTX的具体实现过程

18.5.1实现目标

18.5.2打开前面的工程

18.5.3修改工程属性设置

18.5.4修改启动代码

18.5.5导入RTX_Config.c文件

18.5.6修改main.c文件

18.5.7软件调试和测试

18.6RTX内核功能

18.6.1定时器滴答中断

18.6.2系统任务管理器

18.6.3任务管理

18.6.4空闲任务

18.6.5系统资源

18.6.6任务调度策略

18.6.7优先级倒置

18.6.8堆栈管理

18.6.9用户定时器

18.6.10中断函数


精彩书摘

  第5章AHBLite总线结构分析

  ARM公司提供的高级微控制器总线结构(Advanced Microcontroller Bus Architecture,AMBA)规范是实现ARM处理器和外部设备互连的基础。在基于ARM CortexM0的SoC中,通过AMBA规范中的AHBLite协议,实现ARM CortexM0处理器主设备对多个从设备的无障碍访问。

  根据ARM AMBA规范,本章将详细介绍AMBA规范中的AHBLite协议,内容主要包括总线及分类、ARM AMBA系统总线、AMBA3 AHBLite总线、AHBLite总线结构、AHBLite总线时序,以及硬件实现。

  通过本章的学习,要求读者掌握AHBLite的结构、接口信号和访问时序关系,这些内容是读者可以顺利学习本章后续内容的基础。

  5.1总线及分类

  本节介绍总线的概念及分类。

  5.1.1总线的概念

  传统上,总线是一个通信系统,用于在一个计算机的不同部件之间实现数据传输。硬件和软件两个方面定义了构成总线的要素:

  (1) 从硬件上来说,包括物理实现,如电缆或者连线。例如,使用PCI总线电缆连接一个台式计算机内的部件,如图5.1所示。

  图5.1PCI插槽和连线

  (2) 从软件上来说,包括总线协议,如PCI总线协议。

  5.1.2总线分类

  在计算机系统中,通常将总线分为两类。

  1) 外部总线

  外部总线主要用于连接外部设备,例如,将一台计算机与一台打印机进行连接。

  2) 内部总线

  (1) 内部总线也称为系统总线,用于连接一台计算机的内部部件,例如,将CPU连接到存储器。

  (2) 较少的开销,例如,不需要处理电特性,以及配置检测等。

  (3) 内部总线的工作速度比外部总线要快。

  (4) 在SoC内,将内部总线集成到单个芯片中,因此称它为片上系统总线。

  思考与练习51: 说明计算机系统总线的分类,以及它们的作用。

  5.2ARM AMBA系统总线

  在SoC设计中,高级微控制器总线结构(Advanced Microcontroller Bus Architecture,AMBA)用于片上总线。自从AMBA出现后,其应用领域早已超出了微控制器设备,现在被广泛地应用于各种范围的ASIC和SOC器件,包括用于便携设备的应用处理器。

  AMBA协议是一个开放标准的片上互联规范(除AMBA5以外),用于SoC内功能模块的连接和管理。它便于第一时间开发包含大量控制器和外设的多处理器设计。其发展过程如下:

  1) 1996年,ARM公司推出了AMBA的第一个版本,包括:

  (1) 高级系统总线(Advanced System Bus,ASB);

  (2) 高级外设总线(Advanced Peripheral Bus,APB)。

  2) 第2个版本为AMBA2,ARM增加了AMBA高性能总线(AMBA Highperformance Bus, AHB),它是一个单个时钟沿的协议。AMBA2用于ARM公司的ARM7和ARM9处理器。

  3) 2003年,ARM推出了第三个版本即AMBA3,增加了以下规范:

  (1) 高级可扩展接口(Advanced Extensible Interface,AXI)v1.0/AXI3,它用于实现更高性能的互连。

  (2) 高级跟踪总线(Advanced Trace Bus,ATB)v1.0,它用于CoreSight片上调试和跟踪解决方案。

  此外,还包含下面的协议:

  (1) 高级高性能总线简化(Advanced Highperformance Bus Lite,AHBLite)v1.0。

  (2) 高级外设总线(Advanced Peripheral Bus,APB)v1.0。

  其中:

  (1) AHBLite和APB规范用于ARM的CortexM0、M3和M4。

  (2) AXI规范,用于ARM的CortexA9、A8、R4和R5的处理器。

  4) 2009年,Xilinx同ARM密切合作,共同为基于FPGA的高性能系统和设计定义了AXI4规范。并且在其新一代可编程门阵列芯片上采用了高级可扩展接口AXI4协议。主要包括:

  (1) AXI一致性扩展(AXI Coherency Extensions,ACE)。

  (2) AXI一致性扩展简化(AXI Coherency Extensions Lite,ACELite)。

  (3) 高级可扩展接口4(Advanced eXtensible Interface 4,AXI4)。

  (4) 高级可扩展接口4简化(Advanced eXtensible Interface 4 Lite,AXI4Lite)。

  (5) 高级可扩展接口4流(Advanced eXtensible Interface 4 Stream,AXI4Stream)v1.0。

  (6) 高级跟踪总线(Advanced Trace Bus,ATB)v1.1。

  (7) 高级外设总线(Advanced Peripheral Bus,APB)v2.0。

  其中的ACE规范用于ARM的CortexA7和A15处理器。

  5) 2013年,ARM推出了AMBA5。该协议增加了一致集线器接口(Coherent Hub Interface,CHI)规划,用于ARM CortexA50系列处理器,以高性能、一致性处理“集线器”方式协同工作,这样就能在企业级市场中实现高速可靠的数据传输。

  思考与练习52: 说明ARM AMBA的含义,以及所实现的目的。

  思考与练习53: 说明在ARM CortexM0中所采用的总线规范。

  思考与练习54: 在ARM AMBA中,对于APB、AHB和AXI来说,性能最高的是,性能最低的是。

  5.3AMBA3 AHBLite总线

  AMBA3中的AHB,被称为高性能总线,主要体现在:

  (1) 可以实现高性能的同步设计;

  (2) 支持多个总线主设备;

  (3) 提供高带宽操作。

  而AHBLite是AHB的子集,简化了AHB总线的设计,典型地,只有一个主设备。

  5.3.1AHBLite概述

  在基于AHBLite总线构成的系统中,通过该总线,处理器实现对所有外设的控制,如图5.2所示。在该系统中,所有外设均提供AHBLite接口,用于和主处理器进行连接。对于AHBLite来说,它包含数据总线、控制总线和额外的控制信号,其中:

  (1) 数据总线用于交换数据信息。

  (2) 地址总线用于选择一个外设,或者一个外设中的某个寄存器。

  (3) 控制信号用于同步和识别交易,如: 准备,写/读以及传输模式信号。

  图5.2由AHBLite构成的处理系统

  5.3.2AHBLite总线操作

  图5.3总线操作过程

  处理器访问一个AHBLite外设的操作过程,如图5.3所示。该过程主要包括:

  (1) 通过地址总线,处理器给出所要访问AHBLite外设的地址信息。

  (2) 通过地址译码器,生成选择一个外设或者寄存器的选择信号。同时,处理器提供用于控制所选AHBLite外设的控制信号,如读/写,传输数据的数量等。

  (3) 如果处理器给出的是读取AHBLite外设的控制信号,则等待外设准备好后,读取该外设的数据。

  除了上面介绍的基本操作过程外,AHBLite总线可以实现更多复杂的功能,如传输个数和猝发模式等。

  思考与练习55: 说明在AHBLite中所包含的总线类型,以及这些总线各自的作用。

  思考与练习56: 根据图5.3,详细说明CortexM0处理器和AHBLite外设的信息交互过程。

  5.4AHBLite总线结构

  基于AHBLite总线所构成的计算机系统架构,如图5.4所示。在该系统中,包括以下功能部件:

  图5.4构成AHBLite系统的单元

  (1) 主设备。在本书中,主设备是指CortexM0处理器。此外,在包含直接存储器访问(Direct Memory Access,DMA)控制器的系统中,主设备还包括DMA控制器。

  (2) 地址译码器。主要用于选择CortexM0所要访问的从设备。

  (3) 从设备多路复用器。主要用于从多个从设备中选择所要读取的数据和响应信号。

  (4) 多个从设备。它们都包含AHBLite接口,主设备可以通过该接口访问它们。

  此外,系统还应该包含时钟和复位模块单元。时钟模块用于为整个SoC系统提供时钟源; 复位模块用于为整个SoC系统提供复位信号。通过时钟和复位信号,使得SoC系统内的各个功能部件有序工作。

  5.4.1全局信号

  在AHBLite协议中,提供了两个全局信号,如表5.1所示。在该设计中,HCLK的频率与CortexM0处理器的频率相同。在CortexM0系统中,所有的功能部件都包含该全局信号。在基于ARM CortexM0处理器的SoC系统中,时钟模块和复位模块用于提供全局信号。

  表5.1AHBLite协议中的全局信号

  信号名字和方向描述

  HCLK时钟,源指向所有的部件总线时钟用来驱动所有的总线传输。所有信号的时序均以HCK时钟的上升沿为基准

  HRESETn复位,由控制器指向所有的部件总线复位信号低有效,用于复位系统和总线

  5.4.2AHBLite主设备接口

  AHBLite主设备提供地址和控制信息,用于初始化读和写操作。然后,主设备接收来自从设备的响应信息,包括数据、准备信号和响应信号,如图5.5所示。在该设计中,主设备只有CortexM0处理器,它用于提供访问从设备的AHBLite接口信号。

  图5.5构成AHBLite主设备接口信号

  为了方便对本书后续内容的学习,下面给出AHBLite主设备接口信号的详细信息,如表5.2所示。

  表5.2AHBLite主设备接口信号

  信号方向描述

  HADDR [31∶0]由主设备指向从设备以及译码器32位系统地址总线

  HWDATA [31∶0]由主设备指向从设备写数据总线,用于在写操作周期内将数据从主设备发送到从设备

  HWRITE由主设备指向从设备用于指示传输的方向。当该信号为高时,表示写传输; 当该信号为低时,表示读传输

  HSIZE [2∶0]由主设备指向从设备表示传输的宽度,如字节、半字和字

  HBURST [2∶0]由主设备指向从设备猝发类型,表示传输是单个传输还是猝发的一部分

  HPROT [3∶0]由主设备指向从设备保护控制信号提供了关于总线访问的额外的信息。它被模块使用,用于实现某个级别的保护

  HTRANS [1∶0]由主设备指向从设备表示当前传输的类型,可以是IDLE、BUSY、NONSEQUENTIAL或SEQUENTIAL

  HMASTLOCK由主设备指向从设备当该信号为高时,表示当前传输是某个锁定序列的一部分

  本书所使用的CortexM0处理器IP核,通过组合表5.2中的信号可以得到四种基本的传输类型,如表5.3所示。

  表5.3处理器AHBLite交易类型

  交易访问描述

  HSTRANS[1∶0]=2'b00空闲处理器不希望执行任何交易

  HSTRANS[1∶0]=2'b10

  HPROT[0]=1'b0

  HSIZE[1∶0]=2'b10

  HWRITE=1'b0取指处理器希望执行取指操作。处理器一次从存储器中取出32位的指令,如果有其他要求,则处理器内部缓冲和管理两个16位指令的提取

  HSTRANS[1∶0]=2'b10

  HPROT[0]=1'b1

  HSIZE[1∶0]=2'b00字节处理器希望执行一个由LDRB、LDRBS、STRB指令所产生的8位数据访问操作。加载指令将驱动HWRITE信号为低; 保存指令将驱动HWRITE信号为高

  续表

  交易访问描述

  HSTRANS[1∶0]=2'b10

  HPROT[0]=1'b1

  HSIZE[1∶0]=2'b01半字处理器希望执行一个由LDRH、LDRHS、STRH指令所产生的16位数据访问操作。加载指令将驱动HWRITE信号为低; 保存指令将驱动HWRITE信号为高

  HSTRANS[1∶0]=2'b10

  HPROT[0]=1'b1

  HSIZE[1∶0]=2'b10字

  处理器希望执行一个由LDR、LDM、POP、STR、STM、PUSH指令,或者异常入口的一部分,或者返回所产生的32位数据访问操作。加载指令将驱动HWRITE信号为低; 保存指令将驱动HWRITE信号为高

  本书所使用的CortexM0处理器,总是工作在小端模式,所有的交易总是自然对齐。HRDATA和HWDATA活动字节的通道,以及它们在CortexM0处理器里对应的源/目的寄存器,如表5.4所示。

  表5.4处理器AHBLite读/写数据字节通道

  地 址 阶 段数 据 阶 段

  HSIZE[1∶0]HADDR[1∶0]HxDATA

  [31∶24]HxDATA

  [23∶16]HxDATA

  [15∶8]HxDATA

  [7∶0]

  0000———Rd[7∶0]

  0001——Rd[7∶0]—

  0010—Rd[7∶0]——

  0011Rd[7∶0]———

  0100——Rd[15∶8]Rd[7∶0]

  0110Rd[15∶8]Rd[7∶0]——

  1000Rd[31∶24]Rd[23∶16]Rd[15∶8]Rd[7∶0]

  用于CortexM0处理器的存储器属性由ARMv6M架构决定,其地址空间的使用规则是固定的。从HADDR映射出来的HPROT[3∶2]位含义如表5.5所示。

  表5.5处理器存储器映射属性

  HADDR[31∶0]类型HPROT[3∶2]推荐的用法

  32′hF0000000~

  32′hFFFFFFFFF设备01无

  32′hE0000000~

  32′hEFFFFFFFF保留—映射到处理器内部的外设,如NVIC

  32′hA0000000~

  32′hDFFFFFFFF设备01外设

  32′h80000000~

  32'′h9FFFFFFFF正常(写通过)10片外RAM

  32′h60000000~

  32′h7FFFFFFFF正常(写回和写分配)11片外RAM

  续表

  HADDR[31∶0]类型HPROT[3∶2]推荐的用法

  32′h40000000~

  32′h5FFFFFFFF设备01外设

  32′h20000000~

  32′h3FFFFFFFF正常(写回和写分配)11片上RAM

  32′h00000000~

  32′h1FFFFFFFF正常(写通过)10程序代码

  5.4.3AHBLite从设备接口

  为了响应系统主设备所建立的传输,从设备也需要提供对应的AHBLite接口,如图5.6所示。通过本身所提供的AHBLite接口,从设备与主设备实现数据传输。

  在从设备接口上,有一个HSELx信号,由地址译码器的输出信号HSELx给出,用于在一个时刻选择所要访问的一个从设备。

  图5.6构成AHBLite从设备接口信号

  为了方便本书后续内容的学习,下面给出AHBLite从设备接口信号的详细信息,如表5.6所示。

  表5.6AHBLite从设备接口信号

  信号方向描述

  HRDATA [31∶0]由从设备指向多路选择器在读传输时,读数据总线将所选中从设备的数据发送到从设备多路选择器,然后由从设备多路选择器将数据传给主设备

  HREADYOUT由从设备指向多路选择器当该信号为高时,完成总线上的传输过程; 该信号驱动为低时,扩展一个传输

  HRESP由从设备指向多路选择器传输响应,当通过多路复用器时,为主设备提供额外的传输状态信息。当该信号为低时,表示传输状态为OKAY; 当该位为高时,表示传输状态是ERROR

  5.4.4地址译码器和多路复用器

  基于AHBLite所构建的CortexM0 SoC系统还提供了地址译码器和多路复用器。从结构上来说:

  (1) 地址译码器为一对多设备,由一个主设备指向多个从设备;

  (2) 多路复用器为多对一设备,由多个从设备指向一个主设备。

  注: 在本书中,主设备只有ARM CortexM0处理器。

  1. 地址译码器的功能

  在系统中,地址译码器的输入为地址信号,输出为选择信号,如图5.7所示,它实现的功能主要包括:

  (1) 根据主设备在地址总线上所提供的访问地址空间信息,生成选择一个从设备的选择信号。

  (2) 同时,选择信号也连接到从设备多路选择器,用于从多个从设备中选择所对应的从设备返回信息。

  图5.7地址译码器和从设备多路复用器

  2. 多路复用器的功能

  在系统中,来自不同从设备的响应信号,包括: HRDATA、HREADY和HRESP连接到多路复用器的输入,如图5.7所示。根据地址译码器所生成的选择信号,多路复用器将选择的从设备响应信号送给主设备。

  3. 接口信号

  译码器和多路选择器信号的详细信息,如表5.7所示。

  表5.7译码器和多路选择器信号

  信号方向描述

  HRDATA [31∶0]由多路复用器指向主设备来自多路复用器到主设备的读数据

  HREADY由多路复用器指向主设备和从设备来自多路复用器到主设备的准备信号。当该位为高时,该信号表示到主设备和先前完成传输的所有从设备

  续表

  信号方向描述

  HRESP由多路复用器指向主设备来自多路复用器到主设备的传输响应信号

  HSELx由译码器指向从设备每个AHBLite从设备有自己的从设备选择信号HSELx,该信号表示当前传输所对应的从设备。当一开始就选中该从设备时,它也必须监视HREADY的状态,以确保在响应当前传输前,已经完成前面的总线传输

  思考与练习57: 说明在基于AHBLite所构建的SoC系统中所包含的主要功能部件。

  思考与练习58: 说明在基于AHBLite所构建的SoC系统中地址译码器的功能。

  思考与练习59: 说明在基于AHBLite所构建的SoC系统中多路复用器的功能。

  思考与练习510: 根据图5.7,分析基于AHBLite的架构。

  5.5AHBLite总线时序

  一个AHBLite传输包括两个阶段:

  1) 地址阶段

  只持续一个HCLK周期,除非被前面的总线传输进行了扩展。

  2) 数据阶段

  可能要求几个HCLK周期。使用HREADY信号来控制完成传输所需要的周期数。

  在AHBLite中,引入了流水线传输的机制,包括:

  (1) 当前操作的数据访问可以与下一个操作的地址访问重叠。

  (2) 使能高性能的操作,同时仍然为从设备提供充分的时间,为传输提供响应信息。

  注: 在后续的介绍中,只实现基本的总线操作,即

  (1) HBURST[2∶0]=3'b000,表示没有猝发交易;

  (2) HMASTLOCK=1'b0,表示不产生带锁定的交易;

  (3) HTRANS[1∶0]=2'b00或者2'b10,表示发起的交易为非顺序的传输。

  5.5.1无等待基本读传输

  无等待的基本读传输时序,如图5.8所示,包括:

  ……

前言/序言

  前言

  在当今社会中,嵌入式系统的应用越来越广泛,例如以智能手机为代表的嵌入式系统应用已经融入人们的日常生活中。英国ARM公司作为全球知名的嵌入式处理器IP核供应商,其所提供的CortexM、CortexR和CortexA三大系列处理器IP核以及基于这些IP核所构建的生态系统,已经成为当今嵌入式系统设计和应用的基础。

  由于保护知识产权的需要,一直以来ARM公司对其处理器设计技术进行严格保密,这使得掌握Cortex处理器架构并熟练高效应用Cortex处理器变得异常困难。此外,ARM Cortex处理器架构和指令集也比较复杂。这些因素都使得一个嵌入式系统设计人员很难从处理器架构、接口、外设、编程语言和操作系统等方面全面彻底掌握嵌入式系统设计知识。

  近年来,国内很多高校都相继开设了嵌入式系统相关的课程。但是,由于前面所提到的诸多因素,在市面上已经出版的ARM嵌入式系统教材并没有全面系统地从处理器架构、AMBA规范、接口、外设、编程语言和操作系统等方面全方位系统地对设计嵌入式系统所需要的知识进行解读,这给ARM嵌入式系统技术在国内教育界的普及推广造成很大困难。目前,国内嵌入式系统课程的教学大都局限在APP开发,API函数调用的层面,与工业界对培养高素质嵌入式人才的要求有相当大的差距。

  去年,ARM公司做了一件让中国教育界非常高兴的事情,它提供了免费开放的CortexM0 DesignStart内核等效RTL级设计代码,可用于中国高校的嵌入式系统课程教学。通过ARM大学计划经理陈玮先生的帮助,本书作者得到了这个免费开放的CortexM0 DesignStart内核RTL级等效设计代码。通过这个免费开放的CortexM0 DesignStart IP核以及Xilinx的Vivado 2016.1集成开发环境,作者在Xilinx最新的7系列FPGA内构建了CortexM0嵌入式系统硬件,同时,通过Keil μVision5集成开发环境为该嵌入式系统硬件开发了软件应用程序。

  与传统采用专用CortexM处理器介绍嵌入式系统设计的教学模式相比,采用在FPGA内构建CortexM0嵌入式系统的方法可以为嵌入式系统课程的教学带来以下好处:

  (1) 当采用开放的CortexM0内核构建嵌入式系统时,教师和学生可以清楚地理解CortexM0的运行机制,包括处理器架构、指令集、存储器空间映射和中断机制。

  (2) 通过对AHBLite规范的详细介绍和说明,教师和学生可以清楚地知道在一个芯片内将CortexM0嵌入式处理器与外设模块和存储器系统连接的方法。

  (3) 通过使用Verilog HDL对实现特定功能外设的寄存器传输级RTL描述,教师和学生可以清楚地理解软件寄存器与硬件逻辑行为之间的关系,也就是将软件命令转换成硬件逻辑行为的方法。

  (4) 通过为所定制的CortexM0嵌入式系统硬件编写软件应用,教师和学生可以彻底理解和掌握软件和硬件协同设计、协同仿真和协同调试的方法。

  (5) 基于开放的CortexM0 DesignStart IP核,教师和学生可以从硬件底层逐步完成嵌入式系统的构建,以深入理解和全面掌握嵌入式系统的设计流程。

  正是由于这种方法在未来嵌入式系统课程教学中有着无可比拟的巨大优势,使得作者可以从处理器架构、指令集、AHBLite规范、汇编语言、C语言、外设、CMSIS和驱动,以及操作系统等几个方面,全方位地对嵌入式系统的构建方法进行介绍,以期解决目前国内高校嵌入式系统课程教学所面临的困境,并且为学习更高层次的嵌入式系统设计和应用抛砖引玉。

  本书的最大特色就是将嵌入式系统的设计理论和实践深度融合,通过典型且完整的设计案例多角度全方位地解读嵌入式系统的设计方法。为了方便老师的教学和学生的自学,本书提供了教学课件和设计实例的完整代码,以及公开的视频教学资源,这些资源的获取方式详见书中的学习说明。

  本书的编写得到了ARM大学计划经理陈玮先生的大力支持和帮助,他为本书申请了免费开放的CortexM0 DesignStart IP核设计资源以及教学资源。此外,Xilinx公司的FAE对作者设计案例时遇到的问题进行了耐心细致的回答。作者的研究生李宝隆编写了本书第1章的内容,张艳辉编写了本书第2章的内容,作者的本科生汤宗美编写并整理了本书的配套教学课件,王中正对本书的部分设计案例进行了验证。此外,在本书编写期间,平凉职业技术学院的惠小军和唐海天老师进行了相关内容的学习,并帮助作者编写了第17章和第18章的内容。他们的支持和帮助是作者高质量按时完成该书的重要保证,在此一并向他们表示感谢。

  在本书出版的过程中,也得到了清华大学出版社各位编辑的帮助和指导,在此也表示深深的谢意。由于编者水平有限,编写时间仓促,书中难免有疏漏之处,敬请读者批评指正。

  作者

  2017年1月于北京