A modern, web-based Verilog simulator that empowers students and professionals to write, compile, and simulate Verilog code directly in the browser—no local toolchain required. Ideal for education, prototyping, and collaborative development.
OpenNet replaces heavyweight, licensed EDA tools with a lightweight, accessible web alternative. Key highlights:
- Browser-Based: Write and run Verilog and SystemVerilog testbenches in your browser
- Zero Setup: No local installation—just open the URL and start coding
- Scalable Backend: Containerized FastAPI service running Icarus Verilog for compilation and simulation
- Interactive UI: Real-time syntax checking, waveform viewer, and code validation inspired by VS Code
| Layer | Technology |
|---|---|
| Frontend | Next.js 14, React, TypeScript, Tailwind CSS, Monaco Editor |
| Backend | Python 3.11, FastAPI, Icarus Verilog (iverilog, vvp), Docker |
| Deployment | Vercel (frontend), Render (backend) |
| Visualization | Custom waveform viewer based on VCD parsing |
.
├── frontend/ # Next.js frontend application
│ ├── src/ # Source code
│ ├── app/ # Next.js app directory
│ └── public/ # Static assets
├── backend/ # FastAPI backend service
│ ├── app/ # Application code
│ └── test/ # Test suite
├── Dockerfile # Backend container configuration
└── render.yaml # Render deployment configuration
Access the live demo at: https://open-net.vercel.app
- Node.js v18+
- Python 3.11
- Docker (optional)
- Icarus Verilog (iverilog)
git clone https://github.com/yomnahisham/opennet.git
cd opennetcd frontend
npm install
npm run devcd backend
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txt
python -m uvicorn app.main:app --reload --port 8001docker build -t opennet-backend backend/
docker run -p 8001:8001 opennet-backend- Create Design: Write your Verilog/SystemVerilog code in the editor
- Add Testbench: Author or generate a testbench module
- Select Top Modules: Choose DUT and testbench in the dropdown
- Run Simulation: Hit Run and watch the console & waveform viewer
- Analyze Results: Inspect signals, debug errors, and iterate
module example_tb;
reg clk = 0;
reg rst_n;
wire [3:0] q;
example dut (
.clk(clk),
.rst_n(rst_n),
.count(q)
);
// Clock generator
always #5 clk = ~clk;
initial begin
rst_n = 0;
$dumpfile("waveform.vcd");
$dumpvars(0, example_tb);
#20 rst_n = 1;
#100;
$finish;
end
endmoduleNote:- It is important that you include the following to be able to actually see the resulting waveform.
$dumpfile("output_waveform_name.vcd");
$dumpvars(0, your_testbench_name);Contributions are welcome! Please feel free to submit an Pull Request.
This project is licensed under the MIT License - see the LICENSE file for details.
- Icarus Verilog for the Verilog simulation engine
- Monaco Editor for the code editor
- FastAPI for the backend framework
- Next.js for the frontend framework