关于BAR(PCIE BAR或AXI BAR)的解释
假设某BAR的默认值是xxxx_0000(这里表示8个比特位),其中低4位不可写,可操作的最低位是4,所以该BAR的大小是2^4=16字节;
1、系统软件向BAR写0xFF
2、系统软件读BAR,读到的值是0xF0,于是系统软件知道该BAR的最低可操作位是4,该BAR的大小是2^4=16字节,要求
BAR的基地址必须能被其大小整除,即BAR的基地址必须按照其大小字节对齐,比如这里必须是16字节对齐;
3、系统软件向该BAR指定形如xxxx_0000的起始地址,比如如下的起始地址都是合法的:
0000_0000,0x00=0
0001_0000,0x10=16
1111_0000,0xF0=240
1010_0000,0xA0=160
以上地址都是16字节对齐的,即能被16字节整除;
如果系统软件向BAR写0xAF=1010_1111,由于BAR的低4位不可写,所以写完后BAR的值仍是0xA0,而不是0xAF。