BitLab Backend is a Spring Boot–based execution service that allows users to:
- 🔐 Register & Login
- 🧠 Submit Verilog, VHDL, or QNX C code
- ⚙️ Execute simulations or cross-compiled programs
- 📦 Retrieve logs and waveform files (VCD)
- 🖥 Run QNX programs on a remote VM via SSH
This backend integrates system-level scripting with modern REST APIs.
Frontend (React/Vite) ↓ Spring Boot REST API ↓ ExecutionService ↓ Shell Scripts ↓ • Verilog (Icarus Verilog) • VHDL (GHDL) • QNX (Windows QNX Toolchain + SSH VM)
---
# 📁 Project Structure
src/main/java/com/example/backend │ ├── config/ │ └── CorsConfig.java │ ├── controller/ │ ├── AuthController.java │ └── ExecutionController.java │ ├── dto/ │ ├── AuthRequest.java │ ├── ExecutionRequest.java │ └── ExecutionResponse.java │ ├── entity/ │ └── User.java │ ├── repository/ │ └── UserRepository.java │ ├── service/ │ ├── AuthService.java │ └── ExecutionService.java │ ├── util/ │ └── ShellExecutor.java │ └── BackendApplication.java
Scripts:
scripts/ ├── run_verilog.sh ├── run_vhdl.sh └── run_qnx.sh
---
# 🔐 Authentication Module
## Register
POST /api/auth/register
Request:
```json
{
"email": "user@example.com",
"password": "1234"
}
POST /api/auth/login
Returns simple success/failure message.
I didnt use JWT tokenization, just a simulation for testing purpose
POST /api/execute
Request Body:
{
"language": "verilog | vhdl | qnx",
"designCode": "...",
"testbenchCode": "..."
}Response:
{
"status": "success",
"logs": "execution logs here",
"vcdBase64": "base64 encoded waveform"
}Script: run_verilog.sh
Flow:
- Copy files to
$HOME/verilog - Compile using
iverilog - Run using
vvp - Generate
demo.vcd - Return logs
- Encode VCD as Base64
Requirements:
- iverilog
- vvp
Script: run_vhdl.sh
Flow:
- Copy files to
$HOME/vhdl - Analyze with
ghdl -a - Elaborate with
ghdl -e - Run simulation
- Generate
demo.vcd - Return logs + VCD
Requirements:
- ghdl
Script: run_qnx.sh
Flow:
- Replace Windows Momentics
Demo.c - Call QNX toolchain via
cmd.exe - Build project using
make - SCP binary to QNX VM
- SSH execute program
- Capture output safely with timeout
Environment Requirements:
- QNX SDP installed (Windows)
- VMware QNX target
- SSH enabled
- WSL/Linux environment
- SCP + SSH access to VM
ShellExecutor.execute(script, args...)
- Uses
ProcessBuilder - Redirects stderr to stdout
- Captures full output
- Waits for process completion
- Returns logs
PostgreSQL via Spring Data JPA
application.properties:
spring.datasource.url=...
spring.datasource.username=...
spring.datasource.password=...
spring.jpa.hibernate.ddl-auto=updateEntity:
User
- id
- email (unique)
- password
- createdAt
Allows:
http://localhost:5173
✔ Timeout limits
✔ Log truncation
✔ Workspace isolation using UUID
✔ Controlled file writes
✔ Limited simulation time
mvn clean install
mvn spring-boot:runServer runs on:
http://localhost:8080
Built as part of BitLab — a browser-based hardware & embedded execution platform.