Awesome
⚠️ PROJECT UNDER DEVELOPMENT ⚠️
do not expect good documentation, clean and working code (for now)
Virtual Board for VHDL code simulation
Started in 2022, this project aims to allow VHDL simulation on a "virtual board" (so a FPGA board won't be required), in a more friendly way (so you won't need to look at waveforms again!).
<img src="./assets/final_goal.drawio.png">(It's not an emulator since it does not emulate 100% real hardware)
Quick overview
VHDL Simulation
The VHDL simulation is done via GHDL, which runs a .vpi
module built by g++
. The module interacts with the VHDL simulation via libghdl
shared library.
We can manipulate the simulation signals values via a websocket server, customize board IO pins and also assign signals to those pins, read more about the VPI module here.
UsbPort
One of the goals is also to add compatibility with UsbPort, which is a library that allows manipulating VHDL circuit signals via a Kotlin/Java application. This is done via a HTTP server running alongside the VPI.
Board UI (static)
Since it has a websocket server, it won't be hard to display signals in a "pretty" way to the user.
Here (fpga_static_ui_example) is a quick UI prototype built with HTML+CSS+JS to show what a board interface can look like.
Board UI (dynamic)
The good approach would be to create a UI that reads board.json
and creates a UI with IO signals depending on what pins the config file has. The board should be also customizable via a config file.
Under Development: https://github.com/roby2014/virtual-board-gui
Credits
- GHDL - VHDL 2008/93/87 simulator
- ghdl-cosim - GHDL co-simulation projects using VPI
- seasocks - Simple, small, C++ embeddable webserver with WebSockets support
- nlohmann/json - JSON for Modern C++
- cpp-httplib - A C++ header-only HTTP/HTTPS server and client library
- khttp - Kotlin HTTP requests library