Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Time-based Redundancy Modules #26

Open
wants to merge 21 commits into
base: master
Choose a base branch
from

Conversation

Lynx005F
Copy link
Contributor

Depends on Voter Macros (#25)

Various modules to make any (pipelined) combinatorial processes redundant in a time-based fashion e.g. sending the same operation for multiple cycles and comparing results. Redundancy can be switched off at runtime.

  • time-based TMR (error correction)
  • time-based DMR (error detection)
  • Modules to retry operations that failed (can be used with time-based DMR or parallel DMR)
    • Fast variant resulting in out-of-orderness
    • Slower variant keeping operations in order
  • Controller module that can safely switch into and out off time-based redundant modes
  • Lockable Round-Robin Arbitrator so out-of-order Pipelines can be used with time-based redundancy

Testing

The integrated testbenches include:

  • The modules are tested for throughput, correct handshake behaviour under stalls.
  • Error injection via XORs are done in betwen the modules to check the following behaviour:
    • Correct output under handshake failure (single bit flip in a single cycle)
    • Correct output under ID failure (any number of bitflips in a single cycle)
    • Corect output under Datapath failure (any number of bitflips in a single cycle)

@micprog micprog self-requested a review June 18, 2024 10:04
@Lynx005F Lynx005F force-pushed the itemm/time_based_redundancy_rebase branch from 9350525 to 7641570 Compare July 8, 2024 10:09
@Lynx005F Lynx005F marked this pull request as draft July 15, 2024 06:50
@Lynx005F
Copy link
Contributor Author

I am checking a potential issue with the lockable rr arbiter.

@Lynx005F
Copy link
Contributor Author

The issue with the Lockable RR-Arbiter turned out to be because of an incorrect parameterization when instantiating it. I added an assertio to cover this case.

@Lynx005F Lynx005F marked this pull request as ready for review July 15, 2024 07:06
@Lynx005F Lynx005F force-pushed the itemm/time_based_redundancy_rebase branch 2 times, most recently from bf9dcbf to 77372c0 Compare July 15, 2024 10:20
Maurus Item added 16 commits July 15, 2024 12:22
- time-based TMR module and TB.
- time-based DMR module and TB.
- time-based Retry module and tb and combined DMR/Retry TB.
- Lockable RR-Arbiter and combined TMR/Lock-RR TB and DMR/Retry/Lock-RR TB.
- TBs test throughput
- TB have an additional governing initial statement
- Shared TB functionality moved to header file
time-based TMR can now send data early if correct (2 cycles if good 3 if bad) or
be smaller / have better critical path (3 cycles always).
- Added module headers explaining how to use them and who to contact for questions.
- Named all generate blocks.
- Testbench Typos
- Fixed a bug where result could be output twice on error.
- Fixed a bug that causes fault_detected_o to trigger to often.
- Made fault detected properly depend on valid_i.
- Made all redundant signals end on _v or _ov for don't touch in synthesis
- Made all default signals end on _b
@Lynx005F Lynx005F force-pushed the itemm/time_based_redundancy_rebase branch from 77372c0 to d1bc374 Compare July 15, 2024 10:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant