Sipeed TANG PriMER を使ってみた [2] – Arduino IDE で RISC-V 開発

前回の記事で SiPeed 製 TANG PriMER FPGA 開発ボードの環境のセットアップができ、サンプルの論理合成と書き込みまで確認できました. 今回は RISC-V プロセッサを論理合成し FPGA に書き込み、さらにソフトウェアを Arduino IDE を使ってビルド、ボード上の ROM に書き込むところまでを立ち上げていきたいと思います.
TANG PriMER FPGA 開発ボード
RISC-V E203 Core の論理合成と FPGA への書き込み
まずは RISC-V コア(Tang_E203_Mini)の論理合成を行ないます.以下から必要ファイル一式をダウンロードしておきます.

https://github.com/riktw/Tang_E203_Mini

FPGA 開発環境 TD を起動し、Open Project のメニューからプロジェクトファイル e203egmini_new.al を開き、Process → Run で論理合成を実行します.

ソフトウェア開発環境のセットアップ

続いて、RISC-V のソフトウェア開発環境を構築していきます.今回は Arduino IDE でソフトウェアをビルド、RV デバッガと OpenOCD を使って Flash への書き込みを行ないますが、OpenOCD が TANG PriMER ボード上の Flash ROM に対応しておらず、そのままでは書き込みができないため、OpenOCD の再構築が必要となります.
Arduino IDE のダウンロードとセットアップ
以下の公式サイトより Arduino IDE をダウンロード、インストールしておきます.

https://www.arduino.cc/en/software

Arduino IDE を起動し、ファイル → 環境設定で追加のボードマネージャの URL に以下の URL を追加します.
https://bigbits.oss-cn-qingdao.aliyuncs.com/Arduino_for_Licheetang_with_hbird_e203_mini/v0_1/package_licheetang_index.json
続いて、ツール → ボード → ボードマネージャから LicheeTang Hbird E203 Board を選択します.また、ツール → 書込装置で LicheeTang OpenOCD を選択しておきます.
Open OCD のビルド環境セットアップ
上記にも書いたとおり今回は OpenOCD の再構築が必要となるため、そのビルド環境(minGW)を構築します.以下の公式サイトからインストーラを入手しインストールします.

http://www.msys2.org/

インストールが完了したら MSYS2 MinGW x64 を起動し、まずは以下のコマンドでパッケージデータベースの情報を更新します.
pacman -Sy

続いて、必要なパッケージのアップグレードを行ないます.
pacman -Su

続いて、開発環境(GCC)をはじめ開発に必要となるツール群をインストールしていきます.
pacman -S mingw-w64-x86_64-toolchain

pacman -S mingw-w64-x86_64-libusb

pacman -S make autoconf automake

pacman -S libtool mingw-w64-x86_64-libftdi git

LicheeTang 用 openocd のソース取得とビルド
上記で開発環境のセットアップが完了しましたので、続いて openocd のソース取得してビルドしていきます.開発用に適当なディレクトリを作成し、その中で以下のコマンドを実行し LicheeTang 用 openocd のソースを取得します.
git clone https://github.com/Lichee-Pi/LicheeTang_openocd.git
ダウンロード後、取得したソースのディレクトリに移動し、以下のコマンドを実行します.
./bootstrap

CFLAGS=-D_FTDI_DISABLE_DEPRECATED CFLAGS=-Wno-stringop-overflow ./configure
続いて Make を行ないます.私の環境では、上記 make 時にビルドエラーが発生したため、いくつかソースに修正を加えてビルドを通しました.
make
ビルドが完了すると /src の下に新たな openocd.exe が作成されますので、これと mingw64/bin 下の libftdi1.dll を ArduinoIDE のフォルダ(C:\Users\ユーザ名\AppData\Local\Arduino15\packages\licheetang\tools\openocd\a1\bin)にコピー(置き換え)します.
以上で、ArduinoIDE で LicheeTang RISC-V (E203) のソフトウェア開発環境が整いました.
RV デバッガと TANG PriMER ボードの接続
プログラム書き込み用の RV デバッガと TANG PriMER ボード間の JTAG / UART を接続します.対応する端子は以下の通りです.
Lichee Tang PinRV
H13 (U0_Tx)Tx
J13 (U0_Rx)Rx
C9 (TMS)TMS
B6 (TDI)TDI
C5 (TCK)TCK
A4 (TDO)TDO
G (GND)GND

プログラムの作成と書き込み
以下のプログラムを ArduinoIDE 上で作成し、書き込みを行ないます.
#define LED_RED 9
#define LED_BLUE 10
#define LED_GREEN 11
#define DELAY_TIME 100

void setup()
{
  Serial.begin(9600);

pinMode(LED_RED, OUTPUT);
  pinMode(LED_BLUE, OUTPUT);
  pinMode(LED_GREEN, OUTPUT);
  digitalWrite(LED_RED, HIGH);
  digitalWrite(LED_BLUE, HIGH);
  digitalWrite(LED_GREEN, HIGH);
  Serial.println("===== Blink Test =====");
}

void loop()
{
  digitalWrite(LED_RED, LOW);
  Serial.println("RED : ON");
  delay(DELAY_TIME);
  digitalWrite(LED_RED, HIGH);
  Serial.println("RED : OFF");
  delay(DELAY_TIME);
  digitalWrite(LED_BLUE, LOW);
  Serial.println("BLUE : ON");
  delay(DELAY_TIME);
  digitalWrite(LED_BLUE, HIGH);
  Serial.println("BLUE : OFF");
  delay(DELAY_TIME);
  digitalWrite(LED_GREEN, LOW);
  Serial.println("GREEN : ON");
  delay(DELAY_TIME);
  digitalWrite(LED_GREEN, HIGH); 
  Serial.println("GREEN : OFF");
  delay(DELAY_TIME);
}
ボード上のフルカラー LED が 100ms ごとに赤 → 青 → 緑の点灯を繰り返せば書込み成功です.

参考
以下を参考とさせていただきました.
http://galaxystar.image.coocan.jp/tangprimer.htm

https://ameblo.jp/takeoka/entry-12607107193.html

https://qiita.com/Nanchite4618/items/62ff04e3345519b3a939

https://blog.csdn.net/u013507936/article/details/86737964

1件のコメント

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です