热度 1| |||
AHB与APB协议是我接触最早的两个协议了。一直以来,我始终认为APB协议是是AHB协议的简化版,因为就信号和单个周期的读写而言他们实在是太像了。
一、AHB 1.1 基本传输 1.1.1 写传输图 SEQ 图 \* ARABIC 1 AHB基本写传输
图 SEQ 图 \* ARABIC 2 AHB延迟写传输
上图图一和图二是最简单的两种写传输,传输可简单分为两个周期,地址周期和数据周期,地址周期为一个时钟周期,数据周期可为多个时钟周期,取决去HREADY信号。由上图可以看出,地址和写信号都只有一个时钟周期,其实包括选择信号,传输类型信号都只有一个时钟周期,而数据在第二个周期才有效,因此需要将控制信号打拍。
1.1.2 读传输图 SEQ 图 \* ARABIC 3 AHB基本读传输
图 SEQ 图 \* ARABIC 4 AHB延迟读传输
AHB的读传输和写传输时序是一样的,都是有地址周期和数据周期,都是在最后一拍,HREADY信号有效是取数据,唯一的就是在地址周期是,HWRITE信号为低。
1.2 趣点解析 1.2.1 控制信号打拍因为AHB协议的控制信号只有一个时钟周期,但数据确实在第二个乃至很多个周期时才传输过来,因此需要把地址和控制信号打拍。方式如下:
always @(posedge HCLK or negedge HRESETn)
begin
if(~HRESETn)
addr <= {32{1'b0}};
else if(HREADY)
addr <= HADDR;
end
这种写法能有效地解决在数据有效时,保持控制信号。
此外,在多个AHB slave中,选择slave数据的mux中,HSEL信号也要做如此处理。
1.2.2 HRAEDY信号AHB的READY信号有很多,外设有HREADYOUT信号,表明外设ok,而系统也有HAREDY信号,表明总线是否准备好。如果正在传输进行时,那么总线的HREADY完全取决与此时正在操作的外设的HREADYOUT信号,也就是说,从HREADYOUT 到HREADY之间的选择和转换必须全部是组合逻辑才能保证AHB的正常时序。
二、APB 2.1基本传输 2.1.1 写传输图 SEQ 图 \* ARABIC 5 APB 基本写传输
图 SEQ 图 \* ARABIC 6 APB 延迟写传输
相比AHB的基本写传输而言,APB多了一个PENABLE信号,他们的其它基本信号也很像,但是对APB而言,控制信号一直存在,在整个数据传输周期内一直存在。这一点就很有意思,也就是不需要对控制信号进行打拍,只需要在PREADY和PENABLE信号有效时,将数据写入。
2.1.2 读传输图 SEQ 图 \* ARABIC 7 APB基本读传输
图 SEQ 图 \* ARABIC 8 APB读延迟传输
读传输的基本时序与写传输一致,只是PWRITE拉低表示读,PWDATA变成了PRDATA。
2.2 趣点解析 2.2.1 控制信号的处理APB的控制信号处理很有意思了,你不需要打拍,你只需要在PEANBLE和PREADY信号同时有效时,将数据写入或者读出。一般外设的PREADY信号直接置高。而PEANABLE信号与PREADY信号并没有关系,从上图可以看出,第二个周期PEANBLE信号直接拉高了。
2.2.2 数据的读写当一个外设不会拉低PREAD信号时,那么在外设内部的APB接口,何时读写寄存器都可以,可以在第一拍就把数据写入,也就是在在PEANBLE为低时,写入数据,但读数据一定要满足响应时序。设计没有标准写法,满足所需情况即可。
三、简单对比
参数 |
AHB |
APB |
读写速度 |
AHB一直读时,可以认为是一个周期完成读写 |
APB一直读,则为两个周期完成读写 |
控制信号 |
一个周期有效 |
读写周期内有效 |
适用范围 |
高速场景 |
低速场景 |
四、疑问
1、HREADYOUT的作用,AHB与SRAM之间读写需要多少个周期?
2、在cpu系统中,如果一个外设坏了,HREADYOUT为0时,此时CPU是否会死掉,会一直等?