Draft preview. Lessons are being written and reviewed.

Learn to build chips by watching your own code run.

Write Verilog and see it animate. Change a value and watch the circuit respond. Follow a plan built for your role or your interview date. It's free, with no account.

1. Binary, hex and two's complement2. Logic gates and truth tables3. Boolean algebra and De Morgan4. Karnaugh maps5. What a gate is made of: CMOS6. Multiplexers7. Decoders and priority encoders8. Half, full and ripple adders9. Carry look-ahead and prefix adders10. Subtractors, comparators and an ALU11. Barrel shifters and glitches12. Modules, ports and hierarchy13. wire, reg, logic and 4-state values14. assign and always blocks15. Blocking and non-blocking assignments16. Accidental latches17. Parameters and generate18. Your first self-checking testbench19. Reading waveforms like an engineer20. SR and D latches21. The D flip-flop22. Setup and hold: the two promises23. Synchronous and asynchronous resets24. Enables and clock gating25. Shift registers26. LFSRs27. Up, down and loadable counters28. Ring, Johnson and Gray counters29. Divide by 2, 4 and any even number30. Odd division with 50% duty cycle31. Edge detectors and pulse generators32. States, transitions and outputs33. Moore and Mealy machines34. Writing FSMs: encoding and style35. Detecting 1101, with overlap36. Non-overlapping detection37. Traffic light and vending machine38. Debugging and safe FSMs39. Register files40. Using SRAM in RTL41. Synchronous FIFO42. FIFO depth calculation43. Valid/ready handshakes44. Skid buffers45. Multipliers and Booth encoding46. Fixed-point arithmetic47. Pipelining48. Retiming and area-speed trade-offs49. The timing path50. Clock skew and jitter51. Fixing violations52. Constraints, false and multicycle paths53. Metastability and MTBF54. The two-flop synchronizer55. Pulse crossing fast to slow56. Multi-bit transfers and handshakes57. Gray code pointers58. Asynchronous FIFO59. Reset synchronizers and RDC60. What synthesis does to your code61. Lint and code quality62. Low-power RTL63. Arbiters64. Minor project: UART transmitter and receiver65. Minor project: SPI controller66. Major project: small RISC-style CPU67. Industry project: streaming packet engine68. Interview patterns
Each cell is one of 68 lessons. Finish one, and it lights up on your chip.
68lessons
53animations
42bugs to find
37quiz questions
Binary, hex and two's complementLogic gates and truth tablesBoolean algebra and De MorganKarnaugh mapsWhat a gate is made of: CMOSMultiplexersDecoders and priority encodersHalf, full and ripple addersCarry look-ahead and prefix addersSubtractors, comparators and an ALUBarrel shifters and glitchesModules, ports and hierarchywire, reg, logic and 4-state valuesassign and always blocksBlocking and non-blocking assignmentsAccidental latchesParameters and generateYour first self-checking testbenchReading waveforms like an engineerSR and D latchesThe D flip-flopSetup and hold: the two promisesSynchronous and asynchronous resetsEnables and clock gatingShift registersLFSRsUp, down and loadable countersRing, Johnson and Gray countersDivide by 2, 4 and any even numberOdd division with 50% duty cycleEdge detectors and pulse generatorsStates, transitions and outputsMoore and Mealy machinesWriting FSMs: encoding and styleDetecting 1101, with overlapNon-overlapping detectionTraffic light and vending machineDebugging and safe FSMsRegister filesUsing SRAM in RTLSynchronous FIFOFIFO depth calculationValid/ready handshakesSkid buffersMultipliers and Booth encodingFixed-point arithmeticPipeliningRetiming and area-speed trade-offsThe timing pathClock skew and jitterFixing violationsConstraints, false and multicycle pathsMetastability and MTBFThe two-flop synchronizerPulse crossing fast to slowMulti-bit transfers and handshakesGray code pointersAsynchronous FIFOReset synchronizers and RDCWhat synthesis does to your codeLint and code qualityLow-power RTLArbitersMinor project: UART transmitter and receiverMinor project: SPI controllerMajor project: small RISC-style CPUIndustry project: streaming packet engineInterview patterns

A FIFO is a ring. Turn it.

Drag it, change the clocks, and watch the pointers chase each other.

Try one now

Which role do you want?

All 16 courses