C++ API reference#
The headers below define internal C++ interfaces and are not installed. See C++ interfaces for adapter requirements and components for behavior and tests.
backend.hpp#
Quantum backend operations and the mock implementation. Open header.
profile.hpp#
Full simulation profile, validation and configuration fingerprint. Open header.
control_links.hpp#
Bounded mailboxes between CPU timing control and the TCU. Open header.
transport_config.hpp#
Mailbox clocks, receiver-edge latencies and result capacity. Open header.
control_protocol.hpp#
Timing-point requests, underflow policies and scheduled events. Open header.
cpu.hpp#
Replaceable CPU interface with memory and control ports. Open header.
core.hpp#
Per-controller CPU, memory, timing control, synchronization and measurement state. Open header.
sync.hpp#
Countdowns and bounded fixed-delay connections for BISP, the booking-based synchronization protocol from Distributed-HISQ. Open header.
cpu/rv32.hpp#
Three-stage RV32I CPU with scalar qsbit control instructions. Open header.
cpu/vliw.hpp#
Three-stage CPU with scalar instructions and dual-codeword bundles. Open header.
cpu/trace.hpp#
End-of-edge CPU pipeline snapshots. Open header.
cpu/pipeline.hpp#
Shared in-order pipeline state and transitions. Open header.
defaults.hpp#
Construction of the default timing and device profile. Open header.
decoder.hpp#
Decoder MMIO registers, bounded transport and timed processing. Open header.
device.hpp#
Physical intervals, resource reservations and device execution. Open header.
device/resources.hpp#
Output-interval and resource-conflict checks. Open header.
error.hpp#
Typed faults and their diagnostic names. Open header.
feedback.hpp#
Per-qubit measurement result registers and execution flags. Open header.
image.hpp#
ELF or raw loading, memory bytes and segment permissions. Open header.
isa.hpp#
Decoded RV32I instructions and architectural effects. Open header.
mailbox.hpp#
Bounded messages with explicit arrival ticks. Open header.
memory.hpp#
Fetch and data ports with timed memory service. Open header.
timing_control.hpp#
Quantum instruction adaptation, time point preparation, mailbox requests and replies, and feedback communication. Open header.
python_backend.hpp#
Optional bridge to Python quantum adapters. Open header.
simulator.hpp#
SystemC scheduling, CPU construction, reset and completion. Open header.
tcu.hpp#
Timing queues, event queues and the TCU edge transition. Open header.
time.hpp#
Tick arithmetic and clock-edge calculations. Open header.
trace.hpp#
Trace records and JSONL serialization. Open header.
event.hpp#
Device event specifications, codeword mappings and paired-gate definitions. Open header.
measurement.hpp#
Measurement identities, completion bits and execution flags. Open header.
control_command.hpp#
Named payloads for codeword, wait, measurement-read, halt and synchronization commands. Open header.
timing_config.hpp#
Transport, timing-control and TCU configuration values. Open header.
device/gates.hpp#
Indexed paired-gate definitions and gate-output resolution. Open header.
device/readouts.hpp#
Acquisition pairing, readiness calculation and sampled-result lifetime. Open header.
decoder/mmio.hpp#
Decoder register storage and typed MMIO commands. Open header.
runtime.hpp#
Executable-relative installation discovery and paired runtime paths. Open header.
Namespace reference#
-
namespace qsbit#
Typedefs
-
using BackendOperation = std::variant<BackendEvolution, BackendGates, BackendMeasurement>#
-
using DecoderCommand = std::variant<DecoderSubmit, DecoderReset, DecoderConsume, DecoderRead>#
-
using Tick = std::uint64_t#
-
using Id = std::uint64_t#
-
using Epoch = std::uint64_t#
Enums
-
enum class UnderflowPolicy#
Values:
-
enumerator Inherit#
-
enumerator Strict#
-
enumerator PauseWhenEmpty#
-
enumerator Inherit#
-
enum class DecoderReadKind#
Values:
-
enumerator Count#
-
enumerator Status#
-
enumerator Low#
-
enumerator High#
-
enumerator Count#
-
enum class ErrorCode#
Values:
-
enumerator InvalidProfile#
-
enumerator TimeOverflow#
-
enumerator IllegalInstruction#
-
enumerator InstructionMisaligned#
-
enumerator InstructionAccess#
-
enumerator LoadMisaligned#
-
enumerator StoreMisaligned#
-
enumerator LoadAccess#
-
enumerator StoreAccess#
-
enumerator EnvironmentCall#
-
enumerator Breakpoint#
-
enumerator InvalidImage#
-
enumerator UnsupportedSynchronization#
-
enumerator InvalidPort#
-
enumerator InvalidCodeword#
-
enumerator InvalidOperand#
-
enumerator Capacity#
-
enumerator LateAdmission#
-
enumerator ManifestMismatch#
-
enumerator Protocol#
-
enumerator ResourceConflict#
-
enumerator GateInputMismatch#
-
enumerator UnsupportedCapability#
-
enumerator InvalidMeasurement#
-
enumerator DuplicateResult#
-
enumerator BackendFailure#
-
enumerator Watchdog#
-
enumerator InvalidProfile#
-
enum class ActionKind#
Values:
-
enumerator IdealGate#
-
enumerator Pulse#
-
enumerator Acquire#
-
enumerator DiscriminatorArm#
-
enumerator GateOutput#
-
enumerator IdealGate#
Functions
-
ControlOperation adapt_quantum(const rv32::Decoded&, Id instruction, std::uint32_t lhs, std::uint32_t rhs)#
-
std::vector<OperationEvent> decode_codeword(const TimingConfig &profile, std::uint32_t port, std::uint32_t codeword, Epoch epoch, Id instruction, Id first_event, std::span<const MeasurementReference> references = {})#
-
void validate_timing_events(const TimingEvents &events, const TimingConfig &profile)#
-
std::array<ControlOperation, 2> decode_cw_bundle(std::uint32_t word, Id instruction, const std::array<std::uint32_t, 32> ®isters)#
-
DeviceProfile device_profile(const Profile &profile)#
-
EventSpec gate_action(const DeviceProfile &profile, const std::string &name)#
-
std::vector<EventSpec> resolve_gate_outputs(const DeviceProfile &profile, Tick now, const std::map<std::string, std::vector<const ScheduledEvent*>> &outputs)#
-
DecoderSystemConfig python_decoders(const std::string &config)#
-
RuntimeLayout runtime_layout()#
-
std::string installation_info(const RuntimeLayout &layout)#
-
TimingConfig timing_config(const Profile &profile)#
-
TransportConfig transport_config(const Profile &profile)#
Variables
-
constexpr unsigned PythonBackendApiVersion = 4#
-
struct AcquireSpec#
- #include <event.hpp>
Public Functions
-
bool operator==(const AcquireSpec&) const = default#
-
bool operator==(const AcquireSpec&) const = default#
-
struct BackendActivity#
- #include <backend.hpp>
-
struct BackendEvolution#
- #include <backend.hpp>
-
class BackendExecution#
- #include <backend.hpp>
Public Functions
-
explicit BackendExecution(IQuantumBackend &backend, BackendExecutionConfig config = {})#
-
void evolve(Tick from, Tick to, std::span<const BackendActivity> active_drives, std::span<const BackendActivity> acquisitions = {})#
-
std::vector<bool> measure(Tick now, std::span<const MeasurementReference> references)#
-
void flush()#
-
std::vector<std::complex<double>> state()#
-
std::vector<std::vector<std::complex<double>>> density_matrix()#
Private Functions
-
void commit(BackendOperation operation)#
-
std::vector<bool> execute(std::size_t expected_results)#
Private Members
-
IQuantumBackend &backend_#
-
BackendExecutionConfig config_#
-
std::vector<BackendOperation> pending_#
-
explicit BackendExecution(IQuantumBackend &backend, BackendExecutionConfig config = {})#
-
struct BackendExecutionConfig#
- #include <backend.hpp>
Public Members
-
std::uint32_t max_batch_operations = 1024#
-
std::uint32_t max_batch_operations = 1024#
-
struct BackendGates#
- #include <backend.hpp>
-
struct BackendMeasurement#
- #include <backend.hpp>
-
struct CodewordCommand#
- #include <control_command.hpp>
Public Functions
-
bool operator==(const CodewordCommand&) const = default#
-
bool operator==(const CodewordCommand&) const = default#
-
struct Completion#
- #include <measurement.hpp>
-
class ControlElectronics#
- #include <device.hpp>
Public Types
-
using Deliver = std::function<void(const Completion&)>#
Public Functions
-
ControlElectronics(DeviceProfile profile, IQuantumBackend &backend, Trace &trace, BackendExecutionConfig execution = {})#
-
inline BackendExecution &backend()#
-
void preflight(const TriggeredEvents &batch) const#
-
void accept(const TriggeredEvents &batch)#
-
inline bool drained() const#
-
inline const ResourceReservations &resources() const#
Private Functions
-
PreparedEvents prepare(const TriggeredEvents &batch) const#
-
std::vector<ScheduledEvent> resolve(const TriggeredEvents &batch) const#
Private Members
-
const DeviceProfile profile_#
-
BackendExecution backend_#
-
ResourceReservations reservations_#
-
std::map<Id, ScheduledEvent> active_#
-
struct Boundary#
-
struct PreparedEvents#
-
using Deliver = std::function<void(const Completion&)>#
-
struct ControlLinks#
- #include <control_links.hpp>
Public Members
-
Mailbox<TimingEvents> timing_events#
-
Mailbox<EnqueueReply> replies#
-
Mailbox<EndOfStream> closure#
-
Mailbox<Completion> cpu_results#
-
Mailbox<Completion> fast_results#
-
Mailbox<MeasurementReference> fast_credits#
-
Mailbox<TimingEvents> timing_events#
-
struct ControlOperation#
- #include <control_command.hpp>
Public Functions
-
template<typename T>
inline bool is() const#
-
bool operator==(const ControlOperation&) const = default#
Public Members
-
std::variant<WaitCommand, CodewordCommand, FetchMeasurementCommand, HaltCommand, SynchronizeCommand> command = WaitCommand{0}#
-
template<typename T>
-
class Core#
- #include <core.hpp>
Public Types
-
using CpuFactory = std::function<std::unique_ptr<ICpuCycleModel>(Clock, std::uint32_t, Trace&)>#
Public Functions
-
inline void attach_device(std::function<bool(std::uint32_t)> contains, MemoryModel::DeviceAccess access)#
-
Core(std::uint32_t id, Profile profile, ProgramImage image, Trace &trace, SyncNetwork &network, TimingControl::ValidateAction validate, CpuFactory cpu_factory = {}, std::size_t sync_capacity = 8, bool identify = true)#
-
void deliver(Tick now, Epoch epoch, const Completion &result)#
-
bool drained() const#
-
inline const ICpuCycleModel &cpu() const#
-
inline const ProgramImage &memory() const#
-
inline const MeasurementRegisters &measurement_registers() const#
-
inline std::uint32_t id() const#
Private Members
-
std::uint32_t id_#
-
MeasurementRegisters registers_#
-
TimingControl timing_control_#
-
ControlLinks links_#
-
MemoryPort fetch_port_#
-
MemoryPort data_port_#
-
MemoryModel memory_#
-
std::unique_ptr<ICpuCycleModel> cpu_#
-
TcuCycleModel tcu_#
-
using CpuFactory = std::function<std::unique_ptr<ICpuCycleModel>(Clock, std::uint32_t, Trace&)>#
-
struct CoreConfig#
- #include <core.hpp>
Public Members
-
std::uint32_t id#
-
ProgramImage image#
-
Core::CpuFactory cpu_factory = {}#
-
std::size_t sync_capacity = 8#
-
std::uint32_t id#
-
class CpuCycleModel : public qsbit::ICpuCycleModel#
- #include <rv32.hpp>
Public Functions
-
inline virtual void reset(std::uint32_t entry) override#
-
inline virtual const std::array<std::uint32_t, 32> ®isters() const override#
-
inline virtual std::uint32_t pc() const override#
-
inline virtual bool halted() const override#
Private Members
-
InOrderPipeline pipeline_#
-
inline virtual void reset(std::uint32_t entry) override#
-
struct CpuPipelineInstruction#
- #include <trace.hpp>
Public Functions
-
bool operator==(const CpuPipelineInstruction&) const = default#
-
bool operator==(const CpuPipelineInstruction&) const = default#
-
struct CpuPipelineState#
- #include <trace.hpp>
Public Functions
-
bool operator==(const CpuPipelineState&) const = default#
-
bool operator==(const CpuPipelineState&) const = default#
-
struct CpuPorts#
- #include <cpu.hpp>
Public Members
-
MemoryPort &fetch#
-
MemoryPort &data#
-
std::function<std::optional<std::uint32_t>(const ControlOperation&)> control#
-
MemoryPort &fetch#
-
struct DecoderConfig#
- #include <decoder.hpp>
-
class DecoderMmio#
- #include <mmio.hpp>
Public Functions
-
DecoderMmio(std::uint32_t base, std::set<std::uint32_t> decoders)#
-
bool contains(std::uint32_t address) const#
-
void validate_memory(const ProgramImage &image) const#
-
std::optional<DecoderCommand> access(std::uint32_t core, const MemoryRequest &request)#
-
inline void reset()#
-
struct Registers#
-
DecoderMmio(std::uint32_t base, std::set<std::uint32_t> decoders)#
-
class DecoderSystem#
- #include <decoder.hpp>
Public Functions
-
DecoderSystem(DecoderSystemConfig config, Trace &trace)#
-
inline bool contains(std::uint32_t address) const#
-
inline void validate_memory(const ProgramImage &image) const#
-
std::optional<std::uint32_t> access(std::uint32_t core, const MemoryRequest &request, Tick now, Epoch epoch)#
-
void reset()#
-
bool idle() const#
Private Functions
-
const DecoderConfig &decoder(std::uint32_t id) const#
-
void event(Tick now, Epoch epoch, DecoderEventKind kind, Id id, std::uint32_t core, std::uint32_t decoder, std::uint32_t tag = 0)#
-
struct Job#
-
struct Request#
-
struct Session#
-
DecoderSystem(DecoderSystemConfig config, Trace &trace)#
-
struct DecoderSystemConfig#
- #include <decoder.hpp>
-
struct DeviceProfile#
- #include <gates.hpp>
Public Functions
-
const TwoQubitGate &gate(const std::string &name) const#
-
const TwoQubitGate &gate(const std::string &name) const#
-
struct DiscriminatorArmSpec#
- #include <event.hpp>
Public Functions
-
bool operator==(const DiscriminatorArmSpec&) const = default#
-
bool operator==(const DiscriminatorArmSpec&) const = default#
-
struct EndOfStream#
- #include <control_protocol.hpp>
-
struct EnqueueReply#
- #include <control_protocol.hpp>
-
struct EventSpec#
- #include <event.hpp>
Public Functions
-
ActionKind kind() const#
-
const std::vector<std::uint32_t> &targets() const#
-
const std::vector<ResourceUse> &resources() const#
-
std::string operation() const#
-
ExecutionFlag execution_flag() const#
Public Members
-
std::uint32_t port = 0#
-
std::variant<GateSpec, PulseSpec, AcquireSpec, DiscriminatorArmSpec, GateOutputSpec> spec = GateSpec{}#
-
ActionKind kind() const#
-
class ExecutionFlags#
- #include <feedback.hpp>
Public Functions
-
inline explicit ExecutionFlags(std::uint32_t qubits)#
-
bool evaluate(std::uint32_t target, ExecutionFlag flag) const#
-
void commit(const Completion &completion, Epoch epoch)#
-
void reset()#
-
struct Register#
-
inline explicit ExecutionFlags(std::uint32_t qubits)#
-
struct FeedbackConfig#
- #include <feedback.hpp>
-
struct FetchMeasurementCommand#
- #include <control_command.hpp>
Public Functions
-
bool operator==(const FetchMeasurementCommand&) const = default#
Public Members
-
std::uint32_t qubit#
-
bool operator==(const FetchMeasurementCommand&) const = default#
-
struct GateOutputSpec#
- #include <event.hpp>
Public Functions
-
bool operator==(const GateOutputSpec&) const = default#
Public Members
-
std::string gate#
-
bool operator==(const GateOutputSpec&) const = default#
-
struct GateSpec#
- #include <event.hpp>
Public Members
-
std::string operation = "x"#
-
QuantumOperands operands#
-
double amplitude = 0.0#
-
ExecutionFlag execution_flag = ExecutionFlag::Always#
-
std::string operation = "x"#
-
struct HaltCommand#
- #include <control_command.hpp>
Public Functions
-
bool operator==(const HaltCommand&) const = default#
-
bool operator==(const HaltCommand&) const = default#
-
class ICpuCycleModel#
- #include <cpu.hpp>
Subclassed by qsbit::CpuCycleModel, qsbit::VliwCpuCycleModel
-
class InOrderPipeline#
- #include <pipeline.hpp>
Public Functions
-
InOrderPipeline(Clock clock, std::uint32_t entry, Trace &trace, ControlIssue issue)#
-
void reset(std::uint32_t entry)#
-
inline const std::array<std::uint32_t, 32> ®isters() const#
-
inline std::uint32_t pc() const#
-
inline bool halted() const#
Private Functions
Private Members
-
ControlIssue issue_#
-
CpuPipelineTrace pipeline_trace_#
-
std::array<std::uint32_t, 32> registers_ = {}#
-
std::uint32_t pc_ = 0#
-
std::uint32_t fetch_pc_ = 0#
-
bool halted_ = false#
-
struct Fetch#
-
struct Frame#
-
InOrderPipeline(Clock clock, std::uint32_t entry, Trace &trace, ControlIssue issue)#
-
class IQuantumBackend#
- #include <backend.hpp>
Subclassed by qsbit::MockBackend, qsbit::PythonBackend
Public Functions
-
virtual ~IQuantumBackend() = default#
-
virtual void reset(std::uint32_t qubits, std::uint32_t seed) = 0#
-
virtual std::vector<bool> execute(Epoch epoch, std::span<const BackendOperation> operations) = 0#
-
inline virtual std::vector<std::complex<double>> state() const#
-
inline virtual std::vector<std::vector<std::complex<double>>> density_matrix() const#
-
virtual ~IQuantumBackend() = default#
-
template<typename T>
class Mailbox# - #include <mailbox.hpp>
Public Functions
-
inline bool full() const#
-
inline bool empty() const#
-
inline std::size_t size() const#
-
inline void reset()#
-
struct Envelope#
- #include <mailbox.hpp>
-
inline bool full() const#
-
struct MeasurementReference#
- #include <measurement.hpp>
Public Functions
-
bool operator==(const MeasurementReference&) const = default#
-
bool operator==(const MeasurementReference&) const = default#
-
class MeasurementRegisters#
- #include <feedback.hpp>
Public Functions
-
explicit MeasurementRegisters(FeedbackConfig config)#
-
bool has_capacity(std::size_t count = 1) const#
-
std::vector<MeasurementReference> prepare_reservation(Epoch epoch, std::span<const std::uint32_t> targets) const#
-
void commit_reservation(std::span<const MeasurementReference> references)#
-
MeasurementReference reserve(Epoch epoch, std::uint32_t target)#
-
void deliver(const Completion &completion, Epoch epoch)#
-
void acknowledge_fast(const MeasurementReference &reference, Epoch epoch)#
-
std::optional<bool> read(std::uint32_t target) const#
-
bool deliveries_pending() const#
-
void reset()#
Private Members
-
const FeedbackConfig config_#
-
std::map<Id, MeasurementReference> pending_#
-
std::map<Id, MeasurementReference> fast_pending_#
-
struct Register#
- #include <feedback.hpp>
-
explicit MeasurementRegisters(FeedbackConfig config)#
-
class MemoryModel#
- #include <memory.hpp>
Public Types
-
using DeviceAccess = std::function<std::optional<std::uint32_t>(const MemoryRequest&, Tick, Epoch)>#
Public Functions
-
inline void attach_device(std::function<bool(std::uint32_t)> contains, DeviceAccess access)#
-
MemoryModel(ProgramImage image, Clock clock, std::uint32_t latency)#
-
void step(Tick now, Epoch epoch, MemoryPort &fetch, MemoryPort &data)#
-
void reset()#
-
inline const ProgramImage &image() const#
-
inline bool idle() const#
Private Functions
-
void step_port(Tick now, Epoch epoch, MemoryPort &port, std::size_t index)#
Private Members
-
std::function<bool(std::uint32_t)> device_contains_#
-
DeviceAccess device_access_#
-
ProgramImage image_#
-
std::uint32_t latency_#
-
struct Pending#
-
using DeviceAccess = std::function<std::optional<std::uint32_t>(const MemoryRequest&, Tick, Epoch)>#
-
struct MemoryPort#
- #include <memory.hpp>
-
struct MemoryRequest#
- #include <memory.hpp>
-
struct MemoryResponse#
- #include <memory.hpp>
-
class MockBackend : public qsbit::IQuantumBackend#
- #include <backend.hpp>
-
struct OperationEvent#
- #include <control_protocol.hpp>
-
struct Profile#
- #include <profile.hpp>
Public Functions
-
void validate() const#
-
const TwoQubitGate &gate(const std::string &name) const#
-
std::string fingerprint() const#
Public Members
-
std::uint32_t memory_latency = 1#
-
std::uint32_t command_latency = 1#
-
std::uint32_t reply_latency = 1#
-
std::uint32_t cpu_result_latency = 1#
-
std::uint32_t fast_result_latency = 2#
-
std::uint32_t timing_capacity = 32#
-
std::uint32_t event_capacity = 32#
-
std::uint32_t staging_capacity = 16#
-
std::uint32_t result_capacity = 8#
-
std::uint32_t ports = 8#
-
std::uint32_t qubits = 2#
-
std::uint32_t firing_width = 1#
-
std::uint32_t seed = 1#
-
bool fast_feedback = true#
-
std::vector<TwoQubitGate> two_qubit_gates#
-
void validate() const#
-
class ProgramImage#
- #include <image.hpp>
Public Functions
-
ProgramImage(std::uint32_t base, std::uint32_t size)#
-
inline std::uint32_t entry() const#
-
inline std::uint32_t base() const#
-
inline std::span<const std::uint8_t> bytes() const#
-
std::uint32_t read(std::uint32_t address, std::uint8_t width, bool instruction = false) const#
-
void write(std::uint32_t address, std::uint8_t width, std::uint32_t value)#
Public Static Functions
-
static ProgramImage elf(std::span<const std::uint8_t> file, std::uint32_t base, std::uint32_t size)#
-
static ProgramImage raw(std::span<const std::uint8_t> file, std::uint32_t address, std::uint32_t base, std::uint32_t size)#
Private Functions
-
std::size_t offset(std::uint32_t address, std::uint8_t width, bool store, bool instruction) const#
-
ProgramImage(std::uint32_t base, std::uint32_t size)#
-
struct PulseSpec#
- #include <event.hpp>
Public Members
-
std::string operation = "x"#
-
QuantumOperands operands#
-
double amplitude = 0.0#
-
std::string axis = "x"#
-
ExecutionFlag execution_flag = ExecutionFlag::Always#
-
std::string operation = "x"#
-
class PythonBackend : public qsbit::IQuantumBackend#
- #include <python_backend.hpp>
Public Functions
-
explicit PythonBackend(const PythonBackendConfig &config)#
-
std::string options() const#
-
~PythonBackend() override#
-
virtual void reset(std::uint32_t qubits, std::uint32_t seed) override#
-
virtual std::vector<bool> execute(Epoch epoch, std::span<const BackendOperation> operations) override#
-
virtual std::vector<std::complex<double>> state() const override#
-
virtual std::vector<std::vector<std::complex<double>>> density_matrix() const override#
Public Static Functions
-
static std::string inspect(const std::string &name, const std::string &command)#
-
static void run_simulation(const std::string &config, const std::string &executable, bool check_only = false)#
Private Members
-
std::unique_ptr<Impl> impl_#
-
explicit PythonBackend(const PythonBackendConfig &config)#
-
struct PythonBackendConfig#
- #include <python_backend.hpp>
-
class PythonSession#
- #include <python_backend.hpp>
Public Functions
-
explicit PythonSession(const std::string &module_directory)#
-
~PythonSession()#
-
std::string backend_directory() const#
-
PythonSession(const PythonSession&) = delete#
-
PythonSession &operator=(const PythonSession&) = delete#
Private Members
-
std::unique_ptr<Impl> impl_#
-
explicit PythonSession(const std::string &module_directory)#
-
struct QuantumOperands#
- #include <event.hpp>
Public Functions
-
bool operator==(const QuantumOperands&) const = default#
-
bool operator==(const QuantumOperands&) const = default#
-
struct Readout#
- #include <readouts.hpp>
-
class Readouts#
- #include <readouts.hpp>
Public Functions
-
std::vector<Readout> prepare(std::span<const ScheduledEvent> actions, Epoch epoch) const#
-
Completion result(Id measurement) const#
-
inline void reset()#
-
inline bool empty() const#
-
std::vector<Readout> prepare(std::span<const ScheduledEvent> actions, Epoch epoch) const#
-
class ResourceReservations#
- #include <resources.hpp>
Public Functions
-
void check(std::span<const ScheduledEvent> actions) const#
-
void reserve(std::span<const ScheduledEvent> actions)#
-
inline void reset()#
-
inline const std::vector<ScheduledEvent> &reservations() const#
Private Members
-
std::vector<ScheduledEvent> reservations_#
Private Static Functions
-
static void pair(const ScheduledEvent &a, const ScheduledEvent &b)#
-
void check(std::span<const ScheduledEvent> actions) const#
-
struct ResourceUse#
- #include <event.hpp>
Public Functions
-
bool operator==(const ResourceUse&) const = default#
-
bool operator==(const ResourceUse&) const = default#
-
struct RuntimeLayout#
- #include <runtime.hpp>
-
struct ScheduledEvent#
- #include <control_protocol.hpp>
-
class Simulator : public sc_core::sc_module#
- #include <simulator.hpp>
Public Types
-
using CpuFactory = Core::CpuFactory#
Public Functions
-
Simulator(sc_core::sc_module_name name, Profile profile, ProgramImage image, std::unique_ptr<IQuantumBackend> backend, std::vector<Tick> resets = {}, bool reverse_registration = false, CpuFactory cpu_factory = {}, BackendExecutionConfig execution = {}, DecoderSystemConfig decoding = {})#
-
Simulator(sc_core::sc_module_name name, std::vector<CoreConfig> cores, std::vector<SyncConnection> connections, std::unique_ptr<IQuantumBackend> backend, std::vector<Tick> resets = {}, bool reverse_registration = false, BackendExecutionConfig execution = {}, DecoderSystemConfig decoding = {})#
-
inline void include_stalls(bool enabled)#
-
inline std::size_t core_count() const#
-
inline const ICpuCycleModel &cpu() const#
-
inline const ProgramImage &memory() const#
-
inline const MeasurementRegisters &measurement_registers() const#
-
inline BackendExecution &backend()#
-
inline bool success() const#
-
inline const std::string &fault_message() const#
Private Functions
-
void cpu_edge()#
-
void memory_edge()#
-
void tcu_edge()#
-
void wakeup()#
-
void barrier()#
-
void schedule_wakeup()#
-
TriggeredEvents device_events(const TriggeredEvents &batch, std::size_t index) const#
Private Members
-
DecoderSystem decoders_#
-
std::unique_ptr<IQuantumBackend> backend_#
-
SyncNetwork network_#
-
std::vector<std::uint32_t> port_offsets_#
-
ControlElectronics device_#
-
std::vector<std::unique_ptr<sc_core::sc_clock>> cpu_clocks_#
-
sc_core::sc_clock tcu_clock_#
-
sc_core::sc_event wake_#
-
sc_core::sc_event barrier_#
-
bool reverse_ = false#
-
bool stopped_ = false#
-
bool success_ = false#
-
std::string fault_message_#
-
using CpuFactory = Core::CpuFactory#
-
struct SynchronizeCommand#
- #include <control_command.hpp>
Public Functions
-
bool operator==(const SynchronizeCommand&) const = default#
Public Members
-
std::uint32_t target#
-
bool operator==(const SynchronizeCommand&) const = default#
-
class SyncNetwork#
- #include <sync.hpp>
Public Functions
-
SyncNetwork(Clock clock, std::span<const SyncConnection> connections)#
-
bool empty() const#
-
void reset()#
-
struct Link#
-
struct Signal#
-
SyncNetwork(Clock clock, std::span<const SyncConnection> connections)#
-
class SyncUnit#
- #include <sync.hpp>
Public Functions
-
SyncUnit(std::uint32_t core, SyncNetwork &network, Trace &trace)#
-
void validate(std::uint32_t target) const#
-
inline bool drained() const#
-
void reset()#
-
struct Booking#
-
SyncUnit(std::uint32_t core, SyncNetwork &network, Trace &trace)#
-
struct TcuConfig#
- #include <timing_config.hpp>
-
class TcuCycleModel#
- #include <tcu.hpp>
Public Types
-
using Preflight = std::function<void(const TriggeredEvents&)>#
-
using SyncPreflight = std::function<void(std::span<const std::uint32_t>)>#
Public Functions
-
TcuOutput step(Tick now, Epoch epoch, const TimingEvents *candidate, const std::vector<Completion> &results, const Preflight &preflight, bool synchronization_paused = false, const SyncPreflight &sync_preflight = {})#
-
void close(const EndOfStream &end)#
-
bool drained() const#
-
inline std::size_t timing_size() const#
-
inline std::size_t port_size(std::uint32_t port) const#
-
inline const ExecutionFlags &execution_flags() const#
Private Functions
-
TimingState current_timing_state(Tick now, bool synchronization_paused) const#
-
bool meets_deadline(Tick now, Tick due_tick, const PauseState &pause) const#
-
std::optional<Trigger> prepare_trigger(Tick now, Epoch epoch, const TimingState &state, const Preflight &preflight, const SyncPreflight &sync_preflight) const#
-
std::optional<TcuCycle> prepare_admission(Tick now, Epoch epoch, const TimingEvents &candidate, const PauseState &pause) const#
-
void commit_admission(Tick now, Epoch epoch, TcuCycle cycle, const TimingEvents &candidate, TcuCycle due)#
-
void commit_fast_results(Tick now, Epoch epoch, TcuCycle cycle, const std::vector<Completion> &results, ExecutionFlags next_flags, TcuOutput &output)#
-
void update_pause_state(Tick now, Epoch epoch, const TimingState &state, Tick paused_ticks)#
Private Members
-
std::vector<std::deque<OperationEvent>> events_#
-
ExecutionFlags execution_flags_#
-
std::size_t sync_capacity_ = 8#
-
std::size_t sync_size_ = 0#
-
bool closed_ = false#
-
UnderflowPolicy admitted_policy_ = UnderflowPolicy::Strict#
-
UnderflowPolicy triggered_policy_ = UnderflowPolicy::Strict#
-
PauseState pause_#
Private Static Functions
-
static UnderflowPolicy policy_after(const TimingPoint &point, UnderflowPolicy previous)#
-
struct Point#
-
struct TimingState#
-
struct Trigger#
Public Members
-
TriggeredEvents batch#
-
std::vector<OperationEvent> cancelled#
-
std::vector<std::uint32_t> synchronizations#
-
TriggeredEvents batch#
-
using Preflight = std::function<void(const TriggeredEvents&)>#
-
struct TcuOutput#
- #include <tcu.hpp>
Public Members
-
bool admitted = false#
-
std::optional<TriggeredEvents> launch#
-
std::vector<MeasurementReference> fast_delivered#
-
std::vector<std::uint32_t> synchronizations#
-
bool admitted = false#
-
struct TimingConfig#
- #include <timing_config.hpp>
-
class TimingControl#
- #include <timing_control.hpp>
Public Types
-
using ValidateSync = std::function<void(std::uint32_t)>#
Public Functions
-
TimingControl(TimingConfig profile, MeasurementRegisters ®isters, Trace &trace, ValidateAction validate, ValidateSync validate_sync = {})#
-
void receive(Tick now, Epoch epoch, ControlLinks &links)#
-
std::optional<std::uint32_t> execute(const ControlOperation &operation, Tick now, Epoch epoch, ControlLinks &links)#
-
void reset()#
-
inline bool closed() const#
-
inline bool pending() const#
Private Functions
-
bool enqueue(Tick now, Epoch epoch, ControlLinks &links)#
-
std::optional<std::uint32_t> execute_zero_wait(Tick now, Epoch epoch, ControlLinks &links)#
-
std::optional<std::uint32_t> advance_time(TcuCycle interval, Tick now, Epoch epoch, ControlLinks &links)#
-
std::optional<std::uint32_t> codeword(const ControlOperation &operation, Tick now, Epoch epoch)#
Private Members
-
const TimingConfig profile_#
-
MeasurementRegisters &measurement_registers_#
-
ValidateAction validate_#
-
ValidateSync validate_sync_#
-
std::vector<OperationEvent> pending_events_#
-
std::vector<std::uint32_t> pending_sync_#
-
std::optional<TimingEvents> enqueue_request_#
-
std::optional<ControlOperation> held_#
-
bool pending_point_ = false#
-
bool enqueued_ = false#
-
bool closed_ = false#
-
bool pending_wait_for_next_ = false#
-
bool allow_same_time_ = false#
-
using ValidateSync = std::function<void(std::uint32_t)>#
-
struct TimingEvents#
- #include <control_protocol.hpp>
-
struct TimingPoint#
- #include <control_protocol.hpp>
-
class Trace#
- #include <trace.hpp>
Public Functions
-
Trace() = default#
-
void emit(TraceEvent event)#
-
inline void include_stalls(bool enabled)#
-
inline const std::vector<TraceEvent> &events() const#
-
void write_jsonl(std::ostream &stream) const#
-
Trace() = default#
-
struct TraceEvent#
- #include <trace.hpp>
Public Functions
-
inline TraceEvent(Tick at, Epoch session, std::string type, Id identity = 0, Id timing_label = 0, Tick local_cycle = 0)#
-
inline TraceEvent(Tick at, Epoch session, Tick local_cycle, CpuPipelineState state)#
-
inline TraceEvent(Tick at, Epoch session, Id instruction, Tick local_cycle, InstructionRetired state)#
-
TraceEvent(Tick at, Epoch session, Id request, std::uint32_t core_id, DecoderEvent event)#
Public Members
-
std::string kind#
-
std::uint32_t port = 0#
-
std::uint32_t codeword = 0#
-
std::vector<std::uint32_t> targets#
-
std::string operation#
-
std::string detail#
-
std::uint64_t value = 0#
-
std::optional<std::uint32_t> core#
Private Members
-
std::variant<std::monostate, CpuPipelineState, InstructionRetired, DecoderEvent> payload_#
-
inline TraceEvent(Tick at, Epoch session, std::string type, Id identity = 0, Id timing_label = 0, Tick local_cycle = 0)#
-
struct TransportConfig#
- #include <transport_config.hpp>
-
struct TriggeredEvents#
- #include <control_protocol.hpp>
-
struct TwoQubitGate#
- #include <event.hpp>
Public Functions
-
bool operator==(const TwoQubitGate&) const = default#
-
bool operator==(const TwoQubitGate&) const = default#
-
class VliwCpuCycleModel : public qsbit::ICpuCycleModel#
- #include <vliw.hpp>
Public Functions
-
inline virtual void reset(std::uint32_t entry) override#
-
inline virtual const std::array<std::uint32_t, 32> ®isters() const override#
-
inline virtual std::uint32_t pc() const override#
-
inline virtual bool halted() const override#
Private Members
-
InOrderPipeline pipeline_#
-
inline virtual void reset(std::uint32_t entry) override#
-
struct WaitCommand#
- #include <control_command.hpp>
Public Functions
-
bool operator==(const WaitCommand&) const = default#
Public Members
-
std::uint32_t cycles#
-
bool operator==(const WaitCommand&) const = default#
-
namespace rv32#
Enums
-
enum class Op#
Values:
-
enumerator Lui#
-
enumerator Auipc#
-
enumerator Jal#
-
enumerator Jalr#
-
enumerator Beq#
-
enumerator Bne#
-
enumerator Blt#
-
enumerator Bge#
-
enumerator Bltu#
-
enumerator Bgeu#
-
enumerator Lb#
-
enumerator Lh#
-
enumerator Lw#
-
enumerator Lbu#
-
enumerator Lhu#
-
enumerator Sb#
-
enumerator Sh#
-
enumerator Sw#
-
enumerator Addi#
-
enumerator Slti#
-
enumerator Sltiu#
-
enumerator Xori#
-
enumerator Ori#
-
enumerator Andi#
-
enumerator Slli#
-
enumerator Srli#
-
enumerator Srai#
-
enumerator Add#
-
enumerator Sub#
-
enumerator Sll#
-
enumerator Slt#
-
enumerator Sltu#
-
enumerator Xor#
-
enumerator Srl#
-
enumerator Sra#
-
enumerator Or#
-
enumerator And#
-
enumerator Fence#
-
enumerator Ecall#
-
enumerator Ebreak#
-
enumerator Quantum#
-
enumerator Lui#
-
enum class Op#
-
using BackendOperation = std::variant<BackendEvolution, BackendGates, BackendMeasurement>#