Rocket之加速器
阿新 • • 發佈:2018-11-06
文章目錄
RoCC簡介
Rocket Custom Coprocessor
riscv-tools
- 由於custom指令並不是標準指令集的一部分,所以最新的risc-tools(彙編器)不支援直接寫custom0指令。
- riscv-tools還是為custom指令預留了opcode。
- 可以參考
#define XCUSTOM(x, rd, rs1, rs2, funct) \
XCUSTOM_OPCODE(x) | \
(rd << (7)) | \
(0x3 << (7+5)) | \
((rd != 0) & 1 << (7+5+2)) | \
(rs1 << (7+5+3)) | \
(rs2 << (7+5+3+5)) | \
(EXTRACT(funct, 7, 0) << (7+5+3+5+5))
#define ROCC_INSTRUCTION_RAW_R_R_R(x, rd, rs1, rs2, funct) \
.word XCUSTOM(x, ## rd, ## rs1, ## rs2, funct)
// .word 可以理解為在當前地址位置放置一條指令,彙編器不對其進行處理
pk
在Rocket處理器有一個暫存器mstatus,有一個XS,只有為非0時,才會執行自定義指令。
可以通過修改pk解決這個問題,參考這裡。
核心修改程式碼如下:
// fpga-zynq/rocket-chip/riscv-tools/riscv-pk/machine/minit.c : mstatus_init()
if (supports_extension('X'))
set_csr(mstatus, (MSTATUS_XS & (MSTATUS_XS >> 1)));
具體操作如下:
cd fpga-zynq/rocket-chip/riscv-tools/riscv-pk
git apply rocket-rocc-examples/patches/riscv-pk.patch
mkdir build
cd build
../configure --prefix=$RISCV/riscv64-unknown-elf --host=riscv64-unknown-elf
make
make install
scp pk [email protected]:/home/root
加速器
fpga-zynq
修改位置:fpga-zynq/common/src/main/scala/Configs.scala
class RoccExampleConfig extends Config(
new WithBootROM ++ new freechips.rocketchip.system.RoccExampleConfig)
class RoccZynqConfig extends Config(new WithZynqAdapter ++ new RoccExampleConfig)
class RoccZynqFPGAConfig extends Config(new WithoutTLMonitors ++ new RoccZynqConfig)
執行命令
cd zedboard
make rocket CONFIG=RoccZynqFPGAConfig
make project CONFIG=RoccZynqFPGAConfig
// 之後用vivado生成bit流
測試
測試樣例
https://github.com/seldridge/rocket-rocc-examples/blob/master/pk/accumulator.c