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

AMBA-AHB的地址译码

前言        

地址译码器用于为总线上的每个 slave 提供选择信号 HSELx 。选择信号是通过组合逻辑
对地址码译码产生的,规范建议避免复杂的译码逻辑以保证高速操作。
        只在当前的数据传输完成后(HREADY 为高), slave 才会采样地址和控制信号以及
HSELx 。在一定条件下可能出现这样的情况:产生 HSELx 信号而 HREADY 为低,在完成
当前传输后 slave 会改变。
        每个 slave 最小的地址空间为 1kB ,所有的 master burst 传输的上限也是 1kB ,如此
设计保证了不会出现地址越界问题。当一个设计不会用到所有的地址空间时,可能出现访问
到一个不存在的地址的情况,这就需要增加一个附加的默认 slave 来为上面的情况提供一个
响应。当 SEQ NONSEQ 传输访问到一个不存在的地址,默认 slave 应该提供 ERROR
应;当 IDLE BUSY 传输访问到一个不存在的地址,默认 slave 会提供 OKAY 响应。地址
译码器会带有实现默认 slave 的功能。下图显示典型的地址译码系统和选择信号。

 

​AHB协议地址译码机制详解​

​1. 地址译码器设计与HSELx生成​

地址译码器是AHB总线的核心组件之一,负责根据主设备(Master)发送的地址信号生成从设备(Slave)选择信号 ​​HSELx​​。其设计遵循以下原则:

  1. ​译码逻辑简化​

    • 使用高位地址(如HADDR[31:10])进行组合逻辑译码,避免复杂计算以保证高速操作。
    • 示例:若从机地址范围为0x0000_0000~0x0000_03FF(1KB),则通过比较地址高22位(HADDR[31:10])确定HSELx。
    • 代码实现中通常采用casez语句匹配地址范围,确保译码器响应速度。                           
    • 假设系统中有 ​​3个从设备(Slave)​​,地址分配如下:                                                    Slave1​​:地址范围 0x4000_0000 ~ 0x4000_0FFF(4KB,用于外设寄存器。                Slave2​​:地址范围 0x8000_0000 ~ 0x8000_FFFF(64KB,用于SRAM)。           ​Default Slave​​:处理未映射地址的访问,返回错误响应。
module ahb_decoder (input  wire        HCLK,       // 总线时钟input  wire        HRESETn,    // 复位信号(低有效)input  wire [31:0] HADDR,      // 地址总线input  wire        HREADY,     // 传输完成信号output reg         HSEL1,      // Slave1选择信号output reg         HSEL2,      // Slave2选择信号output reg         HSEL_DEFAULT // 默认Slave选择信号
);// 地址译码逻辑(组合逻辑)
always @(*) beginif (!HRESETn) beginHSEL1 = 1'b0;HSEL2 = 1'b0;HSEL_DEFAULT = 1'b0;end else if (HREADY) begin// 使用高位地址译码,HADDR[9:0]为从设备内部偏移地址casez (HADDR[31:10])// Slave1: 0x4000_0000 ~ 0x4000_0FFF (4KB)22'b0100_0000_0000_0000_0000_?? : begin // HADDR[31:10] = 20'h40000HSEL1 = 1'b1;HSEL2 = 1'b0;HSEL_DEFAULT = 1'b0;end// Slave2: 0x8000_0000 ~ 0x8000_FFFF (64KB)22'b1000_0000_0000_0000_????_?? : begin // HADDR[31:16] = 16'h8000HSEL1 = 1'b0;HSEL2 = 1'b1;HSEL_DEFAULT = 1'b0;end// 默认Slave处理未映射地址default : beginHSEL1 = 1'b0;HSEL2 = 1'b0;HSEL_DEFAULT = 1'b1;endendcaseend else begin// HREADY为低时保持当前选择信号HSEL1 = HSEL1;HSEL2 = HSEL2;HSEL_DEFAULT = HSEL_DEFAULT;end
endendmodule
  1. ​时序控制与HREADY信号​

    • ​HREADY为高时采样​​:Slave仅在HREADY=1(当前传输完成)时采样地址、控制信号及HSELx。
    • ​HREADY为低时稳定​​:若译码过程中HREADY=0(传输未完成),HSELx保持原状态,避免信号跳变导致总线冲突。

​2. 1KB地址边界与突发传输限制​

  1. ​最小地址空间分配​

    • 每个Slave的最小地址空间为1KB,起始地址需对齐至1KB边界(如0x0000_0000、0x0000_0400)。
    • 1KB地址边界的定义:在AHB协议中,每个从设备的最小地址空间为1KB(即1024字节),这是从设备地址空间的最小粒度。

    • 地址边界被划分为多个1KB的区域,例如:0x0000_00000x0000_03FF0x0000_04000x0000_07FF等。

    • 为什么需要1KB地址边界限制?由于AHB协议规定每个从设备的地址空间最小为1KB,如果突发传输跨越了这个边界,可能会错误地访问其他从设备的地址空间,从而导致系统错误甚至致命错误。

    • 提高性能和兼容性:限制突发传输不能超过1KB边界,可以避免长时间的突发传输跨越多个从设备,从而降低性能损耗并确保协议的兼容性。

    • 突发传输的处理方式!如果突发传输试图跨越1KB边界,则必须将其拆分为两个或多个传输。

    • 比如,当传输地址落在1KB边界附近时,需要重新发起新的传输以确保数据正确到达目标地址。例如,如果传输地址为0x3F00,而目标地址为0x4000,则需要将传输拆分为两次传输:第一次传输到0x3F00,第二次传输到0x4000

  2. ​突发传输约束​

    • 所有Master的突发传输(如INCR、WRAP)不得跨越1KB边界。
    • ​示例​​:若INCR4突发起始地址为0x0000_03FC(接近1KB边界),需拆分为两个INCR2突发以避免越界。

​3. 默认Slave的响应机制​

  1. ​功能定义​

    • 默认Slave用于处理访问未分配地址空间的请求(如地址映射未填满时)。
    • ​响应规则​​:
      • ​SEQ/NONSEQ传输​​:返回ERROR响应,表示无效访问。
      • ​IDLE/BUSY传输​​:返回零等待周期的OKAY响应,避免总线阻塞。
  2. ​实现方式​

    • 默认Slave通常集成于地址译码器中,作为“兜底”逻辑。
    • 示例代码中通过default分支处理未匹配地址,返回默认响应。

​4. 典型地址译码系统架构​

  1. ​模块组成​

    • ​译码器​​:生成HSELx信号,选择目标Slave。
    • ​读数据复用器​​:将选中Slave的读数据回传至Master。
    • ​默认Slave​​:处理非法地址访问。
  2. ​时序示意图(图八解析)​

    • ​地址阶段​​:Master驱动地址后,译码器生成HSELx(基于高位地址)。
    • ​数据阶段​​:Slave在HREADY=1时采样HSELx并响应数据。
    • ​异常处理​​:非法访问触发默认Slave的ERROROKAY响应。

​关键设计要点总结​

​设计要素​​实现规则​​引用来源​
​HSELx生成逻辑​高位地址译码,避免复杂逻辑
​HREADY信号作用​控制HSELx采样时机,确保传输完成前信号稳定
​1KB地址边界限制​防止突发越界,Slave地址空间对齐
​默认Slave响应规则​SEQ/NONSEQ→ERROR;IDLE/BUSY→OKAY
​译码器代码实现​使用casez语句匹配地址范围,HADDR[9:0]不参与译码

通过以上机制,AHB协议实现了高效、可靠的总线地址管理,同时通过默认Slave和边界约束保障了系统稳定性。

相关文章:

  • 在线临床指标分类信息表转甜甜圈矩阵图
  • 使用dig查看dns递归查询过程
  • 操作系统 | 第一章:操作系统引论思维导图
  • 【CAPL实战】LIN校验和测试
  • 模型微调参数入门:核心概念与全局视角
  • Step9—Ambari Web UI 初始化安装 (Ambari3.0.0)
  • Proguard代码混淆-springboot3
  • spring4第3课-ioc控制反转-详解依赖注入的4种方式
  • SpringBoot项目快速打包与部署,War包⽅式打包部署与Jar包⽅式打包部署两种方式
  • 基于Vue3.0的【Vis.js】库基本使用教程(002):图片知识图谱的基本构建和设置
  • SpringBoot Controller接收参数方式
  • SpringBoot使用ffmpeg实现视频压缩
  • vue+elementUi+axios实现分页(MyBatis、Servlet)
  • Baklib内容中台驱动资源高效整合
  • matlab中绘图函数plot
  • 《vue.js快速入门》链接摘抄整理
  • DBeaver 连接 OceanBase Oracle 租户
  • vscode 终端 PATH 和python pip 不对
  • 压缩包方式在Linux和Windows下安装mongodb
  • 前端面经 React常见的生命周期
  • 网站后台管理系统哪个好/浏览器看b站
  • 临沂网站建设厂家/营销计划怎么写
  • 临沂公司做网站/建网站流程
  • 辽宁东方建设工程有限公司网站/网络服务器是指什么
  • 网站建设明细报价/简单的seo
  • 开发高端产品/云南seo公司