There are two seperate files targeting loads and stores for each test.
In each test file, each letter in the comments represents a 64-bit address
range. For example, A represents the address from 0 to 63, B represents
the address from 64 to 127, C represents the address from 128 to 191, and so on.
If you enable debug flags to print the hits and misses information, you
can compare the results with your expectation. This test can be used to
test the correctness of the replacement policy. The first block will
always get an eviction.

The format of test files should be using traffic generator

To emulate 4-way 1-set cache with implementation of 4-way 2-set cache,
we will use A, C, E, G, I, K, M, O instead of A, B, C, D, E, F, G, H,
so they will never get to the second set

The linear traffic generator has
<duration (ticks)> <start addr> <end addr> <access size (bytes)>
<min period (ticks)> <max period (ticks)> <percent reads> <data limit (bytes)>

Addresses are expressed as decimal numbers. The period in the linear
and random state is from a uniform random distribution over the
interval. If a specific value is desired, then the min and max can
be set to the same value.

The duration(in ticks) is calculated by the time needed for accessing a cache
line * (the number of cache lines accessed in this state + 1). For example, to
access address 0 to address 1023, the duration should be 510000 ticks, which is
calcualted by 510000 = 30000 * (1024/64 + 1). Please note that 30000 is assumed
to be the number of ticks in one period here.
