系统芯片中各个模块之间的连接通讯就通过总线,总线就作为子系统之间共享的通信链路。总线可以理解为数据传输的协议,大家都按照这种协议(AHB、APB、AXI)来传数据,这样各个模块之间就不会出错,尤其是很多时候别人买你的IP,你要保证人家买过去能用起来,那就需要一个规范来统一标准,我们称之为总线。

总线的优点就是成本低,方便使用。缺点也很明显,就是会造成性能瓶颈,也正是因为这个所以总线协议一直在更新,到现在的AXI4,读写数据通道分开,增加了数据的带宽。

AMBA全称Advanced Microcontroller Bus Architecture,即片上总线协议标准 。AMBA协议是与工艺无关的,没有电气特性,而是一种协议。总共定义了三种总线:

        AHB(Advanced High-performance Bus)

        ASB(Advanced System Bus)用的很少

        APB(Advanced Peripheral Bus)

AMBA发展历史:

AMBA1.0:ASB和APB

AMBA2.0:   AHB、ASB和APB

AMBA3.0:AMBA Advanced eXtensible Interface(AXI)

AMBA4.0:....

AHB特点:

高速总线,高性能。

具有两级流水操作,包括地址周期和数据周期的两级流水线处理。第一个周期读地址,第二个周期写数据,用流水线操作处理,在第二个周期写数据的同时读另一个地址,这样在下一个周期就可以直接写数据,读地址写数据同时进行,这样两周期的操作在流水线开始后每周期都能写一个数据。

AHB可以支持多个总线主设备(最多16个)。

还支持burst传输。就是一次burst传输,一次性传输一串数据,数据长度为burst length。

总线带宽:8、16、32、64、128bits。采用上升沿触发操作。

APB总线特点:

低速总线,低功耗,接口简单。在bridge中锁存地址信号和控制信号。适用于多种外设,采用上升沿触发操作。


AHB组成部分:

AHB主设备(master)

初始化一次读/写操作。某一时刻只允许一个主设备使用总线。比如CPU、DMA、DSP、LCDC等。

AHB从设备(slave)

响应一次读/写操作。通过地址映射来选择使用哪一个从设备。外部存储器控制EMI、APB bridge等。

AHB仲裁器(arbiter)

因为总线上只允许一个master访问,所以在多个master同时申请总线的时候就会引起冲突,这就需要仲裁器来选择给哪个master总线的控制权。但是在AMBA协议中没有定义仲裁算法,所以具体分配可以自己定制,循环优先也好、设定优先级也好,都可以自己定制。

AHB译码器(decoder)

通过地址译码来决定哪一个从设备。它必须知道地址map信息,知道后就会分析总线上的address是什么值,落在那个slave的区域,就会把对应slave的HSEL信号拉高。而作为slave而言,他就看自己的HSEL信号是否被译码器拉高来判断自己是否要工作。

APB组成部分:

AHB2APB Bridge

可以锁存所有地址、数据和信号。进行二级译码来产生APB从设备选择信号,APB有一个地址空间比如0x5000_0000~0x6fff_ffff,其中又分为很多小的APB地址,比如APB1~APB5,当AHB总线上地址落在0x5000_0000~0x6fff_ffff时,代表这块APB被选中,选中之后就会通过二级译码来判断具体是落在那个APB块儿上。

APB总线上的所有其他模块都是APB从设备。

拿一个CPU控制DMA的过程举例说明设备之间的通信:

DMA在系统中主要起一个数据搬运的作用,它可以代替CPU做数据迁移。DMA有自己的地址空间,表格中的Address为偏移地址offset,从DMA基地址开始的一些寄存器保存的一般为状态,称为状态寄存器。CPU控制DMA搬移数据,先从DMA中读DMA的Status,如果读取DMA是ready状态,那么就可以给DMA写的0x00地址给1,然后告诉DMA数据搬运的起始地址(Source address)  和目的地址(Destination address),然后还要告诉DMA搬运数据的个数size。之后就可以把搬运数据的工作交给DMA,然后自己腾出手来去做别的事。CPU控制DMA做数据搬运主要可以分为以下几个步骤:

step1:CPU设置(source address)、(destination address) 、(size)

step2:启动DMA

step3:DMA把数据从memory1传输到memory2

step4:DMA向CPU发起中断请求

step5:CPU检查DMA的状态

AMBA总线的互连 :

Arbiter控制mux选择哪个master有效。选中了master之后,HADDR会被送进Decoder判断选中的是那个slave,然后把对应slave的HSEL信号拉高表示slave工作,接着读入地址和数据信号,这里其他的slave其实也能看到数据和地址信号,但是因为他们的HSEL信号没被拉高,所以不会工作。

master和slave中还有一对常用的master和slave,就是default master和default slave。当没有master在工作的时候,就选择default master来控制总线,这个master可以直接访问总线而不需要两个仲裁周期的时间,他是最常用的master。当没有slave被控制的时候就选择 default slave 来被控制。

这里的信号都是H打头,因为是AHP总线的信号,如果是APB的话,就会是P打头。HRESETn表示低电平有效的复位。HADDR[31:0]是32位系统地址总线。HWDATA[31:0] 写数据总线,从主设备写到从设备。HRDATA[31:0]读数据总线,从从设备读到主设备.

HTRANS是指当前传输的状态,分为IDLE、BUSY、NONSEQ和SEQ。00:IDLE,主设备占据总线,但没进行传输,两次burst中间主设备没准备好的话发IDLE。01:BUSY,主设备占用总线,但是在burst传输过程中还没有准备好进行下一次传输,一次burst传输中间主设备发BUSY。10:NONSEQ,表明一次单个数据的传输,或者一次burst传输的第一个数据,地址和控制信号与上一次传输无关。11:SEQ,表明burst传输接下来的数据,地址和上一次传输的地址是相关的。

        HWRITE信号表示读写状态,HWRITE=1时表示写,=0时表示读状态。HSIZE指BUS的宽度当前传输大小,HSIZE=000时 为8bit,HSIZE=001时为16bit,HSIZE=010时为32bit,以此类推。HBURST指传输的burst类型,总共有8个类型:SINGLE、INCR、WRAP[4|8|16]、INCR[4|8|16]HSELx用来选择slave。HRESP是从设备发给主设备的总线传输状态,有四种状态:ERROR、OKAY、SPLIT和RETRY,RETRY和SPLIT有区别。RETRY不影响被拒绝的master 的优先级,但是如果用SPLIT拒绝了当前的master,arbiter会把当前被拒绝的master优先级降低。HREADY 为高:从设备指出传输结束;为低:从设备需要延长传输周期。

一次无需等待的AHB传输

写操作,HADDR就是写地址,把HWDATA信号写入,如果是读,HADDR就是读地址,采HRDATA信号读出数据。

如果slave没有准备好接受信号,那么传输的数据就会被延长直到HREADY被拉高。但是master不会一直无限等slave,最多等16个周期,slave在HRESP信号里返回RETRY。

但是上面这种传输速度不够快,所以AHB采用的实际上是pipeline结构的数据传输,如下图。

这样一次传输一个地址,传输一个数据,那么每来一次传输,都要decode一次,效率很低,提高传输效率的方法就是burst传输,每一次burst传输只需要decode一次,提高数据传输效率。

AHB总线笔记(一)相关推荐

  1. AHB总线笔记(二)

    目录 AHB BURST操作 WRIAP和INCAR区别 burst 传输1k边界处理 RETRY响应 大小印第安序 AHB仲裁信号 AHB 仲裁 split传输过程 AHB设备结构与接口 在AHB总 ...

  2. 【systemverilog项目】AHB-SRAMC(AHB总线)个人学习笔记

    AHB-SRAMC项目中,应用的总线正是AMBA总线中的AHB总线. 1.AMBA总线的简要概述(关于AMBA总线的详细内容参见<AMBA总线>pdf): AMBA总线中,有三种总线:AH ...

  3. AMBA总线协议APB、AHB——学习笔记

    文章目录 前言 一.总线介绍 1.基本概念 2.典型AMBA系统 二.APB3(Advanced Peripheral Bus) 1.定义 2.信号 3.版本信息 4.信号传输时序图 4.1 状态机 ...

  4. AHB总线介绍及其时序图

    AHB总线简介 AHB是新一代的AMBA总线,旨在解决高性能可综合设计的要求.它是一种高性能的系统总线,能够支持多总线master,提供高带宽操作.AMBA  AHB实现高性能.高时钟频率系统所需的功 ...

  5. AMBA总线协议(三)——一文看懂AHB总线所有协议总结(AHB2 AHB-Lite AHB5 )

    AMBA AHB 总线协议介绍请点击以下链接: AMBA总线协议(一)--一文看懂APB总线协议 AMBA总线协议(二)一文看懂AMBA2 AHB2与AMBA3 AHB-Lite总线协议的区别 AMB ...

  6. AMBA之AHB总线

    转载自漫谈AMBA总线-AHB AHB引言 在上篇文章文章我们已经分析了AMBA总线系列中的APB总线的优点和缺点.总结得出: 缺点1: APB支持且仅支持一个主机 缺点2: APB两个周期才能完成一 ...

  7. 基于 AHB 总线的 SRAM 控制器设计

    基于 AHB 总线的 SRAM 控制器设计 一.基于 AHB 的 sram 设计 1.总体设计框架 2.AHB总线传输协议 ①没有等待状态的单个读写操作 ②有等待状态的单个读写操作 ③连续读写操作 二 ...

  8. SOC设计之AMBA总线-AHB总线详解

    (本文图源AMBA总线2.0) AHB(高级高性能总线):用于高性能高时钟频率的系统模块,AHB 担当高性能系统的中枢总线.AHB 支持处理器,片上存储器,片外存储器以及低功耗外设宏功能单元之间的有效 ...

  9. AMBA AHB总线协议详细说明(AHB5协议)

    一. AHB总线介绍 AHB总线用于性能要求较高的系统互连,比如内部memory.高带宽的外设.GMAC.eMMC/SD等,其仍然为分时独占式总线,也就是说一个时间点总线只会完成一个传输事件.下图是一 ...

最新文章

  1. mysql 错误1930xc1_Mysql写入记录出现 Incorrect string value: '\xB4\xE7\xB1\xCA\xBC\xC7‘错误?(写入中文)...
  2. 开服侠显示服务器已停止,蜘蛛侠:极限(已关服)无法连接服务器是什么原因...
  3. 【Linux】【服务器】 CentOS7下安装MySQL(版本8.0)详细过程步骤
  4. jsp空白页面传html代码,echarts在HTML里测试一般,在jsp页面不显示,而且还把整个页面变成空白...
  5. 文件标识符必须为双精度类型的整数值标量_数据类型
  6. go修改服务器时间,Windows 配置时间同步服务器以及配置时间同步间隔
  7. 关于mousemove和scroll事件的一点技巧
  8. 触类旁通:那些关于 TBL$OR$IDX$PART$NUM 的诡异案例和知识
  9. 11-4 12 Nginx安装 默认虚拟主机 用户认证 域名重定向
  10. TIOBE 5 月编程语言排行榜:暴涨的 C,逆袭的 Scala
  11. 中兴3G模块 MU301
  12. 30. Child Labor Problem and Its Solution 童工问题及解决方法
  13. 番外5. Python OpenCV 中滑动条详细说明与常见问题解决方案
  14. 第三篇: DDcGAN-用于多分辨率图像融合的双判别器生成对抗网络
  15. 机器视觉中常用图像处理库都有哪些?
  16. 100道经典的c语言面试题
  17. c#记录合并PDF和word
  18. openvswitch console输出
  19. mybatis 中between and用法
  20. 计算机毕业设计Java影片租赁系统(系统+程序+mysql数据库+Lw文档)

热门文章

  1. Mysql----关联查询
  2. 考试 --微信小程序学习用demo:考证通,在线题库类小程序
  3. 基于Python的BP网络实现手写数字识别
  4. 【转载】梯度爆炸和梯度消失
  5. HTML自学笔记-1(进入篇)
  6. handler相关学习(三)handler必背
  7. 为什么要用Handler,怎么用Handler
  8. SIM卡的操作系统cos
  9. linux 安装apache apu,Apache编译安装
  10. Python实现BP神经网络ANN单隐层分类模型项目实战