狠狠撸

狠狠撸Share a Scribd company logo
ScalaでASICやFPGA用の回路を
設計するChisel
@muo_jp 2017/09/09 Scala関西Summit LT
発表者(@muo_jp)のScala歴
? 仕事の合間に2年ぐらいじわじわと
読んできたもの:
? Scala関数型デザイン&プログラミング(FP in Scala)
? https://tatsu-zine.com/books/functional-programming-in-scala
? Scalaパズル
? http://www.shoeisha.co.jp/book/detail/9784798145037
? Scala研修テキスト(ドワンゴ社)
? https://dwango.github.io/scala_text/
Scala関数型デザイン&
プログラミング(FP in Scala)
Scalaパズル Scala研修テキスト(ドワンゴ社)
→ 共通点???
Scala関数型デザイン&
プログラミング(FP in Scala)
Scalaパズル Scala研修テキスト(ドワンゴ社)
→ タイトルにScalaと
入ってる!
Scala関数型デザイン&
プログラミング(FP in Scala)
Scalaパズル Scala研修テキスト(ドワンゴ社)
ではなくて
Scala関数型デザイン&
プログラミング(FP in Scala)
Scalaパズル Scala研修テキスト(ドワンゴ社)
→ SparkもAkkaも
Play Frameworkも出てこない
Scala for Data Analysis
Scala for Cloud Services
Scala for Mobile Applications
...
Scala for Data Analysis
Scala for Cloud Services
Scala for Mobile Applications
...
Scala for Hardware Construction ←ココ
Scalaで
デジタル回路を
設計する??
Chisel 3
? Scalaでデジタル回路を設計/テストする為のクラス/ツール群
? デジタル回路? →論理ゲートの山と内部メモリ(フリップフ
ロップ)の山と各種接続やI/Oなど
? カリフォルニア大学バークレー校(UCB) の研究室発
? https://chisel.eecs.berkeley.edu/
? Haskell界隈でLavaを知っている人には話が早い
? 高位合成系ではない
Chisel 3のアーキテクチャ
Chisel
ソースコード
.scala
FIRRTL
中間表現
Verilog
HDL
Chisel用
テストコード
商用シミュレータ
各種EDAツール
Verilator
モジュール
シミュレータ
テスト
ランナー
作例
作例(Maker Faire Tokyo 2016展示物)
厂肠补濒补で础厂滨颁や贵笔骋础用の回路を设计する颁丑颈蝉别濒
class TmdsEncoder extends Module {
val io = IO(new Bundle {
val disp_ena = Input(Bool())
val control = Input(UInt(2.W))
val d_in = Input(UInt(8.W))
val q_out = Output(UInt(10.W))
val test_io = new Bundle {
val p0 = Output(SInt(8.W))
val p1 = Output(SInt(8.W))
}
})
io.q_out := 0.U
val q_m = Wire(UInt(9.W))
val ones_din = Wire(UInt(4.W))
val ones_q_m = Wire(UInt(4.W))
val diff_q_m = Wire(SInt(8.W))
val disparity = Wire(SInt(8.W))
val disparity_reg = RegInit(0.S(8.W))
TMDS変換回路(部分)
厂肠补濒补で础厂滨颁や贵笔骋础用の回路を设计する颁丑颈蝉别濒
Q. まあ理想は高いお遊び系のものでしょ?
A. 実世界での利用実績
? Rocket Chip Generator、BOOM
? RISC-Vアーキテクチャ(RV64G)CPUのリファレンス的実装
? FPGA動作だけではなくASIC化実績がすでに複数回ある
? https://github.com/freechipsproject/rocket-chip https://github.com/ucb-bar/riscv-boom/
? OpenSoC Fabric (DoE CoDExプログラム)
? SoC内でコア同士を連携させる部分(NoC)
? http://www.opensocfabric.org/
Chiselの嬉しいところ
? ソフトウェアロジックとして書いたScalaコードとChiselのスタイル
で設計した回路の出力を突き合わせてテストするのが基本
? ソフトウェア方面の方法論を取り込んでハードウェア開発を加速し
よう、という人々によって推進されている
? Verilog HDLコードの生成部分がFIRRTLという中間言語レイヤ
(Scala製)に切り出されている
? これに乗っかって比較的簡単にオレオレHDLを組める
? → 自分でC#-embeddedなHDLを試作してみた例
参考文献
? https://github.com/freechipsproject/chisel3/wiki
? 公式wiki
? https://chisel.eecs.berkeley.edu/chisel-dac2012.pdf
? 論文形式のほうが読みやすい方向け(旧バージョンのためアーキテクチャ差あり)
? https://techbooster.booth.pm/items/299592
? The Web Explorer 2「第8章 Scalaでイージーにハードを設計する」(拙著)
? https://www.muo.jp/2016/08/mft2016-chisel-booklet.html
? Maker Faire Tokyo 2016での頒布冊子(拙著)
? http://www.kumikomi.net/fpga/contents/0018.php
? FPGAマガジンNo.18「第1章 これでスッキリ!RISC-Vを取り巻く現状」内(拙著)
? FPGAマガジンNo.19 2017/10/25発売号
? Chisel 3の簡単な入門とワークフロー紹介を掲載予定(拙著)
Let’s construct
digital circuits
in Scala!

More Related Content

厂肠补濒补で础厂滨颁や贵笔骋础用の回路を设计する颁丑颈蝉别濒