diff --git a/main.py b/main.py index f2eb6c939c969a18adfce1c279919948d5996ca8..25fd634f70937c891e906d589e3cf825f23faa75 100644 --- a/main.py +++ b/main.py @@ -26,6 +26,7 @@ def main(set_identifier_bit_count, line_count, block_identifier_bit_count, file_ """ Program main. """ + print('\n') print('main():') print(' set_identifier_bit_count: {0}'.format(set_identifier_bit_count)) print(' line_count: {0}'.format(line_count)) @@ -64,7 +65,7 @@ def main(set_identifier_bit_count, line_count, block_identifier_bit_count, file_ # print('S: {0}'.format(S)) # print('E: {0}'.format(E)) # print('Tag Bits: {0}'.format(tag_identifier_bit_count)) - # print('Cache: {0}'.format(cache)) + print('Cache: {0}'.format(cache)) run_simulation(cache, file_name, M, B, S) @@ -109,6 +110,13 @@ def handle_line(cache, line, M, B, S, hits, misses, evictions): return else: line = line.strip() + # print('\n') + # print('handle_line():') + # print(' line: {0}'.format(line)) + # print(' M: {0}'.format(M)) + # print(' B: {0}'.format(B)) + # print(' S: {0}'.format(S)) + # print('') # Not an instruction load. Keep processing. Start by getting address. address = int(split_line[2]) % M @@ -117,18 +125,19 @@ def handle_line(cache, line, M, B, S, hits, misses, evictions): # Get mask values. full_mask = M - 1 block_mask = B - 1 - set_mask = S + B - tag_mask = set_mask + block_mask + 1 + set_mask = ((S - 1) << 1) + tag_mask = (M - 1) ^ set_mask ^ block_mask # print('Address: {0} As Bits: {0:b}'.format(address)) # print('full_mask: {0} As Bits: {0:b}'.format(full_mask)) # print('block_mask: {0} As Bits: {0:b}'.format(block_mask)) # print('set_mask: {0} As Bits: {0:b}'.format(set_mask)) # print('tag_mask: {0} As Bits: {0:b}'.format(tag_mask)) + # print('') # Use masks to get address chunks. block = address & block_mask - set = (address & set_mask) - B - 1 + set = (address & set_mask) >> 1 tag = address & tag_mask # print('block: {0:b}'.format(block)) @@ -136,7 +145,6 @@ def handle_line(cache, line, M, B, S, hits, misses, evictions): # print('tag: {0:b}'.format(tag)) # We have our values. Now compare against the cache. - # print('set: {0}'.format(set)) # print('cache[set]: {0}'.format(cache[set])) if cache[set][0]['valid'] == True and cache[set][0]['tag'] == tag: # Match found.