openvm_circuit/system/memory/controller/
interface.rs1use openvm_stark_backend::{interaction::PermutationCheckBus, p3_field::PrimeField32};
2
3use crate::system::memory::{
4 merkle::{MemoryMerkleAir, MemoryMerkleChip},
5 persistent::{PersistentBoundaryAir, PersistentBoundaryChip},
6 volatile::{VolatileBoundaryAir, VolatileBoundaryChip},
7 MemoryImage, CHUNK,
8};
9
10#[derive(Clone)]
11pub enum MemoryInterfaceAirs {
12 Volatile {
13 boundary: VolatileBoundaryAir,
14 },
15 Persistent {
16 boundary: PersistentBoundaryAir<CHUNK>,
17 merkle: MemoryMerkleAir<CHUNK>,
18 },
19}
20
21#[allow(clippy::large_enum_variant)]
22pub enum MemoryInterface<F> {
23 Volatile {
24 boundary_chip: VolatileBoundaryChip<F>,
25 },
26 Persistent {
27 boundary_chip: PersistentBoundaryChip<F, CHUNK>,
28 merkle_chip: MemoryMerkleChip<CHUNK, F>,
29 initial_memory: MemoryImage,
30 },
31}
32
33impl<F: PrimeField32> MemoryInterface<F> {
34 pub fn compression_bus(&self) -> Option<PermutationCheckBus> {
35 match self {
36 MemoryInterface::Volatile { .. } => None,
37 MemoryInterface::Persistent { merkle_chip, .. } => {
38 Some(merkle_chip.air.compression_bus)
39 }
40 }
41 }
42}