ハードウェアの気になるあれこれ

技術的に興味のあることを調べて書いてくブログ。主にハードウェアがネタ。

RISC-Vの実装の1つ - SCR1の解析 - Vivadoプロジェクト準備(1)

スポンサーリンク

RISC-Vの中身を勉強するために手頃な環境を用意したい。
ということで、RISC-Vのサイトに紹介されているコアから良さそうな物を1つ選んでそれをベースに環境を立ち上げていきたいと思う。

RISC-V

RISC-Vの説明をWikipediaで調べると、以下のように書いてある。

RISC-V(リスク ファイブ)は、オープン標準のRISCマイクロプロセッサの命令セット・アーキテクチャ (ISA) である。

ほとんど全てのISAと異なり、RISC-V ISAはいかなる用途にも自由に利用でき、誰もがRISC-Vチップおよびソフトウェアを設計、製造、販売可能である。最初のオープンアーキテクチャのISA[1]ではないが、幅広いデバイスに有用であるように設計されている点が重要である。命令セットは、ソフトウェアがサポートするのに十分な量があり、新しい命令セットの弱点を回避している。

プロジェクトは、2010年にカリフォルニア大学バークレイ校で開始されたが、現在は、多くのコントリビューターが、ボランティアもしくは企業の従業員として、大学外から参加している。[2] 例えば、グーグル、オラクル、ヒューレット・パッカードエンタープライズ(HPE)などが開発に参加している[3]。

RISC-V ISAは、小さく、速く、省電力で、実用性を重視して設計されてきているが、[4][5] 特定のマイクロアーキテクチャに過適合しないようにしている。[5][6][7][8]

2017年5月に、ユーザーレベルのISAのバージョン2.2が決定され、特権レベルISAが、ドラフト・バージョン1.10として提供されている。
RISC-V - Wikipedia

やっぱり魅力はいかなる用途にも自由に利用できるISAってところですね。
言及されているISAはRISC-Vのサイトに行くと見ることができる。

トップページ↓
riscv.org

ISA↓
riscv.org

RISC-Vコア

下記を見るといろいろなコアが紹介されている。

RISC-V Cores - RISC-V Foundation

- Rocket
- ORCA
- PULPino
- OPenV/mriscv
- VexRiscv
- Roa Logic RV12
- SCR1
- Hummingbird E200
- Shakti

SCR1

上記の中からSCR1という実装を解析をしていく。

github.com

選んだ理由は

  1. 実装言語がsystem verilog
  2. サポートしているRISC-V ISAが最新のもの(Previleged 1.10 / User 2.2)
  3. 比較的シンプルな実装(Rocketみたいなのと比べると、、の話)
  4. ドキュメントが整備されていて、とっつきやすそう(これ大事!!)
  5. いろいろカスタマイズ可能
  6. SDKも公開されてる(GitHub - syntacore/scr1-sdk: open-source SDK for SCR1 core)

FPGAプロジェクトの準備

お試しがてらSCR1のデータをgithubから持ってきてVivadoで合成を実行できるように環境を整えていく。

作業用ディレクトリの準備
$ mkdir fpga-scr1
$ cd fpga-scr1
$ mkdir vivado
$ git clone https://github.com/syntacore/scr1.git
Vivadoプロジェクト作成

Vivadoシミュレータの動作確認 - ハードウェアの気になるあれこれの要領でプロジェクトを作成。
その後、cloneしておいたSCR1のデータを取り込んでいく。
"Add Sources"を選んでdesign sourcesでデータを取り込む。
まとめてデータを取り込むの"Add Directories"でcloneしたSCR1のディレクトリごとインポート

f:id:diningyo-kpuku-jougeki:20180812220147p:plain

SCR1はトップ改装をAXI or AHBのいずれを使用するかをdefineで選択可能になっている。
今回はAXIを使用するので、scr1_top_axiをトップモジュールに指定しておく。
またscr1/src/includesの下はインポートしたままだとverilogとして解析されるので"Source File Properties"から"Type"をsytem verilogに変更しておく。
ここまでの作業後に、"Run Synthesis"を実行するととりあえず合成が通ることは確認できた。

シミュレーション環境の準備

前項と同じく"Add Sources"で"simulation sources"にscr1/src/tb以下のデータを取り込む。
本当はRISC-Vのコンパイラでテスト用のプログラムデータを生成する必要があるのだが、とりあえずこの状態でコンパイルが通るかを確認するため"Run Simulation"を実行。

したんだけど、、、なんかエラー出た。。。

f:id:diningyo-kpuku-jougeki:20180812221652p:plain

詳細は"elaborate.log"を見ろ、とのこと↓

Vivado Simulator 2017.4
Copyright 1986-1999, 2001-2016 Xilinx, Inc. All Rights Reserved.
Running: /opt/Xilinx/Vivado/2017.4/bin/unwrapped/lnx64.o/xelab -wto 0e6fead3633f402a8a5bfc48c6ea3f43 --incr --debug typical --relax --mt 8 -d SCR1_SIM_ENV= -L xil_defaultlib -L unisims_ver -L unimacro_ver -L secureip --snapshot scr1_top_tb_axi_behav xil_defaultlib.scr1_top_tb_axi xil_defaultlib.glbl -log elaborate.log
Using 8 slave threads.
WARNING: [XSIM 43-3431] One or more environment variables have been detected which affect the operation of the C compiler. These are typically not set in standard installations and are not tested by Xilinx, however they may be appropriate for your system, so the flow will attempt to continue. If errors occur, try running fuse with the "-mt off -v 1" switches to see more information from the C compiler. The following environment variables have been detected:
Starting static elaboration
ERROR: [VRFC 10-2063] Module not found while processing module instance [/home/dnn-admin/workspace/hw/study/fpga-scr1/scr1/src/pipeline/scr1_pipe_brkm.sv:794]
ERROR: [VRFC 10-1040] module scr1_pipe_dbga_default ignored due to previous errors [/home/dnn-admin/workspace/hw/study/fpga-scr1/scr1/src/pipeline/scr1_pipe_dbga.sv:11]
ERROR: [VRFC 10-1040] module scr1_tapc_shift_reg(SCR1_WIDTH=32'b01,SCR1_RESET_VALUE=1'b0) ignored due to previous errors [/home/dnn-admin/workspace/hw/study/fpga-scr1/scr1/src/core/scr1_tapc_shift_reg.sv:9]
ERROR: [VRFC 10-1040] module scr1_tapc_data_reg(SCR1_WIDTH=32'b01,SCR1_RESET_VALUE=1'b0) ignored due to previous errors [/home/dnn-admin/workspace/hw/study/fpga-scr1/scr1/src/core/scr1_tapc_data_reg.sv:9]
ERROR: [XSIM 43-3322] Static elaboration of top level Verilog design unit(s) in library work failed.

モジュールが無いって言われてる。何か設定が足りてないのか。。。
後日確認することにしよう。