2025-09-25 10:09:55 +02:00
|
|
|
use nextpnr::Context;
|
2023-12-08 18:36:48 +01:00
|
|
|
|
|
|
|
|
#[no_mangle]
|
|
|
|
|
pub extern "C" fn rust_example_printnets(ctx: &mut Context) {
|
|
|
|
|
println!("Nets in design:");
|
2025-09-26 13:09:25 +02:00
|
|
|
for (name, net) in &ctx.nets() {
|
|
|
|
|
let net = unsafe { &*net };
|
|
|
|
|
let driver = net.driver();
|
|
|
|
|
println!(" {}:", ctx.name_of(name).to_str().unwrap());
|
|
|
|
|
if let Some(driver) = driver {
|
2025-10-10 16:04:19 +02:00
|
|
|
let cell = driver.cell().map_or("(no cell)", |cell| {
|
|
|
|
|
ctx.name_of(cell.name()).to_str().unwrap()
|
|
|
|
|
});
|
2025-09-26 13:09:25 +02:00
|
|
|
let port = ctx.name_of(driver.port()).to_str().unwrap();
|
|
|
|
|
println!(" driver: {cell}.{port}");
|
|
|
|
|
} else {
|
|
|
|
|
println!(" driver: (no driver)");
|
|
|
|
|
}
|
|
|
|
|
println!(" sinks:");
|
|
|
|
|
for (user, port) in net.users() {
|
|
|
|
|
let user = unsafe { &*user };
|
|
|
|
|
let user = ctx.name_of(user.name()).to_str().unwrap();
|
|
|
|
|
let port = ctx.name_of(port).to_str().unwrap();
|
|
|
|
|
println!(" {user}.{port}");
|
|
|
|
|
}
|
2023-12-08 18:36:48 +01:00
|
|
|
}
|
|
|
|
|
}
|