题目来源:https://hdlbits.01xz.net/wiki/Cs450/counter_2bc
Branch direction predictors are often structured as tables of counters indexed by the program counter and branch history. Each table entry usually uses two-bits of state because one-bit of state (remember last outcome) does not have enough hysteresis and flips states too easily.
State diagram of a two-bit saturating counter. The four states are Strong/Weak Taken (T)/Not-Taken (NT).
A two-bit state machine that works fairly well is a saturating counter[1], which counts up to 3 (or 2’b11) or down to 0 (or 2’b00) but does not wrap around. A “taken” result increments the counter, while a “not-taken” result decrements the counter. A branch is predicted to be taken when the count is 2 or 3 (or 2’b1x). Adding some hysteresis prevents a flipping of the prediction when a strongly-biased branch occasionally takes a different direction, requiring two increments in the opposite direction before the prediction is fli