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:
Development Speed: The overhead of synchronizing changes and managing versions across multiple repositories is massive.
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 ofcore/to handle visualization.uvm_bridge/: The boundary between SystemVerilog/UVM andcore/. Uses DPI-C or FFI.ai_copilot/: LLM invocation wrapper module. Depends solely on the trace format (e.g., JSON) ofcore/.
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.