with only a software background you basically need to start over.
1. Digital electronics
- you need to understand what a flop is
- boolean logic and k-maps
- metastability
- memory
- finite state machines
- timing diagrams (setup/hold, propagation delay)
- synchronous vs asynchronous design
- combinational vs sequential logic
- clock domains and clock domain crossing
Resources:
- "Digital Design and Computer Architecture" by Harris & Harris
- nandland basics
2. Verilog / Hardware Description Languages
- modules, ports, signals
- continuous assignment vs procedural assignment
- blocking vs non-blocking assignment
- sensitivity lists
- RTL coding discipline (synthesizable subset)
- testbenches and simulation
- structural vs behavioral descriptions
Resources:
- "FPGA Prototyping by Verilog Examples" by Pong Chu
- nandland Verilog tutorials
- HDLBits (online practice problems)
3. Computer architecture
- datapaths and control paths
- registers, ALUs, multiplexers
- pipelines and hazards
- microcoded vs hardwired control
- instruction sets and decoding
- caches and memory hierarchies
- buses and interconnects
Resources:
- "Computer Organization and Design" by Patterson & Hennessy
- "Computer Architecture: A Quantitative Approach" by Hennessy & Patterson
4. FPGA architecture
- LUTs, flip-flops, carry chains
- block RAM and distributed RAM
- DSP slices and multipliers
- clocking resources (MMCMs, PLLs)
- IO blocks and SERDES
- resource utilization and constraints
Resources:
- Vendor user guides (Xilinx)
- nandland FPGA
- FPGA4Fun tutorials
5. Toolchain & workflow
- synthesis -> place & route -> bitstream
- constraint files (timing, pin mapping, clock definitions)
- timing closure and static timing analysis
- simulation before synthesis
- debugging with waveform viewers and ILAs
6. System design
- finite state machine design methodology
- streaming vs memory-mapped architectures
- interfacing with peripherals (UART, SPI, I2C, Ethernet)
- DMA and buffering
- soft CPUs (MicroBlaze, Nios II, RISC-V)
- system buses (AXI, AHB, Wishbone)
Resources:
- Xilinx AXI IP examples in Vivado
7. Hardware/software co-design
- partitioning work between FPGA logic and embedded CPU
- hardware accelerators for software bottlenecks
- co-simulation and HW/SW debug
- real-time constraints
Resources:
- Zynq SoC tutorials (Xilinx)
- “Designing Embedded Systems with FPGA” by Peter Athanas et al.
8. Mindset shift
- hardware is parallel, not sequential
- time is in cycles
- resources are physical
what’s the fastest way i can teach an intern with only DS&A knowledge everything about FPGAs and computer architecture? resources? hands on projects?