使用Rocket chip generator配置和生成RISC-V RTL代码

一、代码同步和环境准备

Rocket chip generator可以生成三种目标代码:高性能时钟周期精确的验证器、基于FPGA版的RTL代码和可综合版的RTL代码。生成需要用到Chisel工具和JAVA环境,之前文章已经写过怎么同步好代码和环境,参考:

https://blog.csdn.net/heyuming20062007/article/details/120544437?spm=1001.2014.3001.5501https://blog.csdn.net/heyuming20062007/article/details/120544437?spm=1001.2014.3001.5501https://blog.csdn.net/heyuming20062007/article/details/120544437?spm=1001.2014.3001.5501二、高性能周期精确验证器

该部分功能进入目录rocket-chip/emulator/文件夹下实现,一开始文件夹下只有些makefile文件,使用make -j0 run产生默认内容。

#jN代表你的CPU核心数
make -jN run

该过程会将所有RISCV的测试和benchmarks全部跑一遍,如果跑完没有错误,则生成的Rocket chip RTL代码测试通过。如果需要单独跑,且生成vcd波形,则使用如下命令:

#tests
make -jN run-asm-tests-debug
#benchmarks
make -jN run-bmark-tests-debug

跑完以后会在emulator/generated-src/文件夹下产生如下文件:

alanwu@alanwu:~/Documents/RISCV/rocket-chip/emulator$ cd generated-src/
freechips.rocketchip.system.DefaultConfig                          freechips.rocketchip.system.DefaultConfig.behav_srams.v.tmp  freechips.rocketchip.system.DefaultConfig.memmap.json
freechips.rocketchip.system.DefaultConfig.0x0.0.regmap.json        freechips.rocketchip.system.DefaultConfig.conf               freechips.rocketchip.system.DefaultConfig.plusArgs
freechips.rocketchip.system.DefaultConfig.0x0.1.regmap.json        freechips.rocketchip.system.DefaultConfig.d                  freechips.rocketchip.system.DefaultConfig.rom.conf
freechips.rocketchip.system.DefaultConfig.0x2000000.0.regmap.json  freechips.rocketchip.system.DefaultConfig.dts                freechips.rocketchip.system.DefaultConfig.v
freechips.rocketchip.system.DefaultConfig.0x40.0.regmap.json       freechips.rocketchip.system.DefaultConfig.fir                TestHarness.anno.json
freechips.rocketchip.system.DefaultConfig.0xc000000.0.regmap.json  freechips.rocketchip.system.DefaultConfig.graphml
freechips.rocketchip.system.DefaultConfig.anno.json                freechips.rocketchip.system.DefaultConfig.json
alanwu@alanwu:~/Documents/RISCV/rocket-chip/emulator/generated-src$ ls freechips.rocketchip.system.DefaultConfig
firrtl_black_box_resource_files.f  plusarg_reader.v  SimDTM.cc  SimDTM.v

三、基于FPGA版/可综合版的RTL代码

该部分功能进入目录rocket-chip/vsim/文件夹下实现,使用make verilog指令产生FPGA版/可综合版本RTL代码,后面带有CONFIG属性为,使用make -jN run完成VCS仿真。

#FPGA代码生成命令
make verilog CONFIG=freechips.rocketchip.system.DefaultFPGAConfig
#可综合代码生成命令
make verilog
#VCS运行命令
make -jN run CONFIG=freechips.rocketchip.system.DefaultFPGAConfig

同样,产生的RTL代码在generated-src文件夹下,具体内容如下:

alanwu@alanwu:~/Documents/RISCV/rocket-chip/vsim$ cd generated-src/
freechips.rocketchip.system.DefaultConfig                          freechips.rocketchip.system.DefaultConfig.behav_srams.v  freechips.rocketchip.system.DefaultConfig.memmap.json
freechips.rocketchip.system.DefaultConfig.0x0.0.regmap.json        freechips.rocketchip.system.DefaultConfig.conf           freechips.rocketchip.system.DefaultConfig.plusArgs
freechips.rocketchip.system.DefaultConfig.0x0.1.regmap.json        freechips.rocketchip.system.DefaultConfig.d              freechips.rocketchip.system.DefaultConfig.rom.conf
freechips.rocketchip.system.DefaultConfig.0x2000000.0.regmap.json  freechips.rocketchip.system.DefaultConfig.dts            freechips.rocketchip.system.DefaultConfig.v
freechips.rocketchip.system.DefaultConfig.0x40.0.regmap.json       freechips.rocketchip.system.DefaultConfig.fir            TestHarness.anno.json
freechips.rocketchip.system.DefaultConfig.0xc000000.0.regmap.json  freechips.rocketchip.system.DefaultConfig.graphml
freechips.rocketchip.system.DefaultConfig.anno.json                freechips.rocketchip.system.DefaultConfig.json

 对于可综合的RTL代码,conf文件包含了所有需要替换的SRAM的信息,在verilog生成过程中,build过程中会运行$(mem_gen)脚本生成SRAM配置文件,同时指定/vsim/vlsi_mem_gen/来替换SRAM模型。这些SRAM会附加在/vsim/generated-src/Top.DefaultConfig.v后面,如果工艺不同需要替换SRAM的std cell,则需要手动将/vsim/vlsi_mem_gen/下面内容进行修改。

四、参数化修改生成的Rocket chip RISC-V

进入目录rocket-chip/src/main/scala/system/文件夹下,找到Configs.scala文件,所有BaseConfig为参数化修改内容,比如Nsets、Nways设置几路组相连等cache相关参数。

打开/vsim/Makefile,搜索CONFIG关键字,这个就是生成时候带的参数,你也修改CONFIG指定到自己定制的配置参数,比如:

make -jN CONFIG=freechips.rocketchip.system.DefaultSmallConfig run-asm-tests
#或者加到export里面
export CONFIG=freechips.rocketchip.system.DefaultSmallConfig
make -jN run-asm-tests

 所有代码生成语言用的都是Chisel,如果相关修改更多RTL代码,需要将Chisel语言学透彻。这里以修改外部中断数量为例,如果需要修改外部中断数量,你可以创建你自己的配置列表并加到CONFIG operator中:

class WithNExtInterrupts(nExt: Int) extends Config {
    (site, here, up) => {
        case NExtInterrupts => nExt
    }
}
class MyConfig extends Config (new WithNExtInterrupts(16) ++ new DefaultSmallConfig)

 然后你就可以按照你自己的配置生成RTL代码:CONFIG=<MyConfigPackeage>.MyConfig.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值