问一个AHB的问题
时间:12-12
整理:3721RD
点击:
总线是32位宽
如果hsize=10,hburst是WRAP8的时候,haddr的起始地址是0x04,在总线上的地址haddr会是下面的序列:
0x04, 0x08, 0x0C, 0x10, 0x14, 0x18, 0x1C, 0x00
最后一个地址如果直接加应该是addr_inc = 0x20,由于是WRAP8,haddr = 0x20 ^ addr_inc
也就是说haddr在WRAP8的时候,其地址计算是haddr = 0x20 ^ (haddr + 0x04)
类似的,WRAP4的时候,haddr = 0x10 ^ addr_inc
问题:
1.我上面的理解应该没有错吧
2.如果hsize不是10,即不是WORD操作的时候,会是什么样子?
具体的,hsize为01,haddr起始地址是0x06,WRAP4的时候,总线上的haddr是什么样子的?
是这样的么:
0x06,0x08, 0x00, 0x02?
其地址计算是
haddr = 0x10 ^ (haddr + 0x02)?
还是下面这个情况:
haddr = 0x10 ^ (haddr + 0x04)?
谢谢
如果hsize=10,hburst是WRAP8的时候,haddr的起始地址是0x04,在总线上的地址haddr会是下面的序列:
0x04, 0x08, 0x0C, 0x10, 0x14, 0x18, 0x1C, 0x00
最后一个地址如果直接加应该是addr_inc = 0x20,由于是WRAP8,haddr = 0x20 ^ addr_inc
也就是说haddr在WRAP8的时候,其地址计算是haddr = 0x20 ^ (haddr + 0x04)
类似的,WRAP4的时候,haddr = 0x10 ^ addr_inc
问题:
1.我上面的理解应该没有错吧
2.如果hsize不是10,即不是WORD操作的时候,会是什么样子?
具体的,hsize为01,haddr起始地址是0x06,WRAP4的时候,总线上的haddr是什么样子的?
是这样的么:
0x06,0x08, 0x00, 0x02?
其地址计算是
haddr = 0x10 ^ (haddr + 0x02)?
还是下面这个情况:
haddr = 0x10 ^ (haddr + 0x04)?
谢谢
写错了
WORD的时候
WRAP8的地址操作应该是
haddr = {haddr[31:6], ((haddr[5:0] + 4) & 6'h3F)}
那么HALF Word, WRAP4应该是什么?
嗯
有点理解了
应该是这样的
WRAP4, hsize = 01:
haddr <= {haddr[31:3], ((haddr[2:1] + 1) & 2'h3), 1'b0}