#extension #embeddable #vector #risc-v #eeric #rv64i #mfdv

nightly eeric-core

一个易于嵌入的具有MFDV扩展的RV64I核心

2个版本

0.1.2 2023年11月2日
0.1.0 2023年10月29日

#59#embeddable


用于 eeric-interpreter

MIT 许可证

355KB
11K SLoC

eeric

易于嵌入的RISC-V核心

概述

eeric是一个支持Zicsr、M、F、D和V扩展的RV64I核心,主要用于WASM编译,尽管它也可以与任何cdylib目标一起工作。它作为一个抽象的后端机器,需要一个前端编译器或解释器(参见libs/eeric-interpreter)。

示例

如以下所示,RISCV Vector Spec示例中的矢量化memcpy算法在eeric_core中表示

use eeric_core::prelude::*;

fn main() {
    let mut core = RvCore::with_instructions(vec![
        I::Vsetvli(F::Vsetvli {
            rd: T0,
            rs1: A2,
            vtypei: 0b_1_1_000_011,
        }),
        I::Vlv {
            eew: 8,
            data: F::Vl {
                vd: 0,
                rs1: A1,
                vm: false,
            },
        },
        I::Add(F::R {
            rd: A1,
            rs1: A1,
            rs2: T0,
        }),
        I::Sub(F::R {
            rd: A2,
            rs1: A2,
            rs2: T0,
        }),
        I::Vsv {
            eew: 8,
            data: F::Vs {
                vs3: 0,
                rs1: A3,
                vm: false,
            },
        },
        I::Add(F::R {
            rd: A3,
            rs1: A3,
            rs2: T0,
        }),
        I::Bne(F::S {
            rs1: A2,
            rs2: ZERO,
            imm12: -24,
        }),
        I::Jalr(F::I {
            rd: ZERO,
            rs1: RA,
            imm12: 0,
        }),
    ]);

    for machine_state in core.run() {
        println!("{:?}", machine_state);
    }
}

依赖关系

~2.5MB
~56K SLoC