The model of computation in the DE domain makes it amenable to high-level system modeling. For this reason, primitives in the DE domain are often more complicated, and more specialized than those in the SDF domain.
We have made every attempt to include in the distribution all of the reasonably generic primitives that have been developed, plus a selection of the more esoteric ones (as examples). Keep in mind that the primitive libraries of the other domains are also available through the wormhole mechanism. Users that find themselves frequently needing primitives from other domains may wish to build a library of single-primitive modules. Such modules can be used in any domain, regardless of the domain in which the single primitive resides. MLDesigner automatically implements them as a wormhole.
Strictly speaking, source primitives are primitives with no inputs. They generate signals, and may represent external inputs to the system, constant data, or synthesized stimuli. By convention, these primitives are fired once at time zero automatically. During this and all subsequent firings, the primitive itself must determine when its next firing should occur. It schedules this next firing with a call to the method refireAtTime(time). An example for those primitives is the Clock primitive.
Some of the primitives in the source library are not source primitives in this sense, though. They require an input event in order to produce an output. The value of the input event is ignored; it is only its timestamp that matters. An example for those primitives is the Ramp primitive.
The sink primitives have no outputs. They display signals in various ways, or write them to files. Several of the primitives in this library are based on the pxgraph program. This program has many options which are described in Visualization using 2D plotting system→Xgraph configuration. The differences between primitives often amount to little more than the choice of default options. Some, however, preprocess the signal in useful ways before passing it to the pxgraph program.
Control primitives manipulate the flow of tokens. All of these primitives are polymorphic; they operate on any data type.
This library is intended to house a collection of primitives for format conversions of various types. This collection is very limited. The primitives Packetize and UnPacketize illustrate the consolidation of multiple data samples into single particles that can be transmitted as a unit. These primitives use the class FloatVecData, which is simply a vector of floating-point numbers.
This library includes primitives that have been designed to model communication networks. These are illustrative of a common use of the DE domain, for modeling packet-switched networks. However, many of the primitives are specialized to a particular type of network design. Thus, they should be viewed as illustrative examples, rather than as a comprehensive library. A NetworkCell class is used in many of these primitives. It models packetized data that is transmitted through cell-relay networks. Each NetworkCell object can carry any user data of type Message. In addition to this user data, the NetworkCell contains a destination address and a priority. These are used by primitives and modules to route the cell through the network.
The Multi-Valued Logic(MVL) library in the DE domain contains various sub-libraries that perform logic functions on data. The primitives in this library are based on four element logic that includes the two states 0 and 1 as well as the states X and Z.
The Value of the ErrorHandle parameter determines the action(s) that are taken by the primitive: