SystemC AMS
SystemC AMS is an extension to SystemC for analog, mixed-signal and RF functionality. The SystemC AMS 2.0 standard was released on April 6, 2016 as IEEE Std 1666.1-2016.
Language features
MoC - Model of Computation
A model of computation is a set of rules defining the behavior and interaction between SystemC AMS primitivemodules. SystemC AMS defines the following models of computation: timed data flow, linear signal flow
and electrical linear networks.
TDF - Timed Data Flow
In the timed data flow model, components exchange analogue values with each otheron a periodic basis at a chosen sampling rate, such as every 10 microseconds.
By the sampling theorem, this would be sufficient to convey
signals of up to 50 MHz bandwidth without aliasing artefacts.
A TDF model defines a method called that is invoked
at the appropriate rate as simulation time advances.
A so-called cluster of models share a static schedule of when they should communicate.
This sets the relative ordering of the calls to the processing methods
of each TDF instance in the cluster.
The periodic behaviour of TDF allows it to operate independently of the main
SystemC event-driven kernel used for digital logic.
ELN - Electrical Linear Networks
The SystemC electrical linear networks library provides a set ofstandard electrical components that enable SPICE-like
simulations to be run. The three basic components, resistors, capacitors and
inductors are, of course, available. Further voltage-controlled variants, such as a transconductance
amplifier enable most FET and other
semiconductor models to be readily created.
Current flowing in ELN networks of resistors can be solved with a suitable simultaneous equation solver.
These are called the nodal equations.
Where time-varying components, such as capacitors and inductors are included, Euler's method is
typically implemented to model them.
Euler's method is a simple approach to solving finite-difference time-domain problems. For instance,
to simulate the capacitor charge problem on the left below, a timestep delta\_t is selected that is typically
about one percent of the time constant and the iteration on the bottom right is executed.
The error in Euler's method decreases quadratically with smaller time steps, but an overly-small time
step results in a slow simulation for a complex finite-element simulation. But this
is not a problem in many situations where part of a complex SoC or
plant controller is run alongside a plant model that has just a few state variables, such as the car transmission system because
there are orders of magnitude difference in time constants.
Simulating the analogue subsystem inside the RTL simulator then makes sense.
Moreover, most plant control situations use closed-loop negative feedback with the controller being just as good at managing
a slightly errored plant model as the real model.
Under the ELN formalism, the SystemC initialisation and simulation cycles are extended to support solving nodal flow
equations. Nodal equation solving is generally solved iteratively
rather than using direct methods such as Gaussian Elimination or based
on matrix inverses. Iterative methods tend to have greater stability
and are fast when the state has only advanced slightly from the
previous time step. When the kernel de-queues a time-advancing event
from the event queue, the simulation time is advanced. The analogue
part of the simulator maintains a time quantum beyond which the nodal
equations need to be re-computed. This quantum is dynamically adjusted
depending on the behaviour of the equations. If the equations are
`bendy', meaning that linear extrapolation using Euler's method over
the quantum will lead to too much error, the time step is reduced,
otherwise it can be gradually enlarged at each step. Overall, two
forms of iteration are needed: the first is iteration at a time step to solve
the nodal equations to a sufficient accuracy. The second is between
time steps. In a simple implementation, once simulation time has
advanced beyond the Euler quantum, the analogue sub-system is
re-solved. If the extrapolation errors are too great, the simulator
must go back to the last time step and simulate forward again using a
smaller analogue quantum. This mechanism is also the basis for SPICE
simulations.
Each analogue variable that is the argument to a `cross',
or other analogue sensitivity, is then examined to see if new digital
domain work has been triggered. If so, new events are injected on the discrete event
queue for the current simulation time.
LSF - Linear Signal Flow
The SystemC linear signal flow library provides a set of primitiveanalogue operators, such as adders and differentiators that enable
all basic structures found in differential equations to be
constructed in a self-documenting and executable form. The
advantage of constructing the system from a standard operator library
is that `reflection' is possible: other code can analyse the structure
and perform analytic differentiation, summation, integration
and other forms of analysis, such as sensitivity analysis to determine
a good time step.
This would not be possible for an implementation using ad-hoc coding.
In general programming, reflection refers to
a program being able to read its own source code.
Ports
TDF in/outport definition:sca_tdf::sca_in
sca_tdf::sca_out
TDF converter in/outport definition:
sca_tdf::sc_in
sca_tdf::sc_out
ELN terminal definition:
sca_eln::'''sca_terminal'''
Nodes
sca_eln::sca_node // ELN nodesca_eln::sca_node_ref // ELN reference node
Cluster
ToDo: descriptionTracing
sca_trace_file *tf = sca_create_tabular_trace_file;
sca_trace;
Example code
TDF
Timed-Data-Flow 1st order low pass model:- include
using namespace sca_core; // introduced for convenience: sca_core::sca_time → sca_time
using namespace sca_ac_analysis; // introduced for convenience: sca_ac_analysis::sca_ac → sca_ac
SCA_TDF_MODULE
linear transfer function:
// initialize linear transfer function coefficients
void tdf_low_pass::initialize
ToDo: description
// AC implementation
void tdf_low_pass::ac_processing
ToDo: description
// time domain implementation
void tdf_low_pass::processing
ELN
Electrical-Linear-Networks 1st order low pass netlist:SC_MODULE