SystemC Library has been upgraded between Simics 5 and Simics 6 to support new features and make the product more robust and future proof. See the release notes for a list of all new features.
Most changes are internal and do not affect the end-user. In addition the deprecated API has been kept, whenever possible, to maintain backwards compatibility.
One major change that affects the end-user is how the SystemC scheduler is integrated with Simics. In Simics 5 the SystemC time was forwarded by events posted on an external clock, therefore creating and connecting this clock was a required step. In Simics 6 the adapter is directly scheduled by Simics and so no external clock is required. This affects the configuration, and some migration is required as described below.
Here is the list of things one has to do when migrating from 5 to 6:
queue
attribute must not be set explicitly by components or test benches. If set, it will result in an error with the following message: "VT_set_object_clock() called twice for the object <object name>. The function may only be called once for each configuration object.". check-cell-partitioning
to validate the configuration. CatchUp
class has been removed, and must be removed from the gasket to avoid compilation error. time_quantum
attribute removed from Adapter. Updates may be required depending on use-case. [trace,break]-sc
commands have been moved into the internal namespace of the adapter. Please don't use this tool directly. systemc2simics::Signal
gasket can no longer be bound directly to the SystemC sc_out via operator overloading. Instead, calling the set_pin
method is required. This makes the Signal gasket consistent with the other gaskets. Please also consider the following optional changes:
ExtensionSender::set_payload()
if not required. This is only required when the payload is modified before calling methods of the interface-specific Extension
class Extension::init(sender, payload)
with calls to Extension::init(sender)
. Gasket::payload()
with TransactionPool::acquire()
and calls to Gasket::trigger_transaction()
with Gasket::trigger(Transaction*)
. This will make the gasket re-entry safe. See any of the standard gaskets for reference. Gasket::set_inquiry(bool)
with TransactionExtension::set_transport_debug(bool)
. See IoMemory
gasket for reference.