はじめに
Verilator 5.006においてはまって憤怒した箇所です。憤怒するたびに記述が増えます。未サポート、と書いたものは、明示的にエラーで「未サポートです」と表示されたものです。そう書いてないものは「未サポートです」とは表示されないものの、なんかうまく動かなかったものです。
functionにおいて64bitより大きい返り値は未サポート
taskでoutputを使えということらしい。class functionうっきうきで書いてたらこれのせいで冷水ぶっかけられてtaskに記述かえという寂しい作業が残りました。
再帰functionは未サポート
手がありません。試してないがtaskでも無理でしょう。もちろんautomatic指定済み。
shortrealは未サポート
realを使えと言われます。float演算おさぼりしようと思ったがこれもあって挫折。
unpackのstructは未サポート
packedにしろと言われます。unpackedの配列を動的に確保してstructに入れたかったのですが、そういうことはできないようです。それならclassで、と思ったのですが、それもなんか失敗した記憶があります。どうして失敗したのかはもう怒りのあまり忘れた...
functionのoutputの挙動がどうも怪しい
ちゃんとoutputしてくれていない気がします。taskに記述を移行しました。
unpack配列のアドレッシングに配列サイズに適したbit幅のアドレスでないと正しく読み書きできない場合がある、ような気がする
アドレッシングは32bitあれば十分やろ!がははははは!みたいなやり方は、大体においてうまく動いていたのですが、たまになんか読み書きに失敗することがあるっぽい?ので?ちゃんと配列長に合わせてアドレス幅を変えてあります。
classのメンバ変数?がクラス外から読み書きできない
型がわからん、みたいなエラーが出ます。getter/setter用意して対応しました。
stringのportをTOPに指定することができない
systemc使っている場合、なんかintに化けます。引数を設定したい場合はおとなしく\$values\$plusargsで。
おまけ:呪文
nix-shell起動呪文です。linux kernelをビルドしたりverilator+gtkwaveでverilog開発したりするときに使っています。
nix-shell -p git gcc flex bison bc ncurses openssl verilator systemc gtkwave spike dtc vim glibcLocales