openvm_circuit/system/memory/controller/
interface.rs

1use 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}