Config group reference¶
The packaged Hydra config tree is dau_build/config. Each subdirectory is a
Hydra config group; selecting an option from a group is a CLI override of
the form <group>=<option-path>. Options are addressed by their path relative
to the group directory, so a file at config/task/tasks/sim/simulate.yaml is
selected with task=tasks/sim/simulate.
The base config config/base.yaml declares the groups and their defaults:
defaults:
- _self_
- optional task: null
- optional step: null
- optional platform: null
- optional board: null
- optional backend: null
- optional driver: null
- optional memory: null
- optional simulator: null
- optional spec: null
- optional plan: null
- optional design: null
Every group is optional … null: nothing is selected unless
you override it. A run selects task= to populate model, and may add spec=, board=, backend=, driver=, memory=,
simulator=, platform=, host= and plan=.
Each option file begins with a # @package <key> directive that places its
content under that top-level key. Tasks and steps use # @package model; the
other groups use their singular key (# @package board, and so on).
Group |
|
Instantiated model |
Selects |
|---|---|---|---|
|
|
a |
The unit of work to run. |
|
|
|
The build spec a task works on. |
|
|
|
A board’s build-config view. |
|
|
a |
The synthesis engine. |
|
|
|
The host driver (OS + transport) in the resolved config. |
|
|
|
The build-time staging buffers in the resolved config. |
|
|
a |
The simulator (used by |
|
|
|
The full physical platform definition. |
|
|
a |
The hardware-session plan ( |
|
|
|
The build host’s source checkout roots (none packaged). |
|
|
(none packaged) |
Reserved; registered by extension packages. |
task¶
Packaged options (task=<path>):
tasks/build/build-shell-project
tasks/build/build-vivado-artifacts
tasks/build/overlay-build
tasks/build/render-cores
tasks/build/synthesize
tasks/build/synthesize-cores
tasks/hardware/hardware-plan
tasks/sim/simulate
tasks/spec/build
tasks/spec/inspect
tasks/spec/validate
tasks/stage/stage-shell
tasks/stage/stage-vivado-overlay
tasks/stage/stage-vivado-project
tasks/validate/validate-vivado-artifacts
Fields per task are in the task catalog.
spec¶
spec=specs/identity composes dau_build.build_spec.BuildSpec into the spec
key; tasks read it through spec: ${oc.select:spec,null}, and it is the only
way a task receives a spec. Your own spec is an option in a --config-dir
overlay (<dir>/spec/specs/<name>.yaml with the _target_ and the fields).
The packaged specs/identity option has base_dir: examples/identity, so it
resolves only when run from the dau-build repository root.
board¶
board=boards/example/probe composes BoardConfig into the board key.
Options live under boards/<vendor>/<board>. dau-build packages no real
board; add yours from a search-path package. The only packaged option is the
fictional example, boards/example/probe:
_target_: dau_build.build_config.BoardConfig
name: probe
platform: vivado-xdma
shell: xdma-ddr
BoardConfig fields: name (str), platform (str), shell (str).
backend¶
backend=backends/<name> composes a synthesis engine into the backend key.
SynthesizeTask uses it as the engine (default backends/vivado); other
tasks use its name and invocation as the resolved-config backend label.
Option |
Model |
Fields |
Description |
|---|---|---|---|
|
|
|
Vivado handoff (FPGA bitstream flow). |
|
|
|
Open-source synthesis; runs in CI. |
|
|
|
No engine; a dry-run label. |
The engines are polymorphic SynthesisEngine models, so every field is a
Hydra override: backend=backends/yosys backend.frontend=slang, or
+backend.<field>=.... YosysEngine.frontend is verilog (read_verilog -sv)
or slang (yosys-slang); yosys sets the executable. The
architecture explanation describes how the
two engines differ.
driver and memory¶
driver=drivers/<name> and memory=memories/<name> compose a DriverConfig
(os, transport) and a MemoryConfig (host_staging_bytes,
device_staging_bytes) into the resolved build config, taking precedence
over the spec-derived defaults (drivers/host = host/xdma;
memories/default = zeros). They appear in the resolved-config step and are
the axes a board or platform selects. Override them like any group, for
example memory=memories/default memory.host_staging_bytes=4096.
simulator¶
simulator=simulators/<name> composes a Simulator model into the
simulator key; SimulateTask uses it (default simulators/svparser).
Option |
Model |
Fields |
|---|---|---|
|
|
|
|
|
|
|
|
|
Like the engines, simulators are polymorphic models configured through
overrides: simulator=simulators/verilator simulator.profile=<name>, or
+simulator.<field>=....
platform¶
platform=platforms/example/probe composes
dau_build.platforms.PlatformDefinition into the platform key. Options live
under platforms/<vendor>/<board>.
dau-build ships exactly one, platforms/example/probe, and it is a fiction:
internally consistent, plausible for a Kintex-7 x8 XDMA card, measured on
nothing. It is the template you copy and the board dau-build’s own tests
build against. Never build a real design with it. Your board belongs in your
package, added through the Hydra search path with no dau-build source change.
A real board’s option is the authoritative definition of that board: part
number, program method, ResourceBudget, storage_tiers, and a HostLink
whose XdmaPersonality.params are its proven bring-up XCI parameters, quoted
verbatim and in order, so the generated Vivado CONFIG.* block matches the
known-good core byte for byte.
PlatformDefinition is made of:
ResourceBudget(lut,ff,bram36,dsp).storage_tiers, each aStorageTier(name,technology,capacity_bytes,access,persistent,bandwidth_bytes_per_s,mig_prj,constraints_xdc);platform.memoryselects the active shared tier.HostLink(interface,pcie_lanes,xdma_personality,expected_link_width,expected_link_speed_gts).The board-level
constraints_xdc: pin constraint text the shell project generators emit behind their banner.lane_placements: the GT lane swizzle, applied as a pre-opt_designimplementation hook. Empty means the board needs none.placeholders: names of hardware-derived values not yet measured on the board.require_measuredrejects placeholder boards for real builds while config-only generation stays open.host_access(HostAccess:pci_id,endpoint_bdf,rescan_bdfs,runtime_pm_patterns,runtime_pm_executable,jtag_cable): the bench host’s measured access facts. A board option leaves this unset; a host option extending the board (platforms/<vendor>/<board>-<host>, composed from a--config-dir) sets it.HardwarePlanTaskcomposes its toolchain config from these whenplatform=is selected; explicit task fields take precedence.
The shell project requests (MmJobShellRequest, MmDdrJobShellRequest) take
a platform and default to dpv1; part defaults from the platform.
host¶
host=hosts/<name> composes dau_build.build_config.HostConfig: where the
build host keeps its source checkouts (dau_core_root, dau_driver_root,
dau_utils_root). dau-build packages no host options, because checkout
layouts are site-specific; register them from a search-path package or a
--config-dir overlay. The stage tasks and hardware plans interpolate their
checkout roots from the composed host, and a direct <field>=... override
always takes precedence.
plan¶
plan=plans/<name> composes a HardwarePlan model into the plan key;
HardwarePlanTask delegates to it. Each plan owns its required fields, so
pydantic enforces them rather than a runtime check.
Option |
Model |
Extra fields |
|---|---|---|
|
|
none |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
none |
|
|
none |
|
|
none |
Configure a plan with plan.<field>=…; see
Program a bitstream on a board.
design¶
Declared in the defaults (optional design: null) but no option is packaged
in dau-build. It is the reserved group for higher-level design and tile
compositions registered by extension packages on the search path.
callable¶
callable is a plain key in base.yaml, not a group. callable: /model tells
ccflow’s cfg_run which registry entry to run. Override it with
callable=/<entry>. The evaluator (GraphEvaluator + MemoryCacheEvaluator
through MultiEvaluator) is wired by cli.model in the same file.