2016년 10월 19일 수요일

[FPGA] Rocket Chip Generator

This document refer to this github link.

1. Background


각 repository가 무엇을 하고 있는지
1) rocket-chip
Rocket chip generator. RISC-V Rocket core를 만든다.

2) riscv-tools
RISC-V GCC/Newlib toolchain, RISC-V-LINUX Installation

3) fpga-zynq
Zynq FPGA boards에서 RISC-V rocket chip을 돌리는데 필요한 파일 들. Vivado 2016.2가 필요하다. prebuilt image들이 git submodule들로 이용가능하다.

발표할 것
1) Generate rocket core
2) Download rocket core to FPGA
3) Tool chain (중간 중간)
4) 로켓칩 파라미터 바꾸기. How can I parameterize my Rocket chip?


2. Rocket chip generator repository에 어떤 것들이 있는지?

Berkeley의 chip-building project는 git submodule 을 이용한다.

1) The Submodules

  • chisel3: RTL을 Chisel로 작성하였다.
  • firrtl: chisel3 컴파일러가 만들어내는 intermediate format
  • hardfloat: floating-point units 들을 위한 repository
  • context-dependent-environments: 이걸 이용해서 Chisel code의 parameter들을 바꾼다.
  • riscv-tools: riscv-tools 임.
  • torture: test code - randomized intruction streams which are then run as code on the rocket core(s)
2) The Sub Packages
Rocket-chip Chisel code base는 Scala package들로 나뉘어진다. 각 패키지에 대한 설명을 하겠다.

  • rocket: Rocket core, L1 cache source code
  • uncore: uncore logic, L2 coherence hub, coherent interfaces between tiles (tilelink), debug interface
  • junctions: bus protocols and interfaces
  • groundtest: uncore 쪽 테스트할 수 있는 패키지. rocket core 쪽은 instruction stream generator로 대체한다.
  • coreplex: rocket tiles, L1-to-L2 network, L2 coherence agents, boot ROM이나 debug unit 같은 internal devices를 잇는 역할을 한다.
  • rocketchip: Top level package. Instantiate the coreplex
synopsys의 vcs가 있다면 Verilog simulation 도 할 수 있다.
없다면 vsim을 make할 수 없다.

더불어 rocket-chip/emulator의 Makefile을 바꿀 필요가 있다.
아래 두 줄

rm -rf $@.vcd && mkfifo $@.vc
vcd2vpd $@.vcd $@ > /dev/null &

앞에 #를 써서 주석처리를 하도록 하자.

3. GTKWAVE를 사용해보자.

gtkwave를 통해서 디버깅을 시각적으로 할 수 있다.
* gtkwave 컴파일 방법
1) gtkwave 다운로드
2) ./configure --enable-local-libz
3) make
4) make install

* 사용법
gtkwave OutputFileName.vcd

4. Rocket chip의 파라미터를 변경해보자.

rocket-chip repository에 로켓칩 파라미터를 변경하는 내용이 있지만, 최신 코드와는 맞지 않는 부분이 있다.
현재 파라미터를 조정하는 부분은 내가 파악하기로,
rocket-chip/src/main/scala/rocketchip/configs.scala
rocket-chip/src/main/scala/coreplex/Configs.scala
groundtest와 unittest쪽에도 있는데 나중에 보기로 하고, 먼저 위 두 Configs.scala 파일에 집중하자.

coreplex/Configs.scala의 BaseCoreplexConfig에서 L1 cache의 set, way 개수를 변경 가능.

대표적인 config 소개
DefaultFPGAConfig - Default
DefaultFPGASmallConfig - small cache sizes, disables the FPU, turns off the fast early-out multiplier and divider, reduces the number of TLB entries --> For Zybo FPGA board(smallest ZYNQ)



댓글 없음:

댓글 쓰기