Add your own design

Step 1: Initialize the directory

Place yourself in your design’s directory, or any other directory.

Run the init command of Odatix to create configuration files.

odatix init

Step 2: Architecture folder

Create a folder named after your design in the odatix_userconfig/architectures folder.

Step 3: Architecture settings file

  • Add a _settings.yml file to your newly created folder and fill it with one of the templates below

_setting.yml
 1---
 2rtl_path: "examples/alu_sv"
 3
 4top_level_file: "alu_top.sv" # The top level path relative to rtl_path
 5top_level_module: "alu_top"
 6
 7clock_signal: "i_clk"
 8reset_signal: "i_rst"
 9
10# copy a file into synthesis directory?
11file_copy_enable: No
12file_copy_source: "/dev/null"
13file_copy_dest: "/dev/null"
14
15# delimiters for parameter files
16use_parameters: Yes
17start_delimiter: "#("
18stop_delimiter: ")("
19
20# target-specific options
21xc7s25-csga225-1:
22   fmax_synthesis:
23      lower_bound: 100
24      upper_bound: 450
25   custom_freq_synthesis:
26      # list definition
27      list: [50, 100]
28xc7a100t-csg324-1:
29   fmax_synthesis:
30      lower_bound: 50
31      upper_bound: 800
32   custom_freq_synthesis:
33      # range definition
34      lower_bound: 200
35      upper_bound: 1800
36      step: 200
37...
_setting.yml
 1---
 2design_path: "examples/alu_chisel"
 3design_path_whitelist: [] # path/pattern of what should be copied from design_path
 4design_path_blacklist: [] # path/pattern of what should NOT be copied from design_path
 5
 6# generate the rtl (from chisel for example)
 7generate_rtl: Yes
 8generate_command: "sbt 'runMain ALUTop --o=rtl'" # command for rtl generation
 9generate_output: "rtl" # path of the generated rtl
10
11# generated design settings
12top_level_file: "ALUTop.sv" # The top level path relative to generate_output
13top_level_module: "ALUTop"
14clock_signal: "clock"
15reset_signal: "reset"
16
17# copy a file into synthesis directory?
18file_copy_enable: No
19file_copy_source: "/dev/null"
20file_copy_dest: "/dev/null"
21
22# delimiters for parameter files
23use_parameters: Yes
24param_target_file: "src/main/scala/ALUTop.scala"
25start_delimiter: "new ALUTop("
26stop_delimiter: ")"
27
28# target-specific options
29xc7s25-csga225-1:
30   fmax_synthesis:
31      lower_bound: 100
32      upper_bound: 450
33   custom_freq_synthesis:
34      # list definition
35      list: [50, 100]
36xc7a100t-csg324-1:
37   fmax_synthesis:
38      lower_bound: 50
39      upper_bound: 800
40   custom_freq_synthesis:
41      # range definition
42      lower_bound: 200
43      upper_bound: 1800
44      step: 200
45...
  • Edit the file, so it matches your design source files directory, top level filename, module name, and clock signal name.

  • The rtl/design path can be both absolute or relative to the directory from where you start Odatix.

  • Set start_delimiter and stop_delimiter, so it matches the delimiters of the parameter section in your top level source file.

  • Add target-specific bounds for the binary search in fmax_synthesis.

  • Add a list of frequencies, a range (lower and upper bounds and a step) or a combination of both in custom_freq_synthesis for custom frequency synthesis.

  • A documentation of the keys for _settings.yml files can be found in section Settings

Step 4: Parameter files

Add parameter files to the folder. Parameter files should match the parameter section of your top-level source file with the desired values.

For instance, with the following Verilog module

alu_top.sv
 1module alu_top #(
 2   parameter BITS = 8
 3)(
 4   input  wire            i_clk,
 5   input  wire            i_rst,
 6   input  wire      [4:0] i_sel_op,
 7   input  wire [BITS-1:0] i_op_a,
 8   input  wire [BITS-1:0] i_op_b,
 9   output wire [BITS-1:0] o_res
10);

One of the parameter file could contain:

16bits.txt
1  parameter BITS = 16

Another parameter file could contain:

32bits.txt
1  parameter BITS = 32

You can create as many parameter files as you wish, with different parameter values. There is no limit to the number of parameters in parameter files. The only constraint is the strict correspondence between the contents of the parameter files and the parameter section of the top-level in terms of numbers and names.

Step 5: Run your design configurations!

Follow the same steps as in section Fmax synthesis for Fmax synthesis or Custom Frequency synthesis for custom frequency synthesis.:
  • Edit odatix_userconfig/fmax_synthesis_settings.yml to add your design’s configurations

  • Edit odatix_userconfig/custom_freq_synthesis_settings.yml to add your design’s configurations

  • Select the target device or technology in the yaml file corresponding to your EDA tool.

  • Run the selected designs

  • Visualize and explore the results