FPGA Workbench Pro - Professional FPGA Development for VS Code

A comprehensive, professional-grade VS Code extension for FPGA development supporting Verilog, SystemVerilog, and VHDL. Built with 30+ years of industry best practices.
🚀 Features
Complete FPGA Development Workflow
- Multi-Toolchain Support: Xilinx Vivado/ISE, Intel Quartus, Lattice Diamond/Radiant, Open-source (Yosys/nextpnr)
- Advanced Synthesis & Implementation: Full control over synthesis, place-and-route, and bitstream generation
- Integrated Simulation: Support for IVerilog, Verilator, ModelSim, Xsim, and GHDL
- Waveform Viewing: Seamless integration with GTKWave, ModelSim, and Vivado
- Constraint Management: Visual XDC/SDC/PCF constraint editing and validation
- Timing Analysis: Real-time timing reports with slack analysis
- Resource Utilization: Live utilization charts for LUTs, FFs, BRAM, DSP
- Power Analysis: Detailed power consumption reports
- Device Programming: One-click FPGA programming with multiple programmer support
Professional Development Environment
- Project Explorer: Organized view of design sources, constraints, simulation files, and IP cores
- Design Hierarchy: Visual representation of module hierarchy
- Smart Constraint Templates: Auto-generated constraint files for 15+ popular dev boards
- Multi-Board Support: Pre-configured profiles for Xilinx, Lattice, Intel, and Gowin FPGAs
- Build Automation: Parallel build jobs with intelligent dependency management
- Real-time Linting: Verilator/Slang integration for instant syntax checking
- Error Navigation: Click-through from build errors to source code
Supported Development Boards
| Vendor |
Board |
FPGA |
Clock |
| Digilent |
Nexys A7-100T/50T |
Artix-7 XC7A100T/50T |
100 MHz |
| Digilent |
Arty A7-35T/100T |
Artix-7 XC7A35TI/100T |
100 MHz |
| Digilent |
Basys 3 |
Artix-7 XC7A35T |
100 MHz |
| Digilent |
Zybo Z7-20 |
Zynq-7000 XC7Z020 |
125 MHz |
| Digilent |
PYNQ-Z1 |
Zynq-7000 XC7Z020 |
125 MHz |
| Lattice |
ECP5 Evaluation |
ECP5 LFE5UM-45F |
100 MHz |
| Colorlight |
i5 |
ECP5 LFE5U-25F |
25 MHz |
| Sipeed |
Tang Nano 9K |
GW1NR-9 |
27 MHz |
| Sipeed |
Tang Nano 20K |
GW2AR-18 |
27 MHz |
| 1BitSquared |
iCEBreaker |
iCE40UP5K |
12 MHz |
| Lattice |
iCE40-HX8K |
iCE40HX8K |
100 MHz |
📦 Installation
From VSIX
code --install-extension haiphan-fpga-workbench-1.0.0.vsix
From Source
git clone https://github.com/HaiPhan285/fpga_extension.git
cd fpga_extension
npm install
npm run compile
npm run package
code --install-extension haiphan-fpga-workbench-1.0.0.vsix
🎯 Quick Start
The extension supports multiple toolchains. Choose one:
# The extension can auto-download and configure
# Or manually: https://github.com/HaiPhan285/FPGA_Compiler-
Xilinx Vivado
# Set path in settings: fpgaExtension.vivadoPath
# Example: /opt/Xilinx/Vivado/2023.2
Intel Quartus
# Set path in settings: fpgaExtension.quartusPath
2. Create New Project
- Open Command Palette (
Ctrl+Shift+P)
- Run:
FPGA: Create New FPGA Project
- Select target board
- Choose toolchain
- Add your Verilog/SystemVerilog/VHDL sources
- Set top module:
fpgaExtension.topModule
- Select target board:
fpgaExtension.board
- Add constraints (XDC/SDC/PCF)
4. Build & Program
- Synthesize: Click "Run Synthesis" in FPGA sidebar
- Implement: Click "Place & Route"
- Generate Bitstream: Click "Generate Bitstream"
- Program Device: Click "Program Device"
⚙️ Configuration
Essential Settings
{
"fpgaExtension.toolchain": "opensource",
"fpgaExtension.board": "nexys_a7_100",
"fpgaExtension.topModule": "top",
"fpgaExtension.clockFrequency": 100.0,
"fpgaExtension.simulationTool": "iverilog",
"fpgaExtension.waveformViewer": "gtkwave"
}
Advanced Settings
{
"fpgaExtension.optimizationGoal": "balanced",
"fpgaExtension.parallelJobs": 4,
"fpgaExtension.enableTimingAnalysis": true,
"fpgaExtension.enablePowerAnalysis": true,
"fpgaExtension.keepIntermediateFiles": true,
"fpgaExtension.lintOnSave": true
}
🎓 Usage Guide
Running Simulations
- Create testbench file (e.g.,
design_tb.v)
- Open Command Palette →
FPGA: Run Simulation
- Select testbench
- View results in output channel
- Click
FPGA: View Waveform to open GTKWave
Managing Constraints
- Navigate to Constraints panel
- Click
+ to add timing constraint
- Specify clock signal and frequency
- Run
FPGA: Validate Constraints
- View timing reports after implementation
Viewing Reports
Reports panel shows:
- Utilization: LUT, FF, BRAM, DSP usage
- Timing: WNS, TNS, clock domain analysis
- Power: Total/dynamic/static power breakdown
- DRC: Design rule violations
Device Programming
Supported programmers:
- openFPGALoader (default)
- Vivado Hardware Manager
- Quartus Programmer
- iceprog (iCE40)
- ecpprog (ECP5)
🏗️ Architecture
This extension integrates with your existing FPGA toolchain and wraps:
- Build Scripts:
setup.sh, doctor.sh, build.sh
- Synthesis Tools: Yosys, Vivado, Quartus
- P&R Tools: nextpnr, Vivado, Quartus
- Programmers: openFPGALoader, Vivado, others
Base repository: https://github.com/HaiPhan285/FPGA_Compiler-
🎯 Goals
Professional FPGA development environment providing:
- Download & configure toolchains
- Verify build environment
- Run synthesis with optimization control
- Implement design (place & route)
- Generate bitstream
- Program target device
- Run simulations & view waveforms
- Analyze timing & power
- Manage constraints
- View detailed reports
📋 Command Reference
Build Commands
| Command |
Keyboard |
Description |
FPGA: Run Synthesis |
- |
Synthesize HDL to netlist |
FPGA: Place & Route |
- |
Implement design on FPGA |
FPGA: Generate Bitstream |
Ctrl+Shift+B |
Create programming file |
FPGA: Program Device |
- |
Flash bitstream to FPGA |
FPGA: Clean Build |
- |
Remove build artifacts |
Simulation Commands
| Command |
Keyboard |
Description |
FPGA: Run Simulation |
F5 |
Execute testbench |
FPGA: View Waveform |
- |
Open waveform viewer |
FPGA: Stop Simulation |
Shift+F5 |
Terminate sim |
Analysis Commands
| Command |
Description |
FPGA: Analyze Timing |
Generate timing reports |
FPGA: View Utilization |
Show resource usage |
FPGA: Power Analysis |
Estimate power consumption |
FPGA: Validate Constraints |
Check constraint files |
Project Commands
| Command |
Description |
FPGA: Create New Project |
Project wizard |
FPGA: Select Target Board |
Choose dev board |
FPGA: Add IP Core |
Integrate IP |
FPGA: Export Project |
Export for sharing |
🎨 UI Overview
The extension provides a professional sidebar in VS Code:
FPGA Activity Bar
- Dashboard: Quick actions and status
- Project Explorer: Design files organization
- Design Hierarchy: Module tree view
- Constraints: Timing/pin assignments
- Reports: Build results and analysis
🔧 Troubleshooting
Common Issues
Toolchain not found
Solution: Set correct path in settings
- fpgaExtension.vivadoPath
- fpgaExtension.quartusPath
- fpgaExtension.repoPath (for open-source)
Synthesis fails
Check:
1. All source files are listed
2. Top module is correctly specified
3. No syntax errors (enable linting)
4. Include paths are set correctly
Timing not met
Actions:
1. Review timing report for critical paths
2. Adjust clock frequency constraints
3. Change optimization goal to "speed"
4. Add pipeline stages to critical logic
Bitstream generation fails
Check:
1. Constraint file includes all I/O pins
2. Pin assignments match board layout
3. No DRC violations
4. Sufficient FPGA resources
🤝 Contributing
Contributions welcome! This extension is designed to support the FPGA development community.
Development Setup
git clone https://github.com/HaiPhan285/fpga_extension.git
cd fpga_extension
npm install
code .
Press F5 to launch extension development host.
Adding New Boards
Edit src/boardManager.ts:
your_board: {
id: "your_board",
name: "Your Board Name",
vendor: "Vendor",
family: "FPGA Family",
part: "part-number",
// ... other properties
}
Implement toolchain interface in synthesis/implementation handlers.
📄 License
MIT License - See LICENSE file
🙏 Acknowledgments
- Built on top of FPGA_Compiler-
- Inspired by ESP-IDF VS Code extension
- Uses open-source tools: Yosys, nextpnr, openFPGALoader
- Community contributions and feedback
📞 Support
🗺️ Roadmap
- [ ] Hardware-in-the-loop debugging
- [ ] ChipScope/SignalTap integration
- [ ] Block design visual editor
- [ ] IP catalog browser
- [ ] Multi-project workspace support
- [ ] Cloud build support
- [ ] RISC-V soft-core templates
- [ ] Automatic clock domain crossing checks
Built by FPGA engineers, for FPGA engineers
With 30 years of industry experience distilled into one extension