Keraunos PCIe Tile - High-Level Design
Version: 2.0
Date: February 10, 2026
Status: Updated - DUT initiator socket architecture
1. Introduction
1.1 Purpose
This document describes the high-level architecture of the Keraunos PCIe Tile, a SystemC/TLM2.0 model that provides PCIe connectivity between Network-on-Chip (NOC), System Management Network (SMN), and PCIe controller interfaces.
1.2 Scope
The Keraunos PCIe Tile integrates:
3 fabric switches for routing traffic between NOC, SMN, and PCIe domains
8 Translation Lookaside Buffers (TLBs) for address translation (5 inbound, 3 outbound)
MSI-X relay unit for interrupt handling
System Information Interface (SII) for PCIe configuration tracking
Configuration register block for tile-level control
Clock and reset control infrastructure
1.3 Key Terms
Term |
Definition |
|---|---|
CII |
Configuration Intercept Interface - PCIe config space write detection |
DECERR |
Decode Error - TLM address error response |
MSI-X |
Message Signaled Interrupts - Extended |
NOC |
Network-on-Chip |
PBA |
Pending Bit Array (for MSI-X) |
SII |
System Information Interface |
SMN |
System Management Network |
TLB |
Translation Lookaside Buffer |
TLM |
Transaction Level Modeling |
BME |
Bus Master Enable (PCIe Command Register bit 2); gates memory TLPs in EP mode when clear |
2. Architecture Overview
2.1 Top-Level Architecture
The Keraunos PCIe Tile acts as a bridge between three major interconnect domains:
2.2 Design Principles
C++ Implementation: All internal components are C++ classes (not SystemC modules) for performance and simplicity.
Function Callbacks: Internal communication uses C++ function callbacks instead of TLM sockets.
RAII Memory Management: Smart pointers (
std::unique_ptr) for automatic resource cleanup.Address-Based Routing: Upper address bits [63:60] determine routing paths.
Signal-Based Control: Control plane uses
sc_signalfor isolation, reset, and configuration tracking.
2.3 System Connection Diagrams
This section shows how the Keraunos PCIe Tile connects to external subsystems in a complete SoC integration. Each subsystem connection is shown in a separate diagram for clarity.
2.3.1 SMN Subsystem Connection
SMN Connection Details:
Signal/Socket |
Type |
Width |
Direction |
Purpose |
|---|---|---|---|---|
|
TLM Socket |
64-bit |
Input |
Receives configuration transactions from SMN for TLBs, MSI, SII, Config registers |
|
TLM Initiator Socket |
64-bit |
Output |
Sends bypass path responses via |
|
Signal |
1-bit |
Output |
Interrupt to SMN when PCIe config space is written (CII tracking) |
|
Signal |
8-bit |
Output |
PCIe bus number from SII CORE_CONTROL register |
|
Signal |
8-bit |
Output |
PCIe device number from SII CORE_CONTROL register |
|
Signal |
1-bit |
Output |
Device type: 0=Endpoint, 1=Root Port |
SMN Configuration Targets:
SMN can configure the following via smn_n_target:
Config Register Block (offset 0x0xxx):
system_ready, enables, isolation controlSII Block (offset 0x1xxx): CORE_CONTROL (device_type [2:0]: 0x4=RP), CFG_MODIFIED (RW1C), BUS_DEV_NUM. Writes to CORE_CONTROL invoke a device_type callback so NOC-PCIE switch controller mode (EP/RP) is updated immediately for BME logic.
TLB Configuration (offset 0x3xxx-0x7xxx): Valid bits, page masks, base addresses
MSI Relay (offset 0x8xxx): MSI-X table, PBA, masks
Configuration Sequence:
SMN writes
system_ready=1to Config Register BlockSMN configures TLB entries (inbound/outbound)
SMN enables data paths:
pcie_inbound_app_enable=1,pcie_outbound_app_enable=1SMN monitors
config_updateinterrupt for PCIe config space changes
2.3.2 NOC Subsystem Connection
NOC Connection Details:
Signal/Socket |
Type |
Width |
Direction |
Purpose |
|---|---|---|---|---|
|
TLM Socket |
64-bit |
Input |
Receives NOC transactions for outbound PCIe path (NOC→TLB→PCIe) |
|
TLM Initiator Socket |
64-bit |
Output |
Sends translated inbound PCIe transactions via |
|
Signal |
3-bit |
Output |
NOC transaction timeout status for monitoring |
Data Flow Paths:
Outbound Path (NOC → PCIe):
NOC writes to
noc_n_targetsocketNOC-IO switch routes to outbound TLB
TLB translates NOC address to PCIe address
NOC-PCIE switch checks
pcie_outbound_app_enableIf enabled, forwards through
pcie_controller_initiator(realtlm_utils::simple_initiator_socket<64>) tosparse_backing_memoryfor cross-socket data verification
Inbound Path (PCIe → NOC):
PCIe controller writes to
pcie_controller_targetsocketNOC-PCIE switch routes based on addr[63:60]
Inbound TLB translates PCIe address to NOC address
NOC-IO switch forwards through
noc_n_initiator(realtlm_utils::simple_initiator_socket<64>) tosparse_backing_memoryfor cross-socket data verification
MSI Generation:
NOC MSI source writes MSI vector to
noc_n_targetat special address (0x18800000)MSI Relay Unit processes vector, checks masks
Generates MSI-X transaction to PCIe controller
Note: MSI generation functional via initiator sockets to
sparse_backing_memory
2.3.3 Designware PCIe Controller Connection
PCIe Controller Connection Details:
Signal/Socket |
Type |
Width |
Direction |
Purpose |
|---|---|---|---|---|
|
TLM Socket |
64-bit |
Input |
Receives inbound TLPs from PCIe controller AXI master |
|
TLM Initiator Socket |
64-bit |
Output |
Sends outbound TLPs via |
|
Signal |
1-bit |
Input |
CII header valid: config space write detected |
|
Signal |
5-bit |
Input |
TLP type (0x04 = configuration write) |
|
Signal |
12-bit |
Input |
Config space byte address (track first 128B) |
|
Signal |
1-bit |
Input |
Function-level reset requested |
|
Signal |
1-bit |
Input |
Hot reset detected on link |
|
Signal |
1-bit |
Input |
RAS error event |
|
Signal |
1-bit |
Input |
DMA transaction completed |
|
Signal |
1-bit |
Input |
Miscellaneous controller interrupt |
|
Signal |
1-bit |
Output |
FLR forwarded to system (requires delta cycle) |
|
Signal |
1-bit |
Output |
Hot reset forwarded to system |
|
Signal |
1-bit |
Output |
RAS error forwarded to system |
|
Signal |
1-bit |
Output |
DMA done forwarded to system |
|
Signal |
1-bit |
Output |
Misc interrupt forwarded to system |
|
Clock |
1-bit |
Input |
PCIe core clock (Gen3: 250MHz) |
|
Signal |
1-bit |
Input |
Controller reset (active low), resets SII CII state |
CII Tracking Flow:
PCIe controller detects config space write
Asserts
cii_hdr_validwith type and addressTile’s SII block tracks writes to first 128 bytes
Sets bit in
cfg_modifiedregisterAsserts
config_updateinterrupt to SMNSMN reads
CFG_MODIFIED, clears with RW1C writes
Interrupt Forwarding:
Critical: All interrupt forwarding requires
sc_core::wait(SC_ZERO_TIME)after input changesInput signals must propagate through SystemC delta cycle before outputs are valid
Outputs go to system interrupt controller for software handling
2.3.4 System Control Connection
System Control Connection Details:
Signal |
Type |
Width |
Direction |
Purpose |
|---|---|---|---|---|
|
Signal |
1-bit |
Input |
Cold reset (active low): Resets SII block and reset control module |
|
Signal |
1-bit |
Input |
Warm reset (active low): Similar behavior to cold reset |
|
Signal |
1-bit |
Input |
Isolation request: Clears |
|
Clock |
1-bit |
Input |
AXI/NOC domain clock (system-dependent frequency) |
|
Signal |
1-bit |
Output |
System interrupt output (currently tied to 0) |
Reset Behavior:
Reset Type |
Resets |
Does NOT Reset |
Recovery |
|---|---|---|---|
|
SII CII tracking, reset control module; BME restored to default (enabled) in NOC-PCIE switch; SII device_type (EP/RP) reset to EP |
Config registers, TLBs, enables |
Software reconfiguration required |
|
Similar to cold reset |
Config registers, TLBs, enables |
Software reconfiguration required |
|
SII CII tracking only |
Everything else |
Automatic on reset deassertion |
Critical Isolation Limitation:
⚠️ WARNING: Asserting isolate_req permanently clears all enables. Recovery requires:
Cold reset cycle (
cold_reset_nlow then high)SMN writes
system_ready=1SMN reconfigures TLB entries
SMN writes
pcie_inbound_app_enable=1SMN writes
pcie_outbound_app_enable=1
Simply deasserting isolate_req does NOT restore functionality. This is a known architectural limitation.
Connection Summary:
TLM Socket Connections (64-bit, blocking transport)
Tile Socket |
Direction |
External Subsystem |
Purpose |
|---|---|---|---|
|
Input |
NOC Network Fabric |
Receives NOC transactions for outbound PCIe (NOC→PCIe) |
|
Output |
NOC / |
Sends translated inbound PCIe via real initiator socket (PCIe→NOC) |
|
Input |
SMN Network Fabric |
Receives configuration transactions from SMN |
|
Output |
SMN / |
Sends bypass/response transactions via real initiator socket |
|
Input |
DW PCIe AXI Master |
Receives inbound TLPs from PCIe controller |
|
Output |
DW PCIe AXI Slave / |
Sends outbound TLPs via real initiator socket |
Clock Connections
Tile Input |
Source |
Frequency |
Purpose |
|---|---|---|---|
|
DW PCIe Controller |
PCIe Link Speed |
PCIe domain clock (Gen3: 250MHz) |
|
System Clock Generator |
System Dependent |
AXI/NOC domain clock |
Note: Both clocks must be running for tile operation. Clock domain crossing is handled internally.
Reset Connections
Tile Input |
Source |
Type |
Effect |
|---|---|---|---|
|
System Reset Controller |
Active Low |
Resets SII and reset control modules |
|
System Reset Controller |
Active Low |
Similar to cold reset |
|
DW PCIe Controller |
Active Low |
Resets SII CII tracking state |
Integration Note: Cold reset does NOT clear configuration registers. Software reconfiguration required after reset.
CII Interface Connections (Configuration Intercept)
Tile Input |
DW PCIe Output |
Width |
Purpose |
|---|---|---|---|
|
|
1-bit |
Indicates valid CII header (config write detected) |
|
|
5-bit |
TLP type (0x04 = configuration write) |
|
|
12-bit |
Config space byte address (track first 128B) |
Purpose: Allows tile to track PCIe configuration space writes and generate config_update interrupt to SMN.
Interrupt Forwarding (PCIe Controller → Tile → System)
Inputs from DW PCIe Controller:
Tile Input |
DW PCIe Source |
Trigger Condition |
|---|---|---|
|
FLR logic |
Function-level reset requested via config space |
|
Link training |
Hot reset detected on PCIe link |
|
RAS logic |
Reliability/Availability/Serviceability error |
|
DMA engine |
DMA transaction completed |
|
Various |
Controller-specific miscellaneous interrupts |
Outputs to System Interrupt Controller:
Tile Output |
Destination |
Description |
|---|---|---|
|
System Interrupt Controller |
Forwarded FLR (requires delta cycle wait) |
|
System Interrupt Controller |
Forwarded hot reset (requires delta cycle wait) |
|
System Interrupt Controller |
Forwarded RAS error (requires delta cycle wait) |
|
System Interrupt Controller |
Forwarded DMA done (requires delta cycle wait) |
|
System Interrupt Controller |
Forwarded misc interrupt (requires delta cycle wait) |
Implementation Note: All interrupt forwarding requires sc_core::wait(SC_ZERO_TIME) after input signal changes to allow SystemC delta cycle propagation before reading outputs.
CII Interrupt Output
Tile Output |
Destination |
Trigger Condition |
|---|---|---|
|
SMN Interrupt Controller |
PCIe config space write detected in first 128B (via CII tracking) |
Software Handling: SMN reads CFG_MODIFIED register, processes changes, writes 1s to clear (RW1C). Interrupt deasserts when all bits cleared.
Status Outputs
Tile Output |
Destination |
Width |
Description |
|---|---|---|---|
|
System/SMN |
8-bit |
PCIe bus number from SII CORE_CONTROL |
|
System/SMN |
8-bit |
PCIe device number from SII CORE_CONTROL |
|
System/SMN |
1-bit |
0=Endpoint, 1=Root Port (from SII) |
|
System Interrupt Controller |
1-bit |
System interrupt (currently tied to 0) |
|
NOC Timeout Monitor |
3-bit |
NOC transaction timeout status |
Isolation Control
Tile Input |
Source |
Purpose |
|---|---|---|
|
Isolation Controller |
Request isolation mode (clears all enables) |
Critical Limitation: Deasserting isolate_req does NOT restore enables. Recovery requires:
Cold reset cycle
SMN reconfiguration of
system_ready,pcie_inbound_app_enable,pcie_outbound_app_enable
MSI Input (Special Case)
The NOC subsystem can write to the tile’s noc_n_target socket at a specific MSI input address (e.g., 0x18800000) to generate MSI-X interrupts. The MSI relay unit processes these and forwards them to the PCIe controller via pcie_controller_initiator.
Note: MSI routing paths are functional. Outbound MSI transactions are forwarded through real initiator sockets to sparse_backing_memory, enabling cross-socket data verification in the testbench.
Integration Checklist
✅ Required Connections:
Connect all 6 TLM sockets (3 target, 3 initiator) with matching bit widths
Connect both clocks (
pcie_core_clkfrom DW PCIe,axi_clkfrom system)Connect all 3 reset signals (cold, warm, pcie_controller)
Connect 3 CII interface signals (hv, type, addr) from DW PCIe CII output
Connect 5 interrupt inputs from DW PCIe controller
Connect 6 interrupt outputs to system interrupt controller(s)
Connect isolation control from power management
Connect status outputs to system monitoring/SMN
⚠️ SystemC Simulation Requirements:
Ensure
sc_core::wait(SC_ZERO_TIME)in drivers after changing input signalsAll interrupt outputs require delta cycle propagation
TLM blocking transport calls are synchronous but internal signals are not
🔧 Configuration Sequence:
Deassert cold reset
Wait for stable clocks
SMN writes
system_ready=1SMN configures TLB entries
SMN writes
pcie_inbound_app_enable=1andpcie_outbound_app_enable=1System enters normal operation
3. Theory of Operation
This section describes the operational modes and transaction flows of the Keraunos PCIe Tile.
3.1 Operational Modes
The PCIe Tile operates in several distinct modes:
Normal Operation Mode
System Ready:
system_readyregister bit set to 1Application Paths Enabled:
pcie_inbound_app_enableandpcie_outbound_app_enableset as neededNo Isolation:
isolate_reqsignal deassertedClocks Running: Both
pcie_core_clkandaxi_clkactiveNo Reset:
cold_reset_nandwarm_reset_nasserted (active high)
In this mode, all data paths are operational and transactions flow freely between NOC, PCIe, and SMN domains.
Isolation Mode
Triggered By: Assertion of
isolate_reqsignalEffect: Clears
system_ready,pcie_inbound_app_enable, andpcie_outbound_app_enableData Path: All PCIe controller transactions return
TLM_ADDRESS_ERROR_RESPONSE(DECERR)Recovery Limitation: Deasserting
isolate_reqdoes NOT automatically restore enables (requires cold reset + software reconfiguration)Use Case: Power domain isolation, fault containment
Bypass Mode
Condition:
system_ready=0butpcie_inbound_app_enable=1orpcie_outbound_app_enable=1Routing: Uses route 0xE or 0xF to access status register directly
Purpose: Allow status monitoring without full system initialization
Limited Functionality: Only status register readable; normal data paths blocked
Reset Modes
Cold Reset:
Trigger:
cold_reset_nsignal deasserted (active low)Scope: Resets SII block (
pcie_sii_reset_ctrl_) and reset control module (pcie_reset_ctrl_)Does NOT Reset: Configuration registers, TLB entries, switch enables
Recovery: Requires software reconfiguration after reset
Warm Reset:
Trigger:
warm_reset_nsignal deasserted (active low)Scope: Similar to cold reset but may preserve certain configuration state
Note: Current implementation behavior similar to cold reset
3.2 Initialization and Boot Sequence
Initialization Steps:
Reset Phase
Assert
cold_reset_nto bring tile to known stateSII block clears all CII tracking state
Switch enables default to 0
System Ready Configuration
SMN writes
system_ready=1to status register (offset 0x0)Enables basic routing logic in switches
Status register becomes readable via routes 0xE and 0xF
TLB Configuration
Configure inbound TLBs (Sys In0, Sys In1, App In0/1/2)
Set valid bits, page sizes, base addresses, address masks
Configure outbound TLBs (Sys Out, App Out0/1)
Set AxUSER fields for NOC routing
Data Path Enablement
Write
pcie_inbound_app_enable=1for PCIe→NOC application pathsWrite
pcie_outbound_app_enable=1for NOC→PCIe application pathsSystem enters normal operation mode
3.3 Inbound Data Flow (PCIe to NOC)
Transaction Path: PCIe Controller → NOC-PCIE Switch → Inbound TLB → NOC-IO Switch → NOC
Key Steps:
PCIe Controller Transaction
Transaction arrives at
pcie_controller_targetsocket64-bit address with route field [63:60]
NOC-PCIE Switch Routing
Check
system_readyflag (blocks if 0)Decode route bits [63:60]
For application paths: check
pcie_inbound_app_enableFor system paths: always allowed if
system_ready=1
TLB Translation
Extract page index:
(addr >> shift) & page_maskLook up TLB entry
Check
validbitCalculate translated address:
base_addr + offsetSet AxUSER field for NOC routing
NOC-IO Switch Forwarding
Forward translated address through
noc_n_initiator(realtlm_utils::simple_initiator_socket<64>) tosparse_backing_memoryPreserve AxUSER field
Cross-socket data verification: data written via inbound path can be read back via outbound path
Return response to PCIe controller
3.4 Outbound Data Flow (NOC to PCIe)
Transaction Path: NOC → NOC-IO Switch → Outbound TLB → NOC-PCIE Switch → PCIe Controller
Key Steps:
NOC Transaction
Arrives at
noc_n_targetsocketNOC-specific addressing
NOC-IO Switch Processing
Routes to appropriate outbound TLB
Outbound TLB Translation
Translate NOC address to PCIe address space
Check valid bit
Convert 64-bit internal address to 52-bit PCIe address
NOC-PCIE Switch Gating
For application paths: check
pcie_outbound_app_enableBME qualification (EP mode only): When controller is Endpoint and Bus Master Enable is disabled, memory TLPs are blocked (DECERR); Config, DBI, and Message TLPs are exempt and allowed. In Root Port mode, BME is not checked and all traffic is allowed.
Outbound TLBs pass AxUSER (TLP type, DBI flag) to the switch for BME exemption decoding.
If enabled and (BME OK or exempt), forward through
pcie_controller_initiator(realtlm_utils::simple_initiator_socket<64>) tosparse_backing_memoryCross-socket data verification: data written via outbound path can be read back via inbound path
3.5 Configuration Access Flow
Transaction Path: SMN → SMN-IO Switch → Configuration Targets
Configuration Targets:
Address Range [31:28] |
Target |
Functionality |
|---|---|---|
0x0 |
Config Registers |
system_ready, enables, isolation |
0x1 |
SII Block |
CORE_CONTROL, CFG_MODIFIED, BUS_DEV_NUM |
0x2 |
Reserved |
- |
0x3-0x7 |
TLB Config |
Inbound/Outbound TLB entries |
0x8 |
MSI Relay |
MSI-X table, PBA, masks |
Note: TLB configuration via SMN now works correctly. Configuration writes to TLB entries are properly routed and processed with correct offsets.
3.6 MSI Interrupt Generation Flow
Transaction Path: NOC MSI Input → MSI Relay → PCIe Controller (MSI Output)
MSI Flow Steps:
MSI Input Write
NOC writes to
msi_input_targetsocketVector number encoded in write data
MSI Relay Processing
Check per-vector mask bit
Check global mask (
msix_mask_all_)Set corresponding PBA (Pending Bit Array) bit
Increment
msi_outstandingcounter
MSI Generation (via
process_pending_msis())Called by tile’s
signal_update_process()Check MSI-X enabled (
msix_enable_)For each pending PBA bit:
Read MSI-X table entry (address, data, mask)
If not masked, generate MSI transaction to PCIe
Clear PBA bit on successful delivery
Note: MSI output transactions are forwarded through the pcie_controller_initiator socket (now a real tlm_utils::simple_initiator_socket<64>) to the testbench’s sparse_backing_memory, enabling cross-socket data verification of MSI delivery.
3.7 CII Tracking and Configuration Update
Configuration Intercept Interface (CII) Flow:
CII Tracking Details:
Detection Phase
PCIe controller asserts
pcie_cii_hv(handshake valid)Provides address (
pcie_cii_addr) and type (pcie_cii_type)Type 0x04 indicates configuration write
Filtering
Only track first 128 bytes (addr < 0x80)
Covers standard PCIe config space registers
Calculate register index:
addr[6:2](32-bit aligned)
State Update
Set corresponding bit in 32-bit
cfg_modified_bitmaskAssert
config_updateoutput signal (sticky)Interrupt remains asserted until software clears
Software Clear (RW1C - Read/Write 1 to Clear)
SMN reads
CFG_MODIFIEDregister to see which registers changedSMN writes 1s to clear specific bits
When all bits cleared,
config_updatedeasserts
Reset Behavior
Controller reset (
pcie_controller_reset_n=0) clears all stateBoth
cfg_modified_andconfig_updatereset to 0
3.8 Isolation and Recovery
Isolation Sequence:
Isolation Behavior:
Trigger:
isolate_reqsignal assertionEffect: Clears all enable flags in
ConfigRegBlockData Path: All PCIe traffic returns DECERR
Critical Limitation:
set_isolate_req(false)does NOT restore enablesRecovery Requires: Cold reset + full SMN reconfiguration
This is a known architectural limitation documented in the test plan.
3.9 Error Handling
Error Conditions and Responses:
Condition |
Detection Point |
Response |
Recovery |
|---|---|---|---|
Invalid TLB Entry |
TLB translate |
|
Configure valid TLB entry |
System Not Ready |
NOC-PCIE Switch |
|
Write |
Inbound Path Disabled |
NOC-PCIE Switch |
|
Write |
Outbound Path Disabled |
NOC-PCIE Switch |
|
Write |
BME Blocked (EP, BME=0, memory TLP) |
NOC-PCIE Switch |
|
Set BME=1 or use exempt TLP type (Config/DBI/Message) |
Unknown Route |
NOC-PCIE Switch |
|
Use valid route (0x0,0x1,0x4,0x6,0x7,0xE,0xF) |
Unmapped SMN Address |
SMN-IO Switch |
|
Use valid SMN address range |
Bad TLM Command |
Switch routing |
|
Use READ or WRITE command |
Isolation Active |
Config Registers |
All paths blocked |
Full recovery sequence required |
Page Boundary Cross |
TLB indexing |
May access invalid entry |
Align transactions to page boundaries |
Error Response Flow:
All error responses propagate back through the transaction chain:
Switch/TLB detects error
Sets
trans.set_response_status(TLM_ADDRESS_ERROR_RESPONSE)orTLM_COMMAND_ERROR_RESPONSEReturns to initiator
No retry mechanism (single-shot transactions)
Software must detect and handle errors
3.10 Operating Mode Summary
Mode |
system_ready |
inbound_enable |
outbound_enable |
isolate_req |
Data Flow |
Use Case |
|---|---|---|---|---|---|---|
Normal |
1 |
1 |
1 |
0 |
Full bidirectional |
Standard operation |
System Only |
1 |
0 |
0 |
0 |
System paths only |
Pre-application init |
Inbound Only |
1 |
1 |
0 |
0 |
PCIe→NOC only |
Receive-only mode |
Outbound Only |
1 |
0 |
1 |
0 |
NOC→PCIe only |
Transmit-only mode |
Bypass |
0 |
x |
x |
0 |
Status register only |
Pre-init diagnostics |
Isolated |
0 |
0 |
0 |
1 |
All blocked |
Fault containment |
Reset |
0 |
0 |
0 |
0 |
All blocked |
Coming out of reset |
Mode Transitions:
Reset → Normal: Requires software configuration sequence
Normal → Isolated: Automatic on
isolate_reqassertionIsolated → Normal: Requires full recovery (reset + reconfig)
Normal ↔ System Only: Software enable/disable of application paths
Any → Reset: Hardware signal (
cold_reset_n,warm_reset_n)
4. Detailed Block Diagram
3.1 Complete System Architecture
4.2 Comprehensive Architecture Block Diagram
The diagram below provides a fully detailed, color-coded view of KeraunosPcieTile internal architecture. Solid arrows represent data-plane paths; dashed arrows show configuration/control paths. Hover over any block for additional detail.
5. Data Flow Paths
4.1 Inbound Data Flow (PCIe → NOC)
4.2 Outbound Data Flow (NOC → PCIe)
4.3 Configuration Access Flow (SMN → Config)
4.4 MSI Generation Flow
4.5 CII Interrupt Flow
6. Module Descriptions
5.1 NOC-PCIE Switch
Purpose: Routes traffic from PCIe controller to appropriate destination (TLBs, bypass paths, status register). On the outbound path (NOC→PCIe), applies Bus Master Enable (BME) qualification per specification Table 33.
BME Logic (Outbound Path):
Controller mode comes from SII CORE_CONTROL device_type (EP vs RP). When the SII register is written via SMN (APB), a device_type callback notifies the tile immediately so
controller_is_ep_in the switch is updated without waiting for the next signal delta cycle.BME state is set by the testbench or integration via
set_bus_master_enable(bool); in real hardware this reflects the PCIe controller Command Register bit 2.EP mode, BME=0: Memory TLPs are blocked (DECERR). Config, DBI, and Message TLPs are exempt and allowed. Exemption is derived from AxUSER (TLP type and DBI bit) passed from outbound TLBs.
EP mode, BME=1: All TLPs allowed.
RP mode: BME is not checked; all outbound TLPs allowed regardless of BME.
Cold reset: The tile’s
signal_update_processrestoresbus_master_enable_to true whencold_reset_nis low, so each test starts with a defined state.
Route Table:
Route [63:60] |
Destination |
Description |
|---|---|---|
0x0 |
TLB App In0 [0] |
Application TLB instance 0 |
0x1 |
TLB App In1 |
Application TLB (large pages) |
0x4 |
TLB Sys In0 |
System TLB |
0x8 |
Bypass App |
Direct to NOC-IO |
0x9 |
Bypass Sys |
Direct to SMN-IO |
0xE, 0xF |
Status Register |
Read-only status (if system_ready) |
Other |
DECERR |
TLM_ADDRESS_ERROR_RESPONSE |
Status Register Format:
[0] system_ready
[1] pcie_outbound_app_enable
[2] pcie_inbound_app_enable
[31:3] Reserved (0)
5.2 Translation Lookaside Buffers
TLB Configuration:
Translation Algorithm (corrected):
index = (address >> page_shift) & mask(mask 0x3F for 64-entry TLBs, 0xF for 16-entry).If
indexout of range or!entries[index].valid→ DECERR.Page-mask translation:
page_mask = (1ULL << page_shift) - 1;
translated_addr = ((entry.addr << 12) & ~page_mask) | (input_addr & page_mask).
The base (entry.addr << 12) is masked to page alignment; the offset comes from the input address within the page. This ensures correct translation for each TLB’s page size (e.g. 16KB Sys In0, 64KB Sys Out0, 16TB App Out0).axuser/attrfromentries[index].attr.
TLB Sys In0 / Sys Out0 usage:
TLB Sys In0 (route 0x4): System inbound; translates PCIe → SMN. Output goes to SMN-IO → SMN-N. Per specification it can also be used for addresses bound for NoC; in this implementation it is wired to the system path (SMN). Lookup is not gated by system_ready (only bypass paths 0x8/0x9 are).
TLB Sys Out0: System outbound; SMN-N → PCIe (SMC/DBI). 16 entries, 64KB pages.
5.3 MSI Relay Unit
Architecture:
MSI-X Table Entry (16 bytes):
[63:0] Message Address (64-bit)
[95:64] Message Data (32-bit)
[96] Per-Vector Mask (1=masked)
[127:97] Reserved
5.4 System Information Interface (SII)
CII Tracking State Machine:
APB Registers:
Offset |
Register |
Access |
Description |
|---|---|---|---|
0x0000 |
CORE_CONTROL |
RW |
Device type [2:0]: 0x4=RP |
0x0004 |
CFG_MODIFIED |
RW1C |
Config modified bitmask (32 bits) |
0x0008 |
BUS_DEV_NUM |
RW |
Bus[15:8], Device[7:0] numbers |
7. Address Map
6.1 Inbound Address Routing
6.2 Configuration Address Map
SMN Configuration Space (base 0x18000000):
Base Address |
Size |
Module |
Purpose |
|---|---|---|---|
0x18000000 |
4KB |
Config Reg Block |
System control, enables |
0x18101000 |
64KB |
SII APB |
Device type, CFG_MODIFIED, bus/dev |
0x18102000 |
4KB |
PCIe PHY APB |
PHY APB registers |
0x18103000 |
4KB |
PCIe PHY AHB |
PHY AHB registers |
0x18200000 |
4KB |
TLB Sys In0 |
TLB entry config (64×16B) |
0x18210000 |
4KB |
TLB App In0 [0] |
TLB entry config |
0x18220000 |
4KB |
TLB App In0 [1] |
TLB entry config |
0x18230000 |
4KB |
TLB App In0 [2] |
TLB entry config |
0x18240000 |
4KB |
TLB App In0 [3] |
TLB entry config |
0x18250000 |
4KB |
TLB App In1 |
TLB entry config |
0x18260000 |
4KB |
TLB Sys Out0 |
TLB entry config |
0x18270000 |
4KB |
TLB App Out0 |
TLB entry config |
0x18280000 |
4KB |
TLB App Out1 |
TLB entry config |
0x18800000 |
4KB |
MSI Relay |
MSI-X table, PBA, mask |
8. Clock and Reset Strategy
7.1 Reset Hierarchy
7.2 Reset Effects
Reset Signal |
Affects |
Preserves |
|---|---|---|
|
Clock/Reset control registers |
Config, TLBs, enables, system_ready |
|
Same as cold reset |
Same as cold reset |
|
SII cfg_modified, config_update |
All other state |
|
Clears all enable flags |
TLB config, register values |
7.3 Isolation Sequence
9. Interface Specifications
8.1 External TLM Sockets
Socket Name |
Type |
Width |
Direction |
Description |
|---|---|---|---|---|
|
Target |
64-bit |
Inbound |
NOC → Tile (outbound) |
|
Initiator |
64-bit |
Outbound |
Tile → NOC (inbound), forwards to |
|
Target |
64-bit |
Inbound |
SMN → Tile (config) |
|
Initiator |
64-bit |
Outbound |
Tile → SMN (bypass), forwards to |
|
Target |
64-bit |
Inbound |
PCIe → Tile |
|
Initiator |
64-bit |
Outbound |
Tile → PCIe, forwards to |
Note: The three “initiator” sockets (noc_n_initiator, smn_n_initiator, pcie_controller_initiator) are implemented as tlm_utils::simple_initiator_socket<64> types that forward transactions to the testbench’s sparse_backing_memory for cross-socket data verification. This enables end-to-end data integrity checks where data written through one socket can be read back through another.
8.2 Control and Status Signals
Input Signals:
Signal Name |
Width |
Description |
|---|---|---|
|
1 |
Cold reset (active low) |
|
1 |
Warm reset (active low) |
|
1 |
Isolation request |
|
1 |
CII header valid |
|
5 |
CII header type |
|
12 |
CII header address |
|
1 |
PCIe core clock |
|
1 |
PCIe controller reset |
|
1 |
Function-level reset request |
|
1 |
Hot reset indication |
|
1 |
RAS error indication |
|
1 |
DMA completion |
|
1 |
Miscellaneous interrupt |
|
1 |
AXI clock |
Output Signals:
Signal Name |
Width |
Description |
|---|---|---|
|
8 |
Application bus number |
|
8 |
Application device number |
|
1 |
0=EP, 1=RP |
|
1 |
System interrupt |
|
1 |
FLR forwarded |
|
1 |
Hot reset forwarded |
|
1 |
Config update interrupt (CII) |
|
1 |
RAS error forwarded |
|
1 |
DMA completion forwarded |
|
1 |
Misc interrupt forwarded |
|
3 |
NOC timeout status |
10. Known Limitations and Findings
9.1 Architecture Limitations
9.2 Documented Findings
Address Passthrough (RESOLVED): SMN-IO/NOC-IO switches now correctly route TLB configuration via SMN. TLB config writes work correctly.
TLB Configuration (RESOLVED): TLB config writes via SMN now function correctly, enabling proper address translation setup.
MSI Relay (RESOLVED): MSI output transactions forwarded through real initiator sockets to
sparse_backing_memoryfor cross-socket data verification.Signal Propagation (RESOLVED):
sc_core::wait(SC_ZERO_TIME)required for signal changes to propagate.Isolation Recovery Impossible:
isolate_req=falsedoes not restore enables. This is a known architectural limitation.CII Processing (RESOLVED): Restored via
SiiBlock::update()method.DUT Initiator Socket Architecture (NEW): All three initiator sockets (
noc_n_initiator,smn_n_initiator,pcie_controller_initiator) are nowtlm_utils::simple_initiator_socket<64>types that forward tosparse_backing_memory, enabling cross-socket data verification.BME and Controller Mode (IMPLEMENTED): Bus Master Enable logic in NOC-PCIE switch per Table 33; SII device_type callback propagates EP/RP mode to the switch on APB write; cold reset restores BME default and SII device_type to EP.
11. Test Coverage Summary
10.1 Test Suite Overview
86 test cases, 344 checks (includes 5 BME-directed tests; target 100% pass)
10.2 Coverage Metrics
Functional Coverage: 100% of testable features
Route Coverage: All 16 route values exercised (0x0-0xF)
TLB Boundary Coverage: Entry 0, 1, 63 tested
Error Path Coverage: DECERR, isolation blocking, invalid TLB entries
Signal Coverage: All input/output signals exercised
Cross-Socket Data Verification: Enabled via
sparse_backing_memorythrough real initiator sockets
12. References
11.2 Source Code Organization
Keraunos_PCIe_tile/
├── SystemC/
│ ├── include/ (15 header files)
│ └── src/ (15 implementation files)
├── Tests/
│ └── Unittests/
│ ├── Keranous_pcie_tileTest.cc (86 tests)
│ └── Keranous_pcie_tileTestHarness.h
└── doc/
├── Keraunos_PCIe_Tile_HLD.md
├── Keraunos_PCIE_Tile_SystemC_Design_Document.md
└── Keraunos_PCIE_Tile_Testplan.md
Document Control:
Version: 2.0
Date: February 10, 2026
Status: Updated - DUT initiator socket architecture
Next Review: Upon DUT architecture changes or test plan updates