当前位置: 首页 > 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组件的生命周期内不当的初始化时机。 解决…...

docker 调用宿主机实现关机

Docker调用宿主机关机命令或调用宿主机程序&#xff0c;这涉及到了Docker容器与宿主机之间的通信和资源共享技术。具体来说&#xff0c;这种技术或通讯方式主要通过以下几种方法实现&#xff1a; 一、使用数据卷 Docker允许使用-v或--volume选项将宿主机上的目录或文件挂载到…...

51单片机--- 16*32点阵滚动显示

实验目标:51单片机驱动74LS183控制16*32点阵滚动显示 实验步骤: 在Proteus里画出原理图 在Keil里用C语言编写程序 在Proteus中导入HEX文件,启动仿真 74LS138 简介...

渗透测试-百日筑基—文件上传篇特征截断渲染%00绕过——下篇

目录 day10-渗透测试文件上传篇&绕过&特征&截断&渲染 一、黑名单大小写绕过代码分析 1、获取文件后缀名进行判断&#xff0c;如果后缀在这个字典里就禁止上传。 2、黑名单大小写绕过攻击 二、利用 windows 系统特征绕过上传 1、windows 系统特征绕过漏洞…...

深度学习基础—循环神经网络(RNN)

引言 从本系列博客开始&#xff0c;我们将来一起学习一下NLP领域的相关基础知识&#xff0c;NLP领域重要的模型是RNN&#xff0c;在此之前&#xff0c;先来了解一些符号的含义。 1.符号定义 &#xff08;1&#xff09;符号定义 假设建立一个能够自动识别句中人名位置的序列模型…...

一二三应用开发平台自定义查询设计与实现系列2——查询方案功能实现

查询方案功能实现 上面实现了自定义查询功能框架&#xff0c;从用户角度出发&#xff0c;有些条件组合可以形成特定的查询方案&#xff0c;对应着业务查询场景。诸多查询条件的组合&#xff0c;不能每次都让用户来设置&#xff0c;而是应该保存下来&#xff0c;下次可以直接使…...

Redis 集群 问题

前言 相关系列 《Redis & 目录》《Redis & 集群 & 源码》《Redis & 集群 & 总结》《Redis & 集群 & 问题》 什么是Redis集群&#xff1f;为什么要集群&#xff1f;Redis集群的优/缺点是什么&#xff1f; Redis集群是指将多台Redis实例进行协…...

PyQt入门指南二十九 QListView列表视图组件

在PyQt中&#xff0c;QListView 是一个用于显示项目列表的视图组件。它可以与 QStandardItemModel 或其他模型一起使用&#xff0c;以显示和编辑数据。以下是一个简单的入门指南&#xff0c;介绍如何使用 QListView 组件。 安装 PyQt 首先&#xff0c;确保你已经安装了 PyQt5…...

cisco网络安全技术第4章测试及考试

测试 以下 ACE 将放置在何处&#xff1f; permit icmp any any nd-na 试题 1选择一项&#xff1a; 在连接到另一个路由器并已启用 IPv6 的路由器接口上 使用下一代防火墙而不是状态防火墙的一个好处是什么&#xff1f; 试题 2选择一项&#xff1a; 主动而不是被动防护互…...

vue下载安装

目录 vue工具前置要求&#xff1a;安装node.js并配置好国内镜像源下载安装 vue 工具 系统&#xff1a;Windows 11 前置要求&#xff1a;安装node.js并配置好国内镜像源 参考&#xff1a;本人写的《node.js下载、安装、设置国内镜像源&#xff08;永久&#xff09;&#xff…...

C++ | Leetcode C++题解之第516题最长回文子序列

题目&#xff1a; 题解&#xff1a; class Solution { public:int longestPalindromeSubseq(string s) {int n s.length();vector<vector<int>> dp(n, vector<int>(n));for (int i n - 1; i > 0; i--) {dp[i][i] 1;char c1 s[i];for (int j i 1; j…...