A lightweight VCD waveform parser and CLI written in MoonBit.
Dependencies
moon update
moon build --target nativemoon add alicedhaha/minivcd_mbtmoon run cmd/minivcd -- info examples/demo.vcdmoon run cmd/minivcd -- signals examples/demo.vcdmoon run cmd/minivcd -- changes examples/demo.vcd top.clkmoon run cmd/minivcd -- stats examples/demo.vcd top.clkmoon run cmd/minivcd -- value examples/demo.vcd top.counter 20moon run cmd/minivcd -- export examples/demo.vcd output.csvlet text =
#|$timescale 1ns $end
#|$scope module top $end
#|$var wire 1 ! clk $end
#|$upscope $end
#|$enddefinitions $end
#|#0 0!
#|#5 1!
let vcd = @minivcd_mbt.parse_vcd(text) catch { _ => panic() }
let value = @minivcd_mbt.value_at(vcd, "top.clk", 5L) catch { _ => panic() }
assert_eq(value, Some("1"))moon testmoon check --deny-warn
moon test --deny-warnpub(all) struct TimestampBucket {
timestamp : Int64
changes : Array[SignalChange]
} derive(Eq, Debug)pub(all) struct VcdDiff {
signal_diff : SignalSetDiff
timestamp_diff : TimestampDiff
value_diffs : Array[ValueDiff]
} derive(Eq, Debug)fn binary_value_to_int64(value : String) -> Int64?fn classify_value(value : String) -> Stringfn first_change_at_or_after(vcd : VcdFile, full_name : String, timestamp : Int64) -> SignalChange? raise VcdErrorfn hamming_distance(left : String, right : String) -> Int?fn has_high_impedance_bit(value : String) -> Boolfn has_unknown_bit(value : String) -> Boolfn high_impedance_bit_count(value : String) -> Intfn is_known_binary(value : String) -> Boolfn is_scalar_logic_value(value : String) -> Boolfn is_vector_logic_value(value : String) -> Boolfn last_change_at_or_before(vcd : VcdFile, full_name : String, timestamp : Int64) -> SignalChange? raise VcdErrorfn signal_changes_by_identifier(vcd : VcdFile, identifier : String) -> Array[SignalChange] raise VcdErrorfn signal_changes_in_window(vcd : VcdFile, full_name : String, window : TimeWindow) -> Array[SignalChange] raise VcdErrorfn signal_changes_inside_window(vcd : VcdFile, full_name : String, window : TimeWindow) -> Bool raise VcdErrorfn unknown_bit_count(value : String) -> Intfn zero_bit_count(value : String) -> IntA lightweight VCD waveform parser and CLI written in MoonBit.
Dependencies