2025年AMBA总线介绍

AMBA总线介绍1 总线简介 总线 是指计算机组件间规范化的交换数据的方式 以一种通用的方式为各个组件提供数据传送和控制逻辑 chatgpt 给的结果是 总线 Bus 是计算机系统中用于传输数据 地址和控制信号的一种集合线路 它在计算机内部的各个组件之间传递信息 如中央处理器 CPU

大家好,我是讯享网,很高兴认识大家。

1 总线简介

总线:是指计算机组件间规范化的交换数据的方式,以一种通用的方式为各个组件提供数据传送和控制逻辑。

chatgpt 给的结果是 :总线(Bus)是计算机系统中用于传输数据、地址和控制信号的一种集合线路。它在计算机内部的各个组件之间传递信息,如中央处理器(CPU)、内存、输入输出设备等。总线可以分为不同的类型,包括数据总线、地址总线和控制总线。

  1. 数据总线(Data Bus):用于传输数据和指令,使各个组件能够交换信息。数据总线的宽度决定了系统能够一次传输的位数,例如,一个32位数据总线可以一次传输32位(4字节)的数据。
  2. 地址总线(Address Bus):用于传输内存或设备的地址信息,使CPU能够访问特定的内存位置或设备。地址总线的宽度决定了系统能够寻址的内存范围,例如,一个16位地址总线可以寻址2^16个不同的内存位置。
  3. 控制总线(Control Bus):用于传输各种控制信号,例如时钟信号、读写信号、中断信号等,以控制各个组件的操作。

总线的设计和性能对计算机系统的整体性能至关重要。更快速、更宽的总线可以提高数据传输速度,从而加快计算机的工作效率。然而,总线速度的提升也会受到物理限制和成本因素的制约。因此,在计算机系统的设计中,总线的选择和优化是一个重要的考虑因素

对于总线而言,有以下比较重要的性能指标或者是概念需要掌握:

带宽:指的是单位时间内总线上传送的数据量;其大小为总线位宽*工作频率(单位为bit,但通常用Byte表示,此时需要除以8)。
位宽:指的是总线有多少比特,即通常所说的32位,64位总线。
时钟频率:以MHz或者GHz为单位。
延迟:一笔传输从发起到结束的时间。在突发传输中,通常指的是第一笔的发起和结束时间之间的延迟(什么事是突发传输后面再讲)。
传输方式:总线传输数据的方式主要有同步传输和异步传输两种模式。同步传输通过时钟信号来控制数据的传输,而异步传输则是直接在总线上进行数据交换。

2 AMBA总线


讯享网

 AMBA总线的发展历程

1. AMBA1已经不用掌握了,因为市场已经抛弃了这代协议。
2. AMBA2推出了AHB协议,该协议沿用至今;而AMBA2中的APB2协议,也已经被市场抛弃了。
3. AMBA3推出了APB3、AXI3、AHB-lite协议(ATB协议是用作CPU的trace的,绝大部分人都不会用到)。需要注意的是,AXI3代表的含义是,第三代AMBA总线中的AXI协议。这也是AXI协议的首次提出。因此也没有AXI1和AXI2协议!APB3和AHB-lite目前仍然广泛使用,后面会进行讲解。
4.AMBA4推出了ACE协议,以及AXI的兄弟协议,AXI-lite和AXI-stream。
5.AMBA5对AXI、AHB和ACE协议进行了优化,此外还推出了CHI协议

 对于AMBA协议,APB的信号都是以P开头,AHB的信号都是以H开头,而AXI的信号都是以A开头。

3 APB总线

APB的全程是Advanced Peripheral Bus ,高级外设总线,但是其链接的外设往往是低速度且低功耗的外设,如I2C,UART,SPI ,除了链接低速设备外,APB总线还广泛应用与配置各种IP的寄存器(这些IP预留给用户控制信号,有软件进行配置,这个时候就可以选择APB总线来配置这些寄存器),此外为了是APB能够容易的被整合进大部分的设计中,APB规定所有的信号必须是时钟的上升沿传递。

一个soc框架

 简述一下APB 的发展历程

APB2 :

APB总线的基础版本

APB3:

增加PREDAY信号:用于反压master

增加PSLVERR:用于表示传输是否发生错误

APB4:

增加PPROT保护信号

增加PSTRB代表字节选通

APB5:

增加PWAKEUP信号,从机唤醒功能

增加PAUSER信号,用户请求分配

增加PWUSER信号,用户写数据分配

增加PRUSER信号,用户读数据分配

增加PBUSER信号,用户数据分配

3.1APB信号列表

对于写操作而言,PREADY信号用于标志slave设备是否已经准备好接收这一笔数据。而对于读操作而言,PREADY信号用于标志slave设备是否已经准备好了要返回给Master的数据。
有了PREADY信号,从机就可以反压主机。因此PREADY这个信号可以说是非常的棒啊,它让主从之间的通信更加的可靠,也增加了从机的控制能力,不至于出现主机写的数据从机压根没收到或者从机没有准备好读数据,进而主机读到错误的数据的情况。
此外再说明一下为什么会出现从机没有准备好的情况。对于读操作而言,非常好理解,你要读的数据我还没准备好呢(可能正在运算),那我当然不能拉高PREADY,不然就给了你错误的数据了。只有我数据准备好的时候,我拉高PREADY,这样才能确保读不出问题。而写的话,这种情况往往出现在写特定的地址,这个时候外设本身要进行判断是否可以写,因此两个周期就完成不了,就暂时不能拉高PREADY,你的Master就必须要维持住。当PREADY拉高代表这一拍能够写进去了。因此主机也就可以不再维持原有的状态了。

用于从slave向master返回传输错误,这个错误是slave自己定义的,比如写了不允许写的地址,即非法地址访问。或者是访问超时了,slave回应不了了。就可以拉高这个信号,从而避免总线锁死。

  • PPROT

PPROT(Peripheral Protection)信号用于实现外设的访问保护,保护外设不受未授权的访问和恶意攻击。

  对于CPU而言,可以工作在用户模式下也可以工作在特权模式下(比如RISC-V的USM三种模式)。对于支持trustzone的CPU,可以工作在secure world下,也可以工作在normal mode下。又由于现在的系统越来越复杂了,以前的外设是随意读写都可以,现在的一些外设或memory(比如一些CSR寄存器,Trusted RAM等)要求只能在secure下或者privileged模式下访问,因此就需要PPROT信号。

PSTRB
PSTRB(Peripheral Strobe)信号用于指示主设备传输的数据位(byte或者word)是否有效。主设备在传输数据时,需要使用PSTRB信号来标识传输的数据位是否有效,以确保外设可以正确接收和处理数据。
允许稀疏的写。其中的每一个比特对应于PWDATA的每一个字节。用1代表PWDATA的这一字节是否有效,其对应关系如下图所示

3.2APB传输 

3.2.1APB状态机

APB2.0的状态机

 IDLE:此时为默认状态。PSEL和PENABLE都为0,没有通信请求。
SETUP:当需要发起传输的时候,会进入该状态,此时PSEL为1,PENABLE为0。PSEL从0到1说明要发起一次传输了,而PENABLE为0表示这是传输的第一个时钟周期。(这个状态也就是setup phase)
ENABLE:这个状态PENABLE需要拉高,进而完成数据的传输。


APB3/4/5的状态机

状态机有以下几种状态:

IDLE:APB的默认状态。
SETUP:当需要传输时,总线进入SETUP状态,在此状态下断言适当的选择信号PSELx。总线只在一个时钟周期内保持SETUP状态,并且总是在时钟的下一个上升沿移动到ACCESS状态。
ACCESS:在ACCESS状态下断言启用信号PENABLE。在从SETUP到ACCESS状态的转换过程中,地址、写、选择和写数据信号必须保持稳定。退出ACCESS状态由从机发出的PREADY信号控制:
如果从机将PREADY保持为低,则外设总线保持在ACCESS状态。
如果从机驱动PREADY为高,则退出ACCESS状态,如果不再需要传输,则总线返回到IDLE状态。或者,如果接下来发生另一次传输,总线将直接移动到SETUP状态。
 

APB2读写操作

写操作

 

可以看到写操作非常的简单:

T1->T2这一个周期
        PSEL信号拉高,意味着要发起一次新的传输了。
        PWRITE信号为1,因此此次传输为写操作。
        PWDATA为要传输的数据,PADDR为要写的地址。二者都应该保持不变,直到此次传输结束。
        而PSEL拉高的第一个时钟周期,PENABLE应该为0。
T2->T3这一个周期
        PSEL信号继续拉高
        PWRITE、PADDR、PWDATA应该保持不变
        PENABLE信号拉高,用于代表这已经是写传输的第二个周期了

至此一次传输结束。可以看到,APB对每一笔数据的传输,需要花费两个时钟周期。且APB的数据传输不支持流水线操作(即不可以重叠)。因此APB是非常低效的

理论上写数据完全可以同时给出写地址和写数据,一拍就搞定,为什么APB要大费周章弄成两拍呢?这主要是那个年代的芯片本身的制程工艺以及片上互连线导致的。一个周期可能无法完成从Master向Slave写入数据的整个操作流程。因此采用两拍的方式,第一拍告诉你,我要开始传输啦!(称为setup phase)第二拍才真正的完成数据的传输。(称为access phase)。

如果Master想要马上发起一次新的传输,可以不拉低PSEL让其继续为1,但是必须要将PENABLE拉低。否则Slave侧的判断逻辑就会出现问题!

 可以看到读操作非常的简单,跟写几乎一样。这里就不再做详细的解释了。

要特别注意的是,T2以后,也就是进入ENABLE周期后,APB的SLAVE设备必须要将M所需要读取的数据准备好,以便M可以在ENABLE的周期末也就是T3正时钟沿触发时正确的将数据读取。

APB2的一些理解问题

貌似上面的状态机模型以及读写时序图,有没有PENABLE信号实际上都能完成APB传输,那么APB slave 是否真的需要要penable信号?

分两种情况讨论一下

1如果APB slave 有pclk时钟信号,那么确实是不需要PENABLE信号,检测到PSEL高,即进入access阶段,然后在第二个时钟周期完成数据传输即可。代码参考全网。

`timescale 1ns/1ps `define DATAWIDTH 32 `define ADDRWIDTH 8 `define IDLE 2'b00 `define W_ENABLE 2'b01 `define R_ENABLE 2'b10 module APB_Slave ( input PCLK, input PRESETn, input [`ADDRWIDTH-1:0] PADDR, input PWRITE, input PSEL, input [`DATAWIDTH-1:0] PWDATA, output reg [`DATAWIDTH-1:0] PRDATA, ); reg [`DATAWIDTH-1:0] RAM [0:2`ADDRWIDTH -1]; reg [1:0] State; always @(negedge PRESETn or posedge PCLK) begin if (PRESETn == 0) begin State <= `IDLE; PRDATA <= 0; end else begin case (State) `IDLE : begin PRDATA <= 0; if (PSEL) begin if (PWRITE) begin State <= `W_ENABLE; end else begin State <= `R_ENABLE; end end end `W_ENABLE : begin if (PSEL && PWRITE) begin RAM[PADDR] <= PWDATA; end State <= `IDLE; end `R_ENABLE : begin if (PSEL && !PWRITE) begin PRDATA <= RAM[PADDR]; end State <= `IDLE; end default: begin State <= `IDLE; end endcase end end endmodule

讯享网

2如果APB slave是纯粹的组合逻辑,这个时候就需要penable信号

当PSEL & !PENABLE 为1 的时候,代表是setup stage ,实际上slave 什么也不用做

当PSEL& !PENABLE 为0 的时候,代表是数据传输阶段,slave完成数据的传输

APB3读写操作

写操作

 读操作

​上图是没有wait states的情况。两拍完成写操作。和APB2的区别在于多了个PREADY,需要在传输的第二拍也就是真正发生数据传输的那一拍拉高。其它的和上面的写时序是一模一样的,因此不再说明。

写操作(等待)

 读操作(等待)

 读操作(错误)

 读写操作进行中PSLVERR信号拉高,表明此次写/读操作有误,所写入/读取的数据未正确写入/读取。

3.3 APB4和APB3以及APB3和APB2的兼容性问题

以APB4的slave和APB3的master为例,这个时候应该把PSTRB信号固定为全1,PPROT信号则取决于Slave是如何使用该信号的,根据不同的场景固定为不同的值。

而APB3的slave和APB4的master相连接,这个时候实际上需要一个转接桥,因为本身可能只想写某一个字节,而slave此时不支持也不知道,那就需要一个中间逻辑将pwdata变成想要的值。(比如读回来时32'h2345,想将最高字节改写为6,此时只写一个32'h6000,PSTRB为1000,标志别的字节不要动。这个时候就需要一个中间逻辑将写的数据变成32'h6345)。实际上写起来也很麻烦,因此此时最好将APB3的slave改成APB4协议。

至于APB3和APB2不建议一起用,因为APB2没有PREADY反压机制,因此实际使用起来完全不一样,强行一起用会有巨大的坑

4APB到AHB接口

4.1读操作

 在频率很高的情况下,在ENABLE CYCLE中可能数据不能够直接映射到AHB总线,需要在APB桥中在T4的时候打一下锁住,并在T5的时候才被AHB主采样。虽然需要多一个等待周期(一共2个,HREADY反压两拍),但是由于频率提升了因此总的性能也提升了。
  T1:在 AHB 总线开始传送;
  T2:地址被 APB 总线采样。如果该传送是针对外设的话,这个地址就会被译码成选择信号发往外设。T2就是 AHB 的SETUP CYCLE。
  T3:APB 的 ENALBE CYCLE,PENABLE 拉高,数据被读出。
  T4:读出的数据直接映射到 AHB 总线上,在上升沿被 AHB 主采样。


4.2写操作

APB总线上的单块数据写操作不需要等待周期。APB桥的责任是对地址和数据进行采样,并在写操作的过程中保持它们的值。
  T1:AHB 开始作数据地址和读写控制信号的传递(HADDR 和 HWRITE)
  T2:APB bridge 栓取住 AHB 送来的数据地址及读写控制信号,同时进入到 APB 有限状态机的 ENABLE状态
  T3~:其后的读和写动作跟之前所介绍的 APB 读写动作一模一样,在这里我们不再加以详述
下图是突发读写出书的时序图

4.3 背靠背操作

下图给出了背靠背传输的时序,分别写,读,写,读

 如果写操作之后跟随着读操作,那么需要 3 个等待周期来完成读操作。通常的情况下,不会有读操作之后紧跟着写操作的发生,因为两者之间 CPU 会进行指令读取。

小讯
上一篇 2025-03-11 15:56
下一篇 2025-03-20 14:49

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/120578.html