Skip to content

Commit

Permalink
Static hostname: dracacys-virtual-machine
Browse files Browse the repository at this point in the history
       Icon name: computer-vm
         Chassis: vm
      Machine ID: 06448809b4a442e295fea969dd4fff1e
         Boot ID: 02ca997c9a2a4e1bb6331063462358c0
  Virtualization: vmware
Operating System: Ubuntu 22.04.3 LTS
          Kernel: Linux 6.2.0-39-generic
    Architecture: x86-64
 Hardware Vendor: VMware, Inc.
  Hardware Model: VMware Virtual Platform
 20:36:51 up  4:32,  1 user,  load average: 0.94, 0.76, 0.76
  • Loading branch information
tracer-nju authored and vhagor committed Dec 26, 2023
1 parent 0a123f0 commit 7aca6fd
Showing 1 changed file with 15 additions and 12 deletions.
27 changes: 15 additions & 12 deletions cachesim/cache.c
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
* @Author: Juqi Li @ NJU
* @Date: 2023-12-26 17:26:04
* @Last Modified by: Juqi Li @ NJU
* @Last Modified time: 2023-12-26 20:22:21
* @Last Modified time: 2023-12-26 20:36:43
*/

#include "common.h"
Expand Down Expand Up @@ -80,25 +80,26 @@ uint32_t cache_read(uintptr_t addr) {
// miss:先将该块更新到主存后覆写 cache 内容
uintptr_t lucky_num = group_addr * (1 << asso_width) + rand() % (1 << asso_width);

if(cache_mem[lucky_num].lable * cache_row_num + group_addr >= (MEM_SIZE) >> BLOCK_WIDTH) {
if(cache_mem[lucky_num].lable * (1 << cache_group_width) + group_addr >= (MEM_SIZE) >> BLOCK_WIDTH) {
printf("addr:%08x block_addr:%08x group_addr:%08x lable:%08x\n", (uint32_t)addr, (uint32_t)block_addr, (uint32_t)group_addr, (uint32_t)lable);
printf("new_lable:%08x cache_row_num:%08x group_g_num:%08x\n", (uint32_t)cache_mem[lucky_num].lable, (uint32_t)cache_row_num, (MEM_SIZE) >> BLOCK_WIDTH);
assert(0);
}

if(cache_mem[lucky_num].dirty) {
mem_write(cache_mem[lucky_num].lable * cache_row_num + group_addr, cache_mem[lucky_num].data);
mem_write(cache_mem[lucky_num].lable * (1 << cache_group_width) + group_addr, cache_mem[lucky_num].data);
}

cache_mem[lucky_num].valid = true;
cache_mem[lucky_num].lable = lable;

if(cache_mem[lucky_num].lable * cache_row_num + group_addr >= (MEM_SIZE) >> BLOCK_WIDTH) {
if(cache_mem[lucky_num].lable * (1 << cache_group_width) + group_addr >= (MEM_SIZE) >> BLOCK_WIDTH) {
printf("addr:%08x block_addr:%08x group_addr:%08x lable:%08x\n", (uint32_t)addr, (uint32_t)block_addr, (uint32_t)group_addr, (uint32_t)lable);
printf("new_lable:%08x cache_row_num:%08x group_g_num:%08x\n", (uint32_t)cache_mem[lucky_num].lable, (uint32_t)cache_row_num, (MEM_SIZE) >> BLOCK_WIDTH);
assert(0);
}

mem_read(cache_mem[lucky_num].lable * cache_row_num + group_addr, cache_mem[lucky_num].data);
mem_read(cache_mem[lucky_num].lable * (1 << cache_group_width) + group_addr, cache_mem[lucky_num].data);
return *((uint32_t *)((cache_mem[lucky_num].data) + block_addr));
}

Expand Down Expand Up @@ -129,37 +130,39 @@ void cache_write(uintptr_t addr, uint32_t data, uint32_t wmask) {
// miss:先将该块更新到主存后覆写 cache 内容
uintptr_t lucky_num = group_addr * (1 << asso_width) + rand() % (1 << asso_width);

if(cache_mem[lucky_num].lable * cache_row_num + group_addr >= (MEM_SIZE) >> BLOCK_WIDTH) {
if(cache_mem[lucky_num].lable * (1 << cache_group_width) + group_addr >= (MEM_SIZE) >> BLOCK_WIDTH) {
printf("addr:%08x block_addr:%08x group_addr:%08x lable:%08x\n", (uint32_t)addr, (uint32_t)block_addr, (uint32_t)group_addr, (uint32_t)lable);
printf("new_lable:%08x cache_row_num:%08x group_g_num:%08x\n", (uint32_t)cache_mem[lucky_num].lable, (uint32_t)cache_row_num, (MEM_SIZE) >> BLOCK_WIDTH);
assert(0);
}


if(cache_mem[lucky_num].dirty) {
assert(cache_mem[lucky_num].lable * cache_row_num + group_addr < (MEM_SIZE) >> BLOCK_WIDTH);
mem_write(cache_mem[lucky_num].lable * cache_row_num + group_addr, cache_mem[lucky_num].data);
mem_write(cache_mem[lucky_num].lable * (1 << cache_group_width) + group_addr, cache_mem[lucky_num].data);
}

cache_mem[lucky_num].valid = true;
cache_mem[lucky_num].lable = lable;

if(cache_mem[lucky_num].lable * cache_row_num + group_addr >= (MEM_SIZE) >> BLOCK_WIDTH) {
if(cache_mem[lucky_num].lable * (1 << cache_group_width) + group_addr >= (MEM_SIZE) >> BLOCK_WIDTH) {
printf("addr:%08x block_addr:%08x group_addr:%08x lable:%08x\n", (uint32_t)addr, (uint32_t)block_addr, (uint32_t)group_addr, (uint32_t)lable);
printf("new_lable:%08x cache_row_num:%08x group_g_num:%08x\n", (uint32_t)cache_mem[lucky_num].lable, (uint32_t)cache_row_num, (MEM_SIZE) >> BLOCK_WIDTH);
assert(0);
}


mem_read(cache_mem[lucky_num].lable * cache_row_num + group_addr, cache_mem[lucky_num].data);
mem_read(cache_mem[lucky_num].lable * (1 << cache_group_width) + group_addr, cache_mem[lucky_num].data);

if(cache_mem[lucky_num].lable * cache_row_num + group_addr >= (MEM_SIZE) >> BLOCK_WIDTH) {

if(cache_mem[lucky_num].lable * (1 << cache_group_width) + group_addr >= (MEM_SIZE) >> BLOCK_WIDTH) {
printf("addr:%08x block_addr:%08x group_addr:%08x lable:%08x\n", (uint32_t)addr, (uint32_t)block_addr, (uint32_t)group_addr, (uint32_t)lable);
printf("new_lable:%08x cache_row_num:%08x group_g_num:%08x\n", (uint32_t)cache_mem[lucky_num].lable, (uint32_t)cache_row_num, (MEM_SIZE) >> BLOCK_WIDTH);
assert(0);
}


*((uint32_t *)(cache_mem[lucky_num].data + block_addr)) = ((*((uint32_t *)(cache_mem[lucky_num].data + block_addr))) & (~wmask)) | (data & wmask);
mem_write(cache_mem[lucky_num].lable * cache_row_num + group_addr, cache_mem[lucky_num].data);
mem_write(cache_mem[lucky_num].lable * (1 << cache_group_width) + group_addr, cache_mem[lucky_num].data);
cache_mem[lucky_num].dirty = false;
return;
}
Expand Down

0 comments on commit 7aca6fd

Please sign in to comment.