A sequence is a pattern of boolean expressions spread across clock cycles. A boolean expression is a one-cycle sequence, delays glue expressions across time, repetition compresses repeats, and composition combines patterns.
One model explains every operator below. A ranged delay or repetition forks a match thread per legal choice, and the sequence matches when any thread reaches its end.
Layer | Operator | Job |
|---|---|---|
Boolean |
| One-cycle base case |
Delay |
| Glue across ticks; ranges fork threads |
Repetition |
| Compress repeats and scattered counts |
Composition |
| Combine patterns from a common start |
Qualifiers |
| Constrain windows, prune threads |
Property |
| The assertion built on sequences |
Lesson | Idea |
|---|---|
Fixed, ranged, and unbounded delays with the thread model and zero-delay fusion. | |
Consecutive runs plus goto and non-consecutive counting on one shared stimulus. | |
Joining patterns, pinning lengths, invariants, and containment. | |
Pruning thread explosion and reusing endpoints as events. |
Every lesson below ends with a bench that runs real assertions on Verilator 5.048 with planted bugs. Verilator checks single-thread sequences correctly: fixed delays, a range at the very end, written-out repetition, throughout over a fixed window. Sequences that fork and then continue (a range or goto followed by more, repetition or and in a consequent) compiled and missed some or all planted failures, while covers on the same sequences counted correctly. The benches show the compact form's count beside a form that works, and What the Open Simulators Run lists every case.
Two, one per satisfied thread. A ranged operator never picks one interpretation; every thread that completes is a match.