Skip to content

Commit 2ef5cbb

Browse files
Merge pull request #5 from release/v1.3.0
Release v1.3.0: Power/Area Modeling, Documentation Restructure - Added CACTI-inspired PowerModel and AreaModel classes - Added technology node support (7nm-45nm) - Added --power and --tech-node CLI flags - Fixed ASCII visualization for Windows console - Restructured docs folder with 16 organized files - 14/14 tests passing
1 parent 337173e commit 2ef5cbb

28 files changed

+3410
-1147
lines changed

CHANGELOG.md

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,67 @@ All notable changes to the Cache Simulator project will be documented in this fi
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [1.3.0] - 2026-01-07
9+
10+
### Added
11+
- **Power and Area Modeling** (CACTI-inspired analytical models)
12+
- `PowerModel` class for energy calculation
13+
- Dynamic read/write energy per access (pJ)
14+
- Static leakage power with temperature scaling (mW)
15+
- Total energy accumulation during simulation (nJ)
16+
- Energy-Delay Product (EDP) metric
17+
- `AreaModel` class for silicon area estimation
18+
- Component breakdown: data array, tag array, decoders, sense amps, routing
19+
- Aspect ratio and layout geometry estimation
20+
- Cell efficiency metrics
21+
- Technology node support: 7nm, 14nm, 22nm, 32nm, 45nm
22+
- Constants derived from CACTI 7.0 and published research
23+
24+
- **CLI Integration**
25+
- `--power` flag to enable power and energy analysis
26+
- `--tech-node <nm>` flag to specify technology node (7, 14, 22, 32, 45)
27+
28+
- **Documentation**
29+
- New `docs/features/power-modeling.md` comprehensive feature guide
30+
- Updated `docs/user/configuration.md` with power config options
31+
32+
### Fixed
33+
- **Visualization Rendering on Windows**
34+
- Replaced Unicode box-drawing characters (╔═║) with ASCII alternatives (+, -, |)
35+
- Added `TABLE_WIDTH` constant for consistent table alignment
36+
- Centered title row with proper padding
37+
- Footer stats now use `std::setw` for exact column alignment
38+
39+
### Changed
40+
- Updated version to 1.3.0
41+
- Updated C++ edition label to C++20
42+
43+
### New Files
44+
- `src/models/power_constants.h` - Technology-specific parameters
45+
- `src/models/power_model.h/cpp` - Power and energy modeling
46+
- `src/models/area_model.h/cpp` - Area estimation
47+
- `tests/unit/models/power_area_test.cpp` - Comprehensive unit tests (14 test cases)
48+
- `docs/features/power-modeling.md` - Feature documentation
49+
50+
### Technical Details
51+
- Bitline, wordline, decoder, and sense amplifier energy components
52+
- Temperature-dependent leakage with exponential scaling
53+
- 6T SRAM cell-based transistor count estimation
54+
- Peripheral circuit overhead modeling
55+
56+
### Documentation Restructure
57+
- Redesigned `docs/` folder structure with 16 organized files
58+
- Created `docs/user/analysis.md` for performance analysis tools
59+
- Created `docs/developer/building.md` for build instructions
60+
- Created `docs/developer/api-reference.md` for code API
61+
- Created `docs/features/prefetching.md` for prefetching documentation
62+
- Removed version-specific `docs/features/v1.2.0-features.md` (content migrated)
63+
- Updated `docs/developer/architecture.md` with C++20 and Power/Area models
64+
- Removed emojis from all documentation headings
65+
- Updated README.md with clean formatting and power model section
66+
67+
---
68+
869
## [1.2.2] - 2026-01-06
970

1071
### Added

CMakeLists.txt

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
cmake_minimum_required(VERSION 3.14)
2-
project(CacheSimulator VERSION 1.2.2 LANGUAGES CXX)
2+
project(CacheSimulator VERSION 1.3.0 LANGUAGES CXX)
33

44
# Set C++20 as the required standard (required for designated initializers)
55
set(CMAKE_CXX_STANDARD 20)
@@ -40,11 +40,13 @@ include_directories(
4040
${PROJECT_SOURCE_DIR}/src
4141
${PROJECT_SOURCE_DIR}/src/core
4242
${PROJECT_SOURCE_DIR}/src/utils
43+
${PROJECT_SOURCE_DIR}/src/models
4344
)
4445

4546
# Define source files
4647
file(GLOB_RECURSE CORE_SOURCES "src/core/*.cpp")
4748
file(GLOB_RECURSE UTILS_SOURCES "src/utils/*.cpp")
49+
file(GLOB_RECURSE MODELS_SOURCES "src/models/*.cpp")
4850
file(GLOB MAIN_SOURCES "src/main.cpp")
4951

5052
# Explicitly add new v1.1.0 and v1.2.0 source files to ensure they're included
@@ -57,13 +59,14 @@ list(APPEND CORE_SOURCES "src/core/multiprocessor/interconnect.cpp")
5759
# Define header files
5860
file(GLOB_RECURSE CORE_HEADERS "src/core/*.h")
5961
file(GLOB_RECURSE UTILS_HEADERS "src/utils/*.h")
62+
file(GLOB_RECURSE MODELS_HEADERS "src/models/*.h")
6063

6164
# Create a list of all sources
62-
set(ALL_SOURCES ${CORE_SOURCES} ${UTILS_SOURCES} ${MAIN_SOURCES})
63-
set(ALL_HEADERS ${CORE_HEADERS} ${UTILS_HEADERS})
65+
set(ALL_SOURCES ${CORE_SOURCES} ${UTILS_SOURCES} ${MODELS_SOURCES} ${MAIN_SOURCES})
66+
set(ALL_HEADERS ${CORE_HEADERS} ${UTILS_HEADERS} ${MODELS_HEADERS})
6467

6568
# Define library for tests to link against
66-
add_library(cachesim_lib STATIC ${CORE_SOURCES} ${UTILS_SOURCES})
69+
add_library(cachesim_lib STATIC ${CORE_SOURCES} ${UTILS_SOURCES} ${MODELS_SOURCES})
6770

6871
# Link against threads library for parallel processing
6972
find_package(Threads REQUIRED)
@@ -115,6 +118,16 @@ foreach(TEST_SOURCE ${UTILS_TEST_SOURCES})
115118
add_test(NAME unit_utils_${TEST_NAME} COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/tests/unit/utils/${TEST_NAME})
116119
endforeach()
117120

121+
# Add unit tests - Models
122+
file(GLOB MODELS_TEST_SOURCES "tests/unit/models/*.cpp")
123+
foreach(TEST_SOURCE ${MODELS_TEST_SOURCES})
124+
get_filename_component(TEST_NAME ${TEST_SOURCE} NAME_WE)
125+
add_executable(${TEST_NAME} ${TEST_SOURCE})
126+
target_link_libraries(${TEST_NAME} cachesim_lib)
127+
set_target_properties(${TEST_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/tests/unit/models)
128+
add_test(NAME unit_models_${TEST_NAME} COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/tests/unit/models/${TEST_NAME})
129+
endforeach()
130+
118131
# Add integration tests
119132
file(GLOB INTEGRATION_TEST_SOURCES "tests/integration/*.cpp")
120133
foreach(TEST_SOURCE ${INTEGRATION_TEST_SOURCES})

0 commit comments

Comments
 (0)