instantiationVerilogFor static method
Creates a line of SystemVerilog that instantiates module.
The instantiation will create it as type instanceType and name
instanceName.
ports maps module input/output/inout names to a verilog signal name.
For example:
To generate this SystemVerilog: sig_c = sig_a & sig_b
Based on this module definition: c <= a & b
The values for ports should be:
ports: { 'a' : 'sig_a', 'b' : 'sig_b', 'c' : 'sig_c'}
If forceStandardInstantiation is set, then the standard instantiation
for SystemVerilog modules will be used.
If parameters is provided, then the module will be instantiated with
all of the keys as parameter names set to the corresponding values
provided.
Implementation
static String instantiationVerilogFor(
{required Module module,
required String instanceType,
required String instanceName,
required Map<String, String> ports,
Map<String, String>? parameters,
bool forceStandardInstantiation = false}) {
if (!forceStandardInstantiation) {
if (module is SystemVerilog) {
return module.instantiationVerilog(
instanceType,
instanceName,
ports,
) ??
instantiationVerilogFor(
module: module,
instanceType: instanceType,
instanceName: instanceName,
ports: ports,
forceStandardInstantiation: true);
}
// ignore: deprecated_member_use_from_same_package
else if (module is CustomSystemVerilog) {
return module.instantiationVerilog(
instanceType,
instanceName,
Map.fromEntries(ports.entries
.where((element) => module.inputs.containsKey(element.key))),
Map.fromEntries(ports.entries
.where((element) => module.outputs.containsKey(element.key))),
);
}
}
//non-custom needs more details
final connections = <String>[];
for (final signalName in module.inputs.keys) {
connections.add('.$signalName(${ports[signalName]!})');
}
for (final signalName in module.outputs.keys) {
connections.add('.$signalName(${ports[signalName]!})');
}
for (final signalName in module.inOuts.keys) {
connections.add('.$signalName(${ports[signalName]!})');
}
final connectionsStr = connections.join(',');
var parameterString = '';
if (parameters != null && parameters.isNotEmpty) {
final parameterContents =
parameters.entries.map((e) => '.${e.key}(${e.value})').join(',');
parameterString = '#($parameterContents)';
}
return '$instanceType $parameterString $instanceName($connectionsStr);';
}