【AHB】AHB协议(一) 协议通读

0. 关于协议

AHB-Lite 实现了高性能、高时钟频率系统所需的功能,包括:
• burst transfers
• single-clock edge operation
• non-==tristate== implementation
• wide data bus configurations, 64, 128, 256, 512, and 1024 bits.

1. AHB-Lite总线组件

1.1 基本结构

基本结构:master+bus+slave,如下图所示

1.2 组件1:Master

组件1AHB-Lite Master的信号可以分为三组:

  1. global signals;
  2. address phase signals: address and control;
  3. data phase signals: r\w data and response;
    AHB的传输分为address phase和data phase两个阶段(后文会讲到,现在记住就行了)。

1.3 组件2:Slave

组件2AHB-Lite Slave的信号同样分为三组:

  1. global signals;
  2. address phase signals: address and control;
  3. data phase signals: r\w data and response;

为什么这里Slave有两个HReady信号?
Slave使用来自解码器的 HSELx 选择信号来控制何时响应总线传输。Slave向Master返回信号:成功/失败/等待

这个问题比较复杂,建议先通读完AHB协议再来讨论这个问题
简要概括
对于一主多从的结构,当进行从机切换时,比如从slave0切换到slave1,指向salve1的addr pahse和指向slave0的data phase可能存在重叠(overlap)的情况,从机的hready_in的作用其实就是延长addr phase,能让上一个slave的最后一拍数据处理完成之后,再转去处理下一个slave的数据。那么slave1的hready_in本质上的作用是为了判断master对上一个从机即slave0的操作是否完成,只有在对上一个slave的操作完成的情况下才能进行对第二个slave进行操作。

假设在传输两笔数据时,在某个时钟周期T2,是S1的data phase阶段,同时也是S2的address phase阶段。如下如所示:

如果hready时钟一直为1,那么T2周期Slave1将要接受master的数据,同时Slave2接收master的的地址与控制信号。T3周期Slave2将要接受master的数据。

如果T2周期,Slave1的hready为0,表明Slave1要延迟接收数据,即在第三周期T3接收master的数据。但是,Slave2本来就要在第三周期T3接收master的数据。这造成了冲突:第三个周期到底是写S1呢还是写S2呢?
假如第三个周期写S1,那么S2就要在第四个周期写数据,如下图所示:此时S2就出问题了,它的hready始终没有拉低,但平白无故的数据往后延迟了一个周期,又不是burst传输,因为连续出现了两个NOSEQ,地址又没有增加,这就造成了协议错误!!

假如第三个周期写S2呢?如下图所示:这会造成S1数据写入丢失

解决办法:引入hready_in信号,该信号是所有的hready_out信号相与得到的。只要有一个hready_out为低,那么所有的slave都要延迟传输,直到所有的hready_out为高为止。
总结hready_in这个信号主要用于解决一主多从的传输问题,避免发生协议错误或者数据丢失。
详细可参考:[[【AHB】AHB协议(三) AHB_slave的hready_in与hready_out_hready]]

1.3 组件3:BUS接口

组件3BUS Infrastructure
BUS Infrastructure包括:Decoder和Multiplexor,Decoder译码来自主机的地址,以便选择适当的从机;Multiplexor将相应的从机输出数据路由回主机。

  • Decoder(地址译码):把haddr译码,产生各个slave的hsel号;
  • Multiplexor(数据复用):用来选择Slave选择返回读data和responce,decoder提供对multiplexor的控制。

    • 单master多slave:

      • 需要MUX把各个slave的hrdata, hresp选择后输出到master;
      • 需要MUX把各个slave的hready_out选择后输出到masterlslave;
      • 单master多slave结构如下:
    • 多master多slave:
      • Single-Layer(bus arbiter)Single-Layer指的是每个clk只有一个master在和一个slave通信
        • 需要MUX把各个master的address/control/wadata信号MUX后输出到slave;
        • 需要MUX把各个slave的hrdata, hresp选择后输出到master;
        • 需要MUX把各个slave的hready_out选择后输出到master和slave;
      • Multi-Layer(bus matrix)Multi-Layer指具有多个Bus Arbiter,同一时刻可以有多个mater和多个slave发生通信,走不同的bus类似于“多车道”。Multi-Layer的数据带宽更高。
        • 实现方法根据带宽需求而各不相同;
        • 简单Multi-Layer结构如下:

更多资料参考

  1. 单master多slave的ahb-lite bus可以参考: ARM DesignStart MO中的bus(systems/cortex_m0_mcu/verilog/cmsdk_mcu_addr_decode.vlogical/cmsdk_ahb_slave_mux/verilog/cmsdk_ahb_slave_mux.v);
  2. 多master多slave的multi-layer ahb-lite bus matrix可以参考:ARM DesignStart MO/M3中的bus(./logical/cmsdk ahb busmatrix/verilog/src);

2. AHB信号描述

所有 AHB-Lite 信号均以字母 H 为前缀,以将其与系统设计中其他类似命名的信号区分开来。

2.1 Global signals

名称 含义 介绍
HCLK 时钟 总线时钟对所有总线传输进行计时。所有信号时序均与 HCLK 的上升沿相关。
HRESETn 复位信号 总线复位信号为低电平有效并复位系统和总线。这是唯一的低电平有效 AHB-Lite 信号。

2.2 Master signals

名称 含义 目标地址 介绍
HADDR[31:0] 地址信号 Slave and Decoder 32位系统地址总线。
HBURST[2:0] 批量传输信号 Slave burst类型,支持4、8、16 burst,incrementing/wrapping
HMASTLOCK 锁定信号 Slave 当为高电平时,该信号表明当前传输是锁定序列的一部分。它与地址和控制信号具有相同的时序。
HPROT[3:0] 保护控制 Slave 保护控制信号,需要slave带保护功能,一般不用
HSIZE[2:0] 传输带宽 Slave 指示传输的大小,通常为字节、半字或字,最大可达1024位
HTRANS[1:0] 传输类型 Slave 指示当前传输的传输类型:IDLE/BUSY/NONSEQ/SEQ
HWDATA[31:0] 写数据总线 Slave 写数据总线,Master到Slave
HWRITE 传输方向 Slave 1为写,0为读

2.3 Slave signals

名称 含义 目标地址 介绍
HRDATA[31:0] 读数据总线 Multiplexor 将Slave有选择地传送到Master
HREADYOUT 传输完成信号 Multiplexor 为高电平时,表明总线上的传输已完成,可用此信号来延长传输。
HRESP 传输相应 Multiplexor 低电平-正常,高电平-ERROR

2.4 Decoder signals

名称 含义 目标地址 介绍
HSELx 片选信号 Slave Slave选择信号

2.5 Multiplexor signals

名称 含义 目标地址 介绍
HRDATA[31:0] 读数据总线 Master 读取数据总线,由解码器选择
HREADY 传输完成信号 Master and slave 为高电平时,HREADY信号向主机和所有从机指示先前的传输已完成
HRESP 传输相应 Master 传输响应,由decoder选择

3. 传输

3.1 AHB基础传输

3.1.1 两个传输阶段

AHB-Lite 传输由两个阶段组成:
Address:持续一个 HCLK 周期,除非它被先前的总线传输延长。
Data:这可能需要几个 HCLK 周期,使用 HREADY 信号来控制完成传输所需的时钟周期数。

3.1.2 读写无等待

最简单的传输是没有等待状态的传输,因此传输由一个地址周期和一个数据周期组成。下图显示了无等待的读传输

  1. 主机在HCLK上升沿将地址信号读信号准备好;
  2. 从机在下一个HCLK上升沿采样地址和读信号;
  3. 从机对地址进行采样后发出HREADY信号,主机在 HCLK 的第三个上升沿采样HREADY信号,若为1,表明数据传输完成

下图显示了无等待的写传输

  1. 主设备在HCLK上升沿将地址信号写信号准备好;
  2. 从机在下一个HCLK上升沿采样地址和写信号;
  3. 从机对地址进行采样后发出HREADY信号,主机在 HCLK 的第三个上升沿采样HREADY信号,若为1,表明数据传输完成

AHB读写传输与APB读写传输的不同
APB协议中的写传输,地址与数据是在同一clk准备好;而AHB中数据是在地址准备好后的下一个clk准备好,有1T的延迟。
即:任何传输的地址阶段(addr phase)都发生在前一传输的数据阶段(data phase)期间。 地址和数据的这种重叠对于总线的流水线特性至关重要,并且能够实现高性能操作。

3.1.3 读写有等待

从机也可以拉低HREADY信号来使得数据传输阶段扩展

对于写操作,主设备在整个扩展周期内保持数据稳定
对于读传输,从机不必提供有效数据,直到传输即将完成

当然,对于流水线操作,扩展传输也会影响同时刻的其他阶段:如下图,当扩展地址B的data phase,副作用地址 C 的addr phase也会被扩展。

3.2 传输类型(Transfer type)

AHB传输类型有四种类型 ,由 HTRANS[1:0] 控制: HTRANS 类型 介绍
00 IDLE(空闲) 表示不需要数据传输。当主设备不想执行数据传输时,它使用 IDLE 传输。建议主机通过 IDLE 传输终止锁定传输。从机必须始终对 IDLE 传输提供零等待状态 OKAY 响应,并且从机必须忽略该传输
01 BUSY(忙碌) Master以此信号表示正在处理数据,此时SLAVE要响应OKAY的信号(零等待状态),此时SLAVE会忽略已收到的地址与其它控制信号。一般在一个批量传送的中间,表示M发起一次批量传送,但是下一个传送不能立即进行,这样就使AHBM能在传送的中间插入空闲周期,这时候的地址和控制信号必须反映下一个传送数据的情况。作为AHB从设备必须忽略此时的传送,并以零等待的OKAY状态来响应M。
10 NONSEQ(非连续) 表示当前是单笔数据或突发传送的第一笔数据的传送,此时所送出的地址及控制信号与上一笔的传送无关。
11 SEQ(连续) 表示突发传送中剩余的数据传送是顺序传送,地址及控制信号和前面的操作相关。地址等于上一笔地址加控制信号HSIZE字节,控制信号与上一笔数据相同。

传输类型示例:

T0-T1:4beat(4笔,成功传输的数据)读取以 NONSEQ 传输开始。
T1-T2:主机无法完成第二笔数据传输,插入BUSY状态来延迟第二笔传输(此时主机必须给出下一笔数据的地址和控制信号);从机提供第一笔读数据。
T2-T3:主机现在准备好第二笔数据传输,发出SEQ信号,主设备忽略从设备在读数据总线上提供的任何数据。
T3-T4:主机准备第三笔数据传输;从机提供第二笔读数据。
T4-T5:主机准备第四笔数据传输,但此时从机无法完成数据传输,拉低HREADY信号以延迟传输。
T5-T6:从机提供第三笔读数据。
T6-T7:从机提供第四笔读数据。

3.3 独占传输(Locked transfer)

如果主设备需要锁定访问,那么它还必须置位 HMASTLOCK 信号。该信号向任何从机表明当前传输序列是不可分割的,因此必须在处理任何其他事务之前进行处理。
通常,锁定传输用于通过确保从设备不在微处理器 SWP 指令的读取和写入阶段之间执行其他操作来维护信号量的完整性。
注意:锁定传输后,建议主设备插入 IDLE 传输。

大多数从设备不需要实现 HMASTLOCK,因为它们只能按照接收的顺序执行传输。可由多个主设备访问的从设备(例如多端口内存控制器 (MPMC))必须实现 HMASTLOCK 信号。

在系统中,locked transfer是由bus结构保证的(非master/slave保证);在AMBA5中进一步明确:

  • lock过程开始:
    • master: hmasterlock=1 && hready =1;
    • slave: hmasterlock=1 && hsel =1 && hready =1;lock过程结束:hmasterlock=O & hready = 1;
  • 一个lock过程的头、中间、尾都可以插入IDLE trans;
  • 在一个lock过程中,可以只有locked IDLE trans;
  • 在一个lock过程中,所有的trans都只访问同一个slave;

3.4 传输大小(Transfer size)

HSIZE[2:0]表示数据传输的大小。
HSIZE 设置的传输大小必须小于或等于数据总线的宽度。
例如,对于 32 位数据总线,HSIZE 必须仅使用值 b000、b001 或 b010。
HSIZE 位宽 描述
000 8 Byte
001 16 Halfword
010 32 Word
011 64 Doubleword
100 128 4-word line
101 256 8-word line
110 512
111 1024

HSIZE 信号与地址总线具有完全相同的时序,它们必须在整个burst transfer过程中保持不变。

3.5 批量传送(Burst)

burst类型由HBURST[2:0]控制: HBURST[2:0] 类型 介绍
000 SINGLE 单笔数据传送
001 INCR 不定长的递增方式批量传送
010 WRAP4 4个数据回绕的批量传送
011 INCR4 4个数据递增批量传送
100 WRAP8 8个数据回绕的批量传送
101 INCR8 8个数据递增批量传送
110 WRAP16 16个数据回绕的批量传送
111 INCR16 16个数据递增批量传送

批量传送是以群组为单位的传送方式,主要依地址的给法来区分:
Incrementing bursts(递增突发):访问连续位置,并且突发中每个传输的地址是前一个地址的增量。
Wrapping bursts(回绕突发):在跨越地址边界时回绕。地址边界计算为burst中的节拍数HBURST与传输大小HSIZE的乘积

举例1
HSIZE[2:0]=010,即4byte方式传输:
HBURST[2:0]=010,即wrap4方式回绕;
若起始地址是0x28,则:地址回绕如下:
0x28、0x2c、0x20、0x24
为什么地址会在0x20开始回绕呢?
HSIZE[2:0]= 010,即传输大小4字节;HBURST[2:0]=010,即4笔回绕,那么回绕地址须对齐在4×4=16字节。16字节对齐的意思就是所有地址除以16商是一样的,即除去低四位[3:0]外高位[31:4]一样。
回绕地址0x28、0x2c、0x20、0x24写成二进制如下:
0010_1000
0010_1100
0010_0000
0010_0100

举例2
HSIZE[2:0]= 010,即传输大小4字节;HBURST[2:0]=010,即4字节回绕,那么回绕地址须对齐在4×4=16字节。
4byte 4beat的burst wrap传输地址边界为16byte。因此,如果传输的起始地址是0x34,那么它由地址0x34、0x38、0x3C和0x30的四次传输组成。

==为什么要采用wrap回绕?==
配合DDR、cache、CPU行为

注意:AHB对传送范围规定不可超过1KB(即地址[31:10]位要是一样的),递增传送的大小可为任意数目,但是不可超过1KB的范围。

==为什么定义传送范围规定不可超过1KB?==
传送范围不超过1KB再配合系统合理的地址分配,可以做到一个burst只选中一个slave。

Burst传输例子

  • Four-beat wrapping burst, WRAP4
    使用4beat wrapping burst的写传输,并为第一次传输添加了等待状态:

这是4beat burst的word传输,因此地址在 16 字节边界处回绕,并且在传输到地址 0x3C 后接着传输到地址 0x30

  • Four-beat incrementing burst, INCR4
    下图使用4beat incrementing burst的读传输,并为第一次传输添加了等待状态。在这种情况下,地址不会在 16 字节边界处换行,并且地址 0x3C 之后会传输到地址 0x40

  • Eight-beat wrapping burst, WRAP8
    下图显示使用8beat wrapping burst的读传输。因此地址在 32 字节边界处回绕,并且在传输到地址 0x3C 后紧接着传输到地址 0x20

  • Eight-beat incrementing burst, INCR8
    下图显示使用8beat incrementing burst的Halfword写传输,因此地址增加2,并继续递增。

  • Undefined length bursts, INCR
    下图显示未定义长度的incrementing burst传输。

图中显示了两个burst:

  1. 第一个burst是由从地址0x20 开始的两个Halfword传输组成的写入,这些传输地址增加 2。
  2. 第二个突发是由从地址0x5C 开始的三个Word读传输,这些传输地址增加四

BUSY传输后burst终止:
对于未定义长度Burst传输(INCR),可以在burst末尾插上一个BUSY,然后可以结束这个未定义长度Burst传输,通过master切换NONSEQ或者IDLE状态完成。
对于固定长度Burst传输,协议不允许master以BUSY 传输来结束突发。这些固定长度突发类型必须以 SEQ 传输终止。
主机不允许在 SINGLE 突发后立即执行 BUSY 传输。 SINGLE 突发后必须跟随 IDLE 传输或 NONSEQ 传输。
换言之:BUSY只能插入未定义长度Burst传输末尾或者固定长度Burst传输的中间。

提前终止burst
burst可以通过以下任一方式终止:

  1. Slave error response
    Master接收到ERROR response,有两种反应:
    a). 无视ERROR response,继续这个burst传输
    b). 终止剩下burst传输,在error响应时把htrans先改为idle; (这个要求在AMBA5中明确提出)

Master也可以无视ERROR response,继续这个burst传输:

  1. Multi-layer interconnect termination
    在有多个master的结构中,可以通过BUS仲裁,在master_a的一个burst中间把slave的访问权限移交给了master_b。(可能是为了CPU访问的优先性)

    3.6 等待传输

    Slave可以拉低HREADY信号来延迟数据传输,在等待传输期间,主机被限制只能对传输类型地址做某些更改。具体如下:

    3.6.1 Master状态改变

    当从机请求等待时,主机只有在以下情况下才能更改Trans类型:

    • IDLE 传输
    • BUSY 传输,固定长度burst
    • BUSY 传输,未定义长度burst
  2. IDLE 状态

当HREADY=0时,HTRANS可由IDLE状态变为NONSEQ状态,此后主机必须保持HTRANS不变,直至HREADY=1才能变至下一个状态。

  1. BUSY 传输,固定长度burst

固定长度的burst传输过程中,HREADY=0时,HTRANS可由BUSY状态变为SEQ状态,此后主机必须保持HTRANS不变,直至HREADY=1才能变至下一个状态。

  1. BUSY 传输,未定义长度burst
    在等待未定义长度burst传输的INCR期间,当 HREADY 为低电平时,允许主机从 BUSY 更改为任何其他传输类型。如果执行 SEQ 传输,则突发继续;如果执行 IDLE 或 NONSEQ 传输,则突发终止

3.6.2 地址变化

当从机请求等待状态时,主机只能更改地址一次,除非在以下情况:

  • 在IDLE状态传输期间
  • 在ERROR响应之后
  1. 在IDLE状态传输期间

在等待传输期间,主机可以更改 IDLE 传输的地址。当 HTRANS 传输类型更改为 NONSEQ 时,主机必须保持地址不变,直到 HREADY 为高电平。

  1. 在ERROR响应之后
    在等待传输期间,如果从机响应 ERROR 响应,则允许主机在 HREADY 为低电平时更改地址。

3.7 Protection control

HPROT[3:0]每个bit的含义不同:

  • HPROT$[0]$: 取的是指令/数据,主要针对CPU或者其他IP,通常其他IP给数据;
  • HPROT$[1]$:user模式/特权模式,user可能不让访问某些资源;
  • HPROT$[2]$:对于具有内存管理单元的主设备,这些信号还指示当前访问是cacheable还是bufferable。

    • Non-bufferable:一个读写操作,它的数据必须立即(以最快速度)写到终端,并且终端返回hresp/hready信号一路直达CPU(如下图),换句话说,CPU收到的hresp/hready信号是终端发出的
    • Bufferable:同样地还是一个读写操作,CPU发起读写操作,首先cache接到了地址/数据,将地址/数据往后传给s2m_bridge,并同时返回给CPU Hresp/Hready信号;s2m_bridge接到了地址/数据,将地址/数据往后传给sram,并同时返回给cache Hresp/Hready信号;sram接到了地址/数据,进行读写操作,并同时只需将Hresp/Hready信号返回给s2m_bridge即可。在这个过程中,地址/数据的传输类似于“层层分封”,CPU一开始收到Hresp/Hready信号时,数据的读写并未真正在终端完成,这个Hresp/Hready信号只是cache返回的,并不是地址所在的终端返回的
    • 两种行为差异的优劣:如果CPU进行了连续读写,用Bufferable的方式通常能够提高总线的利用率:CPU收到回应后就能进行下一个数据的读写,“中继模式”。用Non-bufferable的方式传输的链路较长,可能要插入hready=0的wait周期才能将终端的响应返回回去,因此写一个数据可能要几个周期。优点与缺点往往是相伴存在的,如果终端sram读写失败,但采用bufferable的方式之前已经返回给CPU读写正确的响应信号了,这个时候可能就要采用中断(AHB协议中并未提及对此情况的解决措施)。
  • HPROT$[3]$
    • Non-cacheable:数据不经过cache
    • Cacheable:数据经过cache

hprot[3:2]值的不同组合对应不同的地址类型(特性):
2‘b00:不进cache,不能buffer;
2’b01:不进cache,能buffer;
2’b10:进cache,write through;
2‘b11:进cache, write back;

Note: AMBA5中,hprot[3]已经修改为“modifiable”;

4. 总线互连

4.1 地址解码

decoder将地址haddr进行解码,输出不同hsel信号连接到slave上,以达到选择slave的目的。
下图显示了解码器生成的 HSELx 从机选择信号:

如果系统设计不包含完全分配完的内存映射,那么必须实现一个额外的默认slave,以便在访问任何不存在的地址位置时提供响应。

  • 当因为意外,一个系统未定义的地址出现在bus上时,decoder译码该地址后应该选中default slave;
  • default slave对idle/busy trans回okay response;
  • default slave对nonseq/seq trans回error response;

    4.2 总线互连

    Master向所有从设备发出地址和控制信号,decoder选择适当的slave。来自所选slave的任何响应数据都会通过读数据multiplexor传递到master。

5. 从机响应

主设备开始传输后,从设备控制传输的进展。传输开始后,主设备无法取消传输。(有例外,像slave返回error responce等)
当访问从设备时,从设备必须提供指示传输状态的响应,传输状态由 HRESP 信号提供:
HRESP Responce 介绍
0 OKEY 传输要么已成功完成,要么从设备需要额外的周期才能完成请求。 HREADY 信号指示传输是待处理还是已完成。
1 ERROR 传输过程中发生错误。必须向主设备发送错误情况信号,以便其知道传输已不成功。如果Hready被拉低时,需要两个周期返回Error responce

如果Hready被拉低时,需要两个周期返回Error responce,这块可以参考[[【AHB】AHB协议(二) 基本传输规则总结]]中的诚信原则。

基于Hready、Hresponce两个信号状态的完整传输响应如下:

所以slave有三种方式完成传输:

  1. 立即完成传输
    当 HREADY 为高电平并且 HRESP 为 OKAY 时,表示传输已成功完成。

  2. 插入wait周期延长再完成传输
    从设备使用 HREADY 将适当数量的等待状态插入到传输的数据阶段,然后再完成传输,并显示 HREADY 高电平和 OKAY 响应,以指示传输成功完成。
    当从机在完成响应之前插入多个等待状态时,它必须将 HRESP 驱动为 OKAY。

  3. 发出错误信号以指示传输失败
    由于总线的流水线性质,需要两个周期响应。当从机开始发出错误响应时,后续传输的地址已经加载到总线上。两个周期响应为主机提供了足够的时间来取消下一次访问并在下一次传输开始之前将 HTRANS[1:0] 驱动至 IDLE。

6. 数据总线

6.1数据总线

HWDATA

主机在写传输期间驱动写数据总线。如果传输延长,则主机必须保持数据有效,直到传输完成。对于比总线宽度窄的传输,例如 32 位总线上的 16 位传输,主设备只需驱动适当的字节通道,从机从正确的字节通道选择写入数据。
下表分别列出了在32位总线上哪些字节通道对于小端系统和大端系统是有效的。有效字节通道取决于系统的字节顺序。由于 AHB-Lite 未指定所需的字节顺序,因此总线上的所有主设备和从设备都使用相同的字节顺序非常重要。

HRDATA

从机在读传输期间驱动读数据总线,如果从机通过将 HREADY 保持为低电平来扩展读传输,则从机只需在传输的最后一个周期中提供有效数据。
对于比总线宽度窄的传输,从机只需要在活动字节通道上提供有效数据。主设备从正确的字节通道中选择数据。
当传输完成并发出 OKAY 响应时,从设备只需提供有效数据。 ERROR 响应不需要有效的读取数据。

字节顺序

重要的是,所有模块都具有相同的字节顺序,并且任何数据路由或桥接器都具有相同的字节顺序,以便系统正常运行。不支持动态字节序,因为在大多数嵌入式系统中,这会导致显着的冗余芯片开销。

6.2 数据总线位宽

一种在不增加操作频率的情况下提高总线带宽的方法是使片上总线的数据路径更宽。固定的总线位宽不能保证总是达到最大利用率,所以可以灵活定义不同的总线位宽:
能不能定义只有一种位宽的总线?

  • 一个复杂系统一般是不能的,否则系统的PPA不够优化;
  • 系统高带宽部分,使用更大的数据位宽;
  • 系统低带宽部分,使用较小的的数据位宽(降低area) ;

协议允许 AHB-Lite 数据总线的宽度为 8、16、32、64、128、256、512 或 1024 位。但是,建议使用最小总线宽度 32 位。 256 位的最大总线宽度,这足以满足几乎所有应用。

wide bus上的narrow slave

64位总线,32位slave:

对于输出,当将窄总线转换为更宽的总线时,请执行以下操作之一:
• 在宽总线的数据分为两半部分传输
• 使用额外的逻辑以确保只有总线的适当一半被改变。这样可以减少功耗。

narrow bus上的wide bus

可以修改主设备以在比最初预期更宽的总线上工作,就像修改从设备以在更宽的总线上工作一样。通过以下方式实现此目的:
• 多路复用输入总线
• 复制输出总线

7. 时钟和复位

  • clock:
    每个 AHB-Lite 组件都使用单个时钟信号 HCLK。所有输入信号均在 HCLK 的上升沿进行采样。所有输出信号变化必须发生在 HCLK 上升沿之后。
  • reset
    复位信号 HRESETn 是 AHB-Lite 协议中唯一的低电平有效信号,并且是所有总线元件的主要复位。复位可以异步置位,但在 HCLK 上升沿后同步置低
    在复位期间,所有主机必须确保地址和控制信号处于有效电平并且HTRANS[1:0]指示IDLE。
    复位期间,所有从设备必须确保 HREADYOUT 为高电平。
来自广东
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇