News

TEMU Features (2018-03-19)

TEMU nightly builds now contains a number of major new features, which has been targeted for the upcoming 2.2 release:

  • Source level debugging support. The new DWARF support is now exposed to support break point manipulation and source listing. It still lacks data inspection and manipulation support, but the current support is already good enough to inspect control flow at source level without having to start up the GDB server.
  • ARMv7-R support. TEMU now supports ARM in addition to the existing SPARCv8 achitecture.
  • Registers. By adding an API for register definition, important meta information about e.g. register fields can be kept available in the TEMU command line interface. Register registration is used instead of properties when adding registers to a class.
  • Clock model. The clock model can replace processors as a time source and event queue. The purpose of it is to simplify model testing and to support hardware in the loop scenarios where a CPU is replaced with a physical variant.
  • Components. Component support has been added. This enables the hierarchical decomposition of systems, which especially simplifies the creation of systems with e.g. multiple LEON3 systems since individual models for each device no longer need to be created.
  • Additional bus models. TEMU now have support for 1553, CAN and SpaceWire buses, providing fully virtual bus models with easy to use APIs.

Upcomming API Breakage (2016-03-07)

For TEMU 2.2 there will be some API breakage, firstly the count parameter of the temu_addInterface function will be removed. This parameter is not used at present. If you are using the emulator from C++, the parameter has a default argument, so it should not have any significant effect.

The second more fundamental change will be the event system. The current system is being rewamped with support for pre-allocated event structures. This should speed up the event system by removing allocations during event insertion and removal. The old EventIface has been renamed LegacyEventIface (the LegacyEvent interface has been deprecated as well). The new event system is backwards compatible except for how events are published. Thus, calls to the registerEvent method in the interface should be replaced with temu_eventPublishOldStyle(), this call should be made in the model constructor intead of when the queue object is connected.

The main point with this is that the event API is moving away from the interface based variant, to a function based variant.

There will be two options:

  • Switch to the new event system
  • Update connect calls to refer to LegacyEventIface instead of EventIface.

Note that the legacy event interface will be removed completely in release following TEMU 2.2. So it is recommended that you move to the new event system instead.

The advantages are two fold. Firstly the new temu_Object class that all internal classes must inherit from now has a reference to its queue object (which can be connected in the CLI with the connect-timesource function). You therefore no longer need to add a EventIface reference property to your model. Secondly, the new function based interface allow the posting of events using one out of three time bases (cycles, nanoseconds or seconds).

The new API is less confusing, and more easy to use. In addition, it should result in signficant performance advantages for high frequency and high volume event usage.

TEMU 2.1.0 Released (2015-11-13)

TEMU 2.1 has now been released. For more information, see the release notes and the download page.