Introduction
ChipVerify Pro is an all-in-one web-based platform for learning Verilog development, offering simulation, synthesis, timing analysis, and verification tools—directly in your browser.
What Can You Do?
Simulate
Run simulations with Icarus Verilog or Verilator, with full waveform support and real-time logs
Synthesize
Technology-mapped synthesis using Yosys + SkyWater 130nm PDK
Analyze Timing
Static Timing Analysis with OpenSTA and custom SDC constraints
Lint & Share
Lint checking with Verilator, and share code snippets with others
Quick Start
Get started in 5 minutes with this simple workflow:
-
Write Your Code
Use the built-in Monaco editor or load templates from the "Code Templates" button.
-
Add a Testbench
Create a file with "test" or "tb" in the name for automatic testbench detection.
-
Run Simulation
Click the "Simulate" tab → Enable waveform → Click "Run Simulation"
-
View Waveforms
Press Alt + W or click the waveform button to view signals.
-
Synthesize (Optional)
Go to "Synth" tab → Select template → Run synthesis to get gate-level netlist and PPA metrics.
Interface Overview
Layout
The interface is divided into three main areas:
| Area | Purpose | Toggle |
|---|---|---|
| Left Sidebar | File explorer, simulation/synthesis controls | Alt + B |
| Center Editor | Monaco code editor with syntax highlighting | Alt + E |
| Right Panels | Console output, results, analysis views | Click minimize icons |
Left Sidebar Tabs
- Files - Manage Verilog files, add/delete/rename
- Simulate - Configure and run simulations
- Synth - Synthesis settings and templates
- Lint - Code quality checks
- STA - Static timing analysis settings
Right Panel Tabs
- Console - Simulation/synthesis output
- Lint - Verilator lint results
- Netlist - Synthesized gate-level Verilog
- Diagram - Visual schematic view
- Tree - Design hierarchy
- PPA - Power, Performance, Area metrics
- STA - Timing analysis reports
File Management
Adding Files
Click the + button in the Files panel or drag & drop .v/.sv files into the browser.
.v/.sv- Design files (synthesis + simulation)*test*.v- Testbenches (simulation only).sdc- Timing constraints (STA only)
Organizing Files
File Grouping:
- Select multiple files (hold Ctrl and click)
- Right-click → "Create Group"
- Name your group (e.g., "ALU", "Control Logic")
Reordering: Drag and drop files to reorder them.
File Actions
- Rename: Right-click file → Rename
- Delete: Right-click file → Delete
- Download: Save/Load button → Download options
Code Editor
Features
- Syntax Highlighting - Verilog support
- Auto-completion - Built-in IntelliSense
- Multi-file Editing - Tab-based interface
- Auto-save - Saves changes every 30 seconds
Keyboard Shortcuts in Editor
| Action | Shortcut |
|---|---|
| Save Project | Ctrl + Shift + S |
| Find | Ctrl + F |
| Replace | Ctrl + H |
| Comment Line | Ctrl + / |
Using Templates
Click "Code Templates" button in Files panel to load pre-built modules:
- Basic gates (AND, OR, XOR)
- Flip-flops and registers
- Counters and FSMs
- Multiplexers
- Testbench template
Simulation
Choosing a Simulator
ChipVerify Pro supports two industry-standard simulators:
| Simulator | Type | Best For |
|---|---|---|
| Icarus Verilog | Event-driven | Standard testbenches, learning, quick simulations |
| Verilator | Cycle-accurate | High-performance, large designs, faster execution |
Select your preferred simulator from the dropdown in the "Simulate" tab.
Running a Simulation
-
Prepare Your Design
Ensure you have at least one design file (.v) and one testbench file (with "test" or "tb" in name).
-
Configure Settings
Go to "Simulate" tab in left sidebar:
- Simulator: Choose Icarus Verilog or Verilator
- Compilation Args:
-g2005 -Wall(Icarus) or--timing(Verilator) - Compile Order: Drag files to set compilation order (if module dependencies matter)
- Enable "Dump Waveform (VCD)" for signal viewing
-
Run Simulation
Click "Run Simulation" or press Alt + R
-
View Real-Time Logs
Watch compilation and simulation output stream in real-time in the Console panel. You'll see clear section headers for compilation vs simulation phases.
-
View Results
Console output appears in right panel. Green checkmark = success!
Compilation Order Control
For designs with module dependencies, you can control the exact order files are compiled:
- Look for the "Compile Order" panel in the Simulate tab
- Drag and drop files to reorder them (files with dependencies should come after their modules)
- Click the "X" button to remove files you don't want to compile
- Click "+ Add Files" to add files back or include new ones
- The compile order is saved with your project
Clearing Simulation Cache
ChipVerify caches simulation results to speed up repeated runs. If you've modified code but still see old results:
- Go to the "Simulate" tab
- Click the yellow "Clear Simulation Cache" button
- Wait for confirmation showing how many cache entries were cleared
- Run your simulation again for fresh results
Testbench Requirements
`timescale 1ns/1ps
module tb;
// Your testbench signals
reg clk, rst;
// Clock generation
initial begin
clk = 0;
forever #5 clk = ~clk;
end
// Stimulus
initial begin
rst = 1;
#20 rst = 0;
// Your test cases here
#1000 $finish; // End simulation
end
// VCD dump for waveform
initial begin
$dumpfile("dump.vcd");
$dumpvars(0, tb);
end
endmodule
- Missing
$finish- simulation runs forever - No
$dumpvars- no waveform data - Syntax errors - check console for compilation errors
Synthesis
What is Synthesis?
Synthesis converts your RTL (Register Transfer Level) Verilog code into a gate-level netlist using actual hardware cells from the SkyWater 130nm PDK.
Synthesis Workflow
-
Select Template
Choose a synthesis strategy in the "Synth" tab:
- Technology-Mapped (Default) - Uses SkyWater PDK liberty files
- Generic - No technology library (faster, less accurate)
- Speed-Optimized - Maximize frequency (uses more area)
- Area-Optimized - Minimize chip size (slower)
- Fast Synthesis - Quick results, minimal optimization
-
Load Template
Click "Load" to populate Yosys commands in the editor
-
Configure Options
- Process Corner: Choose TT (typical), FF (fast), or SS (slow)
- PPA Analysis: Enable for power/timing/area metrics
- Generate Schematic: Create visual diagram
-
Run Synthesis
Click "Run Synthesis" button
-
View Results
- Console: Yosys output log
- Netlist: Gate-level Verilog code
- Diagram: Visual schematic (pan/zoom enabled)
- Tree: Design hierarchy
- PPA: Metrics (if enabled)
Process Corners Explained
| Corner | Conditions | Use Case |
|---|---|---|
| TT (Typical) | 25°C, 1.8V | Normal operating conditions |
| FF (Fast) | -40°C, 1.95V | Best-case performance, highest leakage |
| SS (Slow) | 125°C, 1.65V | Worst-case timing, lowest power |
Verilator Lint
What is Lint Checking?
Lint checking analyzes your Verilog code for common mistakes, coding style issues, and potential bugs before simulation or synthesis.
Running Lint
- Go to "Lint" tab in left sidebar
- Optional: Add Verilator arguments (e.g.,
-Wall --lint-only) - Click "Run Verilator Lint"
- View results in the "Lint" panel on right
What Lint Checks For
- Unused signals - Variables declared but never used
- Undriven nets - Wires without drivers
- Multiple drivers - Signals driven from multiple sources
- Width mismatches - Assignment size issues
- Combinational loops - Feedback without registers
- Case statement issues - Missing defaults, overlapping cases
- Blocking vs non-blocking - Improper assignment usage
Interpreting Results
%Warning-UNUSED: design.v:15: Signal is not used: 'temp_data'
%Warning-WIDTH: design.v:23: Operator ASSIGN expects 8 bits, got 4
Each warning shows:
- Type: UNUSED, WIDTH, UNDRIVEN, etc.
- Location: File name and line number
- Description: What's wrong
Static Timing Analysis
What is STA?
STA (Static Timing Analysis) verifies that your design meets timing requirements at a given clock frequency. It analyzes all paths through the design without running simulation.
STA Workflow
-
Run Synthesis First
⚠️ REQUIRED: STA analyzes the gate-level netlist from synthesis
-
Configure STA Settings
In "STA" tab:
- Clock Period: Target clock period in nanoseconds (e.g., 10.0 = 100 MHz)
- Process Corner: Must match synthesis corner!
-
Edit SDC Constraints (Optional)
Click "Edit Timing Constraints (SDC)" to customize timing requirements
-
Run STA
Click "Run STA Analysis"
-
Analyze Results
View timing report in STA panel:
- Setup Slack: Positive = timing met ✅, Negative = violation ❌
- Hold Slack: Usually passes if setup passes
- Critical Path: Slowest path through design
- Max Frequency: Highest achievable clock speed
Understanding Slack
Setup Slack: +1.234 ns ✅ (TIMING MET)
Hold Slack: +0.089 ns ✅ (TIMING MET)
Critical Path Delay: 8.766 ns
Max Frequency: 114.1 MHz (for 10ns period)
| Slack | Meaning | Action |
|---|---|---|
| Positive (+) | Timing requirement met with margin | ✅ All good! Can increase frequency |
| Negative (-) | Timing violation - data arrives too late | ❌ Reduce frequency or optimize design |
| Near Zero (~0) | Barely meeting timing | ⚠️ Risky - add margin or optimize |
Fixing Timing Violations
- Reduce Clock Frequency - Easiest solution, but slower performance
- Pipeline Design - Add register stages to break long paths
- Use Speed-Optimized Synthesis - Trades area for speed
- Reduce Logic Depth - Simplify combinational logic
- Check FF Corner - Best-case conditions for max performance
Waveform Viewer
Viewing Waveforms
- Enable "Dump Waveform (VCD)" in Simulate tab
- Run simulation successfully
- Press Alt + W or click waveform button
- Waveform viewer opens at bottom of screen
Waveform Controls
- Zoom: Scroll to zoom in/out on timeline
- Pan: Click and drag to move timeline
- Measure: Click two points to measure time difference
- Signal Selection: Click signals to expand/collapse hierarchy
Troubleshooting
Check your testbench has:
initial begin
$dumpfile("dump.vcd");
$dumpvars(0, tb); // Dump all signals in testbench
end
PPA Analysis
What is PPA?
Power, Performance, Area - the three key metrics for evaluating chip designs.
Enabling PPA
- Go to "Synth" tab
- Check "Run PPA Analysis"
- Run synthesis with a template that uses Liberty files
- View results in "PPA" panel
Metrics Explained
📏 Area Analysis
- Total Cells: Number of standard cells used
- Chip Area: Physical silicon area (µm²)
- Cell Breakdown: Which gates are used most
⚡ Performance (Timing)
- Critical Path Delay: Longest path through design (ns)
- Max Frequency: Highest achievable clock speed (MHz)
- Logic Levels: Depth of combinational logic
🔋 Power Estimation
- Dynamic Power: Power when switching (active)
- Leakage Power: Power when idle (static)
- Total Power: Sum of dynamic + leakage
- Speed-Optimized: Higher frequency, more area, more power
- Area-Optimized: Smaller chip, slower, less power
SDC Constraints
What are SDC Files?
SDC (Synopsys Design Constraints) files define timing requirements, clock specifications, and exceptions for Static Timing Analysis.
Opening SDC Editor
- Go to STA tab → Click "Edit Timing Constraints (SDC)"
- Or press Alt + C
Common SDC Commands
1. Create Clock
# Define a 100 MHz clock (10ns period)
create_clock -name clk -period 10.0 [get_ports clk]
2. Input/Output Delays
# Data arrives 2ns after clock edge
set_input_delay -clock clk 2.0 [all_inputs]
# Data must be stable 2ns before clock edge
set_output_delay -clock clk 2.0 [all_outputs]
3. Clock Uncertainty (Jitter + Skew)
# Add 100ps margin for clock jitter
set_clock_uncertainty 0.1 [get_clocks clk]
4. False Paths (Ignore Timing)
# Reset is asynchronous, don't check timing
set_false_path -from [get_ports reset]
5. Multicycle Paths
# Multiplication can take 2 clock cycles
set_multicycle_path 2 -setup -from [get_pins mult/*]
set_multicycle_path 1 -hold -from [get_pins mult/*]
SDC Template Examples
Load templates from the SDC editor dropdown:
- Basic: Single clock domain
- Multi-Clock: Multiple clock domains with crossing constraints
- Advanced: Complex constraints with exceptions
How SDC Changes STA Results
| SDC Change | Effect on Slack |
|---|---|
| Increase clock period (slower) | More positive (easier to meet) |
| Decrease clock period (faster) | More negative (harder to meet) |
| Add clock uncertainty | Worse (less margin) |
| Add false paths | Better (ignores slow paths) |
| Increase I/O delays | Worse (less time available) |
Projects
Saving Projects
- Sign in with your Google account (required)
- Click "Save" button or press Ctrl + Shift + S
- Enter a project name (e.g., "alu_design")
- Project saved to your account ✅
Loading Projects
- Click "Save/Load" → "Browse Projects"
- See list of your projects and example projects
- Click a project to load it
What Gets Saved
- ✅ All Verilog files (.v, .sv, .sdc)
- ✅ Project description
- ✅ File organization (groups, order)
- ✅ File metadata
- ❌ Simulation results (temporary)
- ❌ Waveform data (too large)
Downloading Projects
Click "Save/Load" → "Download as ZIP" to get all files locally:
- All Verilog files
- README.txt with project description
- VCD waveform (if available)
- STA report (if run)
- Synthesized netlist (if available)
Keyboard Shortcuts
| Action | Shortcut |
|---|---|
| New Project | Alt + N |
| Save Project | Ctrl + Shift + S |
| Toggle Files Sidebar | Alt + B |
| Toggle Waveform | Alt + W |
| Run Simulation | Alt + R |
| Run Lint | Alt + L |
| Search Console | Ctrl + F |
| Show Templates | Alt + T |
| Show SDC Editor | Alt + C |
| Toggle Editor | Alt + E |
| Show Shortcuts | Alt + / |
Code Templates
Verilog Templates
Click "Code Templates" button to load pre-built modules:
Basic Logic
- AND Gate - 2-input AND gate
- 2:1 Multiplexer - Parameterized mux
Sequential Logic
- D Flip-Flop - Positive edge-triggered with reset
- 4-bit Counter - Up counter with reset
State Machines
- Simple FSM - Template for state machine design
Testbenches
- Testbench Template - Complete testbench skeleton with clock generation and VCD dump
Synthesis Templates
In Synth tab, load Yosys command templates:
- Technology-Mapped - Full synthesis with SkyWater PDK
- Generic - No library, faster results
- Speed-Optimized - Maximize frequency
- Area-Optimized - Minimize chip size
- Fast Synthesis - Quick with minimal optimization
Troubleshooting
Simulation Issues
❌ "No testbench found"
Solution: Ensure filename contains "test" or "tb" (e.g., "counter_tb.v")
❌ Compilation errors
- Check syntax errors in console output
- Ensure all modules are defined
- Verify port connections match module definitions
❌ Simulation hangs (never finishes)
Solution: Add $finish; in your testbench initial block
❌ No waveform data
Solution: Add to testbench:
initial begin
$dumpfile("dump.vcd");
$dumpvars(0, tb);
end
❌ Seeing old simulation results after code changes
Solution: Cache may not have been invalidated. Click "Clear Simulation Cache" button in Simulate tab.
❌ Verilator simulation fails but Icarus works
Solution: Verilator is more strict and requires synthesizable code. Check for:
- Delays in non-testbench code (remove
#delayfrom design files) - Non-synthesizable constructs (initial blocks in modules)
- Width mismatches (Verilator is very strict about bit widths)
❌ Module not found / undefined reference errors
Solution: Files may be compiled in wrong order. Go to Simulate tab → Compile Order panel, and drag files so that module definitions come before modules that use them.
Synthesis Issues
❌ "Failed to generate netlist"
- Check Yosys template for errors
- Ensure design has no syntax errors
- Try "Generic" template first for debugging
❌ "No PPA data available"
Solution: PPA requires Liberty files - use "Technology-Mapped" template and enable "Run PPA Analysis"
STA Issues
❌ "No synthesized netlist found"
Solution: Run synthesis BEFORE STA. STA analyzes the gate-level netlist.
❌ "Corner mismatch"
Solution: Set STA corner to match synthesis corner (e.g., both TT, both FF, etc.)
❌ All slack values are zero
Solution: SDC constraints missing. Either create constraints.sdc file or let STA auto-generate them.
File Management Issues
❌ Can't delete last file
By design: At least one file is required. Add a new file before deleting.
❌ File disappeared after reload
Solution: Files are not saved until you save the project. Click "Save" before closing browser.
Click the feedback button (star icon) in the header to report problems!
Frequently Asked Questions
General
Q: Do I need to install anything?
A: No! Everything runs in the browser. Tools run on our servers.
Q: Is my code private?
A: Yes. Signed-in users' projects are private. Anonymous usage is also supported.
Q: What's the file size limit?
A: Individual files should be under 1MB. Total project size under 10MB.
Features
Q: What synthesis tool is used?
A: Yosys with SkyWater 130nm PDK (open-source ASIC flow)
Q: What simulators are supported?
A: Two simulators are available:
- Icarus Verilog (iverilog) - Event-driven simulation, great for learning
- Verilator - Cycle-accurate, high-performance simulation for larger designs
You can choose between them in the Simulate tab.
Q: Can I use my own PDK?
A: Currently only SkyWater 130nm is supported.
Q: Is this suitable for tapeout?
A: ChipVerify Pro is primarily for learning and prototyping. For production tapeout, use commercial EDA tools with your foundry's PDK.
Technical
Q: Why do different synthesis templates give different STA results?
A: Different optimization strategies produce different gate-level implementations. Speed-optimized uses faster cells (more area), area-optimized uses smaller cells (slower).
Q: What's the difference between simulation and synthesis?
A: Simulation tests functionality (does it work?). Synthesis maps to hardware gates (can it be built?).
Q: Why does STA require synthesis first?
A: STA analyzes timing of the gate-level netlist (actual hardware cells). RTL code doesn't have gate delays.
Q: Can I download my synthesized netlist?
A: Yes! Click "Save/Load" → "Download as ZIP" - includes netlist, reports, and all files.
Accounts & Projects
Q: Why should I sign in?
A: Signing in enables:
- Save/load projects from any device
- Auto-save (no lost work)
- Access to synthesis, STA, and advanced features
Q: Can I share projects with others?
A: Yes! Use the "Share" button to create a shareable link that anyone can access. Shared code is read-only, but viewers can fork it to make their own editable copy. You can also use "Download as ZIP" to share files manually.
Q: How long are projects stored?
A: Projects are stored indefinitely for active accounts. Inactive for 1+ year may be archived.
Q: Why am I seeing old simulation results after changing my code?
A: Results are cached for performance. The cache should auto-invalidate when you change code, but if you're seeing stale results, click the "Clear Simulation Cache" button in the Simulate tab to force a fresh run.
Q: What's the difference between Icarus Verilog and Verilator?
A: Icarus Verilog is event-driven (traditional simulation) and works great for learning and standard testbenches. Verilator is cycle-accurate and much faster for large designs, but requires clocked testbenches. Try both and see which works better for your design!
Q: How do I control the order files are compiled?
A: In the Simulate tab, you'll see a "Compile Order" panel. Drag and drop files to reorder them. This is important when you have module dependencies - modules must be compiled before they're used.