1、当AHB写入数据之后从同一地址读取并且读取传输的地址阶段和写传输的数据阶段在同一周期时,读取返回的数据是旧数据还是新数据?
这个问题的答案取决于slave的设计。一个简单的slave将不会缓冲(cache或者buffer)任何数据,因此返回的读取数据将是最新的。对于复杂的slave 设计可能实现写数据的缓冲,这时候它可以返回以前存储的数据,或者"snoop"写缓冲中的内容。不管怎样都是符合AMBA AHB规范的,只要返回数据即可。
2、如果slave 可以被gate(clock gate或者power gate),需要哪些系统支持?
方案一:如果在slave 处于power gated或clock gated时进行访问,则必须确保该访问能够唤醒相应的slave,
方案二:将AHB decoder 配置为dummy slave,以便在访问gated slave时系统不会挂死。同时,在这种情况下需要确保“IDLE”访问时dummy slave拉高HREADY并且返回HRESP=OKAY;而“NONSEQ”访问和“SEQ” 访问返回ERROR
3、什么时候可以提前终止burst传输?
在一个Burst 传输中的任何一拍,slave返回非OKAY响应之后Bursts 传输可以提前终止,或者仲裁器将HGRANT给其他master。但是请注意,除非收到相应的仲裁器或slave响应提示,否则master不能主动地决定终止burst传输。
4、HTRANS能在HREADY值拉低时改变吗?
一般来说,AHB master 不应在HREADY拉低时改变控制信号。但允许在以下条件下更改HTRANS:
1、HTRANS=IDLE
AHB master 正在执行内部操作,并且尚未开始进行总线传输。但是,在AHB等待状态(HREADY低)期间,master 决定开始总线传输,并在下一个周期中将HTRANS更改为NONSEQ。
2、HTRANS=BUSY
HTRANS被用来给master 来完成内部操作,这可能是完全独立于HREADY信号。因此,HTRANS可以在HREADY为低的周期中改变为任何值(SEQ:继续完成burst传输;NONSEQ:开始新的传输)。
3、HRESP=SPLIT/RETRY
如AHB规范中所述,非OKER响应需要两个周期才能完成(具体参见AMBA SPEC)。master 必须在SPLIT/RETRY响应的第二个周期的HTRANS上置起IDLE。
4、HRESP=ERROR
和SPLIT/RETRY响应的处理需要两个周期一样,ERROR也需要两个周期处理,即在第二个周期刷新未进行传输的地址和控制信号。此时,第二个周期的HTRANS可以是IDLE或者继续完成当前的传输,这不是严格规定的。
5、BUSY传输能够在burst刚结束时开始么?
BUSY传输只能在未定义长度的burst传输(INCR)结束时发生,不能在固定长度burst传输(SINGLE, INCR4, WRAP4, INCR8, WRAP8, INCR16, WRAP16)的末端发生。
6、所有slaves 是否都必须支持BUSY传输类型?
是的。所有slaves 必须支持BUSY 传输类型,以确保它们与任何总线master兼容。
7、地址是否必须对齐,即使是对于IDLE传输?
是的。即使对于IDLE传输,地址也应根据传输大小(HSIZE)进行对齐,防止在仿真过程中使用的总线monitor误报错误或者警告。
8、 在一个AHB系统中可以有多少个master ?
AHB规范最多能有了16个master 。然而其中还包含一个dummy bus master,这意味着实际总线master 的最大数量实际上是15个。
9、HREADY是来自slaves的input 还是output?
AHB slaves必须同时将HREADY信号作为输入和输出。
HREADY需要作为slaves的输出,以便slaves可以扩展传输的数据阶段。
HREADY还需要作为slaves的输入,以便slaves可以确定先前选择的slaves何时完成最终的数据传输 。
每个AHB slaves应有一个HREADYOUT信号 ,该信号连接到Slave-to-Master多路复用器。这个多路复用器的输出是全局HREADYOUT信号,它被路由到AHB上的所有masters ,并作为HREADYIN反馈给所有slaves 。
10、一定需要有一个default slave么?
如果定义了整个4G地址空间,则不需要默认的slave。如果内存映射中存在未定义的区域,那么必须确保对不存在的地址的访问不会锁定系统。在decoder中实现default slave非常简单并且通常是有意义的。
11、一定需要有一个default slave么 ?
在具有支持SPLIT 传输响应的slave 的系统中都需要一个dummy master,以便如果所有其他master 都收到SPLIT 响应,可以授予总线给dummy master。dummy master需要将HTRANS驱动为IDLE,HLOCK驱动为低,所有其他输出驱动为合法值。
12、当transfer 被扩展时,master 能否更改HADDR ?
如果master 指示它想要执行NONSEQ、SEQ或BUSY传输,那么在扩展传输期间(当HREADY较低时)不能更改地址。除非master 收到ERROR、RETRY 或SPLIT 响应,在第二个响应处理周期master 要进行IDLE传输,那么它可能会更改地址。
13、在整个burst传输期间,HPROT、HSIZE和HWRITE是否保持不变?
是的,控制信号必须在整个burst期间保持不变。
14、 AMBA AHB规范建议只使用16个wait 状态。如果需要超过16个周期,应该怎么办?
对于一些slaves ,可以插入超过16个等待状态。例如,只有在初始上电时才访问的boot ROM可以插入大量的等待状态周期,因为一旦系统上电完成,它不会影响系统性能 。slaves 可以使用SPLIT 或者RETRY 响应来指示尚未完成的数据传输,或者可以使用中断或者状态寄存器查询slaves能否完成数据传输再发起请求。
15、不同bursts 的用处是什么?
通常,wrapping bursts被用来进行 cacheline数据填充。此时,master首先获取它所请求的数据,然后预取cacheline中剩余的数据。
incr bursts可以被DMA控制器使用进行不与特定地址边界对齐的cacheline的数据填充。
16、 slave的HREADY信号和HRESP 信号的默认值应该是高还是低?
建议HREADY的默认值较高,HRESP的默认值为OKAY。此组合可确保slave正确响应IDLE传输类型,即使该slave处于低功耗省电模式。
17、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响应的状态。
作者:XinXinHu
原文链接:
1——https://mp.weixin.qq.com/s/oZbK0PeKHL6v8wLv\_O7A2Q
2——https://mp.weixin.qq.com/s/50Tw1rAbvNHhWJwqu4iA5g
3——https://mp.weixin.qq.com/s/HFpmh0my0Bm1\_1E15aeWDA
4——https://mp.weixin.qq.com/s/YvkgGuWpUekBg1052vCQ3Q
5——https://mp.weixin.qq.com/s/QFcQ6jm6fm43m9tFLr6QRQ
微信公众号:
授权转自数字芯片实验室公众号,请勿二次转载。
推荐阅读
更多数字IC设计技术干货等请关注数字芯片实验室专栏。