# PyRV32I **Repository Path**: q77190858/PyRV32I ## Basic Information - **Project Name**: PyRV32I - **Description**: 一个用python实现的risc-v rv32i 模拟器 - **Primary Language**: Python - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 0 - **Created**: 2021-10-28 - **Last Updated**: 2024-06-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # PyRV32I 模拟器 RISC-V RV32I指令集模拟器(Python实现) ## 特点: 1. 使用python模拟实现`risc-v rv32i`指令集 2. 32位地址空间,动态分配内存 3. x0-x31 共32个寄存器 4. 可直接运行由`riscv32-unknown-linux-gnu-gcc`编译出的bin文件 5. 支持大端(big-endian)、小端(little-endia)模式 6. 模拟五级流水线`IF`->`ID`->`EX`->`MEM`->`WB` 7. 模拟`UART`映射到0x13000000内存,支持串口输出 8. 目前只有m态 ## 指令实现: | **分类** | **指令** | **数目** | | | -------------- | :----------------------------------------------------------- | -------- | ------ | | 算术和逻辑运算 | LUI/AUIPC
ADDI/SLTI/SLTIU/ADD/SUB/SLT/SLTU
SLLI/SRLI/SRAI/SLL/SRL/SRA
ANDI/ORI/XORI/AND/OR/XOR | 21 | 实现 | | 控制 | JAL/JALR
BEQ/BNE/BLT/BGE/BLTU/BGEU | 8 | 实现 | | 数据传输 | LB/LH/LW/LBU/LHU
SB/SH/SW | 8 | 实现 | | 其他 | FENCE/ECALL/EBREAK | 3 | 待实现 | | 总计 | 40 | | | ## 交叉编译方法: ```shell # mul.s -> mul.o riscv32-unknown-linux-gnu-gcc -nostdlib -c -o mul.o mul.s # mul.o -> mul.elf riscv32-unknown-linux-gnu-ld -nostdlib -Ttext=0x80000000 -o mul.elf mul.o # mul.elf -> mul.dis riscv32-unknown-linux-gnu-objdump -D mul.elf > mul.dis # mul.elf -> mul.bin riscv32-unknown-linux-gnu-objcopy -O binary mul.elf mul.bin ``` ## 待增加特性: 1. 运行汇编指令文件 2. 运行文本格式字节码文件 3. 实现`ECALL`/`EBREAK`指令 4. 实现`CSR`指令、`CSR`寄存器、异常中断处理、3种特权态和切换