Chisel

チゼルの一ヶ月

建国記念日からChiselを初めて、1ヶ月が経ちました。 その間にインチキモジュールを作り続けました笑 そして、Vivadoで合成し、FPGAに乗せて動作確認をしました。 FPGAのテストするための環境も作成してみました。 1ヶ月の中で、Chiselは本当に便利で生産性…

わかりやすかったchiselの入門サイトについて

最近、chiselのことが少しわかってきたので、学びが多かったサイトをまとめます。 当たり前かもしれませんが、結局公式サイトが情報が多くわかりやすかったです。 公式サイト URL: Chisel/FIRRTL: Home チートシート URL: https://inst.eecs.berkeley.edu/~c…

Chiselで複数のパッケージを組み合わせる方法を調べました

Chiselで複数のパッケージを組み合わせ方を調べてみました。 今回はChiselのSoCプロジェクトであるrocket-chipを調べてみました。 rocket-chip/src/main/scala at master · chipsalliance/rocket-chip · GitHub モジュール種毎にディレクトリを分けることが…

Chiselで分周クロックを作って、RISCVの合成をTiming Metさせました!

先日、Vivadoで合成したら、タイミングMetしませんでした。 そのため、何らかの対策をすることが必要になりました。 それは、パイプライン設計とマルチクロックです。 thira2.hatenablog.com パイプラインは中々に手間なので、マルチクロックにしようと思い…

chiselで適当に書いたRISCVをVivadoで合成したら、Timing割れしまくって困っている話

先日、RISCVを作ったので試しにFPGAで合成してみることにしました。 LUTが5000くらいでFFが1200くらいとなかなかに小型であることはわかりました。 問題はここからで、タイミングがまったくMetしていません。 125MHzで8ns周期なのに、WNSが-5.5nsと惜しくも…

シリアルの怪奇現象を追っている話

先日、Uartの通信がPCとFPGA間でできるようになったので、 次にFPGAにChiselのMemを置いて書き込めるか確認しようとしました。 他にもGPIO設定できるものや、スイッチの設定値を読める機能もついでに追加しました。 で、テスト用のプログラムを作って、動作…

FPGAとシリアル通信しました

先日、Chiselでシリアル通信のループバックモジュールを作成しました。 Chiselでテストしようとしたのですが、1データテストするのに1分くらいかかることがわかりました。 UARTの転送bit数は8bitなので、全部テストするのに、256分くらいかかるということで…

Chiselでシリアル送信器のテストしていたら、OutOfMemoryError: Java heap spaceが発生した話

先日、chiselでシリアル受信器を作成したので、次に送信器を作ってみました。 以下のようなループバックになるようにしてみました。 シリアル受信器で受診したデータを送信器に送る。 送信器はPCに送り返す。 chiselのテストは送受信で行うので、時間として…

Chiselで簡単なUART受信機を作ってみました

RISCVもできてきたので、次にRISCVに外部から接続する方法を考えてみました。 本来であればRISCVデバッガを作れば良いのですが、以前調べたところ、あまりにも難解なので、今回はskipすることにしました。 となれば、最も簡単なのはUART一択ということで、簡…

Chiselで2 portメモリの作り方

先日、Chiselで2 portメモリを作ることが必要になりました。 しかし、どうやって作れば良いかわからなかったので、調べてみると以下公式サイトに記載ありました。 備忘のために記載します。 単純に二つのポートを書けばよかったんですね。 Mem keyword in Ch…

Chisel/Verilogの右シフトについて

先日、ChiselでRISCVを作っている時に、算術右シフト(負の値のときに上位bitは1詰め)と 論理シフト(なんであれ0詰め)があることがわかりました。 少し戸惑ったので、備忘のために記載します。 Chiselの右シフト Builtin Operators · freechipsproject/chisel…

chiselで簡単なRV32Iもどきを作りました

先日からコツコツRISCVを作ってたんですが、とりあえず spikeとのレジスタチェック、命令トレースチェック環境を構築し、 簡単なMain関数の実行が適切に流れるところまで確認しました!! 以下の設計方針で簡単に作成しただけですが、ある程度早めに良い感じで…

chisel/scalaでunsigned intの扱いに苦労した話

chiselというより、scalaですが、unsigned intの扱いに苦労したので、備忘のために記載します。 RISCVの命令は32bit幅で、命令をtxtファイルに記載して、テストベンチで読み込むことにしました。 scalaでtxtファイルを読み、Unsigned Int(32bit)にして、dut(…

chiselでDMA書いてみました

chiselで色々書けるようになってきたので、負荷をかけるために次にDMAを作ることにしました。 以下のとてもシンプルなおもちゃですが、あっさりかけました。 DMAモジュール AXI4 Liteの4byte転送のみ AXI_interface/DMA.scala at master · moamoai/AXI_inter…

ChiselでbundleのWire接続に詰まった話

DMAを作成する前に、Busモジュールが複数Master/Slaveに対応できないといけないため、 Parameterでマスタ数、スレーブ数を変更できるようにしようしました。 まずは本当にシンプルに以下の仕様で作成しようとしたんです。 Master側のIFモジュールで複数マス…

続chiselでリファクタリングしてみました(for/vec/reduce)

前回、chiselでinterfaceが良い感じでにかけることがわかりました。 すると、次にレジスタモジュールを良い感じで書きたくなりました。 レジスタを複数書くには、verilogだと、generate文を使えば良いと思います。 では、chiselだと?と思い、調べました!! モ…

chiselでリファクタリングしてみました

chiselの使い方がわかってきたので、よりまともな記述ができるようにリファクタリングしてみました。 チートシートを参考にしたりしました。 chiselチートシート: GitHub - freechipsproject/chisel-cheatsheet: Chisel Cheatsheet ChiselSheet · freechipsp…

Chiselで簡単なaxi4-lite busを書いてみました

chiselのSlaveモジュールらしきものができたので、次にBUSを書いてみることにしました。 あまりにひどいbusですが、ひとまず、interfaceの切替ができて満足しました。 chiselは書きやすく、Interfaceを「<>」で簡単に接続できました。 また、「:=」でInterfa…

chiselで簡単なAXI4-Liteのレジスタを書いてみました

chiselの書き方が少しわかってきたので、次にAXI4-LiteのSlaveモジュールを書こうと思いました。 まずは、chisel intefaceの書き方を以下公式ガイドを見て学ぶことにしました。 なんと、class文でかけるだけあって、parityつけることなどが継承で簡単にでき…

何か作りたいと思い始めた話

年末から年明けまで、何をすべきかで、ずっと塞ぎ込んでました。 正直なところ、脱サラして全く別の道を進むべきなのではないかとすら思いました。いや、むしろ○んだ方が良いのではと。。 そして、先日に酷い下痢になり、ぼんやりした頭で思ったことがありま…

chiselで簡単なベクタ演算器を書いてみました

chiselで除算機を書いたので、次にメモリと少し複雑な制御論理を書く練習がしたくなりました。 最近、アレイ型演算機に興味を持っていたので、まずは1次元アレイ、すなわちベクトル演算機を書いてみることにしました。 ベクトル演算機も1命令で多数のデータ…

chiselで簡単な除算器を書きました

chiselの手始めに、何十年前かに書いた除算器を書こうとしました。 chisel-examplesにaluあるのに、除算器がなかったので、それならということです笑 まずは本当に単純で、小型なシフト、引き算除算器を書いてみました。 仕様は以下になります。 入力データ…

chiselで内部信号のモニタ。VCDダンプしGTKWAVEで確認

最近、少しずつchiselを使うようにしているのですが、 chisel/iotesters.PeekPokeTesterで内部信号のモニタのをしようとpeek関数で内部レジスタを選択してみました。(peek(dut.r_quotient )みたいな感じで) すると、「value r_remainder is not a member of …

よくわからないままChiselをインストールしてみた

先日、Chiselというハードウェア 記述言語があるという噂を聞きつけたので、試しに使ってみることにしました。 まずはインストール部分を備忘録として記載していきます。 インストールとチュートリアルは以下を参照しました。 とてもわかりやすいです! https…