AMBA:AHB_Slave_Mux的解析与HREADY、HREADYOUT
相关阅读
AMBA
https://blog.csdn.net/weixin_45791458/category_12800219.html?spm=1001.2014.3001.5482
简介
从1999年的AMBA2发布以来,AHB协议中就存在数据选择器,如图1所示的AHB2协议的总线互连。

图1 AHB2的总线互连
这幅图画得比较粗糙,其中没有标出Master和Arbiter之间的HBUSREQ信号和HGRANT信号,Slave和Master之间的HRESP信号和HRAEDY信号以及Decoder和Slave之间的HSEL信号,图2是重新绘制的一个更加详细的结构。

图2 详细的AHB2的总线互连
MUX1根据Arbiter给出的HMASTER信号将当前占用总线的Master的信号输出给所有Slave,它是纯组合逻辑的。
Decoder根据HADDR的高位地址进行译码,产生相应的HSEL信号选择相应的Slave,它是纯组合逻辑的。
MUX2根据Decoder提供的HSEL信号将相应Slave的信号输出给当前占用总线的Master,但它不是纯组合逻辑的。
问题阐述
为了简单起见,我们使用图3所示的AHB-Lite说明问题,试想一下如果MUX2是组合逻辑会问题?

图3 AHB-Lite的总线互连
因为AHB的流水线特性,所以一次传输的地址阶段和数据阶段是先后进行的,如果出现连续访问两个Slave的情况,前一次传输的数据阶段应该和后一次传输的地址阶段重合,如果MUX是纯组合逻辑的,则会出现传输失败的情况,如图4所示,此时Data(A)无法通过MUX传回Master了,因为此时Master发出的地址已经改变,该问题还会存在Slave和Master之间的HRESP信号和HRAEDY信号。

图4 连续访问两个Slave
解决问题
想必读者也许已经想到了,只要在MUX中用寄存器保存选择信号就可以解决问题。事实也确实如此,图5展示了MUX的详细结构。

图5 MUX的详细结构
可以看出其中分为HREADY和HREADYOUT信号两种,这是为了解决在连续访问两个Slave时的问题。
MUX输出的HREADY信号提供给Master和Slave,如果为低表示:Master的下一次传输需要保持在地址阶段,即使Slave自身能够响应下一次传输(HREADYOUT信号为高)也不能响应,因为当前属于其他Slave的传输尚未完成,HREADY信号实际上与Slave输出的HREADYOUT信号相关。
代码实现
module AHB_Slave_Mux #(// Data Bus Widthparameter DW=32)(input wire HCLK, // Clockinput wire HRESETn, // Resetinput wire HSEL0, // HSEL for AHB Slave #0input wire HREADYOUT0, // HREADY for Slave connection #0input wire HRESP0, // HRESP for slave connection #0input wire [DW-1:0] HRDATA0, // HRDATA for slave connection #0input wire HSEL1, // HSEL for AHB Slave #1input wire HREADYOUT1, // HREADY for Slave connection #1input wire HRESP1, // HRESP for slave connection #1input wire [DW-1:0] HRDATA1, // HRDATA for slave connection #1input wire HSEL2, // HSEL for AHB Slave #2input wire HREADYOUT2, // HREADY for Slave connection #2input wire HRESP2, // HRESP for slave connection #2input wire [DW-1:0] HRDATA2, // HRDATA for slave connection #2output wire HREADY, // HREADY to AHB master and AHB slavesoutput wire HRESP, // HRESP to AHB masteroutput wire [DW-1:0] HRDATA // Read data to AHB master);reg [2:0] reg_hsel; // Register selection controlwire [2:0] nxt_hsel_reg; // next state for nxt_hsel_regassign nxt_hsel_reg[0] = HSEL0 ;assign nxt_hsel_reg[1] = HSEL1 ;assign nxt_hsel_reg[2] = HSEL2 ;// Registering MuxCtrlalways @(posedge HCLK or negedge HRESETn)beginif (~HRESETn)reg_hsel <= {3{1'b0}};else if (HREADYOUT)reg_hsel <= nxt_hsel_reg;endassign HREADY =((~reg_hsel[0]) | HREADYOUT0) &((~reg_hsel[1]) | HREADYOUT1) &((~reg_hsel[2]) | HREADYOUT2) ;assign HRDATA =({DW{reg_hsel[0]}} & HRDATA0) |({DW{reg_hsel[1]}} & HRDATA1) |({DW{reg_hsel[2]}} & HRDATA2) ;assign HRESP =(reg_hsel[0] & HRESP0 ) |(reg_hsel[1] & HRESP1 ) |(reg_hsel[2] & HRESP2 ) ;
可以看出,HREADYOUT信号在之前被选择的Slave输出的HREADYOUT信号为低时才为低,同时HRDATA信号和HRESP信号也是通过被寄存的HSEL信号进行选择的。
实际案例
图6所示的时序图可以帮助读者更好地理解。

图6 连续访问两个Slave,且第一个Slave插入了等待
图6中的Sx.y表示slave x的第y个地址或对相应的数据,Sx表示选中Slavex,为简便起见,假设全程进行读传输。
在第三个时钟上升沿后,由于slave1还未准备好数据S1.4,因此将HREADYOUT1信号拉低,由于此时HSEL_reg保存选择Slave1,因此HREADY信号也被拉低,在HREADY信号为低时,HSEL_reg不会更新而是继续保存选择Slave1,需要注意的是,MUX是根据HSEL_reg选择传回的数据和相应信号的,因此数据S1.4能正确地传输回Master。
HREADY信号同时提供给了Slave2,因为Slave1的传输尚未结束,所以即使已经是Slave2的地址阶段了,且HSEL选择了Slave2,Slave2的HREADYOUT2信号为高,但不能进行响应,因为HREADY为低。这导致了Slave1传输的数据阶段和Slave2传输的地址阶段重合了两个周期(正常的流水应该是一个周期)。
相关文章:
AMBA:AHB_Slave_Mux的解析与HREADY、HREADYOUT
相关阅读 AMBAhttps://blog.csdn.net/weixin_45791458/category_12800219.html?spm1001.2014.3001.5482 简介 从1999年的AMBA2发布以来,AHB协议中就存在数据选择器,如图1所示的AHB2协议的总线互连。 图1 AHB2的总线互连 这幅图画得比较粗糙࿰…...
初始Linux (2) : 权限
1. su [用户名]及权限概念 Linux中有两种用户:普通用户、超级用户 超级用户可以再 linux 系统下做任何事情,不受限制;而普通用户只能做有限的事情。 可以使用指令:su -快速进入root账户,但需要输入相关密码。 超级用…...
在Mac下安装时间序列软件Hector
1.软件介绍 Hector 是一款开源软件,专用于 GNSS 时间序列数据的处理与分析,广泛应用于地球科学研究。它帮助研究人员从 GNSS 数据中提取长期趋势、周期性成分,并建模噪声特性,用于地壳形变、地震影响和气候变化等方面的研究。Hec…...
JVM1.8内存模型
一、内存模型概览 本文介绍的是JDK1.8的内存模型。1.8同1.7相比,最大的差别就是元空间取代了永久代。元空间的本质和永久代类似,都是堆JVM规范中方法区的实现。不过元空间与永久代之间最大的区别在于:元空间并不存在虚拟机中,而是…...
windows C#-类型系统(上)
C# 是一种强类型语言。 每个变量和常量都有一个类型,每个求值的表达式也是如此。 每个方法声明都为每个输入参数和返回值指定名称、类型和种类(值、引用或输出)。 .NET 类库定义了内置数值类型和表示各种构造的复杂类型。 其中包括文件系统、网络连接、对象的集合和…...
【酷狗音乐】逆向登录参数分析
mid、uuid参数 从cookie里面取值kg_mid,没有就生成 dfid也是从cookie里面取的kg_dfid 清空cookie dfid "-"也是可以的 md5加密了一个随机uuid import uuid import hashlibuuid1 str(uuid.uuid4())def md5_encrypt(text):return hashlib.md5(text.enco…...
Jenkins面试整理-Jenkins Pipeline 是什么?
Jenkins Pipeline 是一种将 Jenkins 中的持续集成和持续交付(CI/CD)流程定义为代码的方式。Pipeline 提供了一种灵活、可维护的方式,通过脚本来描述构建、测试、部署等流程。Jenkins Pipeline 使用 Groovy 作为脚本语言,并可以通过 Jenkinsfile 来定义和管理流水线。 Jenki…...
RHCE第三次实验
要求 (1)学生信息网站只有song和tian两人可以访问,其他用户不能访问。 (2)访问缴费网站实现数据加密基于https访问。 架设一台NFS服务器,并按照以下要求配置 1、开放/nfs/shared目录,供所…...
基于LORA的一主多从监测系统_4G模块上巴法云
临时添加一个更新,更换云平台为巴法云,事情的起因是因为阿里云这个老六,早上睡了一觉起来发短信告诉我云平台给我停了,得交钱,好嘛,不过也没办法现在这基本都收费,当然还有onenet可以用…...
pip使用
pip全称pip install package,是python第三方包sitepackage管理的工具,安装,卸载第三方包。安装python时可以选择安装pip,或自己安装pip 查看pip是否安装:pip --version 安装pip :pip python -m pip install --upgrade…...
Django ORM详解:外键使用(外键逻辑关联)与查询优化
Django数据库迁移 # 创建迁移 python manage.py makemigrations your_app_name # 应用迁移 python manage.py migrate # 查看迁移状态 python manage.py showmigrations # 回滚迁移 python manage.py migrate your_app_name 0001 # 修改表后,删除迁移记录和表删除迁移记录后重…...
【Python】实战:使用input()从键盘获取一个字符串,判断这个字符串在列表中是否存在(函数体不能使用in),返回结果为True或False
使用input()从键盘获取一个字符串,判断这个字符串在列表中是否存在(函数体不能使用in),返回结果为True或False def exists_in_list(input_string, str_list):# 遍历列表中的每个元素for item in str_list:if item input_string: # 如果当前元素等于输…...
【YApi】接口管理平台
一、简介 YApi 是一个用于前后端开发团队协作的 API 管理平台,帮助团队更加高效地进行 API 接口的设计、测试、文档管理和版本控制等工作。 YApi 主要功能: API 设计和管理:提供 API 设计和文档生成工具,使开发者能够轻松创建、…...
QNAP威联通NAS忘记密码怎么办?
创作立场:原创不易,拒绝搬运~ hello 大家好,我是你们的老伙伴,稳重的大王~ 如题:在使用QNAP 威联通NAS期间,如果忘记密码,怎么去找回密码呢? 每台QNAP 威联通NAS,在机器…...
MySQL FIND_IN_SET 函数详解
文章目录 1. 基本语法2. 使用场景3. 实战示例3.1 基础查询示例3.2 与其他函数结合使用3.3 动态条件查询 4. 性能考虑5. 常见问题和解决方案5.1 大小写敏感问题5.2 空值处理5.3 模糊匹配 6. 总结 1. 基本语法 FIND_IN_SET 函数的基本语法如下: FIND_IN_SET(str, st…...
【零售和消费品&厨房】厨房食材检测图像分割系统源码&数据集全套:改进yolo11-goldyolo
改进yolo11-RepNCSPELAN等200全套创新点大全:厨房食材检测图像分割系统源码&数据集全套 1.图片效果展示 项目来源 人工智能促进会 2024.10.30 注意:由于项目一直在更新迭代,上面“1.图片效果展示”和“2.视频效果展示”展示的系…...
自制田字格word
背景 孩子上小学要开始学认字了,每周有好多字要打印,要是直接拿一张A4纸去打印,字的排版就显得尤为重要,排过来排过去,总感觉不够正式。就想去网上搜一个可以下载的田字格模板。某度搜了半天,倒是搜到一堆…...
微软官方 .NET 混淆软件 Dotfuscator
微软官方 .NET 混淆软件 Dotfuscator 1、前言2、Dotfuscator 特色2.1、强大的保护2.2、不需要顾问2.3、世界一流的支持2.4、广泛的平台支持 3、Dotfuscator 功能介绍3.1、.NET Obfuscator3.2、篡改防御和提示3.3、监控性能和使用情况3.4、Silverpght XAML Obfuscatio3.5、WPF B…...
19 Docker容器集群网络架构:二、etcd 集群部署
文章目录 Docker容器集群网络架构:二、etcd集群离线部署2.1 准备工作2.1.1 上传etcd2.1.2 解压etcd2.1.3 拷贝文件到/usr/local/bin2.1.4 创建相关目录并赋权2.2 创建etcd集群2.2.1 创建etcd配置文件2.2.2 配置etcd服务文件2.2.3 启动ectd服务2.3 查看etcd集群成员2.3.1 查看e…...
React + SpreadJS 开发时常见问题
在使用React与SpreadJS进行开发时,可能会遇到各种各样的问题。以下是一些常见的问题及其解决建议: 1. SpreadJS初始化失败 问题描述: 有时候SpreadJS的初始化可能会失败,特别是在React组件的生命周期内不当的初始化时机。 解决…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...
python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...
GitHub 趋势日报 (2025年06月06日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...
