Troubleshooting

Running tmrx_mark at the Wrong Time

Symptom: FFs are not detected; voters are not inserted correctly.

Solution: Run tmrx_mark after techmap but before dfflibmap and abc:

techmap
tmrx_mark          # <-- Correct position
read_liberty -lib cells.lib
dfflibmap -liberty cells.lib
abc -liberty cells.lib

Forgetting to Re-run Technology Mapping After TMR

Symptom: Voter modules remain as abstract cells in the final netlist.

Solution: Run techmap, dfflibmap, and abc again after tmrx:

tmrx -c config.toml
opt -noff
techmap
dfflibmap -liberty cells.lib
abc -liberty cells.lib

Clock/Reset Not Recognized

Symptom: Clock or reset signals are being triplicated unexpectedly.

Solution: Ensure port names match the configuration:

clock_port_names = ["clk_i", "clk", "clock"]
reset_port_names = ["rst_ni", "rst_n", "reset_n", "rstn"]

Alternatively, use wire attributes:

(* tmrx_clk_port *) input wire my_unusual_clock_name,

Specific Module Config Not Applied

Symptom: Configuration for a specific instance is ignored.

Solution: Ensure the name includes $ and matches the uniquified name exactly:

# Wrong: no $, treated as module config
[module.submodule]

# Correct: includes hierarchy path
[specific_module."submodule$top.u_sub"]

Check Yosys output for the exact uniquified module names.

Group Configuration Not Taking Effect

Symptom: Module assigned to group but group settings not applied.

Solution: Check the scoped table names. Use [group.<name>] and assign membership via groups = ["<name>"] inside [module.<name>] or [specific_module."<name>"]:

[module.my_module]
groups = ["critical"]

# Wrong
[group_critical]

# Correct
[group.critical]

Error Signal Not Connected

Symptom: Error output remains unconnected or constant.

Solution: Ensure the error sink is marked and is an output port:

(* tmrx_error_sink *)
output wire err_o   // Must be output, not input or wire

Broken Netlist Output

Symptom: Generated netlist has connectivity issues or does not simulate correctly.

TMRX is still in development. If you encounter broken netlists:

  1. Try simplifying your design.

  2. Check if the issue is specific to certain TMR modes.

  3. Report the issue at https://github.com/Xelef2000/TMRX/issues with a minimal reproducing example.