例如,我想为没有FPGA的交互式游戏运行模拟:https://github.com/fabioperez/space-invaders-vhdl,这样:
http://www.nand2tetris.org/会这样做,但会使用简化的自定义教育语言。
VHDL textio
的{{1}}和read(input
有点接近但不完全:
write(output
等待换行符,我们想要一些可以检测的是键盘键是否被按下read(input
:需要一些方法来刷新数据,以确保将模拟显示器的渲染器获取它当然,我不需要用VHDL做任何事情:我只需要一种与其他程序同步与VHDL通信的最小方式,然后我就可以做到这一点。在C中用SDL显示。
还问:https://github.com/tgingold/ghdl/issues/92
严肃的应用:在硬件CPU仿真之上运行交互式Linux内核+ BusyBox,例如: https://github.com/lowRISC/lowrisc-chip(使用verilator)该项目目前仅使用功能模拟器进行交互式模拟(读取ISA程序集并模拟其高级功能),并且仅进行非交互式Verilog硬件单元测试。
答案 0 :(得分:6)
Verilator 是此应用程序的完美解决方案。
它将Verilog模拟循环暴露给C ++(并将Verilog转换为C ++),允许您设置输入,并从C ++获取输出。
请参阅文档中的“连接到C ++”示例:http://www.veripool.org/projects/verilator/wiki/Manual-verilator
所以你可以在没有任何IPC的情况下将其插入SDL / ncurses /等。
对于独立于模拟器的解决方案,可能值得研究VHDL(VHPI)/ Verilog(DPI)的外语API,如上所述in this comment,但是很少有如何使用的示例那些,你将不得不担心IPC。
最小可运行示例:https://github.com/cirosantilli/rtl-cheat/tree/4e3289704ae5e2aa64170cbca756a3d46bbfa19d/interactive
在Verilator + SDL中实现nand2tetris的相关项目可在以下位置找到:https://hackaday.io/project/160865-nand2tetris-in-verilog-part3-verilator-and-sdl2
答案 1 :(得分:3)
Connectal将在实际CPU上运行的软件连接到FPGA或模拟器上的RTL(BSV,可以链接到VHDL和Verilog)。 BSV免费用于学术和研究用途以及开源项目。在任何情况下,Connectal都是开源的,模拟器连接的软件使用SystemVerilog DPI,您可以在项目中使用它而不使用BSV。
Connectal有一个显示FGPA /模拟器输出的示例。它使用Qt在模拟时显示在计算机显示器上。从FPGA直接显示在HDMI显示器上。
用Verilog或VHDL模拟的CPU往往太慢而无法进行交互式使用,但我已将使用qemu模拟的CPU连接到verilator或FPGA上的设备或加速器。 qemu的表现相当不错。我认为它适用于您的目的。
我添加了一个插件FgpaOps API,以便模拟器或FPGA可以处理CPU加载/存储指令:
struct FpgaOps {
uint64_t (*read)(hwaddr addr);
void (*write)(hwaddr addr, uint64_t value);
void (*close)(void);
void *(*alloc_mem)(size_t size);
};
就我而言,我使用connectal来实现FpgaOps
插件。此代码在hw / riscv下,但不是特定于riscv,因此它可以与qemu支持的任何处理器体系结构一起使用。
答案 2 :(得分:0)
只要您愿意模拟像 UART 这样的真实硬件接口,就不需要任何太聪明或定制的东西来与您的 Sim 交互。
我的 TTL CPU 的 Verilog 模拟包括一个(合理)准确的 UM245R UART 模型,并且 UART 支持通过 verilog 文件接口的交互式 IO。 一个文件用于输入,另一个用于输出;双向。
我使用它与模拟硬件进行交互,以便我可以开发软件并通过自动化测试对其进行测试,而不必弄乱硬件。 我什至在模拟硬件上运行 CHIP8 游戏,通过将控制代码从 UART 发送回图形终端来绘制 CHIP8 GUI。
UART 在这里...
https://github.com/Johnlon/spam-1/blob/master/verilog/uart/um245r.v
有时间我会写一篇文章。