Verilog
VerilatorはVerilogをコンパイルしてシミュレーションするためのツールだが、波形ログとしてはVCDやFSTなどを出力することができる。VCDはかなり昔から使われている波形保存のためのフォーマット、FSTはVCDと違って圧縮されたより高速アクセスを実現するため…
本当は、 NVDLAをVerilatorで動かしてみたかったんです。。 NVDLAがVivado Simulatorに対応になったところで、ついでにVerilatorでNVDLAを動かすことは出来るのだろうかと考え、移植を試みた。 結論から言うと、動作させることはできていない。 これはVerila…
HotChips29 で発表された、学生が開発したRISC-V SoC ”Celerity”について資料を読んだ。 news.mynavi.jp Celerityは学生の作ったRISC-Vのメニーコアチップで、4大学が共同して9か月で作成したチップとなっている。 9か月という短期間で作るための秘訣として…
ソフトウェア環境下においてテスティングフレームワークは、例えばJUnit, GoogleTest など。 しかしハードウェア言語向けのテスティングフレームワークというのは少ない。 以前に少し紹介したのは、cocotbというテスティングフレームワーク、こちらはPython…
ちょっとVerilogのSpecify記述をいろいろチェックする機会があったので、ここでまとめておく。 VerilogのSpecifyブロック内では、主にセットアップ時間、ホールド時間などを記述するが、それ以外にもさまざまな制約条件などを指定することが出来る。 specify…
普段の開発には主にEmacsを使っているのだが、良くある事例として現在参照しているモジュールがどこにあるのか分からなかったり、この定数がどこから定義されているのか分からなかったりすることが良くありますよね。 ソフトウェアの世界だと、これらの関数…
現在、趣味でのVerilog開発は、個人でも格安で使用可能なVerilogシミュレータであるVeritakを使用している。 japanese.sugawara-systems.com Verilog-HDLを使用したシミュレータとしては、有料のものを含め以下のものが挙げられるのではないだろうか。簡単に…
通常のデジタル回路設計において、特定のブロックとの信号をやり取りするのに、ReadyとValidを使うことができる。 Validは送信元がデータ送信を示すのに利用し、Readyは送信先のユニットがデータ受け入れ可能であることを示す。 ReadyとValidの制御について…
僕はプライベートでVerilog設計をするとき、シミュレータとしてVeritakを使っている。 国産のVerilogシミュレータで、フリーのVerilogシミュレータに比べてかなり高速、またデバッグ環境が充実している。 大手EDAベンダが販売しているNC-VerilogやVCS、Quest…
ZedBoardを使ってARM上でUbuntu Linuxを動作させたい。数年前に FPGAの部屋のmarseeさんによって既に実現されているのだが、同じ過程を辿ろうとすると、当該記事ではPlatform BuilderとPlanAheadが使われており、現在のVivadoの環境では使えないことが分かっ…
前回に引き続き、cocotbによりテストパタンを書いている。 AXIの挙動を真似るのは大変だ。でも、このあたりがうまく攻略できるようになると、例えばISSにPythonのIFを供えれば、ISSとの協調シミュレーションも可能になるのではないか。 あとは、なるべくラン…
久し振りにVerilogで回路を書き始めている。ユニットずつ実装をしているのだが、まずはAXI経由でメモリにアクセスする回路を書かなければ。 その際、バッファが溢れないようにAXIインタフェースをちゃんと制御できるか、ちゃんと設計結果を検証することは、…
Verilogで久し振りに回路設計をしているのだが、ビルドの標準環境としてCMakeを使いたい。 CMakeでVerilogを構築する手法については、以下の日記でトライしてみた。これを今度は実用してみよう。 msyksphinz.hatenablog.com msyksphinz.hatenablog.com 1. Vi…
前回までで、どうにかこうにかCMakeでVivado Simulatorのビルド環境を構築した。 ここまで出来たら、実はCTestによるテストの追加は容易なのだ。 CMakeLists.txtに以下を追加してみた。 # CTest enable_testing() add_test (NAME basic_test COMMAND /cygdri…
ブログのコメントで、CMakeを使ってVerilogのプロジェクトを扱うためにはどのようにすれば良いのか、という話を頂いた。 確かに、CMakeがサポートしているのはC++とか、ソフトウェアのプロジェクトばかりだ。 Verilogをプロジェクトをサポートするためにはど…
Verilog-HDLの環境に、プログラムのhexファイルだとか、ソフトウェアで生成したデータであるとか、あるいはVerilogのシミュレーション自身をソフトウェアにより制御したいときには、DPI-Cがオススメだ。 www.kumikomi.net DPI-Cを使うことにより、Verilogの…
現在のPulsar-2プロジェクトは、リポジトリをcloneしてから実行するまでがいろいろコマンドを叩かなくてはならなくて大変なので、クローンしてから自動的に実行できるまでMakefileを最適した。 QuestaSimでシミュレーションを開始するまでにやらなければなら…
仕事が忙しいので、少しずつ実装している。命令フェッチを発行して、命令を取得してくるとそれをQueueに投入する部分だ。 基本的に128bitで命令をフェッチし、まずはアドレスバスの応答が返ってくる。それはif_queueに貯められ、IDが保存される。 このIDを参…
ようやくシミュレーションが出来るようになったので、どんどん追加していく。 端子の規則が出来ていなくて、余計な信号が出来てしまっていた。 github.com 例えば、EmacsのVerilogモードにて、クロックの名前がCPU_CLK, リセットの名前がCPU_RESETとなってい…
最近仕事が忙しいので、殆ど家でプログラミングが出来ていないが、少しずつでも進めていこう。 CPUの設計をする際に、パイプラインの検証をするためのパイプラインロガーを接続していこう。 github.com ロガーとしては、実行した命令を表示するinst_loggerと…
msyksphinz.hatenablog.com QuestaSimのバージョンとか、ライブラリのバージョン、あるいは32ビットのライブラリか64ビットのライブラリかによって、使用するコンパイラも変えなければならないが、利用している環境が32ビットモードしか持っていないかったの…
現在設計中のCPUは、バスはAXIで、周辺のモジュールに接続される構成になっている。 この構成の場合、いろんなものをAXIで接続して、マスターが複数、スレーブが複数の中で相互に通信をするためのインタコネクトが必要になる。 Xilinxの場合は以下だ。 AXI I…
仕事も含めて、DPI-CでVerilog-HDLとC++を接続して使うというのは良くやってたんだけど、どうやら最新のマニュアルを読むと、最近の事情はだいぶ変わっているようだ。 ModelSimの場合は、DPI-Cを使う場合にはまず-dpiexportobjでスケルトンのようなオブジェ…
さて、そろそろ自作CPUのシミュレーション環境を構築しよう。 コアの共通部はVerilog-HDLで記述し、デコーダのようなISSと共用できる部分はRubyから自動生成する。 github.com Verilog-HDLの部分を構築し、デコーダはISSから生成させる。 $arch_table[ 0] = …
自分でも時々悩むのだが、Verilog-modeでAUTO_TEMPLATEを使って、さらにLispで信号名を制御したいときは、どこまでをLispとして取り合つかうかに注意しよう。 例えば、ポートに接続される信号名を正規表現で生成して、それをさらに全てdowncaseにしたいとす…
Emacsには標準でVerliog-modeというものが付いており、Verilog-HDLのいろんな部分を自動生成してくれる。 僕が最も気に入っている機能は、サブモジュールを自動的にインスタンス化してくれる機能だ。 pulsar2_top #(/*AUTOINSTPARAM*/) pulsar2_top_0 (/*AUT…
MIPSプロセッサは、実装フェーズに入ってきたので、あまり更新する内容が無いのだが、ISSのデコードテーブルから自動生成したRTLを組込む作業に入っている。 msyksphinz/pulsar-2github.com 自動生成コードはRubyで記述しているのだが、ちょっと柔軟性に欠け…
PyMTLは、Pythonの記述からVerilog-HDLを出力するためのツールだ。 http://csl.cornell.edu/~cbatten/pdfs/lockhart-pymtl-micro2014.pdf 1. インストールまで 僕はRTLの開発はWindows+Cygwinの環境を主体にしているので、Cygwin上にインストールする方法を…
今まではRubyのテーブルと自作のデコーダ生成スクリプトを使ってVerilog-HDLのコードを生成してきたが、もうちょっと既存のフレームワークを探してみよう。 まずはChiselだ。ChiselはScalaで記述された言語情報からハードウェアを自動生成するためのフレーム…
Chiselのチュートリアルの続き。 ucb-bar/chisel-tutorialgithub.com chisel-tutorial/examples/BasicALU.scala を見てみよう。 package TutorialExamples import Chisel._ class BasicALU extends Module { val io = new Bundle { val a = UInt(INPUT, 4) v…