AHB笔记

AHB,AXI也是看过很多次了,最近要准备UVM环境的amba,总结一下之前忘记的。
1. ahb总线先要请求,在仲裁器给予grant后,才能发送;
2. ahb的master如果发起了操作,先发了一个写地址,然后是写数据,如果在写数据期间,hready拉低了,写操作的数据要一直保持稳定。而如果是读操作,那么读操作只需要在最后保证稳定即可。
3. 注意一下的多次传输,因为返回b的数据时,ready拉低,导致c传输的保持也拉长
 
4. burst突发操作,有以下三种类型,single,incr和wrap,incr和wrap可以有4\8\16拍三种突发方式。incr即为增量,wrap即为回环。一次突发传输的数据总量可以用节拍数乘以每拍数据的字节数来计算。
5. hresp有四种,okay, error, retry,split. 除了okay之外的所有的响应都是要求两个周期的。其中retry要求优先级更高的可以占据总线,而split则放弃总线,任意优先级的都可以占据。
需要注意的是,除了okay以外的相应都要先拉低ready,产生对应的相应信号,保证响应信号两个周期不变,拉高ready。
起始双周期的主要含义也是比如t2周期,master并不知道slave要发送retry,因而他会继续发送一个地址,在这个周期内slave发送retry,在第三个周期,master发现,slave发出了一个retry,然后停止发送。因此这两个周期是留给主机的反映时间。
 
 
主要应对了一下4种情况:
a) 立刻完成传输
b) 插入一个或者多个等待状态以允许有时间来完成传输
c) 发出一个错误信号表示传输失败
d) 延迟传输的完成,但是允许主机和从机放弃总线,把总线留给其他传输使用
6. 另外说一下到现在一直都没有怎么用到的信号hprot:
从低到高4bit依次表示:预取指/数据访问,用户模式访问/特权模式访问,无缓冲/带缓冲,无高速缓存/带高速缓存
7. AHB传输中需要注意大端小端,小端就是数据低位在地址低位,大端就是数据低位在低至高位;因为ahb没有指定端结构,因此主从之间一定要确保端结构相同。
8. 分块传输:
如果从机认为传输的执行将会占据大量的时间,那么它可以发出split相应,用于提示仲裁器这个主机不应当被授予访问总线,直到从机表示它准备好了传输时。(此时有个疑问,是不是应当是用于提示仲裁器这个主机不应当访问的是是这个从机,而不应该是总线吧!)
如果从机认为可以传输了,由于之前主机发数据,地址,仲裁器会在传输时配上相应的master_id,从机就会知道master_id,它通过改变从机到主机上的hsplit[15:0]中适当的位,用于让仲裁器知道,这个master可以获取总线了,就取消之前的限制。
9. 数据总线所有权的移交
 
 
可以看出,仲裁器在倒数第二个采样,认为下一个传输地址应当切换,因此在倒数第二个地址改变hgrant的授权。新的hgrantx信息在突发的最后一个地址被采样的同时被采样。在图中也是,传输最后一次地址时,grant授权给了新的,等最后一次的传输结束,hmaster也切到了新的传输。
10. 如果主机在突发传输的过程中,失去了对总线的控制,那么它必须重新断言请求总线,用以完成突发,后续的突发可以使用incr或者incr4/8/16完成。
11. 需要知道的是,在master传输期间,仲裁器自己发的master_id,用于通知slave当前是哪个master发的。
12. 如果多个主机同时访问一个从机,从机可能发split,这时可能会出现死锁。从机只需要记录传输请求和split的响应已经被发出,最后所有的主机都将处于低优先级,然后从机可以有次序的来处理这些请求。
另一种解决方式就是保证发出retry响应的从机是一次只能被一个主机访问。

你可能感兴趣的:(SOC)