1K:1024=2^10,B:Byte,4KB:4096Bytes=2^12,1kb:1024byte=2^10
4096,对应16进制=1000,对应2进制=0001 0000 0000 0000
1024,对应16进制=400,对应2进制=0100 0000 0000
所谓的4K边界是指:低12bit为0的地址,例如:32’h00001000,32’h00002000…
同理1k边界是指:低10bit为0的地址,例如:32’h00000400,32’h00000800…
假设起始地址为0,则
4kb空间 : ['h0 'hfff)
16kb空间 :['h0 'h4000)
256kb空间 : ['h0 'h40000)
判断是否落入256kb空间 : ['h0 'h40000),只需要判断addr的高14位是否为0
假设基地址位base_addr,分配不同的空间大小(4kb,16kb,32kb,等等)
若分配4kb空间,判断某地址是否落入所分配的4kb空间的方法有两种
(1)地址是否落入[base_addr base_addr+'h1000) ,
(2)判断addr[31:12]是否等于base_addr[31:12],若相等则落入分配的4KB空间区域,否则没有
扩展:
分配空间大小4kb.
(1) [base_addr base_addr+'h1000) // 'h1000 = ('d4) * ('d1024)
(2)addr[31:12]与base_addr[31:12]是否相等
分配空间大小8kb.
(1) [base_addr base_addr+'h2000) // 'h2000 = ('d8) * ('d1024)
(2)addr[31:13]与base_addr[31:13]是否相等
分配空间大小16kb.
(1)[base_addr base_addr+'h4000) // 'h4000 = ('d16) * ('d1024)
(2)addr[31:14]与base_addr[31:14]是否相等
分配空间大小32kb.
(1)[base_addr base_addr+'h8000) // 'h8000 = ('d32) * ('d1024)
(2)addr[31:15]与base_addr[31:15]是否相等
分配空间大小64kb.
(1)[base_addr base_addr+'h10000) // 'h10000 = ('d64) * ('d1024)
(2)addr[31:16]与base_addr[31:16]是否相等
分配空间大小128kb.
(1)[base_addr base_addr+'h20000) // 'h20000 = ('d128) * ('d1024)
(2)addr[31:17]与base_addr[31:17]是否相等
分配空间大小256kb.
(1)[base_addr base_addr+'h40000) // 'h40000 = ('d256) * ('d1024)
(2)addr[31:18]与base_addr[31:18]是否相等
分配空间大小512kb.
(1)[base_addr base_addr+'h80000) // 'h80000 = ('d512) * ('d1024)
(2)addr[31:19]与base_addr[31:19]是否相等
分配空间大小1Mb.
(1)[base_addr base_addr+'h100000) // 'h100000 = ('d1024) * ('d1024)
(2)addr[31:19]与base_addr[31:19]是否相等
1K= 1024B(字节)=2^10
1M = 1024 K = 2^20
1G = 1024 M = 2^30
1kb = 1*1024;
4kb = 4*1024;
16kb = 16*1024;
32kb = 32*1024;
64kb = 64*1024
4G=4×1024 M=4×1024×1024K=4×1024×1024×1024B=2^32B
即4Gb空间地址范围:0x00000000-0xFFFFFFFF