|
1 | 1 | # ACE SystemVerilog modules for cache coherent SoC design |
2 | 2 |
|
3 | | -This repository provides modules to implement cache coherence SoC's. |
| 3 | +> 🚧 **Work in progress:** this repository is under active development. Breaking changes can happen at any time. 🚧 |
4 | 4 |
|
5 | | -## List of modules |
| 5 | +This repository provides modules to implement cache coherence SoCs. |
6 | 6 |
|
7 | | -| Name | Description | Doc | |
8 | | -|------------------------------------------------------|--------------------------------------------------------------------------------------------------------------|--------------------------------| |
9 | | -| [`ace_ccu_top`](src/ace_ccu_top.sv) | ACE interconnector, broadcasts snooping messages to the cache controllers and AXI transactions to the slave | [Doc](doc/ace_ccu_top.md) | |
| 7 | +## Repository structure |
10 | 8 |
|
11 | | -## Verification |
12 | | - |
13 | | -Generate the initial cache and memory states, as well as the transaction streams, with the following command: |
14 | | - |
15 | | -``` |
16 | | -make init_mem |
17 | | -``` |
18 | | - |
19 | | -You can control simulation parameters, such as the memory and cache sizes and structures, number of caches, and number of transactions, in `Makefile`. |
20 | | - |
21 | | -You can simulate the top level design with |
22 | 9 | ``` |
23 | | -make -B sim-ace_ccu_top.log |
| 10 | +src/ |
| 11 | +├── ace_intf.sv # ACE bus interface definitions |
| 12 | +├── ace_pkg.sv # ACE type definitions and constants |
| 13 | +├── snoop_intf.sv # Snoop channel interface definitions |
| 14 | +└── ccu/ # Coherence Control Unit |
| 15 | + ├── ccu_top.sv |
| 16 | + ├── ccu_pkg.sv |
| 17 | + ├── ccu_frontend.sv |
| 18 | + ├── ccu_frontend_arbiter.sv |
| 19 | + ├── ccu_read_engine.sv |
| 20 | + ├── ccu_write_engine.sv |
| 21 | + ├── ccu_snoop_pipeline.sv |
| 22 | + ├── ccu_replay.sv |
| 23 | + ├── ccu_exclusive_monitor.sv |
| 24 | + ├── ccu_csr_wrap.sv |
| 25 | + ├── ccu_scoreboard.sv |
| 26 | + └── regs/ # CSR definitions and generated register files |
| 27 | +
|
| 28 | +include/ |
| 29 | +└── ace/ # SystemVerilog header files (typedef, assign, convert, domain macros) |
24 | 30 | ``` |
25 | 31 |
|
26 | | -### Coherency check |
| 32 | +## Include files |
27 | 33 |
|
28 | | -To run coherency check, run |
29 | | -``` |
30 | | -make init_mem CHECK=1 |
31 | | -``` |
32 | | -It will generate the initial cache and memory states, and stall until given a prompt. |
33 | | - |
34 | | -Next, open another terminal and simulate the top level design with |
35 | | -``` |
36 | | -make -B sim-ace_ccu_top.log |
37 | | -``` |
38 | | -Once the simulation finishes, press enter on the coherency check prompt. A coherency check will be run. A log file is generated called `cache_python.log`. Search with keyword `ERROR` to find whether coherency was broken during the simulation. When run with `DEBUG=1` (the default option), a pdb session is opened the moment a coherency problem is found. |
| 34 | +| Name | Description | |
| 35 | +|---------------------------------------------------|----------------------------------------------------| |
| 36 | +| [`ace/typedef.svh`](include/ace/typedef.svh) | Macros for defining ACE and snoop struct types | |
| 37 | +| [`ace/assign.svh`](include/ace/assign.svh) | Macros for assigning ACE and snoop signals | |
| 38 | +| [`ace/convert.svh`](include/ace/convert.svh) | Macros for converting between ACE signal formats | |
| 39 | +| [`ace/domain.svh`](include/ace/domain.svh) | Macros for ACE domain signal handling | |
39 | 40 |
|
40 | 41 | ## License |
41 | 42 |
|
|
0 commit comments