Configurations

A design in Odatix is parametrizable; a configuration is one concrete set of parameter values for that design. This section covers how to describe configurations — from writing individual parameter files by hand to generating hundreds of them automatically.

The building blocks

Odatix builds configurations from three mechanisms that stack on top of each other:

Mechanism What it is Use it when
Parameter files One file per configuration, splicing values into the delimited section of your top level. You have a handful of variants to compare.
Parameter domains Independent groups of parameters combined with +. Parameters are independent (memory depth, ISA extensions, multiplier type…).
Configuration generation Rules that create the parameter files for you. The value set follows a pattern — ranges, powers of two, lists, functions.
Variables The value sets behind those rules, shared with virtual parameter domains. You need the exhaustive list of types and options.

Defining a design

A design lives in odatix_userconfig/architectures/<name>/, with a _settings.yml that tells Odatix where your sources are and how to instantiate the design.

architectures/ALU/_settings.yml
rtl_path: "examples/alu_sv"

top_level_file: "alu_top.sv"   # relative to rtl_path
top_level_module: "alu_top"

clock_signal: "i_clk"
reset_signal: "i_rst"

# delimiters that mark the parameter section of the top level
use_parameters: Yes
start_delimiter: "#("
stop_delimiter: ")("

# target-specific bounds
xc7a100t-csg324-1:
  fmax_synthesis:
    lower_bound: 50
    upper_bound: 800
Important

With generated RTL (Chisel, HLS), param_target_file is mandatory: the top level does not exist yet when parameters are replaced, so replacement must target the source file that produces it.

A full list of _settings.yml keys is on the Configuration reference page.

Writing parameter files by hand

Each parameter file contains the exact text that replaces the delimited section of your top level. Given this module:

alu_top.sv
module alu_top #(
  parameter BITS = 8
)(
  input  wire            i_clk,
  input  wire      [4:0] i_sel_op,
  output wire [BITS-1:0] o_res
);

a configuration file simply provides the replacement:

architectures/ALU/16bits.txt
  parameter BITS = 16

Create as many files as you want. The only constraint is a strict correspondence — in names and count — between the parameter files and the parameter section of your top level.

Tip

If you don’t want to write the files by hand, use parameter domains or configuration generation to produce them automatically. You can also use the Python API to generate them programmatically.

In this section