Skip to content

Core

The core, alongside the [adapter] is probably the most important component of the whole system. Inside it contains all the necessary functions used to run the simulation. Inside it contains an instance of the iss_adapter.

Similarly to most of the other components, the core is composed of two separate instances:

  • Functional: this instance is responsible for defining the internal characteristics of the core. This instance interfaces with the core through a bus
  • Power: this instance controls the state of the core and exposes its current and voltage

Functional Instance

The functional instance is as follows:

text

Signals Summary

A summary of the signals is shown in the table below:

Signal Direction Connected to Description
request_go input Functional Bus
request_value input Functional Bus
idx_sensor input Functional Bus
request_address output Functional Bus
request_data output Functional Bus
request_size output Functional Bus
functional_bus_flag output Functional Bus
request_ready output Functional Bus
power_signal output Core Power

Input Signals

The input signals are:

  • request_go: This signal is a boolean. It comes from the functional bus and is used to signal the core when a request is completed. Initially, request_go is set to 0, and it means that the request is being processed. When the request is completed, the functional bus sets the request go to 1. The core then wakes up and set the request_ready signal to 0. The functional bus then frees the sensor and sets the request_go to 0 again.
  • request_value: This signal is a pointer. It comes from the sensor, then goes through the functional bus, and finally reaches the core. It contains the pointer to the data written to the sensor memory or read from it. When the request is a write this value is ignored
  • idx_sensor: This signal is an integer value. It comes from the functional bus and contains the index of the sensor that is being accessed

Output Signals

The output signals are:

  • request_address: This signal is an unsigned integer. It goes from the core to the functional bus and contains the offset of the sensor memory that is being accessed. For example, if the sensor memory is contains 256 bytes and the request_address is set to 10 it means that we are accessing the 10th byte of the sensor memory. If the request has a size greater than 1, the request address will be the starting address of the memory block of the sensor.
  • request_data: This signal is a pointer. It goes from the core to the functional bus and contains the pointer to the data that is being written to the sensor memory. In case of a read request, this value is ignored and not set.
  • request_size: this signal is an unsigned integer. It goes from the core to the functional bus and contains the number of bytes that are being read from or written to the sensor memory. For example, if the request_size is set to 4 it means that we are reading or writing 4 elements of the sensor memory (since the sensor memory is byte-addressable).
  • functional_bus_flag: This signal is a boolean. It goes from the core to the functional bus and it used to indicate if the request is a read or a write. If the flag is set to true it means that the request is a read, otherwise it is a write.
  • request_ready: This signal is a boolean. It goes from the core to the functional bus and it is used to indicate that the request is ready to be processed by the functional bus. In the functional bus, in fact, the main loop is waiting for this signal to be set to true before forwarding the request to the sensor.
  • power_signal: This signal is a double. It is not used and should be removed