21、dummy master和default master有什么区别?
default master用于描述当系统中没有任何一个master请求访问总线时被仲裁选择到的master。通常,最有可能请求总线的master设置成default master。
dummy master是一个只执行IDLE传输的master。它在一个系统中是必需的,以便arbiter可以授予一个master仲裁,但是并保证不执行任何真正的传输。在两种场景下,仲裁需要dummy master:1、LOCK传输返回SPLIT 响应,2、当返回SPLIT 响应时,其他的master也正处于等待SPLIT响应的状态。
22、HPROT的默认值建议是什么?
对于不需要这些保护信息的masters ,建议HPROT默认值为HPROT[3:0]=4‘b0011,即Non-cacheable, Non-bufferable, Privileged, Data Accesses
23、在复位过程中,AHB信号的状态是什么?
SPEC规定,在复位期间总线信号应处于有效电平(即逻辑“0”或者逻辑“1”),不能是X态或者高阻态。 当然,具体是高电平还是低电平由设计去把握,需要强制约束的是,HTRANS需要为IDLE。
另外在复位过程中,需要确保系统中所有slave输出的HREADY需要为高,避免发生死锁,特别是针对多slave的系统。 在这里需要了解输出hready和输出hready的区别。
24、master 重建被终止的burst 传输时,是否有限制?
唯一的限制是,master 需要使用合法的burst组合来重建被终止的burst传输。例如,如果一个master 执行8拍burst传输,但在完成3次传输后就失去了对总线的控制。这时其余的5次burst传输可以使用SINGLE burst传输,和INCR4 burst传输,也可以使用5拍INCR burst传输。
为简单起见,建议master 使用INCR burst传输来重建剩余的传输。
25、 AHB如何处理LOCKed SPLITs?
当传输被SPLIT 时,arbiter 将该master 从仲裁选择中移除 ,直到slave 指示传输可以完成。当访问是LOCKed 时,访问不能被另一个master访问中断。
AHB系统能够同时处理这两个需求的唯一方法是在访问请求LOCKed 并且被SPLIT时授予一个 "dummy master" 仲裁。dummy master在锁定传输期间只执行IDLE传输。因为将仲裁授予任何其他的master 都将违反AHB LOCK相关的协议。
当所有的请求响应都处于SPLIT 状态时,也需要使用 dummy master 在此期间一直发送IDLE传输 。所以,建议支持split的slave要一直监测HMASTLOCK 输入信号,因为此时split响应没有任何意义。
26、AHB中的wrapping burst可以和总的传输字节数对齐么?
可以,此行为符合AHB协议。
以四拍传输大小为4字节的wrapping burst传输为例(共传输16字节)。如果传输的起始地址是0x30,则burst传输的四次地址为0x30、0x34、0x38和0x3C。尽管HBURST被设置为WRAP4,但实际上不会发生wrap,当然这也是AMBA AHB协议允许的。
27、master 应该在什么时候拉高和拉低locked 传输中的HLOCK信号?
HLOCK信号至少在locked 传输的地址阶段开始之前至少一个周期拉高,以便arbiter能够在地址阶段开始时采样到HLOCK信号。
在locked传输的最后一次传输的地址阶段,master 应该拉低HLOCK信号。
28、master 什么时候应该拉低HBUSREQ 信号?
对于一个未定义长度的burst 传输(INCR),master 必须保持其hbusreq信号的拉高状态,直到它开始了burst 传输中最后一次传输的地址阶段。
对于定义长度的burst 传输,一旦获得了第一次总线传输的授权,master 就可以拉低hbusreq信号。可以这样做的原因是,arbiter可以计算burst传输中的传输数量,并保持授予给定master总线权限,直到burst传输完成。
29、在一次locked 传输后,arbiter 什么时候才可以授予另一个master 总线权限?
arbiter 总是在locked 传输结束时授予该master 一拍额外的传输,即master 在locked 传输的最后一次传输的数据阶段会在拉低HMASTLOCK 信号执行一次传输的地址阶段。
在此期间,仲裁器可以将HGRANT信号更改为新的master,但如果上次locked 传输的数据阶段接收到SPLIT 或RETRY 响应,则master将驱动HGRANT信号给正在执行locked 传输的master(RETRY 响应场景)或者授权给Dummy master(SPLIT 响应场景)。
30、master 可以在burst传输期间拉低HLOCK吗?
AHB SPEC要求在burst传输期间所有控制信号(除HADDR和HTRANS外)保持不变。
因此,HLOCK必须在burst传输期间保持高,并且只能在最后一次的地址阶段拉低。
31、当master 没有请求但是被授予总线权限时,master 可以执行非IDLE以外的传输吗?
是的。master 没有请求总线时,可以执行IDLE以外的传输。在这种情况下,仍然建议master 拉高其请求信号,以便arbiter 在传输进行期间不会将总线的权限授予给其他的master 。
32、如果默认情况下当前master 被授予了总线权限,那么在启动非idle传输之前,它必须拉高hbusreq多少个周期?
33、HLOCK 信号和HMASTLOCK 信号之间的关系是什么?
在每个传输的地址阶段,arbiter 会采样master的HLOCK信号。如果此时HLOCK被拉高,则arbiter 将在传输的地址阶段拉高HMASTLOCK 信号。
34、 HGRANT信号什么时候可以改变?
HGRANT信号可以在任何周期中发生改变,可能出现以下情况:
1)、有可能在当前传输完成之前拉高然后拉低HGRANT信号,因为HGRANT信号只有在HREADY为高时才由masters采样。
2)、master 可以在没有请求总线的时候被授予总线 ,也可能在master请求的同一周期被授予总线。
35、为什么HADDR有时为arbiter的输入?
地址总线HADDR不需要作为arbiter 的输入。但在某些系统设计中,使用地址总线来确定在master之间切换的时间点可能很有用。例如,arbiter 可以被设计为在burst 传输边界改变总线所有权。
36、为什么在AHB中有一个1KB边界的限制?
1KB边界限制在AHB中表示burst传输不能跨越1KB边界的约束。该限制旨在防止burst传输从一个slave交叉到另一个slave。在实践中,这意味着如果master必须要进行跨1KB边界的burst传输则必须切分成两次传输。例如:
0x3F00 x3F40 x3F80 x3FC0 x4000 x4040 x4080
这种1KB地址边界地址传输需要划分成
NSEQ SEQ SEQ SEQ NSEQ SEQ SEQ
37、举例说明什么是Wrap 边界 ? WRAP4,WRAP8,WRAP16 ?
Wrap边界取决于Hsize和burst beat的数量(4,8,16)
"For wrapping bursts, if the start address of the transfer is not aligned to the total number of bytes in the burst (size x beats) then the address of the transfers in the burst will wrap when the boundary is reached"
AHB SPEC
Case1: Start Address is 0x4,Wrap4,Hsize is 2.
beat1 - 0x4
beat2 - 0x8
beat3 - 0xc
beat4 - 0x0
Hsize为2,意味着一次传输4字节。Wrap4 意味着一次burst共4拍,并且总的传输字节为16(beats*Hsize)字节。如果起始地址从0x4开始,则在0x10处wrap
Case2: Start Address is 0x4,Wrap4,Hsize is 1.
beat1 - 0x4
beat2 - 0x6
beat3 - 0x0
beat4 - 0x2
Hsize为1,意味着一次传输2字节。Wrap4 意味着一次burst共4拍,并且总的传输字节为8(beats*Hsize)字节。如果起始地址从0x4开始,则在0x8处wrap
Case3: Start Address is 0x4,Wrap8,Hsize is 1.
beat1 - 0x4
beat2 - 0x6
beat3 - 0x8
beat4 - 0xa
beat5 - 0xc
beat6 - 0xe
beat7 - 0x0
beat8 - 0x2
Hsize为1,意味着一次传输2字节。Wrap8 意味着一次burst共8拍,并且总的传输字节为16(beats*Hsize)字节。如果起始地址从0x4开始,则在0x10处wrap。
往期回顾:
AMBA AHB面试题连载(上篇)