Cache是高速缓冲存储器,如果将Cache想象成一栋楼房,那么每个存储块就相当于一个房间,而地址就是每个房间的门牌号,可以通过地址对对应的存储块进行读写操作。
AXI是一种接口协议,规定地址是字节对齐的。字节对齐的意思是:每个地址代表的存储块位宽为1个字节(byte),这里设1byte=8bit。
假设顶层设计的地址是字节对齐的,且地址位宽为32bit,那么Cache的容量为8bit*2^32,如果底层设计的Cache地址是128bit对齐的,即底层设计的每个地址代表的存储块位宽为128bit,那么底层的地址位宽应该为。为了与顶层通信,将底层设计的地址位宽扩展为32bit,如果想保证地址128bit对齐,就要求Addr[3:0]=4'b0000,如果Addr[3:0]≠4'b0000,我们就说本次对Cache进行的读写操作是非对齐的。
Cache的地址映射图如图1所示。
![](https://img-blog.csdnimg.cn/20191224192325858.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNjYxNTkz,size_16,color_FFFFFF,t_70)
-
Burst操作
burst操作是指只需给出一个地址(Addr0)及操作长度(Length),在进行读写时以后的地址会在Addr0的基础上依次加1个Length单位。
例如:对上述顶层Cache(地址是字节对齐的)进行burst操作,地址Addr0=0x0000,Length=16,设Length以字节为单位,那么本次burst操作访问了地址Addr0~Addr15=0x000f,而对于底层Cache(地址是128bit对齐的)而言,只需一次操作即可访问16个字节。
如果Addr1=0x0001(即进行的burst操作是非对齐的),Length=16,那么本次burst操作访问了地址Addr1~Addr16=0x0010,尽管仍然是访问128bit,但由于底层Cache的地址是128bit对齐的,因此第一次访问最多访问到Addr15,而本次burst要求访问Addr16,因此共需两次操作。