FlcData.fromNetlistJson constructor
Parse embedded rohd.src_trace attributes from a Yosys netlist.
Embedded traces use the same file-indexed frame representation as FLC
data, but store signal and instance maps directly on each module:
modules.<module>.attributes.rohd.src_trace.
Implementation
factory FlcData.fromNetlistJson(Map<String, dynamic> json) {
final rawFiles = json['files'];
if (rawFiles is! List || rawFiles.any((file) => file is! String)) {
return FlcData.empty();
}
// Frame indexes address this table directly, so do not filter malformed
// entries and accidentally shift the remaining paths.
final files = rawFiles.cast<String>();
final rawModules = json['modules'];
if (rawModules is! Map) {
return FlcData.empty();
}
final signals = <String, Map<String, FlcEntry>>{};
final instances = <String, Map<String, FlcEntry>>{};
for (final moduleEntry in rawModules.entries) {
final module = moduleEntry.value;
if (module is! Map) {
continue;
}
final attributes = module['attributes'];
if (attributes is! Map) {
continue;
}
final trace = attributes['rohd.src_trace'];
if (trace is! Map) {
continue;
}
final parsed = _parseEmbeddedModule(
trace.cast<Object?, Object?>(),
files,
);
if (parsed.signals.isNotEmpty) {
signals[moduleEntry.key.toString()] = parsed.signals;
}
if (parsed.instances.isNotEmpty) {
instances[moduleEntry.key.toString()] = parsed.instances;
}
}
return FlcData._(files: files, signals: signals, instances: instances);
}