Signal Router

The signal router is used to direct emulated signals from the end of one bitstream emulator’s “signal chain” to the start of another.

  • When a given IP block emulator, say "ip_1", has no further downstream connections within a given bitstream emulator, say "bs_1", it will automatically (and arbitrarily) forward pulses along with the latest stored signal information to the signal router.

  • It will also tack on information about the source, namely the source bitstream emulator ID (i.e. "bs_1"), the source IP block ID (i.e. "ip_1"), and an optional tag, which may be used to distinguish multiple distinct signals coming from the same source in order to route them to different destinations. (If no custom tag is specified, the tag "default" will be used instead.)

    • NOTE: Currently tagging is unimplemented, thus all routes will use the "default" mapping. [TODO]

  • The signal router will receive this data, and map it to a destination IP block in a destination bitstream emulator based on the route configuration (see below). If there is no route defined for a set of received data, it will simply be discarded.

../_images/signal_router_overview.svg

Route Configuration

If the router is being run through kubernetes/minikube, the config is passed automatically as part of the Helm chart (see Helm Configuration). Otherwise, the router will fall back to signal_router_config.json. This configuration defines all the possible routes between bitstream emulators. Each route maps a specific combination of a source bitstream emulator ID, IP block ID, and optional tag to a target/destination bitstream emulator ID and IP block ID. The configuration format is as follows:

{
  "routes": {
    "<source_emulator_id>": {
      "<source_ip_block_id>": {
        "<tag>": [
          {
            "dest_bitstream_emulator_id": "<id>",
            "dest_ip_block_id": "<id>"
          },
          {
            "dest_bitstream_emulator_id": "<another_id>",
            "dest_ip_block_id": "<another_id>"
          }
        ],
        "<tag2>": ...,
        "default": ...
      },
      "<source_ip_block_id2>": ...
    },
    "<source_emulator_id2>": ...
  }
}
  • routes is the mapping object from one bitstream emulator to another. It essentially acts as a tree structured like so:

    ../_images/signal_router_route_tree.svg
  • Each key in routes represents a source bitstream emulator, which maps to an object specifying one or more source IP block mappings.

    • Each source IP block key maps to an object specifying one or more tag mappings (including the "default" tag if using).

      • Each tag key is mapped to a list of one or more destination emulator objects.

        • Each destination object contains the destination bitstream emulator ID and the destination IP block ID to which data from the particular source emulator + IP block + tag should be sent.