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 under each module's
attributes.rohd.src_trace entry. The JSON's modules map must
therefore have the shape moduleName: {attributes: {rohd.src_trace: trace}}, as in a Yosys netlist. It may contain only the modules
portion of that netlist.
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);
}