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}