openvm_circuit/system/memory/controller/
interface.rs

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