Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix chiplets bus #1664

Merged
merged 21 commits into from
Feb 20, 2025
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions processor/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ default = ["std"]
std = ["vm-core/std", "winter-prover/std", "thiserror/std"]
testing = ["miden-air/testing"]
# Like `testing`, but slows down the processor speed to make it easier to debug.
slow-testing = ["testing", "miden-air/testing"]
bus-debugger = ["testing", "miden-air/testing"]

[dependencies]
miden-air = { package = "miden-air", path = "../air", version = "0.13", default-features = false }
Expand All @@ -35,7 +35,7 @@ thiserror = { workspace = true }
[dev-dependencies]
assembly = { package = "miden-assembly", path = "../assembly", version = "0.13", default-features = false }
logtest = { version = "2.0", default-features = false }
rstest = "0.24.0"
rstest = { version = "0.24.0" }
test-utils = { package = "miden-test-utils", path = "../test-utils" }
winter-fri = { package = "winter-fri", version = "0.11" }
winter-utils = { package = "winter-utils", version = "0.11" }
3 changes: 2 additions & 1 deletion processor/src/chiplets/aux_trace/messages.rs
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,7 @@ pub struct BitwiseMessage {
pub a: Felt,
pub b: Felt,
pub z: Felt,
pub source: &'static str,
}

impl<E> BusMessage<E> for BitwiseMessage
Expand All @@ -250,7 +251,7 @@ where
}

fn source(&self) -> &str {
"bitwise"
&self.source
}
}

Expand Down
50 changes: 26 additions & 24 deletions processor/src/chiplets/aux_trace/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -415,7 +415,7 @@ fn build_control_block_request<E: FieldElement<BaseField = Felt>>(

let value = message.value(alphas);

#[cfg(any(test, feature = "slow-testing"))]
#[cfg(any(test, feature = "bus-debugger"))]
_debugger.add_request(Box::new(message), alphas);

value
Expand Down Expand Up @@ -450,7 +450,7 @@ fn build_dyn_block_request<E: FieldElement<BaseField = Felt>>(
};

let combined_value = control_block_req.value(alphas) * memory_req.value(alphas);
#[cfg(any(test, feature = "slow-testing"))]
#[cfg(any(test, feature = "bus-debugger"))]
{
_debugger.add_request(Box::new(control_block_req), alphas);
_debugger.add_request(Box::new(memory_req), alphas);
Expand Down Expand Up @@ -480,7 +480,7 @@ fn build_syscall_block_request<E: FieldElement<BaseField = Felt>>(

let combined_value = control_block_req.value(alphas) * kernel_rom_req.value(alphas);

#[cfg(any(test, feature = "slow-testing"))]
#[cfg(any(test, feature = "bus-debugger"))]
{
_debugger.add_request(Box::new(control_block_req), alphas);
_debugger.add_request(Box::new(kernel_rom_req), alphas);
Expand All @@ -504,7 +504,7 @@ fn build_span_block_request<E: FieldElement<BaseField = Felt>>(

let value = span_block_message.value(alphas);

#[cfg(any(test, feature = "slow-testing"))]
#[cfg(any(test, feature = "bus-debugger"))]
_debugger.add_request(Box::new(span_block_message), alphas);

value
Expand All @@ -525,7 +525,7 @@ fn build_respan_block_request<E: FieldElement<BaseField = Felt>>(

let value = respan_block_message.value(alphas);

#[cfg(any(test, feature = "slow-testing"))]
#[cfg(any(test, feature = "bus-debugger"))]
_debugger.add_request(Box::new(respan_block_message), alphas);

value
Expand All @@ -546,7 +546,7 @@ fn build_end_block_request<E: FieldElement<BaseField = Felt>>(

let value = end_block_message.value(alphas);

#[cfg(any(test, feature = "slow-testing"))]
#[cfg(any(test, feature = "bus-debugger"))]
_debugger.add_request(Box::new(end_block_message), alphas);

value
Expand All @@ -566,11 +566,12 @@ fn build_bitwise_request<E: FieldElement<BaseField = Felt>>(
a: main_trace.stack_element(1, row),
b: main_trace.stack_element(0, row),
z: main_trace.stack_element(0, row + 1),
source: if is_xor == ONE { "u32xor" } else { "u32and" },
};

let value = bitwise_request_message.value(alphas);

#[cfg(any(test, feature = "slow-testing"))]
#[cfg(any(test, feature = "bus-debugger"))]
_debugger.add_request(Box::new(bitwise_request_message), alphas);

value
Expand Down Expand Up @@ -617,7 +618,7 @@ fn build_mstream_request<E: FieldElement<BaseField = Felt>>(

let combined_value = mem_req_1.value(alphas) * mem_req_2.value(alphas);

#[cfg(any(test, feature = "slow-testing"))]
#[cfg(any(test, feature = "bus-debugger"))]
{
_debugger.add_request(Box::new(mem_req_1), alphas);
_debugger.add_request(Box::new(mem_req_2), alphas);
Expand Down Expand Up @@ -667,7 +668,7 @@ fn build_pipe_request<E: FieldElement<BaseField = Felt>>(

let combined_value = mem_req_1.value(alphas) * mem_req_2.value(alphas);

#[cfg(any(test, feature = "slow-testing"))]
#[cfg(any(test, feature = "bus-debugger"))]
{
_debugger.add_request(Box::new(mem_req_1), alphas);
_debugger.add_request(Box::new(mem_req_2), alphas);
Expand Down Expand Up @@ -715,7 +716,7 @@ fn build_rcomb_base_request<E: FieldElement<BaseField = Felt>>(

let combined_value = mem_req_1.value(alphas) * mem_req_2.value(alphas);

#[cfg(any(test, feature = "slow-testing"))]
#[cfg(any(test, feature = "bus-debugger"))]
{
_debugger.add_request(Box::new(mem_req_1), alphas);
_debugger.add_request(Box::new(mem_req_2), alphas);
Expand Down Expand Up @@ -777,7 +778,7 @@ fn build_hperm_request<E: FieldElement<BaseField = Felt>>(

let combined_value = input_req.value(alphas) * output_req.value(alphas);

#[cfg(any(test, feature = "slow-testing"))]
#[cfg(any(test, feature = "bus-debugger"))]
{
_debugger.add_request(Box::new(input_req), alphas);
_debugger.add_request(Box::new(output_req), alphas);
Expand Down Expand Up @@ -855,7 +856,7 @@ fn build_mpverify_request<E: FieldElement<BaseField = Felt>>(

let combined_value = input.value(alphas) * output.value(alphas);

#[cfg(any(test, feature = "slow-testing"))]
#[cfg(any(test, feature = "bus-debugger"))]
{
_debugger.add_request(Box::new(input), alphas);
_debugger.add_request(Box::new(output), alphas);
Expand Down Expand Up @@ -989,7 +990,7 @@ fn build_mrupdate_request<E: FieldElement<BaseField = Felt>>(
* input_new.value(alphas)
* output_new.value(alphas);

#[cfg(any(test, feature = "slow-testing"))]
#[cfg(any(test, feature = "bus-debugger"))]
{
_debugger.add_request(Box::new(input_old), alphas);
_debugger.add_request(Box::new(output_old), alphas);
Expand Down Expand Up @@ -1039,7 +1040,7 @@ where
};
multiplicand = hasher_message.value(alphas);

#[cfg(any(test, feature = "slow-testing"))]
#[cfg(any(test, feature = "bus-debugger"))]
_debugger.add_response(Box::new(hasher_message), alphas);
}

Expand All @@ -1061,7 +1062,7 @@ where

multiplicand = hasher_message.value(alphas);

#[cfg(any(test, feature = "slow-testing"))]
#[cfg(any(test, feature = "bus-debugger"))]
_debugger.add_response(Box::new(hasher_message), alphas);
} else {
let hasher_message = HasherMessage {
Expand All @@ -1077,7 +1078,7 @@ where

multiplicand = hasher_message.value(alphas);

#[cfg(any(test, feature = "slow-testing"))]
#[cfg(any(test, feature = "bus-debugger"))]
_debugger.add_response(Box::new(hasher_message), alphas);
}
}
Expand All @@ -1104,7 +1105,7 @@ where
};
multiplicand = hasher_message.value(alphas);

#[cfg(any(test, feature = "slow-testing"))]
#[cfg(any(test, feature = "bus-debugger"))]
_debugger.add_response(Box::new(hasher_message), alphas);
}

Expand All @@ -1121,7 +1122,7 @@ where

multiplicand = hasher_message.value(alphas);

#[cfg(any(test, feature = "slow-testing"))]
#[cfg(any(test, feature = "bus-debugger"))]
_debugger.add_response(Box::new(hasher_message), alphas);
}

Expand Down Expand Up @@ -1155,7 +1156,7 @@ where

multiplicand = hasher_message.value(alphas);

#[cfg(any(test, feature = "slow-testing"))]
#[cfg(any(test, feature = "bus-debugger"))]
_debugger.add_response(Box::new(hasher_message), alphas);
}
}
Expand All @@ -1179,11 +1180,12 @@ where
a: main_trace.chiplet_bitwise_a(row),
b: main_trace.chiplet_bitwise_b(row),
z: main_trace.chiplet_bitwise_z(row),
source: "bitwise chiplet",
};

let value = bitwise_message.value(alphas);

#[cfg(any(test, feature = "slow-testing"))]
#[cfg(any(test, feature = "bus-debugger"))]
_debugger.add_response(Box::new(bitwise_message), alphas);

value
Expand Down Expand Up @@ -1258,7 +1260,7 @@ where

let value = message.value(alphas);

#[cfg(any(test, feature = "slow-testing"))]
#[cfg(any(test, feature = "bus-debugger"))]
_debugger.add_response(message, alphas);

value
Expand Down Expand Up @@ -1289,7 +1291,7 @@ where

let value = message.value(alphas);

#[cfg(any(test, feature = "slow-testing"))]
#[cfg(any(test, feature = "bus-debugger"))]
_debugger.add_response(Box::new(message), alphas);

value
Expand Down Expand Up @@ -1391,7 +1393,7 @@ fn compute_mem_request_element<E: FieldElement<BaseField = Felt>>(

let value = message.value(alphas);

#[cfg(any(test, feature = "slow-testing"))]
#[cfg(any(test, feature = "bus-debugger"))]
_debugger.add_request(Box::new(message), alphas);

value
Expand Down Expand Up @@ -1426,7 +1428,7 @@ fn compute_mem_request_word<E: FieldElement<BaseField = Felt>>(

let value = message.value(alphas);

#[cfg(any(test, feature = "slow-testing"))]
#[cfg(any(test, feature = "bus-debugger"))]
_debugger.add_request(Box::new(message), alphas);

value
Expand Down
7 changes: 5 additions & 2 deletions processor/src/debug.rs
Original file line number Diff line number Diff line change
Expand Up @@ -327,8 +327,11 @@ pub(crate) trait BusMessage<E: FieldElement<BaseField = Felt>>: fmt::Display {
fn source(&self) -> &str;
}

/// Note: we use `Vec` internally instead of a `BTreeMap` as a workaround for field elements not
/// implementing `Ord`. Since this is only used in debug/test code, this is acceptable.
/// A debugger for a bus that can be used to track outstanding requests and responses.
///
/// Note: we use `Vec` internally instead of a `BTreeMap`, since messages can have collisions (i.e.
/// 2 messages sent with the same key), which results in relatively complex insertion/deletion
/// logic. Since this is only used in debug/test code, the performance hit is acceptable.
pub(crate) struct BusDebugger<E: FieldElement<BaseField = Felt>> {
pub bus_name: String,
pub outstanding_requests: Vec<(E, Box<dyn BusMessage<E>>)>,
Expand Down
10 changes: 5 additions & 5 deletions processor/src/host/dsa.rs
Original file line number Diff line number Diff line change
@@ -1,10 +1,5 @@
use alloc::vec::Vec;

#[cfg(feature = "std")]
use vm_core::{
crypto::dsa::rpo_falcon512::{Polynomial, SecretKey},
utils::Deserializable,
};
use vm_core::{Felt, Word};

use crate::ExecutionError;
Expand All @@ -25,6 +20,11 @@ use crate::ExecutionError;
/// - The signature generation failed.
#[cfg(feature = "std")]
pub fn falcon_sign(sk: &[Felt], msg: Word) -> Result<Vec<Felt>, ExecutionError> {
use vm_core::{
crypto::dsa::rpo_falcon512::{Polynomial, SecretKey},
utils::Deserializable,
};

// Create the corresponding secret key
let mut sk_bytes = Vec::with_capacity(sk.len());
for element in sk {
Expand Down
2 changes: 1 addition & 1 deletion processor/src/trace/utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -272,7 +272,7 @@ pub trait AuxColumnBuilder<E: FieldElement<BaseField = Felt>> {
requests_running_divisor *= requests[i];
}

#[cfg(any(test, feature = "slow-testing"))]
#[cfg(any(test, feature = "bus-debugger"))]
assert!(bus_debugger.is_empty(), "{bus_debugger}");

result_aux_column
Expand Down
Loading