SlideShare a Scribd company logo
2
Most read
8
Most read
18
Most read
俺ASIC
と
俺CPU“松竹V(しょうちくぶい)”
2023年1月15日
たけおか@AXE
@takeoka
日本の半導体 産業 復興!
技術者 不足をStop!日本の半導体 産業 復興!
•
OSSの開発ツールで、LSI 開発
●
無料ツールの使い手が増える → 技術者不足 解消!
●
半導体 設計 技術者
●
論理回路 設計 技術者
•
半導体 工場は、「お高くない」ものもある
●
65nm とか、安くて かなりいい
みんなのLSI
俺のASIC
LSI
LSI開発の民主化だっ
開発の民主化だっ!!!
!!!
•
Googleなどが、OSSを使用して、LSI開発の民主化を行っている。2020年ごろより
•
日本政府も、半導体産業 復興を行う
●
LSI開発者の裾野を広げる
●
零細企業でも、LSI設計ができる時代になった
●
Open EDA, OpenLANEを活用(Googleにならう)
●
OSSのハードウェア開発ツールを使用
•
専用LSIは、低消費電力=持続可能社会に貢献
●
汎用CPU, Intel x86は電力消費が大きすぎる
Googleがカスタム半導体の民主化・自由化を推進
Googleがカスタム半導体の民主化・自由化を推進
 GoogleがスポンサとなりMPWシャトル・サービスを、無料で提供
 MPW(Multi-project wafer):

さまざまな顧客からの異なる半導体チップを1枚のウェハで製
造する
 Skywater社で製造
 50万円〜100万円出せば、作ってくれる道筋もある

130nmプロセスのアナログ・デジタル混載LSIを作る
FOSSi(Free and Open Source Silicon Foundation)

無料のオープンデジタルハードウェア設計のエコシステムを支援

非営利団体

[FOSSi Dial-Up] Tim Ansell - Skywater PDK: Fully open source manufacturable
PDK for a 130nm process https://www.youtube.com/watch?v=EczW2IWdnOM

日本人 河崎氏は、NEDO資金を受け、実際に、LSIを開発した
※河崎氏は、RISC-V Foundation ボードメンバで、JASA RISC-V WGメンバでもある
回路検証
(icarus)
回路合成
(yosys)
STA
(vesta)
ロジック部開発フロー
OSS EDAに必要な
ライブラリ
↓
回路設計
(Editor)
OSSによるLSI開発のEDAフロー
StdCell Verilog model
StdCell .libファイル
StdCell Verilog Model
(vesta)
Place
(Graywolf)
Router
(Qroute)
STA
(vesta)
DRC/LVS
(klayout)
StdCell LEF
StdCell LEF
StdCell Verilog model
Technology file
●
OSS EDAに必要なライブラリは
Fabのデータから変換が必要
●
OpenRAM、PLL、アナログは別なフローになる
配線
確認
配置。このあたりにPDKが必要
PDKが、ついにOSSに
●
ある特定の半導体プロセスで回路設計を行う際に
必要な設計情報
●
トランジスタ配置の制約条件などが書かれている
GAFAなどが自社向け半導体の開発
に力を入れる理由

データセンタの消費電力 削減
 自社製 専用半導体で電力削減

設計技術だけで自社半導体はできる
 半導体工場レス
 RTL(デジタル論理)設計ができれば

専用アルゴリズム用LSI

オーダーメイドICは、FPGAでは不満
 FPGAは消費電力 大
 FPGAは遅い
国内
●
政府が、LSI産業 再興
– JASAにも、経産省から LSI 開発者 教育についてヒアリングが来て、私もJASA技術本部
長として応えました。
●
LSI開発者の裾野を広げたい
– 産業技術総合研究所なども、OpenEDAに注目
●
ふくおかIST(公益財団法人 福岡県産業・科学技術振興財団)
福岡システムLSI総合開発センター「システムLSI設計試作センター」
●
http://www.ist.or.jp/lsi/pg04_02.html
●
ここで使用されているツールはほとんどがOSS
– NEC Cyber Work Bench程度が商品

ベンチャー企業が半導体の設計ツールを安価で利用できる

LSI設計、 少量 試作できる
●
50〜100万円 あれば、LSIの少量生産ができる仕組みがある
ミニマルファブ
一般社団法人 ミニマルファブ推進機構
MINIMAL(Minimal Fab Promoting Organization)は、
半導体、MEMSなどマイクロデバイスの多品種少量生産を可能とする革新的な
産業システム(ミニマルファブ)の発展と普及を支援する世界唯一の団体です。
https://www.minimalfab.com/
●
半導体 1個を手作りで作れる
●
手間は掛かるが、費用は超安い
https://www.semiconportal.com/archive/editorial/conference/r
eport/130705-minimalfab.html?print
より引用
現在 開発中の オレのSoC
● 省電力、省メモリ
● ロボットの部品モジュールがローコストで簡単に作れる
● 論理推論加速 機構をRISC-Vコアに追加
– 特許申請中 (東京エレクトロンと共同申請)
– GnuPrologのコンパイルド・バイナリを加速
● ハードウェア・マルチスレッド機構
– OSソフトウェア一切なしで、スレッド切り替え
– ハードウェア・セマフォで排他/同期。LR/SCもある
– 外部ピンからの入力で、スレッド起床(ハードウェアのみで)
– 割り込みなし(割り込み相当の処理は、専用スレッドで)
● ROS2 ”
通信ハードウェア ROS2 rapper”を搭載
– CPUの助けなしにROS2通信
● 外部I/O: Ethernet I/F, 任意波形生成器(AWG(PWMにもなる)), GPIO
エッジデバイスでも
大脳的処理を!
OSプログラム・コード
OSワーキング・エリア
不要!
OS 不要!
オレ達のCPU「松竹V(しょうちくぶい)」
ROS2プロトコルを完全ハードウェア化
●
ソフトウェア技術者がハードウェア論理を書き、LSI化。現実に!
●
OSSとして、配布を準備中
●
LGPLと AXEプロプライエタリの、ダブル・ライセンスを検討中
●
CPU無しで、ロボットの部品モジュールができる
●
センサとROS2プロトコルHWだけで、センサ・モジュール
●
PWMとROS2プロトコルHWだけで、アクチュエータ・モジュール
●
アプリケーションはC言語で書いておけば、
すぐハードウェア論理に合成
●
ロボット部品が、ゴミのようなLSIでできる ← CPU不要
●
CPU脳の敗北
●
ハードウェアなので、堅牢かつ高速。そしてコンパクト
※ROS2ハードウェアには、コンフィギュレーション用のPROMがあることが望ましい
PWM
センサ
& ADC
ROS2
ハードウェア
ROS2
ハードウェア
Ether IF
+ Phy
Ether IF
+ Phy
ROS2
アプリ
(C言語記述)
ROS2
アプリ
(C言語記述)
ロボット司令
モジュール
AXEでは、ROS2プロトコルを完全ハードウェア化した”ROS2rapper”
Arty A7-35ボード
(xc7a35ti-csg324-1Lチップ)
において
FPGA使用資源
●
LUT: 33666
●
FF: 13087
最大周波数: 121.01MHz
送信パケット生成 所要時間:
●
IPデータグラム生成複数サイクル版:
●
14サイクル=140nsec@100MHz
●
IPデータグラム生成1サイクル板):
●
8サイクル=160nsec@50MHz
受信 処理時間:
●
46サイクル=460nsec@100MHz
GNU-Prolog実行の高速化
●
Lisp, Prologなどの高級言語は、動的に型チェックして、
手続きをディスパッチする
目標
● GNU-Prolog のコンパイルド・コードにおいて、Prolog節の
実行を高速化する
方策
●
レジスタ間接レジスタ指定命令を追加し、手続きディスパ
ッチを高速化する
● GNU-Prolog の WAM コードで
は、switch_on_term で 1つめの arity の型(変数/ア
トム/整数/リスト/構造体)によって分岐する
● 分岐先で各arityの値をチェックする
foo(1, a, X) :- bar(1, X).
foo(a, [c,d], X) :- bar(2, X).
foo([a,b], c(d), X) :- bar(3, X).
foo(a(b), 1, X) :- bar(4, X).
GNU-PrologのWAMコード
predicate(foo/3,1,static,private,monofile,global,[
switch_on_term(1,4,2,6,8),
label(1),
try_me_else(3),
label(2),
get_integer(1,0),
get_atom(a,1),
put_value(x(2),1),
put_integer(1,0),
execute(bar/2),
label(3),
retry_me_else(5),
label(4),
get_atom(a,0),
get_list(1),
unify_atom(c),
unify_list,
unify_atom(d),
unify_nil,
put_value(x(2),1),
put_integer(2,0),
execute(bar/2),
label(5),
retry_me_else(7),
label(6),
get_list(0),
unify_atom(a),
unify_list,
unify_atom(b),
unify_nil,
(以下略)
Pl_Switch_On_Term()の内容
CodePtr FC
Pl_Switch_On_Term(CodePtr c_var,
CodePtr c_atm, CodePtr c_int,
CodePtr c_lst, CodePtr c_stc)
{
WamWord word, tag_mask;
CodePtr codep;
DEREF(A(0), word, tag_mask);
A(0) = word;
if (tag_mask == TAG_INT_MASK)
codep = c_int;
else if (tag_mask == TAG_ATM_MASK)
codep = c_atm;
else if (tag_mask == TAG_LST_MASK)
codep = c_lst;
else if (tag_mask == TAG_STC_MASK)
codep = c_stc;
else /* REF or FDV */
codep = c_var;
return (codep) ? codep : ALTB(B);
}
● ランタイム関数 Pl_Switch_On_Term() では、1
つめのarityであるA(0)のタグ(下位3ビット)によ
って、次に実行する分岐先を返すようになって
いる
高速化対象: GNU-Prologの80x86(64bit)版オブジェクト(アセンブリ・コード)
● GNU-Prolog のアセンブリコードでは、WAM(Prolog中間 仮
装マシン)のswitch_on_termに対応するランタイム関数
Pl_Switch_On_Term() を呼んでいる
● その返り値でジャンプしている
ここで、
● レジスタ間接によるレジスタ指定ができる新命令を追加
○ 特にジャンプ命令
○ ロード命令、ストア命令
● 例えば、WAMコード switch_on_term をアセンブリ・コード
にする場合に、型を示すタグ(3bit)によって、レジスタ間接に
よって指定されたレジスタの値(アドレス)にジャンプすると
高速になる
● すなわち
call Pl_Switch_On_Term@PLT ;サブルーチン・コールなので、とても遅い
jmp *%rax
● を、下記1命令で置き換えて、高速化
branch_reg_indirect IREG ; pc ← pc + xreg[IREG]
X0_foo__a3:
movq Lpred1_1@GOTPCREL(%rip),%rdi
movq Lpred1_4@GOTPCREL(%rip),%rsi
movq Lpred1_2@GOTPCREL(%rip),%rdx
movq Lpred1_6@GOTPCREL(%rip),%rcx
movq Lpred1_8@GOTPCREL(%rip),%r8
call Pl_Switch_On_Term@PLT
jmp *%rax
Lpred1_1:
movq Lpred1_3@GOTPCREL(%rip),%rdi
call Pl_Create_Choice_Point3@PLT
Lpred1_2:
movq $15,%rdi
movq 0(%r12),%rsi
call Pl_Get_Integer_Tagged@PLT
test %rax,%rax
je fail
(略)
jmp X0_bar__a2@PLT
Lpred1_3:
movq Lpred1_5@GOTPCREL(%rip),%rdi
call Pl_Update_Choice_Point3@PLT
Lpred1_4:
movq ta@GOTPCREL(%rip),%rdi
movq 0(%rdi),%rdi
movq 0(%r12),%rsi
call Pl_Get_Atom_Tagged@PLT
test %rax,%rax
je fail
(略)
jmp X0_bar__a2@PLT
Lpred1_5:
movq Lpred1_7@GOTPCREL(%rip),%rdi
call Pl_Update_Choice_Point3@PLT
Lpred1_6:
movq 0(%r12),%rdi
call Pl_Get_List@PLT
test %rax,%rax
je fail
(以下略)
ここを、レジスタの値で指定した
レジスタの内容の番地に
jumpするようなコードに変更する
(コンパイラが新命令を使用するように変更)
新命令「 branch_reg_indirect %rax 」
で置き換えて、高速化
RISC-V 64bit Gnu Prolog コンパイルド・バイナリ
gplcでコンパイル
した native code
objdump -d の一部
00000000000096b8 <X0_ap__a3>:
96b8: 00000517 auipc a0,0x0
96bc: 02050513 addi a0,a0,32 # 96d8 <X0_ap__a3+0x20>
96c0: 00000597 auipc a1,0x0
96c4: 02458593 addi a1,a1,36 # 96e4 <X0_ap__a3+0x2c>
96c8: 00000617 auipc a2,0x0
96cc: 05460613 addi a2,a2,84 # 971c <X0_ap__a3+0x64>
96d0: 014900ef jal ra,996e4 <Pl_Switch_On_Term_Var_Atm_Lst>
96d4: 00050067 jr a0
96d8: 00000517 auipc a0,0x0
96dc: 04050513 addi a0,a0,64 # 9718 <X0_ap__a3+0x60>
976c: 00ab3823 sd a0,16(s6)
9770: f49ff06f j 96b8 <X0_ap__a3>
9774: 00000013 nop
%%% Prologソース
ap([],Y,Y).
ap([A|X],Y,[A|Z]) :- ap(X,Y,Z).
%% ap(X,Y,[a,b,c]).
レジスタ間接レジスタ指定命令
● レジスタ間接によるレジスタ指定ができる命令を追加
○ ジャンプ命令、ロード命令、ストア命令
● 例えば、WAMコード switch_on_term をアセンブリ・コードにする場合に、型
を示すタグ(3bit)によって、レジスタ間接によって指定されたレジスタの値
(アドレス)にジャンプすると高速になる
レジスタ間接レジスタ指定 命令

branch_reg_indirect IREG
pc ← pc + xreg[IREG] ; xreg[n]は、n番の汎用レジスタ
※オプションでra←pc を行う(Branch_and_Link, call)

jump_reg_indirect IREG1,REG2
pc ← xreg[IREG1] + REG2
※オプションでra←pc を行う(JAL,call)

mov_reg_regindirect dst,ireg
dst ← xreg[ireg]

mov_regindirect_reg ireg,src
xreg[ireg]←src
0x300000
0x400100
0x500000
:
6
x5
x6
x7
x28
x28
IREGがx28のときその内容
「6」でX6が指される。
参照の場合、実効値
0x400100
CPU脳をたたき直す 自由ASIC時代
●
「CPU脳」な人類を、パラダイムシフト
●
CPU抜き アーキテクチャを、すすめる
●
外からのデータは順番にやってくる
●
データの処理は、データフローのままに…!
●
データフロー = パイプライン
●
新しい細粒度 高並列アーキテクチャの時代
●
1port RAMをやめさせる、D-FFを使わせる
●
同時並列にバラバラにデータ・アクセスさせる
処理パス1
PWM
I2C(in) I2C(out)
処理パス2 処理パス3b
処理パス3a
※I2CはIn/Outは、通信線が共通なので、適切な調停(排他制御)を
メモリ
以上

More Related Content

PDF
あるRISC-V CPUの 浮動小数点数(異常なし)
PPTX
Linuxのsemaphoreとmutexを見る 
PDF
ハイパースレッディングの並列化への影響
PDF
あなたのScalaを爆速にする7つの方法(日本語版)
PDF
PPL 2022 招待講演: 静的型つき函数型組版処理システムSATySFiの紹介
PDF
Ibis: すごい pandas ⼤規模データ分析もらっくらく #summerDS
PPTX
RustによるGPUプログラミング環境
PDF
2015年度GPGPU実践プログラミング 第7回 総和計算
あるRISC-V CPUの 浮動小数点数(異常なし)
Linuxのsemaphoreとmutexを見る 
ハイパースレッディングの並列化への影響
あなたのScalaを爆速にする7つの方法(日本語版)
PPL 2022 招待講演: 静的型つき函数型組版処理システムSATySFiの紹介
Ibis: すごい pandas ⼤規模データ分析もらっくらく #summerDS
RustによるGPUプログラミング環境
2015年度GPGPU実践プログラミング 第7回 総和計算

What's hot (20)

PDF
x86とコンテキストスイッチ
PPT
Glibc malloc internal
PDF
組み込み関数(intrinsic)によるSIMD入門
PDF
線形計画法入門
PDF
俺のSoC, AX1001 ができたぞー. AX1001:the SoC for edge Devices and robot modules,
PDF
高位合成でDeep learning
PDF
自宅サーバラックの勧め BGP4編
PPTX
Slurmのジョブスケジューリングと実装
PDF
Linux binary Exploitation - Basic knowledge
PDF
Docker Compose 徹底解説
PPTX
いまさら話題のXML
PDF
CTF for ビギナーズ ネットワーク講習資料
PDF
ARでVRアバターを表示するシステムを構築しよう
PDF
WebAssembly向け多倍長演算の実装
PDF
乱択データ構造の最新事情 -MinHash と HyperLogLog の最近の進歩-
PDF
160428 東工大「ロボット技術」授業資料
PDF
02 第3.1節-第3.5節 ROS2の基本機能(1/2) ROS2勉強合宿 @別府温泉
PDF
2015年度GPGPU実践プログラミング 第8回 総和計算(高度な最適化)
PDF
DockerとPodmanの比較
PDF
Test Yourself - テストを書くと何がどう変わるか
x86とコンテキストスイッチ
Glibc malloc internal
組み込み関数(intrinsic)によるSIMD入門
線形計画法入門
俺のSoC, AX1001 ができたぞー. AX1001:the SoC for edge Devices and robot modules,
高位合成でDeep learning
自宅サーバラックの勧め BGP4編
Slurmのジョブスケジューリングと実装
Linux binary Exploitation - Basic knowledge
Docker Compose 徹底解説
いまさら話題のXML
CTF for ビギナーズ ネットワーク講習資料
ARでVRアバターを表示するシステムを構築しよう
WebAssembly向け多倍長演算の実装
乱択データ構造の最新事情 -MinHash と HyperLogLog の最近の進歩-
160428 東工大「ロボット技術」授業資料
02 第3.1節-第3.5節 ROS2の基本機能(1/2) ROS2勉強合宿 @別府温泉
2015年度GPGPU実践プログラミング 第8回 総和計算(高度な最適化)
DockerとPodmanの比較
Test Yourself - テストを書くと何がどう変わるか
Ad

Similar to 俺ASICと俺CPU“松竹V(しょうちくぶい)” (20)

PDF
HaskellではじめるCortex-M3組込みプログラミング
PDF
io tつくるよ! LT [m5stackの拡張基板をつくったよ!」
PPTX
M5Stackの拡張基板を作ってjimmyに届けた話
PDF
C base design methodology with s dx and xilinx ml
PPTX
機械学習 / Deep Learning 大全 (6) Library編
PDF
第162回情報処理学会ハイパフォーマンスコンピューティング研究発表会
PDF
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
PDF
StackExchangeで見たシステムプログラミング案件
PDF
RTミドルウエア講習会2015
PDF
【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう
PDF
GTC Japan 2017
PDF
seccamp2012 チューター発表
PDF
プログラムを高速化する話Ⅱ 〜GPGPU編〜
PDF
Amazon Elasticsearch Service & Open Distro for Elasticsearch Meetup
PDF
EmbulkのGCS/BigQuery周りのプラグインについて
PPTX
M5Stack互換機を作った話
PDF
Matrix signal controller and BrainPad overview
PDF
Imaocande LT
PDF
CCMSI計算科学技術特論A (2015) 第7回 線形代数演算ライブラリBLASとLAPACKの基礎と実践2
PDF
OSC2013 Tokyo/Spring JOSUG
HaskellではじめるCortex-M3組込みプログラミング
io tつくるよ! LT [m5stackの拡張基板をつくったよ!」
M5Stackの拡張基板を作ってjimmyに届けた話
C base design methodology with s dx and xilinx ml
機械学習 / Deep Learning 大全 (6) Library編
第162回情報処理学会ハイパフォーマンスコンピューティング研究発表会
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
StackExchangeで見たシステムプログラミング案件
RTミドルウエア講習会2015
【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう
GTC Japan 2017
seccamp2012 チューター発表
プログラムを高速化する話Ⅱ 〜GPGPU編〜
Amazon Elasticsearch Service & Open Distro for Elasticsearch Meetup
EmbulkのGCS/BigQuery周りのプラグインについて
M5Stack互換機を作った話
Matrix signal controller and BrainPad overview
Imaocande LT
CCMSI計算科学技術特論A (2015) 第7回 線形代数演算ライブラリBLASとLAPACKの基礎と実践2
OSC2013 Tokyo/Spring JOSUG
Ad

More from たけおか しょうぞう (20)

PDF
the original SoC "ORE_SoC" with "ROS2rapper"
PDF
俺SoC (Laxer Chip, AX1001)の Prolog加速命令.New multiple branch instruction for RIS...
PDF
Using Retro-CPU with low aspirations, No FPGA
PDF
"ros2rapper", Hardware implimentation of ROS2 communication Protocol without ...
PDF
いにしえ的ななにか、カニか? RISC-V picoRV32, e203 改造 オレオレ命令追加した
PDF
SOAR:Smalltalk on RISC
PDF
RISC-Vの可能性
PDF
RISC-Vの可能性
PDF
どうして昔の人は八進数でしゃべるのか?
PDF
PDF
Takep lpc1114-190614
PDF
Takep lpc1114-190613
PDF
初歩的な部品の知識
PDF
PDF
Lisp_chibi_machine 190427
PDF
無脳スマートスピーカを 越えレレレのレ
PDF
Common Lisp ユーザへのScheme紹介
PDF
RISC-V User level ISA
PDF
Lispマシン・シミュレータの紹介
PDF
昔の外付けキャッシュ & コヒーレント・キャッシュ
the original SoC "ORE_SoC" with "ROS2rapper"
俺SoC (Laxer Chip, AX1001)の Prolog加速命令.New multiple branch instruction for RIS...
Using Retro-CPU with low aspirations, No FPGA
"ros2rapper", Hardware implimentation of ROS2 communication Protocol without ...
いにしえ的ななにか、カニか? RISC-V picoRV32, e203 改造 オレオレ命令追加した
SOAR:Smalltalk on RISC
RISC-Vの可能性
RISC-Vの可能性
どうして昔の人は八進数でしゃべるのか?
Takep lpc1114-190614
Takep lpc1114-190613
初歩的な部品の知識
Lisp_chibi_machine 190427
無脳スマートスピーカを 越えレレレのレ
Common Lisp ユーザへのScheme紹介
RISC-V User level ISA
Lispマシン・シミュレータの紹介
昔の外付けキャッシュ & コヒーレント・キャッシュ

俺ASICと俺CPU“松竹V(しょうちくぶい)”

  • 2. 日本の半導体 産業 復興! 技術者 不足をStop!日本の半導体 産業 復興! • OSSの開発ツールで、LSI 開発 ● 無料ツールの使い手が増える → 技術者不足 解消! ● 半導体 設計 技術者 ● 論理回路 設計 技術者 • 半導体 工場は、「お高くない」ものもある ● 65nm とか、安くて かなりいい みんなのLSI 俺のASIC LSI LSI開発の民主化だっ 開発の民主化だっ!!! !!! • Googleなどが、OSSを使用して、LSI開発の民主化を行っている。2020年ごろより • 日本政府も、半導体産業 復興を行う ● LSI開発者の裾野を広げる ● 零細企業でも、LSI設計ができる時代になった ● Open EDA, OpenLANEを活用(Googleにならう) ● OSSのハードウェア開発ツールを使用 • 専用LSIは、低消費電力=持続可能社会に貢献 ● 汎用CPU, Intel x86は電力消費が大きすぎる Googleがカスタム半導体の民主化・自由化を推進
  • 3. Googleがカスタム半導体の民主化・自由化を推進  GoogleがスポンサとなりMPWシャトル・サービスを、無料で提供  MPW(Multi-project wafer):  さまざまな顧客からの異なる半導体チップを1枚のウェハで製 造する  Skywater社で製造  50万円〜100万円出せば、作ってくれる道筋もある  130nmプロセスのアナログ・デジタル混載LSIを作る FOSSi(Free and Open Source Silicon Foundation)  無料のオープンデジタルハードウェア設計のエコシステムを支援  非営利団体  [FOSSi Dial-Up] Tim Ansell - Skywater PDK: Fully open source manufacturable PDK for a 130nm process https://www.youtube.com/watch?v=EczW2IWdnOM  日本人 河崎氏は、NEDO資金を受け、実際に、LSIを開発した ※河崎氏は、RISC-V Foundation ボードメンバで、JASA RISC-V WGメンバでもある
  • 4. 回路検証 (icarus) 回路合成 (yosys) STA (vesta) ロジック部開発フロー OSS EDAに必要な ライブラリ ↓ 回路設計 (Editor) OSSによるLSI開発のEDAフロー StdCell Verilog model StdCell .libファイル StdCell Verilog Model (vesta) Place (Graywolf) Router (Qroute) STA (vesta) DRC/LVS (klayout) StdCell LEF StdCell LEF StdCell Verilog model Technology file ● OSS EDAに必要なライブラリは Fabのデータから変換が必要 ● OpenRAM、PLL、アナログは別なフローになる 配線 確認 配置。このあたりにPDKが必要 PDKが、ついにOSSに ● ある特定の半導体プロセスで回路設計を行う際に 必要な設計情報 ● トランジスタ配置の制約条件などが書かれている
  • 5. GAFAなどが自社向け半導体の開発 に力を入れる理由  データセンタの消費電力 削減  自社製 専用半導体で電力削減  設計技術だけで自社半導体はできる  半導体工場レス  RTL(デジタル論理)設計ができれば  専用アルゴリズム用LSI  オーダーメイドICは、FPGAでは不満  FPGAは消費電力 大  FPGAは遅い
  • 6. 国内 ● 政府が、LSI産業 再興 – JASAにも、経産省から LSI 開発者 教育についてヒアリングが来て、私もJASA技術本部 長として応えました。 ● LSI開発者の裾野を広げたい – 産業技術総合研究所なども、OpenEDAに注目 ● ふくおかIST(公益財団法人 福岡県産業・科学技術振興財団) 福岡システムLSI総合開発センター「システムLSI設計試作センター」 ● http://www.ist.or.jp/lsi/pg04_02.html ● ここで使用されているツールはほとんどがOSS – NEC Cyber Work Bench程度が商品  ベンチャー企業が半導体の設計ツールを安価で利用できる  LSI設計、 少量 試作できる ● 50〜100万円 あれば、LSIの少量生産ができる仕組みがある
  • 7. ミニマルファブ 一般社団法人 ミニマルファブ推進機構 MINIMAL(Minimal Fab Promoting Organization)は、 半導体、MEMSなどマイクロデバイスの多品種少量生産を可能とする革新的な 産業システム(ミニマルファブ)の発展と普及を支援する世界唯一の団体です。 https://www.minimalfab.com/ ● 半導体 1個を手作りで作れる ● 手間は掛かるが、費用は超安い https://www.semiconportal.com/archive/editorial/conference/r eport/130705-minimalfab.html?print より引用
  • 8. 現在 開発中の オレのSoC ● 省電力、省メモリ ● ロボットの部品モジュールがローコストで簡単に作れる ● 論理推論加速 機構をRISC-Vコアに追加 – 特許申請中 (東京エレクトロンと共同申請) – GnuPrologのコンパイルド・バイナリを加速 ● ハードウェア・マルチスレッド機構 – OSソフトウェア一切なしで、スレッド切り替え – ハードウェア・セマフォで排他/同期。LR/SCもある – 外部ピンからの入力で、スレッド起床(ハードウェアのみで) – 割り込みなし(割り込み相当の処理は、専用スレッドで) ● ROS2 ” 通信ハードウェア ROS2 rapper”を搭載 – CPUの助けなしにROS2通信 ● 外部I/O: Ethernet I/F, 任意波形生成器(AWG(PWMにもなる)), GPIO エッジデバイスでも 大脳的処理を! OSプログラム・コード OSワーキング・エリア 不要! OS 不要! オレ達のCPU「松竹V(しょうちくぶい)」
  • 9. ROS2プロトコルを完全ハードウェア化 ● ソフトウェア技術者がハードウェア論理を書き、LSI化。現実に! ● OSSとして、配布を準備中 ● LGPLと AXEプロプライエタリの、ダブル・ライセンスを検討中 ● CPU無しで、ロボットの部品モジュールができる ● センサとROS2プロトコルHWだけで、センサ・モジュール ● PWMとROS2プロトコルHWだけで、アクチュエータ・モジュール ● アプリケーションはC言語で書いておけば、 すぐハードウェア論理に合成 ● ロボット部品が、ゴミのようなLSIでできる ← CPU不要 ● CPU脳の敗北 ● ハードウェアなので、堅牢かつ高速。そしてコンパクト ※ROS2ハードウェアには、コンフィギュレーション用のPROMがあることが望ましい PWM センサ & ADC ROS2 ハードウェア ROS2 ハードウェア Ether IF + Phy Ether IF + Phy ROS2 アプリ (C言語記述) ROS2 アプリ (C言語記述) ロボット司令 モジュール AXEでは、ROS2プロトコルを完全ハードウェア化した”ROS2rapper” Arty A7-35ボード (xc7a35ti-csg324-1Lチップ) において FPGA使用資源 ● LUT: 33666 ● FF: 13087 最大周波数: 121.01MHz 送信パケット生成 所要時間: ● IPデータグラム生成複数サイクル版: ● 14サイクル=140nsec@100MHz ● IPデータグラム生成1サイクル板): ● 8サイクル=160nsec@50MHz 受信 処理時間: ● 46サイクル=460nsec@100MHz
  • 10. GNU-Prolog実行の高速化 ● Lisp, Prologなどの高級言語は、動的に型チェックして、 手続きをディスパッチする 目標 ● GNU-Prolog のコンパイルド・コードにおいて、Prolog節の 実行を高速化する 方策 ● レジスタ間接レジスタ指定命令を追加し、手続きディスパ ッチを高速化する
  • 11. ● GNU-Prolog の WAM コードで は、switch_on_term で 1つめの arity の型(変数/ア トム/整数/リスト/構造体)によって分岐する ● 分岐先で各arityの値をチェックする foo(1, a, X) :- bar(1, X). foo(a, [c,d], X) :- bar(2, X). foo([a,b], c(d), X) :- bar(3, X). foo(a(b), 1, X) :- bar(4, X). GNU-PrologのWAMコード predicate(foo/3,1,static,private,monofile,global,[ switch_on_term(1,4,2,6,8), label(1), try_me_else(3), label(2), get_integer(1,0), get_atom(a,1), put_value(x(2),1), put_integer(1,0), execute(bar/2), label(3), retry_me_else(5), label(4), get_atom(a,0), get_list(1), unify_atom(c), unify_list, unify_atom(d), unify_nil, put_value(x(2),1), put_integer(2,0), execute(bar/2), label(5), retry_me_else(7), label(6), get_list(0), unify_atom(a), unify_list, unify_atom(b), unify_nil, (以下略)
  • 12. Pl_Switch_On_Term()の内容 CodePtr FC Pl_Switch_On_Term(CodePtr c_var, CodePtr c_atm, CodePtr c_int, CodePtr c_lst, CodePtr c_stc) { WamWord word, tag_mask; CodePtr codep; DEREF(A(0), word, tag_mask); A(0) = word; if (tag_mask == TAG_INT_MASK) codep = c_int; else if (tag_mask == TAG_ATM_MASK) codep = c_atm; else if (tag_mask == TAG_LST_MASK) codep = c_lst; else if (tag_mask == TAG_STC_MASK) codep = c_stc; else /* REF or FDV */ codep = c_var; return (codep) ? codep : ALTB(B); } ● ランタイム関数 Pl_Switch_On_Term() では、1 つめのarityであるA(0)のタグ(下位3ビット)によ って、次に実行する分岐先を返すようになって いる
  • 13. 高速化対象: GNU-Prologの80x86(64bit)版オブジェクト(アセンブリ・コード) ● GNU-Prolog のアセンブリコードでは、WAM(Prolog中間 仮 装マシン)のswitch_on_termに対応するランタイム関数 Pl_Switch_On_Term() を呼んでいる ● その返り値でジャンプしている ここで、 ● レジスタ間接によるレジスタ指定ができる新命令を追加 ○ 特にジャンプ命令 ○ ロード命令、ストア命令 ● 例えば、WAMコード switch_on_term をアセンブリ・コード にする場合に、型を示すタグ(3bit)によって、レジスタ間接に よって指定されたレジスタの値(アドレス)にジャンプすると 高速になる ● すなわち call Pl_Switch_On_Term@PLT ;サブルーチン・コールなので、とても遅い jmp *%rax ● を、下記1命令で置き換えて、高速化 branch_reg_indirect IREG ; pc ← pc + xreg[IREG] X0_foo__a3: movq Lpred1_1@GOTPCREL(%rip),%rdi movq Lpred1_4@GOTPCREL(%rip),%rsi movq Lpred1_2@GOTPCREL(%rip),%rdx movq Lpred1_6@GOTPCREL(%rip),%rcx movq Lpred1_8@GOTPCREL(%rip),%r8 call Pl_Switch_On_Term@PLT jmp *%rax Lpred1_1: movq Lpred1_3@GOTPCREL(%rip),%rdi call Pl_Create_Choice_Point3@PLT Lpred1_2: movq $15,%rdi movq 0(%r12),%rsi call Pl_Get_Integer_Tagged@PLT test %rax,%rax je fail (略) jmp X0_bar__a2@PLT Lpred1_3: movq Lpred1_5@GOTPCREL(%rip),%rdi call Pl_Update_Choice_Point3@PLT Lpred1_4: movq ta@GOTPCREL(%rip),%rdi movq 0(%rdi),%rdi movq 0(%r12),%rsi call Pl_Get_Atom_Tagged@PLT test %rax,%rax je fail (略) jmp X0_bar__a2@PLT Lpred1_5: movq Lpred1_7@GOTPCREL(%rip),%rdi call Pl_Update_Choice_Point3@PLT Lpred1_6: movq 0(%r12),%rdi call Pl_Get_List@PLT test %rax,%rax je fail (以下略) ここを、レジスタの値で指定した レジスタの内容の番地に jumpするようなコードに変更する (コンパイラが新命令を使用するように変更) 新命令「 branch_reg_indirect %rax 」 で置き換えて、高速化
  • 14. RISC-V 64bit Gnu Prolog コンパイルド・バイナリ gplcでコンパイル した native code objdump -d の一部 00000000000096b8 <X0_ap__a3>: 96b8: 00000517 auipc a0,0x0 96bc: 02050513 addi a0,a0,32 # 96d8 <X0_ap__a3+0x20> 96c0: 00000597 auipc a1,0x0 96c4: 02458593 addi a1,a1,36 # 96e4 <X0_ap__a3+0x2c> 96c8: 00000617 auipc a2,0x0 96cc: 05460613 addi a2,a2,84 # 971c <X0_ap__a3+0x64> 96d0: 014900ef jal ra,996e4 <Pl_Switch_On_Term_Var_Atm_Lst> 96d4: 00050067 jr a0 96d8: 00000517 auipc a0,0x0 96dc: 04050513 addi a0,a0,64 # 9718 <X0_ap__a3+0x60> 976c: 00ab3823 sd a0,16(s6) 9770: f49ff06f j 96b8 <X0_ap__a3> 9774: 00000013 nop %%% Prologソース ap([],Y,Y). ap([A|X],Y,[A|Z]) :- ap(X,Y,Z). %% ap(X,Y,[a,b,c]).
  • 15. レジスタ間接レジスタ指定命令 ● レジスタ間接によるレジスタ指定ができる命令を追加 ○ ジャンプ命令、ロード命令、ストア命令 ● 例えば、WAMコード switch_on_term をアセンブリ・コードにする場合に、型 を示すタグ(3bit)によって、レジスタ間接によって指定されたレジスタの値 (アドレス)にジャンプすると高速になる
  • 16. レジスタ間接レジスタ指定 命令  branch_reg_indirect IREG pc ← pc + xreg[IREG] ; xreg[n]は、n番の汎用レジスタ ※オプションでra←pc を行う(Branch_and_Link, call)  jump_reg_indirect IREG1,REG2 pc ← xreg[IREG1] + REG2 ※オプションでra←pc を行う(JAL,call)  mov_reg_regindirect dst,ireg dst ← xreg[ireg]  mov_regindirect_reg ireg,src xreg[ireg]←src 0x300000 0x400100 0x500000 : 6 x5 x6 x7 x28 x28 IREGがx28のときその内容 「6」でX6が指される。 参照の場合、実効値 0x400100
  • 17. CPU脳をたたき直す 自由ASIC時代 ● 「CPU脳」な人類を、パラダイムシフト ● CPU抜き アーキテクチャを、すすめる ● 外からのデータは順番にやってくる ● データの処理は、データフローのままに…! ● データフロー = パイプライン ● 新しい細粒度 高並列アーキテクチャの時代 ● 1port RAMをやめさせる、D-FFを使わせる ● 同時並列にバラバラにデータ・アクセスさせる 処理パス1 PWM I2C(in) I2C(out) 処理パス2 処理パス3b 処理パス3a ※I2CはIn/Outは、通信線が共通なので、適切な調停(排他制御)を メモリ