当前位置: 首页 > news >正文

AMBA:AHB_Slave_Mux的解析与HREADY、HREADYOUT

相关阅读

AMBAicon-default.png?t=O83Ahttps://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发布以来&#xff0c;AHB协议中就存在数据选择器&#xff0c;如图1所示的AHB2协议的总线互连。 图1 AHB2的总线互连 这幅图画得比较粗糙&#xff0…...

初始Linux (2) : 权限

1. su [用户名]及权限概念 Linux中有两种用户&#xff1a;普通用户、超级用户 超级用户可以再 linux 系统下做任何事情&#xff0c;不受限制&#xff1b;而普通用户只能做有限的事情。 可以使用指令&#xff1a;su -快速进入root账户&#xff0c;但需要输入相关密码。 超级用…...

在Mac下安装时间序列软件Hector

1.软件介绍 Hector 是一款开源软件&#xff0c;专用于 GNSS 时间序列数据的处理与分析&#xff0c;广泛应用于地球科学研究。它帮助研究人员从 GNSS 数据中提取长期趋势、周期性成分&#xff0c;并建模噪声特性&#xff0c;用于地壳形变、地震影响和气候变化等方面的研究。Hec…...

JVM1.8内存模型

一、内存模型概览 本文介绍的是JDK1.8的内存模型。1.8同1.7相比&#xff0c;最大的差别就是元空间取代了永久代。元空间的本质和永久代类似&#xff0c;都是堆JVM规范中方法区的实现。不过元空间与永久代之间最大的区别在于&#xff1a;元空间并不存在虚拟机中&#xff0c;而是…...

windows C#-类型系统(上)

C# 是一种强类型语言。 每个变量和常量都有一个类型&#xff0c;每个求值的表达式也是如此。 每个方法声明都为每个输入参数和返回值指定名称、类型和种类(值、引用或输出)。 .NET 类库定义了内置数值类型和表示各种构造的复杂类型。 其中包括文件系统、网络连接、对象的集合和…...

【酷狗音乐】逆向登录参数分析

mid、uuid参数 从cookie里面取值kg_mid&#xff0c;没有就生成 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第三次实验

要求 &#xff08;1&#xff09;学生信息网站只有song和tian两人可以访问&#xff0c;其他用户不能访问。 ​ &#xff08;2&#xff09;访问缴费网站实现数据加密基于https访问。 架设一台NFS服务器&#xff0c;并按照以下要求配置 1、开放/nfs/shared目录&#xff0c;供所…...

基于LORA的一主多从监测系统_4G模块上巴法云

临时添加一个更新&#xff0c;更换云平台为巴法云&#xff0c;事情的起因是因为阿里云这个老六&#xff0c;早上睡了一觉起来发短信告诉我云平台给我停了&#xff0c;得交钱&#xff0c;好嘛&#xff0c;不过也没办法现在这基本都收费&#xff0c;当然还有onenet可以用&#xf…...

pip使用

pip全称pip install package,是python第三方包sitepackage管理的工具&#xff0c;安装&#xff0c;卸载第三方包。安装python时可以选择安装pip&#xff0c;或自己安装pip 查看pip是否安装&#xff1a;pip --version 安装pip &#xff1a;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()从键盘获取一个字符串&#xff0c;判断这个字符串在列表中是否存在(函数体不能使用in)&#xff0c;返回结果为True或False def exists_in_list(input_string, str_list):# 遍历列表中的每个元素for item in str_list:if item input_string: # 如果当前元素等于输…...

【YApi】接口管理平台

一、简介 YApi 是一个用于前后端开发团队协作的 API 管理平台&#xff0c;帮助团队更加高效地进行 API 接口的设计、测试、文档管理和版本控制等工作。 YApi 主要功能&#xff1a; API 设计和管理&#xff1a;提供 API 设计和文档生成工具&#xff0c;使开发者能够轻松创建、…...

QNAP威联通NAS忘记密码怎么办?

创作立场&#xff1a;原创不易&#xff0c;拒绝搬运~ hello 大家好&#xff0c;我是你们的老伙伴&#xff0c;稳重的大王~ 如题&#xff1a;在使用QNAP 威联通NAS期间&#xff0c;如果忘记密码&#xff0c;怎么去找回密码呢&#xff1f; 每台QNAP 威联通NAS&#xff0c;在机器…...

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 函数的基本语法如下&#xff1a; FIND_IN_SET(str, st…...

【零售和消费品&厨房】厨房食材检测图像分割系统源码&数据集全套:改进yolo11-goldyolo

改进yolo11-RepNCSPELAN等200全套创新点大全&#xff1a;厨房食材检测图像分割系统源码&#xff06;数据集全套 1.图片效果展示 项目来源 人工智能促进会 2024.10.30 注意&#xff1a;由于项目一直在更新迭代&#xff0c;上面“1.图片效果展示”和“2.视频效果展示”展示的系…...

自制田字格word

背景 孩子上小学要开始学认字了&#xff0c;每周有好多字要打印&#xff0c;要是直接拿一张A4纸去打印&#xff0c;字的排版就显得尤为重要&#xff0c;排过来排过去&#xff0c;总感觉不够正式。就想去网上搜一个可以下载的田字格模板。某度搜了半天&#xff0c;倒是搜到一堆…...

微软官方 .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进行开发时&#xff0c;可能会遇到各种各样的问题。以下是一些常见的问题及其解决建议&#xff1a; 1. SpreadJS初始化失败 问题描述&#xff1a; 有时候SpreadJS的初始化可能会失败&#xff0c;特别是在React组件的生命周期内不当的初始化时机。 解决…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook&#xff0c;用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途&#xff0c;下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天&#xff0c;Spring AI 作为 Spring 生态系统的新生力量&#xff0c;正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务&#xff08;如 OpenAI、Anthropic&#xff09;的无缝对接&…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色&#xff0c;华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型&#xff0c;能助力我们轻松驾驭 DeepSeek-V3/R1&#xff0c;本文中将分享如何…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...

使用LangGraph和LangSmith构建多智能体人工智能系统

现在&#xff0c;通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战&#xff0c;比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要&#xff1a; 近期&#xff0c;在使用较新版本的OpenSSH客户端连接老旧SSH服务器时&#xff0c;会遇到 "no matching key exchange method found"​, "n…...

莫兰迪高级灰总结计划简约商务通用PPT模版

莫兰迪高级灰总结计划简约商务通用PPT模版&#xff0c;莫兰迪调色板清新简约工作汇报PPT模版&#xff0c;莫兰迪时尚风极简设计PPT模版&#xff0c;大学生毕业论文答辩PPT模版&#xff0c;莫兰迪配色总结计划简约商务通用PPT模版&#xff0c;莫兰迪商务汇报PPT模版&#xff0c;…...

快刀集(1): 一刀斩断视频片头广告

一刀流&#xff1a;用一个简单脚本&#xff0c;秒杀视频片头广告&#xff0c;还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农&#xff0c;平时写代码之余看看电影、补补片&#xff0c;是再正常不过的事。 电影嘛&#xff0c;要沉浸&#xff0c;…...