Configuration Reference
TMR Mode Options
| Option | Type | Default | Description |
|---|---|---|---|
|
String |
|
The TMR strategy to apply |
"None"-
No TMR applied to this module.
"LogicTMR"-
Triplicate internal logic with voters after FFs.
"FullModuleTMR"-
Create wrapper with three module instances.
Voter Options
| Option | Type | Default | Description |
|---|---|---|---|
|
String |
|
Voter implementation to use |
The "Default" voter implements a simple majority function using AND/OR gates:
-
Output:
y = (a & b) | (a & c) | (b & c)(majority function) -
Error:
err = (a ^ b) | (b ^ c)(any mismatch detected)
Logic TMR Options
Configure in a [<scope>.logic] block such as [global.logic] or [module.alu.logic].
| Option | Type | Default | Description |
|---|---|---|---|
|
Bool |
|
Insert voters after flip-flop outputs |
|
Bool |
|
Insert voters before flip-flop inputs (planned, not yet implemented) |
|
List |
|
Explicitly treat these cells as flip-flops |
|
List |
|
Add cells without replacing inherited |
|
List |
|
Remove cells from flip-flop treatment |
|
String |
|
Suffix for first redundant path |
|
String |
|
Suffix for second redundant path |
|
String |
|
Suffix for third redundant path |
Full Module TMR Options
Configure in a [<scope>.full_module] block such as [global.full_module] or [group.critical.full_module].
| Option | Type | Default | Description |
|---|---|---|---|
|
Bool |
|
Insert voters at module inputs |
|
Bool |
|
Insert voters at module outputs |
|
Bool |
|
Allow voters on expanded clock nets |
|
Bool |
|
Allow voters on expanded reset nets |
Port Preservation
| Option | Type | Default | Description |
|---|---|---|---|
|
Bool |
|
Keep original module interface unchanged |
|
Bool |
|
Prevent FullModuleTMR worker-branch uniquification of this module |
- When
preserve_module_ports = true -
-
The module interface remains identical to the original.
-
Input signals are fanned out to all three redundant paths.
-
Output signals pass through voters to produce a single output.
-
Useful for drop-in replacement compatibility.
-
- When
preserve_module_ports = false -
-
Input and output ports are triplicated (with suffixes like
_a,_b,_c). -
Clock and reset ports may be shared or triplicated based on
expand_clock/expand_reset. -
Parent modules must connect to all three port variants.
-
- When
prevent_renaming = true -
-
A
FullModuleTMRparent does not create branch-local renamed copies of this module. -
The same module type is shared across the
_a/_b/_cworker branches. -
This only affects recursive branch uniquification.
-
It does not disable the internal
_tmrx_implclone or the internal wrapper/worker rename steps used by TMRX itself.
-
Clock and Reset Handling
| Option | Type | Default | Description |
|---|---|---|---|
|
List |
|
Names of clock ports |
|
List |
|
Names of reset ports |
|
Bool |
|
Triplicate the clock network |
|
Bool |
|
Triplicate the reset network |
|
Keep |
Clock and reset ports can also be identified using wire attributes (* tmrx_clk_port ) or ( tmrx_rst_port *) instead of name matching.
Flip-Flop Detection
| Option | Type | Default | Description |
|---|---|---|---|
|
List |
|
Cell types to treat as flip-flops (extends auto-detection) |
|
List |
|
Add FF cells without overriding inherited |
|
List |
|
Cell types to exclude from FF treatment |
TMRX automatically detects Yosys built-in FF types. Use these options to fine-tune detection:
[global.logic]
ff_cells = ["sg13g2_dfrbp_1"]
[module.special.logic]
additional_ff_cells = ["MY_CUSTOM_FF"]
excluded_ff_cells = ["sg13g2_dfrbp_1"]
Error Detection Options
| Option | Type | Default | Description |
|---|---|---|---|
|
String |
|
Name of the output port to use as the error sink (alternative to the |
|
Bool |
|
Automatically create a |
See Error Detection for full details on error sink methods and upward propagation.
Wire and Port Attributes
| Attribute | Description |
|---|---|
|
Mark this wire as a clock signal |
|
Mark this wire as a reset signal |
|
Mark this output as the error aggregation point |
|
Module attribute: name of the port to use as the error sink (equivalent to |
|
Module attribute: auto-create |
Reserved Groups
TMRX has built-in reserved groups that are automatically applied:
black_box_module-
Applied when a module has the
blackboxattribute, contains memories (has_memories), or contains processes (has_processes). Default behavior:tmr_mode = "FullModuleTMR". cdc_module-
Intended for Clock Domain Crossing modules. Default behavior:
tmr_mode = "FullModuleTMR".
|
These groups are reserved. The automatic assignment behavior should not be relied upon to be overridden. |