AHB与APB总线你需要知道的事儿

ARM出了好几版本总线。在FPGA中一般都会用到教新的AXI总线。而在大量嵌入式SOC里面,AHB和APB才是最常用的总线。这篇文章简单介绍一下这两个东西。文章只介绍最基本的概念,细节需要看AMBA Specification Rev2.0.

一、AHB和APB到底是什么

AHB(Advanced High-performance Bus), 高速总线,用来接高速外设的。APB (Advanced Peripheral Bus) 低速总线,用来接低速外设的。

一般的接法如上。高速的接在AHB上,低速的接在APB上。中间有一个AHB2APB的桥。你可以理解这个桥也是一个告诉的AHB Slave。

二、AHB总线里有什么

如上图所示。其实AHB总线非常简单。里面一个仲裁器(Arbiter)用于仲裁多个主设备同时访问总线的情况,三个多路选择器,用于选通master与slave之间的data和address。

你有没有发现,ADDR没有分读和写的ADDR?是的。。。AHB不是全双工的,读写是不可以同时进行的。所以性能上比AXI一般来讲是要弱的。

三、AHB里有什么关键信号

作为通用总线。。。信号显然是比较多的。以典型的master为例。介绍一下各个信号。

输入

HGRANTx, 总线授权信号。这个为高说明你可以用总线了。

HREADY,Slave给的,表示这次传输完成了。可以搞下次了。

HRESP,Slave给的一些额外的信息,比如成功,失败等等。

输出

BUSREQ, 总线申请。你不申请总线是不会把权限主动给你的。

LOCK, 直接锁定总线。这个值为高以后不再低下来仲裁器就不会再把总线让给别人了。属于霸道信号。

HTRANS,用于标识传输种类的。NONSEQUENTIAL, SEQUENTIAL, IDLE, BUSY四种状态。下文详细解释。

HWRITE,标识数据方向的。1为写,0为读

HSIZE, 标识传输位宽。。。8bit, 16bit,32bt... 这个就比较神奇了。

HBURST,burst长度。标志一次连续传输要穿多少个数。

对于slave来讲。

新的信号主要是HSELx, 标识当前总线在访问这个slave。

四、AHB传输过程是怎样的

AHB可以实现各种奇奇怪怪的传输。自出举一个最典型的例子。

假设总线已经申请到了。这时候就要把TRANS,ADDR,BURST放总线上。然后一个周期以后把DATA放总线上。所以你可以看大量。DATA比ADDR是慢一个周期的。如果TRANS为BUSY,则需要把ADDR保留一个周期(0x24),最终把数据传输完成。如果salve的ready没有变高,那么master还要等等salve ready才算数据接收正确(例如0x28)那个地方的情况。

整个传输过程还是比较简单的。。。你可以理解为。给个地址,一周期后给个数据。就这么传。

五、关于AHB的常见问题

  1. HSIZE是干啥用的

HSIZE代表的是一次传输的大小。8bit,16bit,32bi6,。。1024bit。为啥有这个值呢?因为传输的数据位宽和总线位宽可以不一样。例如总线位宽比较低,而你需要一个高带宽slave。那么这样搞。

通过传输两个数拼成一个数。这个时候就需要HSIZE告诉总线,一个数64bit。

同理,如果总线比较宽。总线64bit的,slave 32bit的。那么可以这样,总线传过来一个数,分成2个。

需要注意的是从设备位宽可以高于也可以低于总线,但是主设备位宽不允许高于总线

2. 既然每次都要传输地址,那么Burst有什么用?

Burst其实在AHB中某些情况。。。真的没啥用。主要是提供一些额外的信息,也就是说提前告诉slave和仲裁器,我要传多少数,你好有个准备。你不告诉这个东西数据照样传。当然,对于有些slave, 提前知道了burst信息有助于提高效率。例如提前腾出burst大小的buffer.

3. AHB Lite是个啥东西?

简单理解,阉割掉仲裁器,总线只允许一个主设备,这样就是ahb lite.

=======================================================

六、APB总线

对于APB来说,就简单多了。毕竟是低速的东西。没那么多幺蛾子。主要是用来读写寄存器的。

如图所示,一个典型的慢速APB Slave需要的接口。

PSEL, 总线选通。PENABLE, 标志可以访问。这两信号都为高才读数据。其他信号没什么东西。典型的状态机就是这样的。

例如往外设写个值。

AHB如何访问APB的。此处举个连续写的例子。

有个APB只能单数据的读,所以两个周期出一个数。

总结

至此,AHB APB就介绍的差不多了。你还需要一把沙子和一个CPU核心就能攒出一个嵌入式SOC了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值