Generate Parameter Configurations

Odatix offers a highly modular approach to automated configuration generation. This system allows users to define dynamic parameter sets without manually listing all possible values. With a simple YAML-based configuration, Odatix can generate customized parameter combinations using a variety of flexible methods.

Note

This functionality requires Odatix 3.4+

Configuration Generation Syntax

To activate automatic configuration generation, users must define the following fields in their main architecture definition file or parameter domain definition file _settings.yml:

_settings.yml
1generate_configurations: Yes
2generate_configurations_settings:
3  template: "parameter VALUE = $var;"
4  name: "config_${var}"
5  variables:
6    # One or more of the variable definition methods described below
  • generate_configurations: Yes → Activates the automatic configuration generation.

  • template: → Defines how generated values will be inserted in the configuration files.

  • name: → Defines the naming convention for generated configurations.

  • variables: → Defines how values are generated (ranges, lists, functions, etc.).

For more information about parameter domains see Section Define Parameter Domains

Variable Definition Methods

Odatix supports multiple methods to dynamically generate values for configuration parameters.

1️⃣ Range-based Values

Users can define a range of values for a parameter with an optional step size.

_settings.yml
 1generate_configurations: Yes
 2generate_configurations_settings:
 3  template: "parameter VALUE = $var;"
 4  name: "config_${var}"
 5  variables:
 6    var:
 7      type: range
 8      settings:
 9        from: 10
10        to: 100
11        step: 10

🔹 var will generate as {10, 20, 30, …, 100}.

2️⃣ Power-of-Two Values

A power-of-two range can be defined.

_settings.yml
 1generate_configurations: Yes
 2generate_configurations_settings:
 3  template: "parameter VALUE = $var;"
 4  name: "config_${var}"
 5  variables:
 6    var:
 7      type: power_of_two
 8      settings:
 9        from_2^: 5
10        to_2^: 10

🔹 var will generate as {2^5, 2^6, 2^7, 2^8, 2^9, 2^10}{32, 64, 128, 256, 512, 1024}.

Alternatively, you can define a range directly:

_settings.yml
 1generate_configurations: Yes
 2generate_configurations_settings:
 3  template: "parameter VALUE = $var;"
 4  name: "config_${var}"
 5  variables:
 6    var:
 7      type: power_of_two
 8      settings:
 9        from: 32
10        to: 1024

🔹 var will generate as {32, 64, 128, 256, 512, 1024}.

3️⃣ Explicit List of Values

If a fixed set of values is needed, users can define a list.

_settings.yml
1generate_configurations: Yes
2generate_configurations_settings:
3  template: "parameter VALUE = $var;"
4  name: "config_${var}"
5  variables:
6    var:
7      type: list
8      settings:
9        list: [100, 225, 412, 803]

🔹 var will generate as {100, 200, 400, 800}.

4️⃣ Multiples of a Base Value

Users can define values that are multiples of a specific number.

_settings.yml
 1generate_configurations: Yes
 2generate_configurations_settings:
 3  template: "parameter VALUE = $var;"
 4  name: "config_${var}"
 5  variables:
 6    var:
 7      type: multiples
 8      settings:
 9        base: 8
10        from: 8
11        to: 64

🔹 var will generate as {8, 16, 24, …, 64}.

5️⃣ Computed Values (Function-based)

Odatix allows the use of mathematical expressions to compute values dynamically.

_settings.yml
 1generate_configurations: Yes
 2generate_configurations_settings:
 3  template: "parameter VALUE_START = $var;\n parameter VALUE_END = ${var_func};"
 4  name: "config_${var}..${var_func}"
 5  variables:
 6    var:
 7      type: multiples
 8      settings:
 9        from: 0
10        to: 56
11        base: 8
12    var_func:
13      type: function
14      settings:
15        op: ${var}+7

🔹 var will generate as {0, 8, 16, 24, …, 56}.

🔹 var_func will be computed as {7, 15, 23, 31, …, 63}.

🔹 This will generate configurations {config_0..7, config_8..15, config_16..23, config_24..31, …, config_56..63}.

Operations Between Variables

1️⃣ Union of Variable Sets

Users can dynamically concatenate multiple generated variables.

_settings.yml
 1generate_configurations: Yes
 2generate_configurations_settings:
 3  template: "parameter VALUE = ${union_var};"
 4  name: "config_${union_var}"
 5  variables:
 6    var_1:
 7      type: list
 8      settings:
 9        list: [50, 60]
10    var_2:
11      type: list
12      settings:
13        list: [10, 100]
14    union_var:
15      type: union
16      settings:
17        sources: [var_1, var_2]

🔹 var will generate as {10, 50, 60, 100}.

🔹 This will generate configurations {config_10, config_50, config_60, config_100}.

2️⃣ Disjonctive Union of Variable Sets

It is also possible to perform a symmetric difference (disjunctive union) of two variable. This consists in concatenating the elements which are in either of the sets, but not in both.

_settings.yml
 1generate_configurations: Yes
 2generate_configurations_settings:
 3  template: "parameter VALUE = ${union_var};"
 4  name: "config_${union_var}"
 5  variables:
 6    var_1:
 7      type: list
 8      settings:
 9        list: [50, 60]
10    var_2:
11      type: list
12      settings:
13        list: [10, 50, 100]
14    union_var:
15      type: disjunctive_union
16      settings:
17        sources: [var_1, var_2]

🔹 var will generate as {10, 60, 100}. Note that 50 is missing because it is defined in both var_1 and var_2.

🔹 This will generate configurations {config_10, config_60, config_100}.

3️⃣ Intersection of Variable Sets

Users can dynamically get exclusiveley the values that are in all given variables.

_settings.yml
 1generate_configurations: Yes
 2generate_configurations_settings:
 3  template: "parameter VALUE = ${inter_var};"
 4  name: "config_${inter_var}"
 5  variables:
 6    mult_3:
 7      type: multiples
 8      settings:
 9        base: 3
10        from: 1
11        to: 50
12    mult_4:
13      type: multiples
14      settings:
15        base: 4
16        from: 1
17        to: 50
18    inter_var:
19      type: intersection
20      settings:
21        sources: [mult_3, mult_4]

🔹 mult_3 will generate as the list of all multiples of 3 in [1:50]: {3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48}.

🔹 mult_4 will generate as the list of all multiples of 4 in [1:50]: {4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48}.

🔹 inter_var will generate as the list of all multiples of both 3 and 4 in [1:50]: {12, 24, 36, 48}.

🔹 This will generate configurations {config_12, config_24, config_36, config_48}.

4️⃣ Difference of Variable Sets

Users can dynamically get exclusiveley the values that are in all given variables.

_settings.yml
 1generate_configurations: Yes
 2generate_configurations_settings:
 3  template: "parameter VALUE = ${diff_var};"
 4  name: "config_${diff_var}"
 5  variables:
 6    mult_3:
 7      type: multiples
 8      settings:
 9        base: 3
10        from: 1
11        to: 50
12    mult_4:
13      type: multiples
14      settings:
15        base: 4
16        from: 1
17        to: 50
18    diff_var:
19      type: difference
20      settings:
21        sources: [mult_4, mult_3]

🔹 mult_3 will generate as the list of all multiples of 3 in [1:50]: {3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48}.

🔹 mult_4 will generate as the list of all multiples of 4 in [1:50]: {4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48}.

🔹 diff_var will generate as the list of all multiples of 4 in [1:50] that are not a multiple of 3: {4, 8, 16, 20, 28, 32, 40, 44}.

Combining Multiple Parameters

Odatix allows multiple parameters to be generated together, enabling complex configurations.

Example: Dual Memory Depth Configuration

In this example, both instruction memory (IMEM) and data memory (DMEM) depths are generated dynamically.

_settings.yml
 1start_delimiter: "  // <mem>"
 2stop_delimiter: "  // </mem>"
 3
 4generate_configurations: Yes
 5generate_configurations_settings:
 6  template: "\n  parameter p_dmem_depth_pw2  = $dmem_depth,\n  parameter p_imem_depth_pw2  = $imem_depth,\n"
 7  name: "DMEM_${dmem_depth_pw2}-IMEM_${imem_depth_pw2}"
 8  variables:
 9    dmem_depth:
10      type: range
11      settings:
12        from: 8
13        to: 10
14    dmem_depth_pw2:
15      type: function
16      settings:
17        op: 2^$dmem_depth
18    imem_depth:
19      type: range
20      settings:
21        from: 8
22        to: 10
23    imem_depth_pw2:
24      type: function
25      settings:
26        op: 2^$imem_depth

🔹 This will generate configurations:

  • DMEM_256-IMEM_256

  • DMEM_256-IMEM_512

  • DMEM_256-IMEM_1024

  • DMEM_512-IMEM_256

  • DMEM_512-IMEM_512

  • DMEM_512-IMEM_1024

  • DMEM_1024-IMEM_256

  • DMEM_1024-IMEM_512

  • DMEM_1024-IMEM_1024

Generate Configurations

To generate your configuration, simply run :

odatix generate

Odatix will list all configurations to generate and will ask for your confirmation before actually generating them.

See Also