Design Rationale

Why pccx-lab is one repo, not five

In the initial design, we considered a 5-repo structure (simulator / frontend / uvm-bridge / ai / common). However, this was rejected for the following reasons:

  1. Development Speed: The overhead of synchronizing changes and managing versions across multiple repositories is massive.

  2. Single Purpose: All modules ultimately work closely together towards the single goal of “pccx profiling”.

Module Boundary Rules

To prevent the downside of a monorepo (spaghetti code), we enforce strict module boundaries based on directories:

  • core/: Pure Rust module. Minimizes external dependencies and strictly forbids importing UI frameworks.

  • ui/: Tauri + React-based module. Only uses the public APIs of core/ to handle visualization.

  • uvm_bridge/: The boundary between SystemVerilog/UVM and core/. Uses DPI-C or FFI.

  • ai_copilot/: LLM invocation wrapper module. Depends solely on the trace format (e.g., JSON) of core/.

Conditions for Future Separation

If a specific module (e.g., core/) becomes generic enough to be used independently in other projects outside of pccx-lab, we will then consider publishing it as a crate or separating it into its own repository.