SlideShare a Scribd company logo
Microsemi FPGAで
RISC-Vを動かしてみた話(Lチカ)
RTLを語る会(14) ~FPGAの現実~
2017年09月24日(日)
@shibatchii
発表を聞くにあたっての注意点
 あまり真剣に見ないでください。
 ボロが丸わかりです。
 あまり深く考えないでください。
 え~それって〇〇じゃん、こじつけだーってとこ多いです。
 笑って、和やかな心で見てください。
 その方が幸せになれます。
 勘のいい子は嫌いだよ
@shibatchii
自己紹介
@shibatchii
名前: @shibatchii
仕事:ASIC、FPGAの設計検証
某ゲーム機のDDR I/Fとか
現在常駐で東京に来ている
本拠地は山口県宇部市
趣味:オートバイでツーリング
FPGA,マイコン いじり
ブログ:http://shibatchii.cocolog-nifty.com/blog/
ホームページ:http://shibatchii.cool.coocan.jp/
Twitter:@shibatchii フォロー歓迎
Microsemi FPGAで
RISC-Vを動かしてみた
@shibatchii
なぜMicrosemiでRISC-V?
 2016年11月頃、
「米Microsemi社は、オープンソースの命令セット「RISC-V」を実装した
CPUコア(RISC-Vコア)として「RV32IM」を開発し、同社のFPGA向けに
提供を始める。このCPUコアは、米SiFive社と共同開発したもの。」
というようなニュースが流れた。
 しばらくするとGitHubにFPGAのプロジェクト
ファイル等が提供された。
 おもしろそうだ、ボードもあるしやってみる
か!
 ちなみに、MicrosemiはRISC-VのGoldメンバー なのですぐに無くなることもないだろうと。
@shibatchii
RISC-Vとは
 CPUの命令セット・アーキテクチャ (ISA)
 グーグル、オラクル、ヒューレット・パッカード・エ
ンタープライズ(HPE)などが開発に参加
 完全にオープンで自由に使える命令セットアーキテク
チャ
 アドレッシングは32/64/128bitサポート
 上記、Wikipedia参照しました。https://ja.wikipedia.org/wiki/RISC-V
 詳細は FPGAマガジンNo.18とかRISC-VのWebページを参考にしてください。
@shibatchii
特徴
 自由度が高い
 必要なバス幅、命令セットを選んで構成できる
 バスも自由:AMBA,Sonic,VME,オレオレバス,etc
 メモリマップも自由:スタートベクタが途中にあっ
てもOK
 命令セット構成例
 RV32I MACFDQ
■ RV32I:基本命令 ■ M:乗算命令 ■ A:アトミック命令 ■ C:圧縮
■ F:単精度小数点 ■ D:倍精度小数点 ■ Q:4倍精度小数点 ■他にも J,L,V,B,T,Pなど有
ここまで必要ないなら、例えばRV32IMACだけでもOK
@shibatchii
MicrosemiのRISC-Vコア仕様
 低消費電力のASICマイクロコントローラおよびFPGAソフト
コアのインプリメンテーション用に設計•統合された8Kバイト
の命令キャッシュと8Kバイトのデータキャッシュ
 プラットフォームレベルの割り込みコントローラ(PLIC)は単
一優先度レベル
 RISCV標準のRV32IM ISAをサポート•JTAGインタフェース
を備えたオンチップデバッグユニット
 IOおよびメモリ用の2つの外部AXIインターフェイス
@shibatchii
Microsemiはどう実装したか
@shibatchii
JTAG
割り込
み入力
周辺デバイス用AXI4
キャッシュ無し
メモリ用AXI4
キャッシュ有り
CLK
RESET
Catalogから
SmartDesignに持っ
てくるとこんな感じ
中身はSiFive's E31
Coreplex
Platform-Level Interrupt Controller
プラットフォームレベル割込制御
E31 Core
TileLink To AXI Brdge
タイルリンク-AXIブリッジ
Integer Multiplier/Divider
整数 乗算/除算
RV32IM
コア
JTAG TAP Controller
JTAGコントローラ
Clock-Domain Crossing
クロック載せ替え
Debug Transport Module
8KB Instruction Cache
8KB命令キャッシュ
8KB IData Cache
8KBデータキャッシュ
TileLink To AXI Brdge
タイルリンク-AXIブリッジ
Uncached TileLink Interconnect
CoreRISCV_AXI4
JTAG I/f
External
Interrupts
AXI4 MMIO I/F AXI4 Memory I/F
Clock
Reset
Lチカ用全体構成
@shibatchii
Microsemiのサンプル
全体構成 ブロック図
@shibatchii
CCC
クロック制御
CoreRISCV_AXI4
RISC-Vコア
CoreAHBLite
AHBブリッジ
CoreJTAGDebug
JTAGデバッガ
eNVM
不揮発メモリ
CoreAPB#
APB3ブリッジ
CoreAHBtoAPB3
AHB<->APB3
CoreGPIO
汎用入出力
CoreSPI
3線IF
CoreTimeer
タイマー 割込
DDR Contrller
DDRコントローラ
AXI Glue Logic
AXI接続回路
CoreAXIToAHBL
AXI4<->AHBL
CoreAHBLite
AHBブリッジ
ResetSyncronizer
リセット同期
Microsemi SoC FPGA Fabric
CoreAXIToAHBL
AXI4<->AHBL
AXI Glue Logic
AXI接続回路
LEDs Offchip
SPI 周辺
Offchip
DDRメモリ
External OSC
外部クロック
PushBottonReset
押しボタンリセット
JTAG Header
CoreUART
シリアル
割り込み
シリアルIF
ソフトウェア構成1riscv-systick-blinky
│
│ .cproject // SoftConsole用プロジェクトファイル Cの環境に関するもの
│ .project // SoftConsole用プロジェクトファイル Softconsole自身の環境に関するもの
│ hw_platform.h // ベースアドレスや定数がdefineされている
│ main.c // Cプログラムメイン。ここから動き始める。解析もここから。
│ README.txt // このプログラムの概要。結構重要なことが書いてある。
│ riscv-systick-blinky Debug.launch // デバッグ時の設定ファイル?よくわからない
│
├─drivers // 各ハードIP用のドライバファイル
│ ├─CoreGPIO // GPIO 汎用入出力用
│ │ coregpio_regs.h // GPIOが持っているレジスタのオフセットアドレス
│ │ core_gpio.c // GPIOへ出力したり、入力したりする関数
│ │ core_gpio.h // ヘッダファイル。ビットマスク等の設定値defineとprototype宣言
│ │
│ └─CoreUARTapb // UART シリアル用
│ coreuartapb_regs.h // UARTが持っているレジスタのオフセットアドレス
│ core_uart_apb.c // UARTへ出力したり、入力したりする関数
│ core_uart_apb.h // ヘッダファイル。ビットマスク等の設定値defineとprototype宣
言 @shibatchii
ソフトウェア構成2
│
├─hal // Hardware Abstraction Layer ハードウェア抽象化階層
│ cpu_types.h // typedef 数個
│ hal.h // レジスタアクセスとかをHW依存のから共通のアクセスに変換
│ hal_assert.h // HAL_ASSERT がdefineしてある
│ hal_irq.c // 割り込みの抽象化
│ hw_macros.h // ハードウェアレジスタアクセス define
│ hw_reg_access.c // レジスタアクセス関数
│ hw_reg_access.h // レジスタアクセス関数のプロトタイプ宣言
│
└─riscv_hal // RISC-V用 Hardware Abstraction Layer ハードウェア抽象化階層
encoding.h // ステータスや割り込みレジスタのビット位置define等
entry.S // csrアクセスアセンブラ
init.c // 領域コピー関数
microsemi-riscv-ram.ld // SRAMのメモリスペース設定
riscv_CoreplexE31.h // 割り込み制御、設定
riscv_hal.c // 割り込みハンドラ
riscv_hal.h // 割り込みハンドラのプロトタイプ宣言
riscv_hal_stubs.c // 該当関数が定義されていないときのスタブ関数
sample_hw_platform.h // ベースアドレスや定数設定
syscall.c // UART_APBアクセス関数
@shibatchii
プログラム抜粋 (main.c)
// riscvの抽象化階層、必要な定数等の定義、関数ヘッダ 呼び出し
#include "riscv_hal.h"
#include "hw_platform.h"
#include "core_gpio.h"
// GPIOでin,outの変数宣言。
// core_gpio.hで宣言
gpio_instance_t g_gpio_in; gpio_instance_t g_gpio_out;
// ステートカウンタ宣言。初期値は1
uint32_t g_state = 1;
// 割り込みハンドラ関数。
void SysTick_Handler(void) {
uint32_t stable;
uint32_t gpout;
// GPIOのデータを読み出す
stable = GPIO_get_inputs(&g_gpio_in);
// 反転して、マスクをかけている。
gpout = ~stable & 0x000000F0;
// g_tateを右1ビットシフト。つまり2倍にしている
g_state = g_state << 1;
// 4より大きくなったら1にする.
if (g_state > 4) {
g_state = 0x01;
}
// [7:4]がそのままもちこし、[3:0]がステートカウント値
gpout = gpout | g_state;
// GPIOに出力
GPIO_set_outputs(&g_gpio_out, gpout);
}
@shibatchii
// おなじみ、Cのメイン
int main(int argc, char **argv) {
// PLICって Platform Level Interrupt Controller の略
// この関数は riscv_CoreplexE31.hで定義してある
PLIC_init();
// GPIOの初期化。ここで入力でつかうとかの設定。INとOUTでアドレスが違う
// core_gpio.hで宣言
// COREGPIO_IN_BASE_ADDR とかは hw_platform.h で定義
GPIO_init(&g_gpio_in, COREGPIO_IN_BASE_ADDR, GPIO_APB_32_BITS_BUS);
GPIO_init(&g_gpio_out, COREGPIO_OUT_BASE_ADDR, GPIO_APB_32_BITS_BUS);
// タイマー設定 riscv_hal.h で定義されている。
// SYS_CLK_FREQ は hw_platform.h で定義。83000000UL なので 83MHz
SysTick_Config(SYS_CLK_FREQ / 2);
return 0;
}
動かしてみよう
@shibatchii
LiberoSoc,SoftConsole
インストール、設定
GitHubからMicrosemi RISC-V
Igloo2用を一式ダウンロード
LiberoSocにパーツ取り込み
Lチカのプロジェクト取り込み
FPGAファブリックのコンパイル
FPGAに書き込み
SoftConsoleでファームコンパイル
実行! LED点滅!
デモ
 まずはVideoでみてね。
 https://www.youtube.com/watch?v=-mrOy9FMHzA
 時間があれば実機でデモするよ。
@shibatchii
まとめ
 Microsemiは何を考えているか。(@shibatchii主観)
 いままでは、IglooにCortex-M3載せたSmartfusionや
Smartfusion2でCortex-M3、そこからCPU除けたIgloo2
などをリリースしてきた。
 だが最新のPolaFireではCPU入りのはでてきなさそう。
 XilinXのMicrobreeze,IntelのNIOSⅡのようなメインラインのCPUを
持ってない。
 ハードCPUを載せるのはちょっと荷が重い。
 そうだ!RISC-Vで自由に構成してもらおう!
 ベンダーもユーザーもWin&Win!
 今後予定
 とりあえずデモを動かしてみただけなので、RISC-Vを調査し
オリジナルなもの(無駄に高機能な時計とか)作ってみる。 @shibatchii
質問タイム
なにか質問あればどうそ。
なんでも良いですよ。
@shibatchii

More Related Content

PPTX
Microsemi FPGA はいいぞ,FPGAの紹介とおさそい
PDF
Zynq mp勉強会資料
PDF
ACRiウェビナー:小野様ご講演資料
PDF
Scapyで作る・解析するパケット
PPTX
本当は恐ろしい分散システムの話
PDF
C/C++プログラマのための開発ツール
PDF
エンジニアなら知っておきたい「仮想マシン」のしくみ v1.1 (hbstudy 17)
PDF
Rust で RTOS を考える
Microsemi FPGA はいいぞ,FPGAの紹介とおさそい
Zynq mp勉強会資料
ACRiウェビナー:小野様ご講演資料
Scapyで作る・解析するパケット
本当は恐ろしい分散システムの話
C/C++プログラマのための開発ツール
エンジニアなら知っておきたい「仮想マシン」のしくみ v1.1 (hbstudy 17)
Rust で RTOS を考える

What's hot (20)

PPTX
UEFIによるELFバイナリの起動
PPTX
RISC-Vの基礎、オバービュー(RISC-V basis-overview)
PDF
TLS, HTTP/2演習
PDF
Wireshark だけに頼らない! パケット解析ツールの紹介
PDF
組み込み関数(intrinsic)によるSIMD入門
PDF
知っておくべきCephのIOアクセラレーション技術とその活用方法 - OpenStack最新情報セミナー 2015年9月
PPTX
分散システムについて語らせてくれ
PDF
仮想化環境におけるパケットフォワーディング
PDF
15分でわかるGit入門
PDF
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
PDF
レシピの作り方入門
PDF
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
PDF
初心者向けCTFのWeb分野の強化法
PDF
ARM CPUにおけるSIMDを用いた高速計算入門
PDF
WebAssemblyのWeb以外のことぜんぶ話す
PPTX
PHPとシグナル、その裏側
PDF
WebSocket / WebRTCの技術紹介
PDF
.NET Core時代のCI/CD
PPTX
ARM LinuxのMMUはわかりにくい
PDF
DPDKによる高速コンテナネットワーキング
UEFIによるELFバイナリの起動
RISC-Vの基礎、オバービュー(RISC-V basis-overview)
TLS, HTTP/2演習
Wireshark だけに頼らない! パケット解析ツールの紹介
組み込み関数(intrinsic)によるSIMD入門
知っておくべきCephのIOアクセラレーション技術とその活用方法 - OpenStack最新情報セミナー 2015年9月
分散システムについて語らせてくれ
仮想化環境におけるパケットフォワーディング
15分でわかるGit入門
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
レシピの作り方入門
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
初心者向けCTFのWeb分野の強化法
ARM CPUにおけるSIMDを用いた高速計算入門
WebAssemblyのWeb以外のことぜんぶ話す
PHPとシグナル、その裏側
WebSocket / WebRTCの技術紹介
.NET Core時代のCI/CD
ARM LinuxのMMUはわかりにくい
DPDKによる高速コンテナネットワーキング
Ad

Similar to Microsemi FPGAで RISC-V を動かしてみた話 (Lチカ) (20)

PDF
JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築
PDF
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
PDF
スタート低レイヤー #0
ODP
「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)
PDF
ceph acceleration and storage architecture
PDF
例会講座 今更fish shellの紹介
PDF
Dalvik仮想マシンのアーキテクチャ 改訂版
PDF
Xbyakの紹介とその周辺
PDF
JIT のコードを読んでみた
PDF
ACRiウェビナー:岩渕様ご講演資料
PPTX
Power shell で DSL
PDF
DartVM on Android
PDF
Shinjuku.rs #14 userland-ioの紹介
PDF
FPGAによるHDMI to LVDS変換器
PDF
高位合成ツールVivado hlsのopen cv対応
PPTX
Androidとfpgaを高速fifo通信させちゃう
PDF
Xilinx SDSoC(2016.2)解体新書ソフトウェア編
PDF
Reconf 201506
PDF
Using asimdhp (fp16) on Jetson Xavier CPU
PDF
仮想記憶の構築法
JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
スタート低レイヤー #0
「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)
ceph acceleration and storage architecture
例会講座 今更fish shellの紹介
Dalvik仮想マシンのアーキテクチャ 改訂版
Xbyakの紹介とその周辺
JIT のコードを読んでみた
ACRiウェビナー:岩渕様ご講演資料
Power shell で DSL
DartVM on Android
Shinjuku.rs #14 userland-ioの紹介
FPGAによるHDMI to LVDS変換器
高位合成ツールVivado hlsのopen cv対応
Androidとfpgaを高速fifo通信させちゃう
Xilinx SDSoC(2016.2)解体新書ソフトウェア編
Reconf 201506
Using asimdhp (fp16) on Jetson Xavier CPU
仮想記憶の構築法
Ad

Microsemi FPGAで RISC-V を動かしてみた話 (Lチカ)