rust_hdl/docs/vcd2svg/
mod.rs1use crate::docs::vcd2svg::display_metrics::DisplayMetrics;
2use crate::docs::vcd2svg::trace_collection::TraceCollection;
3use crate::docs::vcd2svg::vcd_style::VCDStyle;
4
5pub mod display_metrics;
6mod interval;
7mod renderable;
8pub mod symbols;
9pub mod text_frame;
10mod time_view;
11mod timed_value;
12pub mod trace_collection;
13mod utils;
14pub mod vcd_style;
15
16pub fn vcd_to_svg(
17 vcd_filename: &str,
18 svg_filename: &str,
19 signal_names: &[&str],
20 min_time_in_ps: u64,
21 max_time_in_ps: u64,
22) -> anyhow::Result<()> {
23 let vcd = std::fs::File::open(vcd_filename)?;
24 let traces = TraceCollection::parse(signal_names, vcd)?;
25 let mut metrics = DisplayMetrics::default();
26 metrics.style = VCDStyle::gtkwave();
27 metrics.min_time = min_time_in_ps;
28 metrics.max_time = max_time_in_ps;
29 let document = traces.as_svg(&metrics)?;
30 svg::save(svg_filename, &document)?;
31 Ok(())
32}
33
34pub fn vcd_to_txt(
35 vcd_filename: &str,
36 signal_names: &[&str],
37 min_time_in_ps: u64,
38 max_time_in_ps: u64,
39 max_columns: u64,
40) -> anyhow::Result<String> {
41 let vcd = std::fs::File::open(vcd_filename)?;
42 let traces = TraceCollection::parse(signal_names, vcd)?;
43 traces.as_string(min_time_in_ps, max_time_in_ps, max_columns as usize)
44}
45
46#[test]
47fn test_txt() {
48 let msg = vcd_to_txt(
49 &format!("{}/sims/ad868x.vcd", env!("CARGO_MANIFEST_DIR")),
50 &[
51 "uut.clock",
52 "uut.adc.spi_slave.state.q",
53 "uut.master.clock",
54 "uut.master.data_inbound",
55 "uut.master.transfer_done",
56 "uut.adc.spi_slave.bits_saved.d",
57 ],
58 0,
59 250,
60 140,
61 )
62 .unwrap();
63 println!("{}", msg);
64}