diff --git a/README.md b/README.md index 5441872..f849867 100644 --- a/README.md +++ b/README.md @@ -8,39 +8,26 @@ Join On [Discord](https://discord.gg/sQjhBvWXjF) if you interested in the projec # General SoC Architecture idea -``` - +-------+ - | CPI | - +-------+-------+ - | CPU | - +-------+-------+ - | L1D | L1I | - +-------+-------+ - /\ /\ - || || - \/ \/ - +------------------------------------------------------------------+ - | MATRIX INTERCONNECT | - +------------------------------------------------------------------+ - /\ /\ /\ - || || || - \/ \/ \/ - +---------+ +---------+ +---------+ - | Cache | | Device | | Device | - +---------+ +---------+ +---------+ - /\ - || - \/ - +----------------------+ - | Memory Controlller | - +----------------------+ - /\ - || - \/ - +---------+ - | RAM | - +---------+ - +```mermaid +flowchart TD + subgraph CPU["CPU"] + direction TB + CPI["CPI"] + L1D["L1D"] + L1I["L1I"] + CPI --- L1D + CPI --- L1I + end + + L1D <--> MI["MATRIX INTERCONNECT"] + L1I <--> MI + + MI <--> Cache["Cache"] + MI <--> DeviceA["Device"] + MI <--> DeviceB["Device"] + + Cache <--> MC["Memory Controlller"] + MC <--> RAM["RAM"] ``` --- @@ -99,49 +86,60 @@ wire [31:0] rs2; No Unaligned memory access. CPU throws an unalinged memory access exemption. -```sv - ++============================================================ - || ++============================================++ +----+ - || || +-+ +------+ || | | - || || |4|==>| A | || | | - || || +-+ | + |===++ | | - || || ++===>| B | | | - || || || +------+ | | - || || || | | - || || +------+ +------+ || +-----------+ | IF | - || ++===>| 0 | | | || | | | | - || | MUX |===>| PC |===++===>| I Cache |====>| | - ++======>| 1 | | | ADDR | | | | - +------+ +------+ +-----------+ | | - | AXI/Wb4 | | | - +-----------+ | | - /\ | | - || I BUS | | - \/ +----+ +```mermaid +flowchart LR + FOUR(["4"]) + JMP(["jump / branch target
(from later stage)"]) + + subgraph IF["IF"] + direction LR + MUX{{"MUX
0 / 1"}} + PC["PC"] + ADD["A + B"] + ICACHE["I Cache
AXI / Wb4"] + + FOUR -->|A| ADD + PC -->|B| ADD + ADD -->|"0"| MUX + MUX --> PC + PC -->|ADDR| ICACHE + end + + JMP -->|"1"| MUX + ICACHE <-->|I BUS| IBUS(["external bus"]) + ICACHE --> IFOUT(["instruction out"]) ``` Unaligned memory access control logic on the instruction cache. Pipeline stall while cache logic fetches data blocks and aligns them. -```sv - ++============================================================ - || ++============================================++ +----+ - || || +-+ +------+ || | | - || || |4|==>| A | || | | - || || +-+ | + |===++ | | - || || ++===>| B | | | - || || || +------+ | | - || || || | | - || || +------+ +------+ || +---+-------+ | IF | - || ++===>| 0 | | | || | U | | | | - || | MUX |===>| PC |===++===>| A |I Cache|====>| | - ++======>| 1 | | | ADDR | L | | | | - +------+ +------+ +---+-------+ | | - | AXI/Wb4 | | | - +-----------+ | | - /\ | | - || I BUS | | - \/ +----+ +```mermaid +flowchart LR + FOUR(["4"]) + JMP(["jump / branch target
(from later stage)"]) + + subgraph IF["IF"] + direction LR + MUX{{"MUX
0 / 1"}} + PC["PC"] + ADD["A + B"] + subgraph CACHEBLK[" "] + direction LR + UAL["UAL"] + ICACHE["I Cache
AXI / Wb4"] + UAL --> ICACHE + end + + FOUR -->|A| ADD + PC -->|B| ADD + ADD -->|"0"| MUX + MUX --> PC + PC -->|ADDR| UAL + end + + JMP -->|"1"| MUX + ICACHE <-->|I BUS| IBUS(["external bus"]) + ICACHE --> IFOUT(["instruction out"]) ``` ---