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
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
以上で、ArduinoIDE で LicheeTang RISC-V (E203) のソフトウェア開発環境が整いました.
RV デバッガと TANG PriMER ボードの接続
プログラム書き込み用の RV デバッガと TANG PriMER ボード間の JTAG / UART を接続します.対応する端子は以下の通りです.Lichee Tang Pin | RV |
---|---|
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);
}
参考
以下を参考とさせていただきました.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件のコメント