AMBA--AHB总线协议学习及Verilog实现与仿真(一)

news2025/1/11 13:00:51

1、AHB总线概述

AHB:Advanced High-performance Bus,即高级高性能总线。AHB总线是SOC芯片中应用最为广泛的片上总线。下图是一个典型的基于AMBA AHB总线的微控制器系统:

        基于AMBA AHB的设计中可以包含一个或多个总线主机,通常一个系统里至少包含一个处理器和一个测试接口;DMA和DSP作为总线主机同样是比较常见的,DMA既可以做为从机也可以做为主机,当处理器向DMA发送指令时,DMA做为从机;当DMA与其他设备交换数据时,DMA可以做为主机。

典型的AHB总线设计包括一下几个部分:

(1)AHB主机:主机可以通过提供地址和控制信息发起读写操作;同一时刻总线上只允许一个主机占用总线

(2)AHB从机:从机需在给定的地址空间范围内响应总线上的读或写操作;从机通过信号将成功、失败、等待数据传输等信息返回至有效的主机。

(3)AHB仲裁器:总线仲裁器确保同一时刻只有一个主机被允许发起传输。所有的AHB总线都必须包含一个仲裁器,即使是在单主机总线系统中。

(4)AHB译码器:译码器的作用是对传输中的地址信号进行译码,并提供给从机一个选择信号。所有的AHB总线中都必须包含一个中央译码器。

2、总线互联

AMBA AHB总线协议被设计为一个使用中央多路选择器的互联方案,如下表:

        基于这种方案,所有的主机在需要发起传输时,都可以驱动地址和控制信号,由仲裁器决定哪一个主机的地址和控制信号(写传输时包含写数据信号)连通到总线上的所有从机。同时总线需要一个中央译码器,用于控制读数据和应答信号的多路数据选择器,该多路数据选择器用于选择传输中涉及的从机的相关信号。

3、AHB信号

AHB信号以字母H作为前缀,如下表所示:

 AMBA AHB也需要一些信号用于支持多主机总线操作,其中一些仲裁信号需要点对点连接:

4、AMBA AHB操作概述

        在一次AHB传输开始之前,主机必须被授予总线访问权。这个过程起始于主机向仲裁器发出一个总线请求,由仲裁器决定该主机何时被授予总线使用权。被授权的主机通过驱动地址和控制信号来发起一次AHB传输,这些信号提供了地址、传输方向、传输宽度等信息,以及会表明当前传输是否为突发传输的一部分。AHB支持两种形式的突发传输:

(1)增量突发,在地址边界不进行回环;

(2)回环突发,在特定地址边界回环

写数据总线用于将数据从主机发送到从机,读数据总线用于将数据从从机传输到主机。

每次数据传输包含:

(1)一个地址和控制周期;

(2)一个或多个数据周期

由于地址不支持扩展,所以所有的从机必须在地址周期内采样地址,而数据可以通过HREADY信号进行扩展延长,当HREADY信号为低,总线将插入等待状态,以此提供从机额外的采样数据或者提供数据的时间

在传输中,从机使用应答信号HRESP[1:0]来表示传输状态:

(1)OKAY:OKAY响应表示传输正常,且当HREADY信号为高时,表示传输成功

(2)ERROR:ERROR响应表示发生了传输错误,并且传输失败

(3)RETRY and SPLIT:RETRY和SPLIT都表示当前传输未能即刻完成,但是主机应继续尝试传输(RETRY不会影响该请求主机的优先级,但是SPLIT会影响该请求主机的优先级

一般而言,仲裁器授权另一个主机前,允许当前被授权主机完成突发传输。然而,为了避免过多的仲裁延迟(当前主机占用过多总线周期),总线可以打断一个突发传输,在这种情况下,主机必须重新申请总线,以完成后续的突发传输

5、基本传输

一个AHB传输包含两个部分:

(1)地址相位,仅包含一个时钟周期;

(2)数据相位,可以使用HREADY信号,维持多个时钟周期;

下图表示了一个无等待状态的简单传输:

 无等待的简单传输时序图

        在无等待的简单传输中,主机在HCLK的上升沿驱动地址和控制信号到总线上,在下一个时钟上升沿时,从机对地址和控制信号进行采样,从机采样得到地址和控制信息后,可以驱动应答信号给与主机适当的响应,主机在第三个时钟的上升沿对应答信号进行采样。

        这个简单的例子演示了在不同的时钟周期地址和数据相位是怎样产生的。实际上,当前传输的地址相位都对应于前一次传输的数据相位,这种地址和数据交叠现象,是总线能够进行流水线传输的基础,这样不仅能够获得更高的传输性能,也能为从机进行响应提供充足的时间。

        从机可以在数据相位中,插入等待状态,以此获得更多得时间来完成传输:

 有等待状态的传输

注意:

(1)在写传输中,主机需要在整个扩展周期内保持写数据信号稳定

(2)在读传输中,从机没必要提供有效数据,直到传输结束时

当传输以这种方式做扩展时,将对下一个传输的地址相位产生一个扩展的副作用,如下图所示:

 该图表示了三个不相关的地址A、B、C上的传输,图中地址A和C的传输都没有等待状态,地址B的传输通过HREADY信号的拉低插入了一个等待的数据相位,这样导致了地址C传输的地址相位进行了扩展。

6、传输类型

AHB传输类型可以分为四种,通过HTRANS[1:0]的取值来划分:

 下图是一个不同传输类型的例子:

从图中可以看出:

第一个传输为以此突发传输的开始(T1),所以其传输类型为NONSEQ;

主机不能立刻执行突发传输中的第二次传输,所以使用了BUSY的传输类型(T2)来延迟下一次传输的开始,注意此时地址已经时下次传输的地址,控制信号和下次传输保持一致,主机只插入了一个BUSY,所以T3执行第二次传输;

主机执行第三次传输(T4),由于从机将HREADY信号拉低,插入了一个等待周期,引起地址相位的扩展;

T6周期完成第三次传输,T7周期完成第四次传输(图中T8边沿)。

7、突发操作

AMBA AHB协议定义了4、8和16拍的突发,未定义长度的突发传输以及单次传输;协议支持增量和回环的突发方式。

增量突发方式访问连续地址空间,每次传输的地址是前一次传输地址增加一个增量偏移;

回环突发中,如果传输的其实地址并未和突发中的字节总数对齐,则突发传输地址将在达到边界处回环。例如:一个4拍回环突发的字(4字节)访问将在16字节的边界处回环,如果传输的起始地址为0x34,那么突发中将包含4个地址:0x34,0x38,0x3C,0x30(16字节表示为0x10,0x3C的下一个地址应该为0x40,但是0x40是边界,所以0x3C后的下一个地址应该为0x40-0x10=0x30)。

AMBA AHB 有8种突发操作,使用信号HBRUST[2:0]表示:

突发不能超过1K的地址边界,所以主机尽量不要发起将要跨过地址边界的定长的增量突发

一次突发传输的数据总量,等于节拍数乘以每拍包含的字节数。所以突发传输必须将地址边界和数据大小对齐,例如,字传输必须对齐到字地址边界,即A[1:0]=00;半字传输必须对齐到半字地址边界,即A[0]=0。

参考:

1.ARM IHI 0011A_AMBA Specification Rev2.0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/163402.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL——如何正确的显示随机消息

在之前的文章中有介绍order by语句的几种执行模式。考虑如下场景:有一个APP,有一个随机显示英语单词的功能,也就是根据每个用户的级别有一个单词表,然后这个用户每次访问首页的时候,都会随机滚动显示三个单词。会发现随…

PhotoZoom2023专业的图片无损放大软件最新V8版功能介绍

PhotoZoom 8 全新版本 震撼来袭。 一款划时代的、技术上产生革命性影响的数码图片放大工具。 我们获取图片的方法,一般是从度娘图片和各个图库里找素材。但一般网上搜索到的很多图片像素都非常小,普通方法放大就像打了马赛克一样,根本没法直接…

基于STM32的室内环境监测系统、基于STM32的智能家居系统

程序源码无删减 整个开发用到的所有资料如下: 开发软件MDK JLINK驱动安装包及相关文件 stm32开发资料-stm32f103c8t6 PCtoLCD2002 取模软件 stm32配套的液晶屏资料以及相关程序 Stm32f103c8t6 UCOSII 各传感器的数据手册以及程序、BMP180、DHT11温度模块、HC-SR04 …

EthernetOnTCP--基于Qt QSslSocket 套接字在PCAP 集线器上实现以太网隧道

在上一篇文章中,我们使用PCAP建立了本地的软件集线器(Hub)。考虑到较远距离的跨车间调试,有必要使用Tcp连接构造一个以太网的隧道,使得两个车间之间的调试设备可以虚拟的连接在一个Hub上。当然,我们可以使用…

【ROS】—— 机器人系统仿真 —Rviz中控制机器人模型运动与URDF集成Gazebo(十五)

文章目录前言1. Arbotix使用流程1.1 安装 Arbotix1.2 创建新功能包,准备机器人 urdf、xacro 文件1.3 添加 Arbotix 配置文件1.4 编写 launch 文件配置 Arbotix1.5 启动 launch 文件并控制机器人模型运动2. URDF集成Gazebo2.1 URDF与Gazebo基本集成流程2.2 URDF集成G…

Spring Boot整合Redis(gradle + gson + lombok + redisTemplate)

本文创建了gradle项目,用来整合Spring Boot和Redis,用到了gradle gson lombok redisTemplate等技术。 重要文件: 文件名说明build.gradlegradle配置文件Redis2Application.java启动类Controller.java控制器类StudentService.java业务逻辑…

深入解析Linux虚拟化KVM-Qemu分析之virtio设备

说明: KVM版本:5.9.1QEMU版本:5.0.0工具:Source Insight 3.5, Visio 1. 概述 先来张图: 图中罗列了四个关键模块:Virtio Device、Virtio Driver、Virtqueue、Notification(eventfd…

Linux——简单了解文件与目录结构

1、 Linux 文件 1.1 概述 Linux系统 一切皆文件。 从我们刚接触到Linux系统,就能听到这句话:Linux系统 一切皆文件。 我们来看看Linux文件系统和Windos的差异: Windows ,我们知道一台新的电脑到手之后,往往都只有一…

Vue2的双向绑定真的就是观察者模式吗?

导语建议先看看往期的推文,对vue响应式有一定理解后再阅读本文。Vue的双向绑定(数据劫持)响应式与观察者模式(特别是附录,观察者模式与发布订阅模式)关于Vue2深入响应式原理,作者原话为&#xf…

搭建nacos环境(保姆级教程)

2.2.1 服务发现中心 根据上节讲解的网关的架构图,要使用网关首先搭建Nacos。 首先搭建Nacos服务发现中心。 在搭建Nacos服务发现中心之前需要搞清楚两个概念:namespace和group namespace:用于区分环境、比如:开发环境、测试环…

【Linux】进程间管道通信、线程池

目录 一、进程间通信的概念 二、匿名管道 2.1 什么是管道 2.2 管道的实现 2.3 管道的使用 三、进程池 3.1 进程池实现逻辑 3.2 模拟任务表 3.3 进程池的创建 四、命名管道 4.1 创建命名管道 4.2 命令管道的使用 一、进程间通信的概念 进程具有独立性,…

面试系列:单点登录的知识(一)

大家好,我是车辙,由于目前接手的业务涉及到了单点登录,所以一直在疯狂的去补充这方面的知识。也写下了这篇面试形式的文章,写的不好大家轻点 Diss。 面试开始 在焦急的等待中,一位看上去比较年轻的小伙子走了过来。我…

Leetcode:701. 二叉搜索树中的插入操作(C++)

目录 问题描述: 实现代码与解析: 递归: 原理思路: 迭代: 原理思路: 问题描述: 给定二叉搜索树(BST)的根节点 root 和要插入树中的值 value ,将值插入二…

Codeforces Round #843 (Div. 2)——A,B,C,E

​​​​​​​​​​​Dashboard - Codeforces Round #842 (Div. 2) - Codeforces A: 思维构造 题意:给定一个由 ab 组成的字符串,将该字符串拆分成 3 个部分(a,b,c),要求中间部分的字典序最大…

2022 年终总结

在 12 月 31 号晚上这天,打开朋友圈大家都在告别 2022、迎接 2023,我却想不到任何值得发的内容。没有外出体会元旦的节日氛围,也没有观看任何跨年活动,2022 年最后一秒跟全年的 3153.6 万秒没有任何区别。 甚至这篇总结都差点没有…

RK3568源码编译与交叉编译环境搭建

本篇进行飞凌OK3568-C开发板的Linux系统开发需要用的软件交叉编译环境的配置。 对于软件开发,如果只是使用C/C代码,则在自己的Ubuntu虚拟机中添加RK3568对应的交叉编译器(gcc/g)即可,如果要进行Qt开发,则还要再交叉编译与RK3568配…

UDS诊断系列介绍09-1485服务

本文框架1. 系列介绍1.1 14服务概述1.2 85服务概述2. 14服务请求与应答2.1 14服务请求2.2 14服务正响应3. 85服务请求与应答3.1 85服务请求3.2 85服务正响应3.3 否定应答4. Autosar系列文章快速链接1. 系列介绍 UDS(Unified Diagnostic Services)协议&a…

graalvm+spring-cloud-gateway打造又快又小的类nginx本地网关

前言 网关是微服务架构的入口,外网请求通过网关转发到独立的微服务。项目一般会经过多个环境的测试,最终发布到生产。一个http请求,如:http://public_host/api/v1/some_service/some_path?ab&cd会先经过公网域名&#xff0c…

ThinkPHP5.x未开启强制路由(s参数)RCE

官方公告:https://blog.thinkphp.cn/869075 由于框架对控制器名没有进行足够的检测会导致在没有开启强制路由的情况下可能的getshell漏洞,受影响的版本包括5.0和5.1版本 ThinkPHP5基础 环境搭建 官网直接下载完整包 https://www.thinkphp.cn/down/870.…

ElasticSearch集群架构及底层原理

前言ElasticSearch考虑到大数据量的情况,集群有很多的部署模式,本篇不会具体进行演示了,只是说明一下有哪些架构可以选,及一些原理的简单介绍,如果要看具体操作的那么可以自行进行搜索,这不是本篇博客要介绍…