47 lines
1.4 KiB
Plaintext
47 lines
1.4 KiB
Plaintext
Notes
|
|
|
|
|
|
8 kB L1 Data Cache | 16 kB L1 I cache (maybe)
|
|
[tag index offset_remaining_block bank wordOffset], use a blocksize of 128 bytes between memory and cache. So each bank gets 16 bytes.
|
|
total offset is b its
|
|
4 bits new offset, 2 bits block, 2 bits word offset
|
|
xxxxxxxIIIIIIIIoobbbyy
|
|
9876543210
|
|
bbbyyyyy
|
|
o = index into block offset
|
|
b = bank
|
|
y = word offset
|
|
I = index into cach
|
|
6 bits indexes (64 indeces) No ways || 16 indexes with 4 ways
|
|
Rest of the bits are tag bits
|
|
|
|
blocks / banks = 16 bytes, 8 banks. 128 bytes. 256 indexes (height). width is 16 bytes. 4 words per block (per bank). 17 bit tag
|
|
|
|
gtkwave ___.vcd
|
|
|
|
|
|
// Splitting it up
|
|
|
|
// word byte
|
|
wire[127:0][3:0] data_from_ram;
|
|
|
|
|
|
// word byte bank
|
|
wire[15:0][3:0] bank_data_n[3:0]
|
|
|
|
integer i;
|
|
for (i = 0; i < something; i+=8)
|
|
{
|
|
bank_data_n[0][i/8] = data_from_ram[i+0]
|
|
bank_data_n[1][i/8] = data_from_ram[i+1]
|
|
bank_data_n[2][i/8] = data_from_ram[i+2]
|
|
bank_data_n[3][i/8] = data_from_ram[i+3]
|
|
bank_data_n[4][i/8] = data_from_ram[i+4]
|
|
bank_data_n[5][i/8] = data_from_ram[i+5]
|
|
bank_data_n[6][i/8] = data_from_ram[i+6]
|
|
bank_data_n[7][i/8] = data_from_ram[i+7]
|
|
}
|
|
|
|
|
|
With Cache. If miss. Go to memory, grab all data, replace that data in the cache. Generate a new request, feed that into the cache (this one will hit), return that
|