第5章AHBLite总线结构分析
ARM公司提供的高级微控制器总线结构(Advanced Microcontroller Bus Architecture,AMBA)规范是实现ARM处理器和外部设备互连的基础。在基于ARM CortexM0的SoC中,通过AMBA规范中的AHBLite协议,实现ARM CortexM0处理器主设备对多个从设备的无障碍访问。
根据ARM AMBA规范,本章将详细介绍AMBA规范中的AHBLite协议,内容主要包括总线及分类、ARM AMBA系统总线、AMBA3 AHBLite总线、AHBLite总线结构、AHBLite总线时序,以及硬件实现。
通过本章的学习,要求读者掌握AHBLite的结构、接口信号和访问时序关系,这些内容是读者可以顺利学习本章后续内容的基础。
5.1总线及分类
本节介绍总线的概念及分类。
5.1.1总线的概念
传统上,总线是一个通信系统,用于在一个计算机的不同部件之间实现数据传输。硬件和软件两个方面定义了构成总线的要素:
(1) 从硬件上来说,包括物理实现,如电缆或者连线。例如,使用PCI总线电缆连接一个台式计算机内的部件,如图5.1所示。
图5.1PCI插槽和连线
(2) 从软件上来说,包括总线协议,如PCI总线协议。
5.1.2总线分类
在计算机系统中,通常将总线分为两类。
1) 外部总线
外部总线主要用于连接外部设备,例如,将一台计算机与一台打印机进行连接。
2) 内部总线
(1) 内部总线也称为系统总线,用于连接一台计算机的内部部件,例如,将CPU连接到存储器。
(2) 较少的开销,例如,不需要处理电特性,以及配置检测等。
(3) 内部总线的工作速度比外部总线要快。
(4) 在SoC内,将内部总线集成到单个芯片中,因此称它为片上系统总线。
思考与练习51: 说明计算机系统总线的分类,以及它们的作用。
5.2ARM AMBA系统总线
在SoC设计中,高级微控制器总线结构(Advanced Microcontroller Bus Architecture,AMBA)用于片上总线。自从AMBA出现后,其应用领域早已超出了微控制器设备,现在被广泛地应用于各种范围的ASIC和SOC器件,包括用于便携设备的应用处理器。
AMBA协议是一个开放标准的片上互联规范(除AMBA5以外),用于SoC内功能模块的连接和管理。它便于第一时间开发包含大量控制器和外设的多处理器设计。其发展过程如下:
1) 1996年,ARM公司推出了AMBA的第一个版本,包括:
(1) 高级系统总线(Advanced System Bus,ASB);
(2) 高级外设总线(Advanced Peripheral Bus,APB)。
2) 第2个版本为AMBA2,ARM增加了AMBA高性能总线(AMBA Highperformance 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 Highperformance Bus Lite,AHBLite)v1.0。
(2) 高级外设总线(Advanced Peripheral Bus,APB)v1.0。
其中:
(1) AHBLite和APB规范用于ARM的CortexM0、M3和M4。
(2) AXI规范,用于ARM的CortexA9、A8、R4和R5的处理器。
4) 2009年,Xilinx同ARM密切合作,共同为基于FPGA的高性能系统和设计定义了AXI4规范。并且在其新一代可编程门阵列芯片上采用了高级可扩展接口AXI4协议。主要包括:
(1) AXI一致性扩展(AXI Coherency Extensions,ACE)。
(2) AXI一致性扩展简化(AXI Coherency Extensions Lite,ACELite)。
(3) 高级可扩展接口4(Advanced eXtensible Interface 4,AXI4)。
(4) 高级可扩展接口4简化(Advanced eXtensible Interface 4 Lite,AXI4Lite)。
(5) 高级可扩展接口4流(Advanced eXtensible Interface 4 Stream,AXI4Stream)v1.0。
(6) 高级跟踪总线(Advanced Trace Bus,ATB)v1.1。
(7) 高级外设总线(Advanced Peripheral Bus,APB)v2.0。
其中的ACE规范用于ARM的CortexA7和A15处理器。
5) 2013年,ARM推出了AMBA5。该协议增加了一致集线器接口(Coherent Hub Interface,CHI)规划,用于ARM CortexA50系列处理器,以高性能、一致性处理“集线器”方式协同工作,这样就能在企业级市场中实现高速可靠的数据传输。
思考与练习52: 说明ARM AMBA的含义,以及所实现的目的。
思考与练习53: 说明在ARM CortexM0中所采用的总线规范。
思考与练习54: 在ARM AMBA中,对于APB、AHB和AXI来说,性能最高的是,性能最低的是。
5.3AMBA3 AHBLite总线
AMBA3中的AHB,被称为高性能总线,主要体现在:
(1) 可以实现高性能的同步设计;
(2) 支持多个总线主设备;
(3) 提供高带宽操作。
而AHBLite是AHB的子集,简化了AHB总线的设计,典型地,只有一个主设备。
5.3.1AHBLite概述
在基于AHBLite总线构成的系统中,通过该总线,处理器实现对所有外设的控制,如图5.2所示。在该系统中,所有外设均提供AHBLite接口,用于和主处理器进行连接。对于AHBLite来说,它包含数据总线、控制总线和额外的控制信号,其中:
(1) 数据总线用于交换数据信息。
(2) 地址总线用于选择一个外设,或者一个外设中的某个寄存器。
(3) 控制信号用于同步和识别交易,如: 准备,写/读以及传输模式信号。
图5.2由AHBLite构成的处理系统
5.3.2AHBLite总线操作
图5.3总线操作过程
处理器访问一个AHBLite外设的操作过程,如图5.3所示。该过程主要包括:
(1) 通过地址总线,处理器给出所要访问AHBLite外设的地址信息。
(2) 通过地址译码器,生成选择一个外设或者寄存器的选择信号。同时,处理器提供用于控制所选AHBLite外设的控制信号,如读/写,传输数据的数量等。
(3) 如果处理器给出的是读取AHBLite外设的控制信号,则等待外设准备好后,读取该外设的数据。
除了上面介绍的基本操作过程外,AHBLite总线可以实现更多复杂的功能,如传输个数和猝发模式等。
思考与练习55: 说明在AHBLite中所包含的总线类型,以及这些总线各自的作用。
思考与练习56: 根据图5.3,详细说明CortexM0处理器和AHBLite外设的信息交互过程。
5.4AHBLite总线结构
基于AHBLite总线所构成的计算机系统架构,如图5.4所示。在该系统中,包括以下功能部件:
图5.4构成AHBLite系统的单元
(1) 主设备。在本书中,主设备是指CortexM0处理器。此外,在包含直接存储器访问(Direct Memory Access,DMA)控制器的系统中,主设备还包括DMA控制器。
(2) 地址译码器。主要用于选择CortexM0所要访问的从设备。
(3) 从设备多路复用器。主要用于从多个从设备中选择所要读取的数据和响应信号。
(4) 多个从设备。它们都包含AHBLite接口,主设备可以通过该接口访问它们。
此外,系统还应该包含时钟和复位模块单元。时钟模块用于为整个SoC系统提供时钟源; 复位模块用于为整个SoC系统提供复位信号。通过时钟和复位信号,使得SoC系统内的各个功能部件有序工作。
5.4.1全局信号
在AHBLite协议中,提供了两个全局信号,如表5.1所示。在该设计中,HCLK的频率与CortexM0处理器的频率相同。在CortexM0系统中,所有的功能部件都包含该全局信号。在基于ARM CortexM0处理器的SoC系统中,时钟模块和复位模块用于提供全局信号。
表5.1AHBLite协议中的全局信号
信号名字和方向描述
HCLK时钟,源指向所有的部件总线时钟用来驱动所有的总线传输。所有信号的时序均以HCK时钟的上升沿为基准
HRESETn复位,由控制器指向所有的部件总线复位信号低有效,用于复位系统和总线
5.4.2AHBLite主设备接口
AHBLite主设备提供地址和控制信息,用于初始化读和写操作。然后,主设备接收来自从设备的响应信息,包括数据、准备信号和响应信号,如图5.5所示。在该设计中,主设备只有CortexM0处理器,它用于提供访问从设备的AHBLite接口信号。
图5.5构成AHBLite主设备接口信号
为了方便对本书后续内容的学习,下面给出AHBLite主设备接口信号的详细信息,如表5.2所示。
表5.2AHBLite主设备接口信号
信号方向描述
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由主设备指向从设备当该信号为高时,表示当前传输是某个锁定序列的一部分
本书所使用的CortexM0处理器IP核,通过组合表5.2中的信号可以得到四种基本的传输类型,如表5.3所示。
表5.3处理器AHBLite交易类型
交易访问描述
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信号为高
本书所使用的CortexM0处理器,总是工作在小端模式,所有的交易总是自然对齐。HRDATA和HWDATA活动字节的通道,以及它们在CortexM0处理器里对应的源/目的寄存器,如表5.4所示。
表5.4处理器AHBLite读/写数据字节通道
地 址 阶 段数 据 阶 段
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]
用于CortexM0处理器的存储器属性由ARMv6M架构决定,其地址空间的使用规则是固定的。从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.3AHBLite从设备接口
为了响应系统主设备所建立的传输,从设备也需要提供对应的AHBLite接口,如图5.6所示。通过本身所提供的AHBLite接口,从设备与主设备实现数据传输。
在从设备接口上,有一个HSELx信号,由地址译码器的输出信号HSELx给出,用于在一个时刻选择所要访问的一个从设备。
图5.6构成AHBLite从设备接口信号
为了方便本书后续内容的学习,下面给出AHBLite从设备接口信号的详细信息,如表5.6所示。
表5.6AHBLite从设备接口信号
信号方向描述
HRDATA [31∶0]由从设备指向多路选择器在读传输时,读数据总线将所选中从设备的数据发送到从设备多路选择器,然后由从设备多路选择器将数据传给主设备
HREADYOUT由从设备指向多路选择器当该信号为高时,完成总线上的传输过程; 该信号驱动为低时,扩展一个传输
HRESP由从设备指向多路选择器传输响应,当通过多路复用器时,为主设备提供额外的传输状态信息。当该信号为低时,表示传输状态为OKAY; 当该位为高时,表示传输状态是ERROR
5.4.4地址译码器和多路复用器
基于AHBLite所构建的CortexM0 SoC系统还提供了地址译码器和多路复用器。从结构上来说:
(1) 地址译码器为一对多设备,由一个主设备指向多个从设备;
(2) 多路复用器为多对一设备,由多个从设备指向一个主设备。
注: 在本书中,主设备只有ARM CortexM0处理器。
1. 地址译码器的功能
在系统中,地址译码器的输入为地址信号,输出为选择信号,如图5.7所示,它实现的功能主要包括:
(1) 根据主设备在地址总线上所提供的访问地址空间信息,生成选择一个从设备的选择信号。
(2) 同时,选择信号也连接到从设备多路选择器,用于从多个从设备中选择所对应的从设备返回信息。
图5.7地址译码器和从设备多路复用器
2. 多路复用器的功能
在系统中,来自不同从设备的响应信号,包括: HRDATA、HREADY和HRESP连接到多路复用器的输入,如图5.7所示。根据地址译码器所生成的选择信号,多路复用器将选择的从设备响应信号送给主设备。
3. 接口信号
译码器和多路选择器信号的详细信息,如表5.7所示。
表5.7译码器和多路选择器信号
信号方向描述
HRDATA [31∶0]由多路复用器指向主设备来自多路复用器到主设备的读数据
HREADY由多路复用器指向主设备和从设备来自多路复用器到主设备的准备信号。当该位为高时,该信号表示到主设备和先前完成传输的所有从设备
续表
信号方向描述
HRESP由多路复用器指向主设备来自多路复用器到主设备的传输响应信号
HSELx由译码器指向从设备每个AHBLite从设备有自己的从设备选择信号HSELx,该信号表示当前传输所对应的从设备。当一开始就选中该从设备时,它也必须监视HREADY的状态,以确保在响应当前传输前,已经完成前面的总线传输
思考与练习57: 说明在基于AHBLite所构建的SoC系统中所包含的主要功能部件。
思考与练习58: 说明在基于AHBLite所构建的SoC系统中地址译码器的功能。
思考与练习59: 说明在基于AHBLite所构建的SoC系统中多路复用器的功能。
思考与练习510: 根据图5.7,分析基于AHBLite的架构。
5.5AHBLite总线时序
一个AHBLite传输包括两个阶段:
1) 地址阶段
只持续一个HCLK周期,除非被前面的总线传输进行了扩展。
2) 数据阶段
可能要求几个HCLK周期。使用HREADY信号来控制完成传输所需要的周期数。
在AHBLite中,引入了流水线传输的机制,包括:
(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所示,包括:
……