FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

Verilog

XMLとStemsを使ってVerilatorのRTLシミュレーション結果をGtkWaveでアノテーション表示する方法

VerilatorはVerilogをコンパイルしてシミュレーションするためのツールだが、波形ログとしてはVCDやFSTなどを出力することができる。VCDはかなり昔から使われている波形保存のためのフォーマット、FSTはVCDと違って圧縮されたより高速アクセスを実現するため…

高速Verilogシミュレータ"Verilator"で「出来ないこと」

本当は、 NVDLAをVerilatorで動かしてみたかったんです。。 NVDLAがVivado Simulatorに対応になったところで、ついでにVerilatorでNVDLAを動かすことは出来るのだろうかと考え、移植を試みた。 結論から言うと、動作させることはできていない。 これはVerila…

Verilog-HDLで記述されたオープンソースのハードウェアライブラリ"BaseJump"

HotChips29 で発表された、学生が開発したRISC-V SoC ”Celerity”について資料を読んだ。 news.mynavi.jp Celerityは学生の作ったRISC-Vのメニーコアチップで、4大学が共同して9か月で作成したチップとなっている。 9か月という短期間で作るための秘訣として…

VHDL/Verilogのテスティングフレームワーク"VUnit"

ソフトウェア環境下においてテスティングフレームワークは、例えばJUnit, GoogleTest など。 しかしハードウェア言語向けのテスティングフレームワークというのは少ない。 以前に少し紹介したのは、cocotbというテスティングフレームワーク、こちらはPython…

VerilogのSpecifyブロックまとめ

ちょっとVerilogのSpecify記述をいろいろチェックする機会があったので、ここでまとめておく。 VerilogのSpecifyブロック内では、主にセットアップ時間、ホールド時間などを記述するが、それ以外にもさまざまな制約条件などを指定することが出来る。 specify…

EmacsのExuberant Ctags導入試行(Verilog-HDLで使いものになるか?)

普段の開発には主にEmacsを使っているのだが、良くある事例として現在参照しているモジュールがどこにあるのか分からなかったり、この定数がどこから定義されているのか分からなかったりすることが良くありますよね。 ソフトウェアの世界だと、これらの関数…

格安のVerillogシミュレータ Veritak をコマンドラインから起動する方法

現在、趣味でのVerilog開発は、個人でも格安で使用可能なVerilogシミュレータであるVeritakを使用している。 japanese.sugawara-systems.com Verilog-HDLを使用したシミュレータとしては、有料のものを含め以下のものが挙げられるのではないだろうか。簡単に…

ReadyとValidを制御するためのSkid Buffer

通常のデジタル回路設計において、特定のブロックとの信号をやり取りするのに、ReadyとValidを使うことができる。 Validは送信元がデータ送信を示すのに利用し、Readyは送信先のユニットがデータ受け入れ可能であることを示す。 ReadyとValidの制御について…

Veritak Simulatorにおけるファイルリストの活用法

僕はプライベートでVerilog設計をするとき、シミュレータとしてVeritakを使っている。 国産のVerilogシミュレータで、フリーのVerilogシミュレータに比べてかなり高速、またデバッグ環境が充実している。 大手EDAベンダが販売しているNC-VerilogやVCS、Quest…

ZedBoard向けUbuntu Linuxのビルド(VivadoによるPLの作成)

ZedBoardを使ってARM上でUbuntu Linuxを動作させたい。数年前に FPGAの部屋のmarseeさんによって既に実現されているのだが、同じ過程を辿ろうとすると、当該記事ではPlatform BuilderとPlanAheadが使われており、現在のVivadoの環境では使えないことが分かっ…

cocotbでテストパタンを記述する(どんな記述ができる?)

前回に引き続き、cocotbによりテストパタンを書いている。 AXIの挙動を真似るのは大変だ。でも、このあたりがうまく攻略できるようになると、例えばISSにPythonのIFを供えれば、ISSとの協調シミュレーションも可能になるのではないか。 あとは、なるべくラン…

cocotbでAXIインタフェースのチェックパタンを書こう

久し振りにVerilogで回路を書き始めている。ユニットずつ実装をしているのだが、まずはAXI経由でメモリにアクセスする回路を書かなければ。 その際、バッファが溢れないようにAXIインタフェースをちゃんと制御できるか、ちゃんと設計結果を検証することは、…

CMakeでVerilogシミュレーション環境を構築する

Verilogで久し振りに回路設計をしているのだが、ビルドの標準環境としてCMakeを使いたい。 CMakeでVerilogを構築する手法については、以下の日記でトライしてみた。これを今度は実用してみよう。 msyksphinz.hatenablog.com msyksphinz.hatenablog.com 1. Vi…

CMakeによりVerilogのビルドを管理するための調査(2. CTestによるテスト追加)

前回までで、どうにかこうにかCMakeでVivado Simulatorのビルド環境を構築した。 ここまで出来たら、実はCTestによるテストの追加は容易なのだ。 CMakeLists.txtに以下を追加してみた。 # CTest enable_testing() add_test (NAME basic_test COMMAND /cygdri…

CMakeによりVerilogのビルドを管理するための調査(1. CMakeによるビルド環境の構築)

ブログのコメントで、CMakeを使ってVerilogのプロジェクトを扱うためにはどのようにすれば良いのか、という話を頂いた。 確かに、CMakeがサポートしているのはC++とか、ソフトウェアのプロジェクトばかりだ。 Verilogをプロジェクトをサポートするためにはど…

ソフトウェアとVerilogを連携させたいならば、DPI-Cがオススメ

Verilog-HDLの環境に、プログラムのhexファイルだとか、ソフトウェアで生成したデータであるとか、あるいはVerilogのシミュレーション自身をソフトウェアにより制御したいときには、DPI-Cがオススメだ。 www.kumikomi.net DPI-Cを使うことにより、Verilogの…

環境構築からシミュレーションまでを自動化する

現在のPulsar-2プロジェクトは、リポジトリをcloneしてから実行するまでがいろいろコマンドを叩かなくてはならなくて大変なので、クローンしてから自動的に実行できるまでMakefileを最適した。 QuestaSimでシミュレーションを開始するまでにやらなければなら…

フェッチのリクエストとQueueの実装

仕事が忙しいので、少しずつ実装している。命令フェッチを発行して、命令を取得してくるとそれをQueueに投入する部分だ。 基本的に128bitで命令をフェッチし、まずはアドレスバスの応答が返ってくる。それはif_queueに貯められ、IDが保存される。 このIDを参…

フェッチ部の実装とパイプトレースの出力

ようやくシミュレーションが出来るようになったので、どんどん追加していく。 端子の規則が出来ていなくて、余計な信号が出来てしまっていた。 github.com 例えば、EmacsのVerilogモードにて、クロックの名前がCPU_CLK, リセットの名前がCPU_RESETとなってい…

デバッグ環境の構築

最近仕事が忙しいので、殆ど家でプログラミングが出来ていないが、少しずつでも進めていこう。 CPUの設計をする際に、パイプラインの検証をするためのパイプラインロガーを接続していこう。 github.com ロガーとしては、実行した命令を表示するinst_loggerと…

DPI-Cを使うための調査(DPIのライブラリをリンクして使...おうと思ったが)

msyksphinz.hatenablog.com QuestaSimのバージョンとか、ライブラリのバージョン、あるいは32ビットのライブラリか64ビットのライブラリかによって、使用するコンパイラも変えなければならないが、利用している環境が32ビットモードしか持っていないかったの…

AXIのインターコネクトジェネレータを作ろう

現在設計中のCPUは、バスはAXIで、周辺のモジュールに接続される構成になっている。 この構成の場合、いろんなものをAXIで接続して、マスターが複数、スレーブが複数の中で相互に通信をするためのインタコネクトが必要になる。 Xilinxの場合は以下だ。 AXI I…

DPI-Cを使うための調査

仕事も含めて、DPI-CでVerilog-HDLとC++を接続して使うというのは良くやってたんだけど、どうやら最新のマニュアルを読むと、最近の事情はだいぶ変わっているようだ。 ModelSimの場合は、DPI-Cを使う場合にはまず-dpiexportobjでスケルトンのようなオブジェ…

HDLのシミュレーション環境の構築

さて、そろそろ自作CPUのシミュレーション環境を構築しよう。 コアの共通部はVerilog-HDLで記述し、デコーダのようなISSと共用できる部分はRubyから自動生成する。 github.com Verilog-HDLの部分を構築し、デコーダはISSから生成させる。 $arch_table[ 0] = …

EmacsのVerilogモードで、AutoConnectビット幅を制御する(Lispと繋げるときの注意)

自分でも時々悩むのだが、Verilog-modeでAUTO_TEMPLATEを使って、さらにLispで信号名を制御したいときは、どこまでをLispとして取り合つかうかに注意しよう。 例えば、ポートに接続される信号名を正規表現で生成して、それをさらに全てdowncaseにしたいとす…

EmacsのVerilogモードで、AutoConnectビット幅を制御する(基本編)

Emacsには標準でVerliog-modeというものが付いており、Verilog-HDLのいろんな部分を自動生成してくれる。 僕が最も気に入っている機能は、サブモジュールを自動的にインスタンス化してくれる機能だ。 pulsar2_top #(/*AUTOINSTPARAM*/) pulsar2_top_0 (/*AUT…

ISSの埋め込み

MIPSプロセッサは、実装フェーズに入ってきたので、あまり更新する内容が無いのだが、ISSのデコードテーブルから自動生成したRTLを組込む作業に入っている。 msyksphinz/pulsar-2github.com 自動生成コードはRubyで記述しているのだが、ちょっと柔軟性に欠け…

PyMTLを試す

PyMTLは、Pythonの記述からVerilog-HDLを出力するためのツールだ。 http://csl.cornell.edu/~cbatten/pdfs/lockhart-pymtl-micro2014.pdf 1. インストールまで 僕はRTLの開発はWindows+Cygwinの環境を主体にしているので、Cygwin上にインストールする方法を…

Chisel事始め(1)

今まではRubyのテーブルと自作のデコーダ生成スクリプトを使ってVerilog-HDLのコードを生成してきたが、もうちょっと既存のフレームワークを探してみよう。 まずはChiselだ。ChiselはScalaで記述された言語情報からハードウェアを自動生成するためのフレーム…

Chisel事始め(2)

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…