zl程序教程

您现在的位置是:首页 >  工具

当前栏目

AHB总线笔记(三)附AMBA2.0面试提问

笔记面试 总线 提问
2023-09-14 09:15:33 时间

一种特殊的AMBA系统(叠加结构)

叠加在一起的AMBA系统Multi-layer:

并行的访问可以提高系统的带宽。 

AHB-Lite 

        假设AHB上面只有一个master,再这个系统下面不需要request,不需要grant,压根就不需要arbiter,slave也是一样会更加简单,不需要RETRY也不需要SPLIT,只需要返回ERROR或者OKAY 。

AHB总结

※ 主要组成部分:

    Master、slaves、arbiter、decoder 。

※ 传输的过程:

    流水线机制,有address phase 和data phase。

※ 提高性能:

    Burst read/Write。

※ 仲裁机制:

    总线控制权的移交。

※ 如果slave短时间内无法响应

    可以把HREADY拉低

※ 如果slave长时间无法响应

    可以插入SPLIT或者RETRY

※ 如果master不能进行传输

    master的HTRANS插入BUSY,注意BUSY和IDLE的区别,BUSY是插在同一个burst中间,而IDLE是插在两次burst中间。

※ Arbiter 的优先级最好可以配置。

※ 如果slave长时间不能响应的话,一般不支持SPLIT响应,使用RETRY响应。

※ 总线上如果只有一个Master的话,可以使用AHB Lite协议,不用arbiter。

APB总线

APB比AHB要简单很多

APB信号: 

        APB总线的信号,开头都是P开头,这点在笔记一有所提到。APB中也有很多的slave ,每个slave也有一段自己的地址空间,address落在哪个地址空间内,哪个PSELx就会拉高。PWRITE = 1的时候就是写操作,PWRITE = 0的时候就是读操作。

PADDR [31:0] 地址总线,由设备总线的bridge单元驱动。

PSELx 从译码器来的信号,到每一个总线从设备x。

PENABLE 用于在设备总线上把所有访问按时间阶段进行。

PRDATA 和 PWDATA 最多32位宽。

APB互连

        APB Master会把AHB输入的CLK、HADDR、HWRITE、HWDATA全部都传输给自己的slave,信号以广播的形式传播给各个slave,但是具体哪个slave能得到相应开始工作还得看PSEL具体选择了哪个slave,选中了slave之后PRDATA读入mux传回给Bridge。

APB写传输 

        APB写操作里面,当选中某个slave时,PSEL信号拉高,选中slave,然后具体是否写入还得看PENABLE是否拉高,只有PSEL和额PENABLE同时拉高时,才可以进行数据写入。APB不是pipeline的形式。APB在PSEL信号拉高后,PENABLE最快也得延迟一个周期拉高,所以APB数据传输最快也得两个cycle才能写入一个数据。

APB读传输

        读传输和写传输一样,最快也得两个周期读一个数据,APB中没有用pipeline,两个cycle一个是SETUP cycle 一个是ENABLE cycle。

        APB协议还有一个PSLVERR信号,PSLVERR是slave驱动的。PSLVERR=1,是apb-slave内部发生错误的指示。可能的错误:
        1):read 了一个只写的地址;write了一个只读的地址;
        2):读或写了slave内部某个没有定义的地址;

        slave就会返回PSLVERR=1给master。

AHB2APB Bridge 

        在上面的APB Bridge里,其实大部分信号都是从AHB接入,或者内部slave输出的,实际上APB需要处理的就是PENABLE信号。而这个ENABLE信号的产生是通过一个状态机产生的。

        下图为ENABLE信号产生的FSM :

 APB slave接口

APB到AHB接口

假设要做一个AHB的master,要去读APB的信号。

         AHB每两个cycle才能读一个,因为APB最快读数据也得两个cycle。如果AHB和APB的时钟频率是一样的,那么PRDATA读出来可以直接赋值给HRDATA,但是如果APB的时钟频率更低,那么就不能直接赋值,需要把值用寄存器存一下,然后在返回给AHB。这一张图就可以把APB的信号传输说清楚了,不管是读和写,都先给一个PSEL,然后在下一个周期PENABLE拉高,进行读或者写操作。

        每一个从设备都占用系统的一段地址空间。所有的从设备都是可寻址的。寄存器/存储器都是内存映射方式访问。CPU/IP读写其他IP的数据类似于读写存储器。 

CPU和IP之间的通信

        CPU 和 IP 进行通信,CPU总是主设备,IP总是从设备,IP可以发送一个中断请求,CPU 进入中断模式就可以去读slave的状态寄存器,来判断你到底想汇报一个什么事情,由interrupt service routine(ISR)来处理中断。

        比如DMA和 CPU之间的通信,DMA的状态寄存器就是Status, 存放的地址空间为0x04,有ready和busy两种状态。由DMA向CPU发起一次中断,然后CPU进入中断模式,去读DMA状态寄存器中的状态,如果状态为ready,并且要发起一次数据搬运start,那么就可以给DMA传输起始地址、终止地址和数据长度,把数据搬运的任务交给DMA。 

AMBA2.0面试高频问题

学完AMBA 2.0 知道了AHB和APB的协议,需要彻底掌握:

1.AHB有哪些组成部分?

2.APB有哪些组成部分?

3.AHB信号由哪些?分别有什么作用?

4.AHB传输有几个阶段?哪些阶段?

5.burst传输时如何开始一段新的INCR传输?

6.burst传输能超越1K边界吗?为什么?如果跨越1K边界要怎么处理?

7.HSEL信号是如何得到的?

8.AHB slave有哪些响应信号?

9.AHB slave短时间无法响应怎么办? 长时间无法响应怎么办?

10.AHB HTRANS中的IDLE和BUSY有什么区别?

11.AHB slave的HRESP响应的RETRY和SPLIT有什么区别?

12.32bit小印第安序是怎么控制数据总线的有效字节的?如果传输的数据不是32bit而是8bit,那么传输的是哪8bit,由什么判断?

13.master 可以控制总线的条件是什么?

14.什么是AHB lite?

15.APB有哪些信号?分别有什么作用?

16.APB传输有什么特点?

17.AHB和AHB Lite有什么区别?

        如果能完整回答上面的问题,那面试提问 AMBA总线2.0的内容就基本没什么问题了,上面所有问题的答案,都可以在我写的AHB总线笔记里得到答案。

        祝大家找工作顺利。