CXXRTL virtual interfaces

I”ve been using CXXRTL a few years now to create cycle accurate hardware mockups like with Verilator, in the process, a few virtual devices got ported over to CXXRTL blackboxes from a library that did the same virtualization for GHDL (ghdlex) the asynchronous way.

The goal is mainly to be able to put a hardware mockup into the test loop, simulating key presses/uart inputs, etc. or even tunnel through packets of whatever sort.

Are there people interested in collaborating on some kind of library that makes such tasks a no-brainer for ‘pure’ hardware developers (not wanting to touch C++)?

What I got so far:

  • Unix pipe to FIFO/device I/O (virtual UARTs, etc.)
  • Virtual framebuffers to simulate TFT/LCD screens
  • Virtual bus (backdoor access to registers from the network)
  • Virtual flash memory bare bone backends
  • Various interfacing backends (TFT emulators, let aside SPI/I2C etc.)

Currently, this runs synchronously to the main loop driving the CXXRTL steps, however there appears to be the need for a better scheduler in order to model transactions that take a few simulation steps to complete, or the option to run fully as an asynchronous thread.

I’d be interested in hearing more ideas on use cases you might come up with.