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)
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 &
앞에 #를 써서 주석처리를 하도록 하자.
더불어 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)
댓글 없음:
댓글 쓰기