2019-02-05 17:00:24 +08:00
2019-02-05 16:19:46 +08:00
2019-02-05 17:00:24 +08:00
2019-02-05 17:00:24 +08:00
2019-02-05 17:00:24 +08:00

USTCRVSoC

一个用SystemVerilog编写的基于RISC-V的SoC

SoC 结构

Image text

主要部件包括:

1、多主多从总线仲裁器负责接受主接口发来的读写请求根据其地址空间将其路由到相应的从接口

   并在不同主接口同时访问一个从接口时,控制其中优先级高的从接口先进行访问,优先级低的主接口等待。

2、RV32I Core包括两个主接口一个用于取指令一个用于读写数据

3、UART调试器(ISP UART)包括一个主接口。它接收用户从UART发来的命令操控复位等信号或对总线进行读写。

   可以使用UART命令复位整个SoC上传程序或者查看运行时的RAM数据。

4、指令ROM地址空间00000000~00000fffCPU复位后从00000000开始取指令因此若在指令ROM中存放编译好的指令流

   复位后就自动运行其中的程序
5、数据RAM地址空间00010000~00010fff
6、显存RAM地址空间00020000~00020fff一共4096B若VGA信号正确连接到VGA接口则屏幕上能够显示98列*36行=3528个字符
   显存RAM的前3528B对应的ASCII码值就决定了每个字符是什么
7、用户UART暂时只具有发送功能地址空间00030000~00030003向00030000写一个字节相当于把该字节放入发送缓冲区FIFO
   缓冲区大小256B缓冲区的数据会尽快发送。

修改ROM程序

目前我只尝试了将汇编语言汇编成该CPU的目标指令并运行方法是

1、将汇编代码汇编为指令流并存在Verilog ROM中在./ASM目录中运行python文件asm2verilogrom.py具体命令行命令格式见python中的注释。

   推荐使用windows完成这一步因为 ./ASM/riscv32-gnu-toolchain-windows 中提供了编译好的riscv-windows工具链不需要另外配置环境。

2、将生成的.sv文件中的内容复制替换 ./RTL/instr_rom.sv 中的内容。

RTL仿真

请直接使用soc_top_tb.sv文件进行仿真这个仿真是针对整个SoC的因此你可以修改ROM程序后进行仿真观察SoC运行该程序的行为

Description
Languages
SystemVerilog 79%
Assembly 20.9%
Tcl 0.1%