6 个版本

0.3.3 2019年5月10日
0.3.2 2019年5月8日
0.3.1 2019年4月1日
0.3.0 2019年3月29日
0.1.0 2019年3月28日

模拟 中排名 #160

每月 21 次下载
用于 narvie-cli

GPL-3.0 许可证

655KB
5K SLoC

Coq 4K SLoC // 0.2% comments Verilog 542 SLoC // 0.2% comments C++ 421 SLoC // 0.2% comments Rust 119 SLoC INI 14 SLoC Python 8 SLoC // 0.7% comments

>narvie

Build Status

A Read Eval Print Loop (REPL) for RISC-V instructions. Only UNIX systems have been tested. narvie stands for native RISC-V instruction evaluator.

安装

下载预构建的 narvie 二进制文件(ubuntu linuxmac OS)或使用 cargo 构建

  1. 下载 Rustup 并安装 Rust.
  2. 安装 verilator。推荐使用版本 3.916。
  3. 运行 $ cargo install narvie-cli

运行

narvie 可以作为模拟运行,或者通过将一个运行在 FPGA 上的 narvie 处理器(运行在计算机上)连接到计算机。

一旦 cli 运行,请将 RISC-V 指令输入到提示符中。例如:nopli t0, 1678addi t0, t0, 1narvie 将将这些指令编译成二进制文件,运行它们并显示新的微架构状态(目前只显示寄存器的值)。完成时,使用 ctrl-c 退出 narvie

模拟

  • 要开始模拟,请尝试运行 $ narvie-cli --simulate
在 FPGA 上运行
  • 通过USB将处理器连接到您的计算机后,运行以下命令:$ narvie-cli ADDRESS --baud 115200,其中ADDRESS是处理器连接的串行端口。将115200替换为处理器配置使用的波特率。

构建

要构建,需要verilator。要综合Verilog并将其烧录到FPGA,./progMDP使用yosysarachne-pnricestorm。但是,也可以使用其他工具进行综合。

  • 下载Rustup并安装Rust。(https://rust-lang.net.cn/tools/install
  • 克隆此存储库。
  • 运行cargo build以构建
  • processor目录中,运行./progMDP以生成的字节流并烧录Lattice Mobile Development Board。

文档

演示

此演示展示了在模拟中运行的RISC-V REPL。

RISCV REPL demo

许可

由于本项目从其他来源借用GPL许可的代码,因此它也受GPL许可。

致谢

该RISC-V处理器是基于Ryan Voo @rjlv2开发的Verilog模块实现的。对处理器所做的唯一修改是与打破流水线和指令取指令机制相关,以允许逐条执行指令。

Verilog UART模块可以在https://github.com/FPGAwars/FPGA-peripherals找到。

Verilator UART模拟测试平台代码(testbench/uartsim.htestbench/uartsim.c)是基于http://zipcpu.com/blog/2017/06/21/looking-at-verilator.html实现的。

Rust的最小版本

narvie将仅官方支持当前的稳定版Rust。


在研究中引用narvie

Harry Sarson、Ryan Voo和Phillip Stanley-Marbell。"使用Narvie原生评估RISC-V指令"。海报,《欧洲系统会议(EuroSys'19)》论文集。德国德累斯顿,2019年3月。

BibTeX

    @inproceedings{Sarson:2019,
    author = {Harry Sarson and Ryan Voo and Phillip Stanley-Marbell},
    title = {Evaluating RISC-V Instructions Natively with Narvie},
    booktitle = {Proceedings of the  European Conference on Systems},
    series = {EuroSys'19},
    year = {2019},
    location = {Dresden, Germany},
    numpages = {2},
    publisher = {ACM},
    address = {New York, NY, USA},
    }

无运行时依赖