Skip to content

Commit f81759d

Browse files
committed
wip integration
1 parent de958e9 commit f81759d

File tree

17 files changed

+619
-373
lines changed

17 files changed

+619
-373
lines changed
Lines changed: 11 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
use ff_ext::ExtensionField;
22
use gkr_iop::error::CircuitBuilderError;
33

4-
use crate::{
5-
circuit_builder::CircuitBuilder, gadgets::AssertLtConfig,
6-
instructions::riscv::constants::UINT_LIMBS, structs::RAMType,
7-
};
4+
use crate::{circuit_builder::CircuitBuilder, gadgets::AssertLtConfig, structs::RAMType};
85
use multilinear_extensions::{Expression, ToExpr};
96

107
use super::{RegisterChipOperations, RegisterExpr};
@@ -20,39 +17,7 @@ impl<E: ExtensionField, NR: Into<String>, N: FnOnce() -> NR> RegisterChipOperati
2017
ts: Expression<E>,
2118
value: RegisterExpr<E>,
2219
) -> Result<(Expression<E>, AssertLtConfig), CircuitBuilderError> {
23-
self.namespace(name_fn, |cb| {
24-
// READ (a, v, t)
25-
let read_record = [
26-
vec![RAMType::Register.into()],
27-
vec![register_id.expr()],
28-
value.to_vec(),
29-
vec![prev_ts.clone()],
30-
]
31-
.concat();
32-
// Write (a, v, t)
33-
let write_record = [
34-
vec![RAMType::Register.into()],
35-
vec![register_id.expr()],
36-
value.to_vec(),
37-
vec![ts.clone()],
38-
]
39-
.concat();
40-
cb.read_record(|| "read_record", RAMType::Register, read_record)?;
41-
cb.write_record(|| "write_record", RAMType::Register, write_record)?;
42-
43-
// assert prev_ts < current_ts
44-
let lt_cfg = AssertLtConfig::construct_circuit(
45-
cb,
46-
|| "prev_ts < ts",
47-
prev_ts,
48-
ts.clone(),
49-
UINT_LIMBS,
50-
)?;
51-
52-
let next_ts = ts + 1;
53-
54-
Ok((next_ts, lt_cfg))
55-
})
20+
self.ram_type_read(name_fn, RAMType::Register, register_id, prev_ts, ts, value)
5621
}
5722

5823
fn register_write(
@@ -64,50 +29,14 @@ impl<E: ExtensionField, NR: Into<String>, N: FnOnce() -> NR> RegisterChipOperati
6429
prev_values: RegisterExpr<E>,
6530
value: RegisterExpr<E>,
6631
) -> Result<(Expression<E>, AssertLtConfig), CircuitBuilderError> {
67-
assert!(register_id.expr().degree() <= 1);
68-
self.namespace(name_fn, |cb| {
69-
// READ (a, v, t)
70-
let read_record = [
71-
vec![RAMType::Register.into()],
72-
vec![register_id.expr()],
73-
prev_values.to_vec(),
74-
vec![prev_ts.clone()],
75-
]
76-
.concat();
77-
// Write (a, v, t)
78-
let write_record = [
79-
vec![RAMType::Register.into()],
80-
vec![register_id.expr()],
81-
value.to_vec(),
82-
vec![ts.clone()],
83-
]
84-
.concat();
85-
cb.read_record(|| "read_record", RAMType::Register, read_record)?;
86-
cb.write_record(|| "write_record", RAMType::Register, write_record)?;
87-
88-
let lt_cfg = AssertLtConfig::construct_circuit(
89-
cb,
90-
|| "prev_ts < ts",
91-
prev_ts,
92-
ts.clone(),
93-
UINT_LIMBS,
94-
)?;
95-
96-
let next_ts = ts + 1;
97-
98-
#[cfg(test)]
99-
{
100-
use gkr_iop::circuit_builder::DebugIndex;
101-
use itertools::izip;
102-
use multilinear_extensions::power_sequence;
103-
let pow_u16 = power_sequence((1 << u16::BITS as u64).into());
104-
cb.register_debug_expr(
105-
DebugIndex::RdWrite as usize,
106-
izip!(value, pow_u16).map(|(v, pow)| v * pow).sum(),
107-
);
108-
}
109-
110-
Ok((next_ts, lt_cfg))
111-
})
32+
self.ram_type_write(
33+
name_fn,
34+
RAMType::Register,
35+
register_id,
36+
prev_ts,
37+
ts,
38+
prev_values,
39+
value,
40+
)
11241
}
11342
}

ceno_zkvm/src/circuit_builder.rs

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,3 @@ pub type ConstraintSystem<E> = gkr_iop::circuit_builder::ConstraintSystem<E>;
22
pub type NameSpace = gkr_iop::circuit_builder::NameSpace;
33
pub type SetTableSpec = gkr_iop::circuit_builder::SetTableSpec;
44
pub type CircuitBuilder<'a, E> = gkr_iop::circuit_builder::CircuitBuilder<'a, E>;
5-
6-
// pub struct CircuitBuilder<'a, E: ExtensionField> {
7-
// pub inner: gkr_iop::circuit_builder::CircuitBuilder<'a, E>,
8-
// pub params: ProgramParams,
9-
// }
10-
11-
// impl<'a, E: ExtensionField> Deref for CircuitBuilder<'a, E> {
12-
// type Target = gkr_iop::circuit_builder::CircuitBuilder<'a, E>;
13-
// fn deref(&self) -> &Self::Target {
14-
// &self.inner
15-
// }
16-
// }
17-
18-
// impl<'a, E: ExtensionField> DerefMut for CircuitBuilder<'a, E> {
19-
// fn deref_mut(&mut self) -> &mut Self::Target {
20-
// &mut self.inner
21-
// }
22-
// }

ceno_zkvm/src/instructions/riscv.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ pub mod constants;
1414
pub mod div;
1515
pub mod dummy;
1616
pub mod ecall;
17+
pub mod ecall_base;
1718
pub mod jump;
1819
pub mod logic;
1920
pub mod logic_imm;

0 commit comments

Comments
 (0)