2019-11-01から1ヶ月間の記事一覧
FIRRTLで配列を扱えるように改造を行っている。単純に、配列をキープしながらFIRRTLの処理を進めていくことは可能なのだが、例えば以下のような状態が発生ると問題だ。下記の状況では、Bundleによる構造体が配列で複数定義されているような状態になる。 circ…
Chiselを書いていると、Chiselには基本的にクロックとリセットという概念が存在しない。 クロック信号とリセット信号は隠されており、普段は見える事は無いのだが、一応扱うことは可能だ。 例えば、特定のモジュールに対してクロックゲーティングを挿入する…
FIRRTLの解析に際し、BundleTypeとVecTypeの解析を行っている。LowerType()の中で、どのように変換されているのか解析をする。 以下の3つのコードを用意した。 circuit VecModules : module VecModules : input in: UInt<32>[4] input sel: UInt<2> output o…
Chipyardに含まれるデザインには、InclusiveCacheと呼ばれるL2キャッシュに相当するもの?が含まれていた。 これまでにRocket-ChipにはL2に相当するものは含まれていなかったので面白そうだ。 まずはデザインを生成してみよう。 https://chipyard.readthedoc…
Chisel/FIRRTLのBundleを使用すると、SystemVerilogのstructやインタフェースのように信号を扱うことができる。 circuit BundleTest : module BundleTest : input in: { a : UInt<32>, b : UInt<32> } output out : { a : UInt<32>, ans: UInt<32> } これをV…
Chiselで配列を出力するために試行錯誤してみる。 まず、試行する中で余計な処理をするコードを片っ端から省いていく。ここは最適化に影響しそうなところだが、とりあえず無視。 diff --git a/src/main/scala/firrtl/Emitter.scala b/src/main/scala/firrtl/…
ChiselからVerilogを生成すると、配列参照の記述は最終的に除去され、とんでもないVerilogが生成されることはよくある。 これをVerilogでそのまま配列で出力する方法を探しているのだが、試行錯誤でなかなかうまく進まない。 まず、passes.RemoveAccessesパ…
Chisel3にはIOTestersというテスト用の環境が備わっており、Chiselのモジュールをテストするための機能が備わっている。 しかしこのIOTestersの弱点の一つは、ターゲットとなるモジュールのインタフェースにしかアクセスできず、内部信号にアクセスできない…
https://ammonite.io/ Chise(というかScala)を動かすために、わざわざbuild.sbtを作るのが面倒くさい。簡単にChiselを扱うことができないか、いろいろ調査していたら、Ammoniteというインタプリタあるのを発見した。 ammonite.io Ammoniteのインストールは以…
Esperanto Technologiesと言えば、RISC-Vを採用したメニーコアチップを開発しているシリコンバレーのベンチャー企業であるが、チップに先立ちRISC-Vの命令セットシミュレータをChipsAllianceの成果物として公開したようだ。 RISC-Vのシミュレータと言えば一…
ChiselからVerilogを生成すると、配列参照の記述は最終的に除去され、とんでもないVerilogが生成されることはよくある。例えば以下のようなFIRを書いたとすると、 circuit VecModules : module VecModules : input in: UInt<1>[16] input sel: UInt<4> outpu…
FIRでAsync Resetの作り方が分かったので、練習問題としてNegative EdgeのAsynchronous Resetを作ってみようかと思う。 Async Resetは専用の型が定義されていたので、同様にNegative EdgeのAsync Resetの型を定義してみる。 firrtl/src/main/scala/firrtl/ir…
単純なデータパスであれば簡単にFIRの記述を書くことができる。次に、レジスタアップデートについて挙動を確認しよう。レジスタアップデートには、クロックとリセットの記述が必要である。 クロックは独自の型が定義されているが、リセットは独自の型が定義…
IEEE 754の仕様書は実は2019年に改定されて、新しい仕様書が作成されている。 これは完全に公開されているわけではなくて、仕様書を入手するためにはお金を払わなければならない。 先輩の話を聞いていて、いくら払えばいいんだろう?個人では購入できないく…
現在FIRRTLでは出力オプションに-X sverilogを追加することができ、これは一応SystemVerilog出力用のコンパイラであるのだが、実際に適用してみると、 ------------------------------------------------------------------------------ Warning: SystemVeri…
FIRRTLのコンパイルオプション・というか生成ファイルオプションには以下が存在する。 none : NoneCompiler() を呼び出す。特に何もしない。 hi : HighFirrtlCompiler()を呼び出す。 low : LowFirrtlCompiler()を呼び出す。 middle : MiddleFirrtlCompiler()…
FIRRTLのパーサがANTLRで作られていることが分かったので、これを使えば遊べるような気がしてきた。C++向けにFIRRTLの文法ファイルを変換して、C++で簡易パーサを作って遊んでみる。 まず、ANTLR4のランタイムをダウンロードした。C++用のANTLRランタイムを…
FIRRTLは入力ファイルとして.firファイルを指定することができる。ということは、FIRファイルのファイルを読み込んで、Parseして、構文解析木を生成する場所があるはずである。それを調査した。 どうやらFIRRTLのコマンドラインを立ち上げたときは、FirrtlCl…
RISC-Vの実装であるHummingBirdを調査していくことにした。 HummingBirdがRTLシミュレーションで何となく動作するようになってきたので、FPGAでどれくらいの回路面積になるのか見てみたいと思う。HummingBirdの合成環境はXilinxのFPGAボードをサポートしてお…
RISC-Vの実装であるHummingBirdを調査していくことにした。 前回何となくコードがPassできるようになったので、用意されているすべてのパタンを流してみることにした。 for bin in `ls -1 /home/msyksphinz/work/riscv/e200_opensource/vsim/run/../../riscv…
まずはfirrtlに取り込まれる引数を確認した。以下のようにprintlnを挿入した。 firrtl/options/Stage.scala final def execute(args: Array[String], annotations: AnnotationSeq): AnnotationSeq = { println("execute : args") for (i <- 0 until args.siz…
RISC-Vの実装であるHummingBirdを調査していくことにした。 HummingBirdが何となく動くようになってきたのだが、ログファイルが生成されないので何が起きているのかよく分からない。 そこで、内部のパイプライン動作を把握するためにパイプライントレーサを…
FIRRTLの動作を解析するためには、Scalaの総合開発環境としてIntelliJ IDEAをインストールしておくのが良い。 これまでインストールしていなかったので、これを機にインストールしておこう。 www.jetbrains.com 無料版のCommunity EditionのLinux版をダウン…
RISC-Vの実装であるHummingBirdを調査していくことにした。 Verilatorでのデバッグを行っているのだが、どうも上手く動いてくれていない。波形を見てもなんだか動いていないように見えるので、Verilatorでクロックゲーティングをすると何かおかしくなるのだ…
といっても大昔に作ってみたもので、BitBucketの肥やしにしておくのももったいないし、最終的にどうにかして発展させたいので公開する。 今のところデコーダはあるが逆アセンブラはついていないのでspike-dasm頼みである。 github.com 大した実装ではなく、…
RISC-Vの実装であるHummingBirdを調査していくことにした。 Verilator用のビルドを追加したい試行。VerilatorはRISC-VのRocket-Chipなどで間接的に使用したことはあるし、gtkwaveで生成した波形をデバッグしたことはあるけど、自分でテストベンチを書いた事…
FIRRTLというのはハードウェア記述言語Chiselのバックエンドに相当する部分で、Chisel→FIRRTL→Verilogという段階を取り、FIRRTL→VerilogというのはLLVMで言うバックエンドに相当する部分であると説明にも書いてある。 FIRRTL自体はScalaで記述されており、動…
少し前から、「実践Rust入門」を読み始めている。Rustを使って四則演算の電卓を作るところまで行った。 実践Rust入門[言語仕様から開発手法まで]作者: κeen,河野達也,小松礼人出版社/メーカー: 技術評論社発売日: 2019/05/08メディア: 単行本(ソフトカバー…
RISC-Vの実装であるHummingBirdを調査していくことにした。 HummingBirdの概要 前回iverilogを使用しようとしてはねられてしまうという悲しい状態で終了したのだが、少し調査すればVerilatorでも流すことができそうな気がする。というかVerilatorで一からテ…