AHB的一些细节:
【问题一】
问:WRAP是做什么用的,为什么地址要循环
答:用于CPU填充cacheline的时候
第一个访问的地址是0x90,加到9c之后,会从cacheline的起始地址继续传输。
对于cache的访问不应该跨过cache line的边界
这个cache line一共有8个双字,也就是32byte,为最低5位地址,
【问题二】
问:为什么要burst传输,跟single有什么区别?
答:为了传输的效率。比如CPU要DRAM里面的数据,DRAM可以一次读4个地址的,一次性读出,放到buffer里面,然后再一个一个的发到总线上,这样不会占用DRAM。
【问题三】
问:为什么ERROR要两个周期?
答:一个周期给master反应时间,比如说更改掉一个地址。
这张图注意A+4这个地址被抛弃掉了
如果master继续A+4,虽然A这个地址出错了,但是A+4这个地址没有被取消,在ERROR的第二个周期采样到了A+4的地址。
此时HREADY为高电平,但是HRESP为ERROR
AHB2的response:
除了OKAY和ERROR,还有RETRY,SPLIT
RETRY:代表这个时候,slave不能及时响应,但是希望其它的master能够享用访问权,所以就发一个retry。(其它的master具有更高的优先级时能够拿到总线的使用权)。
SPLIT:降低该master的优先权
【问题四】
问:两个READY是干嘛的
答:从器件要知道前一个transfer是否完成了。
【问题五】
问:HPROT是干嘛的?
答:可用于原子操作。
一旦MASTLOCK被拉高,这个信号就是不能被其它master打断的。
(Arbiter会堵住更高优先级的请求)。
以前的一些ARM的CPU会使用SWP指令
现在用locked transfer也比较少了,因为会严重影响性能
SWP指令也被抛弃了
所以引入了AHB5 HEXCL
AHB5 Extention
AHB5是在AHB Lite的基础上做了一些扩展
1、 HEXCL:exclusive transfer,由master发出这个请求
2、 HEXOKAY:slave的response,这个exclusive access成功了
该信号会发给Exclusive Access Monitor,实现软件的Semaphore,会记录下Access的地址
( Mutex 资源每次只能允许一个使用(互斥的)
Semaphore 资源能允许一些使用(信号标) )
Monitor里面有一个状态机,用来规范握手行为
在AHB5中HPROT信号扩展到了7位
modifiable:原来的cacheable,代表这个transfer是不是可以更改的。比如说发出一个increment8的传输,如果是modifiable,可以更改为两个increment4。
lookup:transfer能不能在cache里去查找,如果在cache里的话,直接在cache里面去找就行了
allocate:transfer发生cache miss的时候,能不能分配cache line
shareable:这个transfer是不是被几个master共享的
可以大致分为几种memory type
normal memory:cachable,shareable
device memory:可以分为nE 和 E
e可以放在buffer里面,可以马上给CPU一个early response,这个数据没必要马上更新到地址空间里
ne一定要更新到地址空间里面
下面几个是cache的一些属性相关的东西
【问题六】
问:AHB-Lite和AHB5在原子访问上有什么不同?
答:AHB-Lite是通过Lock transfer,阻止其他master的在此期间的访问来实现原子访问的,会影响系统性能,在新的协议中已经不再采用。
AHB5则是通过Exclusive transfer来实现的,允许其他master的访问(提高性能),但是需要implement一个exclusive monitor。
【其它AHB5信号】
HNONSEC:nonsecure
跟Trustzone有关
要代表secure的transfer和nonsecure的transfer
CPU在nonsecure access的情况下是访问不了secure region的,要返回一个error response
HUSER信号:由AXI里引进过来的,是由用户自己去扩展的
【AHB和ARM处理器】
M3 M4的buffer深度比较大,所以支持INCR transfer,M0就不支持
但是不支持定长的
而且没有cache,不支持WRAP
不支持exclusive transfer
但是M3/M4是可以跑操作系统的,有Semaphore的需求,就需要exclusive transfer,所以加入了sideband信号去支持exclusive transfer。
M7用了三个AHB interface
AHBS:(slave interface)用DMA去初始化TCM
AHBD:(slave interface) debug用的
AHBP:访问外设,仅支持single transfer