From 0c5fd283e34cf6a1619a1bba072e0198de0a3902 Mon Sep 17 00:00:00 2001 From: Brandon Rodriguez <brodriguez8774@gmail.com> Date: Mon, 2 Mar 2020 14:06:26 -0500 Subject: [PATCH] Further correct masking caclulations --- main.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/main.py b/main.py index 778db82..801a739 100644 --- a/main.py +++ b/main.py @@ -67,6 +67,7 @@ def main(set_identifier_bit_count, line_count, block_identifier_bit_count, file_ # print('E: {0}'.format(E)) # print('Tag Bits: {0}'.format(tag_identifier_bit_count)) print('Cache: {0}'.format(cache)) + print('\n\n') run_simulation(cache, file_name, M, B, S) @@ -87,6 +88,8 @@ def run_simulation(cache, file_name, M, B, S): for line in file: # print('Line: {0}'.format(line)) cache, hits, misses, evictions = handle_line(cache, line, M, B, S, hits, misses, evictions) + # print('Cache: {0}'.format(cache)) + # print('') # print('M: {0} As Bits: {1:b}'.format(M, M - 1)) # print('B: {0} As Bits: {1:b}'.format(B, B - 1)) @@ -127,9 +130,12 @@ 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 - 1) << 1) + block_offset = int(math.log2(B)) + set_mask = ((S << block_offset) - 1) ^ block_mask + set_offset = int(math.log2(S)) tag_mask = (M - 1) ^ set_mask ^ block_mask + # print('') # 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)) @@ -139,8 +145,8 @@ def handle_line(cache, line, M, B, S, hits, misses, evictions): # Use masks to get address chunks. block = address & block_mask - set = (address & set_mask) >> 1 - tag = address & tag_mask + set = (address & set_mask) >> block_offset + tag = (address & tag_mask) >> (block_offset + set_offset) # print('block: {0:b}'.format(block)) # print('set: {0:b}'.format(set)) @@ -168,9 +174,9 @@ def handle_line(cache, line, M, B, S, hits, misses, evictions): # If we made it this far, cache locations were set, but tags did not match. Conflict miss. print('{0} miss eviction'.format(line)) - cache[set][0]['tag'] = tag misses += 1 evictions += 1 + cache[set][0]['tag'] = tag return (cache, hits, misses, evictions) -- GitLab