Primitive components are the basic building block elements whose energy and area estimates can be directly cpatured by Accelergy's plug-ins. Therefore they are referenced as Accelergy's backend library instead of an input to each Accelergy evaluation.
The complete set of default primitive components classes are installed together with Accelergy source code, example path /home/usr/local/share/accelergy/primitive_component_libs/. They can also be found here. For most cases, primitive components do not need to be updated.
version keyEach top-level YAML key used as a Timeloop/Accelergy input has a version. The current version for the archtecture: is 0.3, which is specified as follows:
primitive_components:
version: 0.3
...
classes keyDescribes various compound component classes as a list. Each component component class has the following keys:
name: the name of the class.attributes: the important hardware properties associated with the class.actions: runtime behaviors associated with the class.name keyEach component class is associated with a name.
primitive_components:
version: 0.3
classes:
- name: intadder
...
attributes keyDescribes the high-level attributes associated with primitive component. Attribute name and its default value form key-value pairs. Please note that the user-defined attribute values in architecture specification can override the default vlaues stored in the library.
For example, an interger adder, intadder component needs has attributes technology, datawidth, and 'num_pipeline_stages`.
primitive_components:
version: 0.3
classes:
- name: intadder
attributes:
technology: 45nm
datawidth: 16
num_pipeline_stages: 1
...
actions keyDescribes the different runtime behaviors the component can have, and each runtime behavoir is called an action associated with the component.
For example, an adder is either computing, resulting in an add action, or staying idle, resulting in an idle action.
primitive_components:
version: 0.3
classes:
- name: intadder
attributes:
technology: 65nm
datawidth: 16
num_pipeline_stages: 1
actions:
- name: add
- name: idle
arguments in action specificationsEach action can also have its assocaited arguments, specified with the arguments key.
Each argument is described as a key-value pair: a user-defined argument name as the key, and a range of possible argument values as the value.
We use a register file component as an example. For each action, either read or write, there are two arguments associated with the action, named data_delta and address_delta. data_delta refers to the amount of changes in data values (thus bit flips) across consecutive cycles. The larger the delta, the more switching happens in the circuit, leading to a larger energy consumption. Similarly, address_delta refers the amount of swithcing happens at the addressing wires.
We use .. to indicate an inclusive range of the allowed argument values, e.g., data_delta: 0..1 refers to a min variation rate of 0 (i.e., data bits never change across consecutive cycles) and a max variation rate of 1 (i.e., data bits always flip across consecutive cycles).
primitive_components:
version: 0.3
classes:
- name: regfile
attributes:
...
actions:
- name: read
arguments:
data_delta: 0..1
address_delta: 0..1
- name: write
arguments:
data_delta: 0..1
address_delta: 0..1
- name: idle