JUICE VM

简介

juice vm诞生于2020年以实现可运行最新kernel主线的RISC-V最小虚拟机为目标而诞生的设计之初秉承着可以在 RAM 只有 百KB 级别的平台上运行,不引入除了c99标准外的第三方依赖。

juice vm按照gcc所支持的C99标准编写无第三方库依赖浅显易懂且具有方便移植的特性可快速移植到多种主流 MCU 及支持c环境的所有平台上

juice vm去掉注释后展开所有的宏的代码行数仅12523行,仅36104字,足够的小巧。

Juice Vm的特点

  • 资源占用极低。

  • 跨平台、可快速移植。

Juice Vm的组成

  • 指令集RV64IMASU.
  • 支持了M-mode,U-mode,S-mode下的mtime.
  • 超级精简的uart只有读和写两个外设寄存器.
  • 超级精简的MMU SV39支持.
  • 支持RISC-V官方标准的异常和中断托管

Juice Vm的地址空间分布

虚拟机版本号 起始地址 大小(字节) 寄存器名称 说明 所用宏名称
c21682d3 0x80000000 0x12C00000 SRAM 内部存储 RV_CPU_SIM_RAM_START_ADDR RV_CPU_SIM_RAM_SIZE
c21682d3 0x92C00000 0x1 UART_WRITE uart发送寄存器 pdev_uart0_write_addr
c21682d3 0x92C00001 0x1 UART_READ uart接收寄存器 pdev_uart0_read_addr
c21682d3 0x92C00002 0x1 UART_STATE uart状态寄存器 pdev_uart0_state_addr pdev_uart0_free_state pdev_uart0_readbusy_state
c21682d3 0x92C00003 0x8 mtime mtime当前计数寄存器 pdev_mtime_mtime_addr
c21682d3 0x92c00007 0x8 mtimecmp mtime当前比较寄存器 pdev_mtime_mtimecmp_addr

Juice Vm下的软件移植进度

  • 已经支持了c语言编程。
  • 已完成freertos移植。
  • 已完成mbedtls移植。
  • 已完成mmu sv39测试。
  • 已完成mtime测试。
  • 已完成opensbi移植 传送门
  • 已完成rt-thread移植感谢@熊大和@Andy Chen的支持 传送门
  • 已完成kernel主线5.0.0 传送门
  • 上传Juice Vm下的GCC toolchain 传送门
  • 适配 GDB 通用接口支持 TODO
  • 适配 RT-SMART TODO

快速上手

Description
The juice virtual machine was born in 2020, with the goal of realizing the smallest virtual machine of RISC-V that can run the latest kernel mainline. At the beginning of the design, it runs on a platform with only 100 KB of RAM, which does not exceed the number of C99. Three-party dependence.
Readme 20 MiB
Languages
Markdown 100%