Score each branch
BMC blocks compare the received pair with each expected pair. The resulting 2-bit Hamming distance becomes the local cost for a candidate transition.
Mark Sui
UC San Diego · ECE 111 Final Project · Digital Design
Recovering a bitstream through a noisy channel, one survivor path at a time. An 8-state decoder built around branch metrics, add-compare-select logic, and banked traceback memory.
Implemented a recursive systematic convolutional encoder and modular decoder, then evaluated recovery under periodic, randomized, and burst error injection.
01 / Architecture
The encoder produces two bits per input bit: the original bit and a parity bit derived from the current input and encoder state. The channel wrapper injects errors before the decoder scores candidate paths.
BMC blocks compare the received pair with each expected pair. The resulting 2-bit Hamming distance becomes the local cost for a candidate transition.
Eight ACS instances add branch costs to 8-bit path metrics. Validity flags gate candidates; the lower-cost valid path survives. Equal costs select path 0.
Four memory banks retain the eight survivor decisions per step. Two traceback units traverse decisions, with display memories staging decoded output.
Input: both paths valid; prior costs 5, 7; branch costs 2, 1.
Output: path_cost = 7, selection = 0, valid_o = 1.
Why: candidate costs are 5 + 2 = 7 and 7 + 1 = 8, so path 0 survives. This illustrates the combinational rule in ACS.sv.
02 / Design decisions
The final project uses a recursive systematic encoder. Its symbol mapping must match the decoder’s branch metrics; substituting the nonrecursive homework encoder changes that mapping.
The decoder checks the high bit of all eight stored path costs. When all are set, it masks the next ACS costs to seven bits as part of the metric update.
Synchronous memory reads and delayed bank-selection signals coordinate writes, reverse reads, and traceback. Output history is captured after the testbench’s startup delay.
03 / Verification & results
The end-to-end testbench keeps input and output histories and compares 256 decoded bits after a startup delay. The Part 2 report records 22 experiments spanning periodic errors (2a), randomized errors (2b), and increasingly dense patterns (2c–2e).
| Case | Pattern | Injected errors | Output errors |
|---|---|---|---|
| 2a1 | 01 | 31 | 0 |
| 2a6 | 01010101 | 32 | 30 |
| 2b2 | 10 | 37 | 3 |
| 2c3 | 010101 | 48 | 0 |
| 2c | 01010101 | 64 | 81 |
| 2e | 11111111 | 64 | 44 |
Engineering takeaway: error placement matters alongside error count. These experiments include both complete recovery and patterns that drive the decoder onto an incorrect path. Injected channel-bit errors and decoded output-bit errors are separate measurements.
These are recorded coursework simulation results, not a new benchmark run or a general error-rate guarantee. The published evidence covers RTL and simulation; FPGA utilization, timing closure, and board measurements are not reported here.
04 / Project evidence
Encoder, BMC, ACS, memories, decoder integration, and simulation captures.
Error-injection variants and recorded outcomes, including failure cases.
Final-part-1 and Final-part-2 contain this project. The homework folders are separate exercises.
Explore my background or get in touch about RTL, ASIC, FPGA, and software engineering opportunities.