2026年になって一週間ほど過ぎた。
この一週間でもめまぐるしく情勢が変わっていて今年はいろいろ、再定義をする年になるんだろうと感じている。
例えば、Verilogのポート宣言であるoutputのことである。
モジュールでoutput宣言しているけど、内部でも再使用するということは多々起きる。
この時にoutput宣言した信号名はあくまでoutputのみとして使用し、内部での再使用を不可とするかどうかといった点に悩んでいる。
実情はoutputに宣言されて内部で使用しても問題ないのだが、定義上どうするかといったところだ。
言語仕様上は各言語に従うとして、禁則事項ではなく、推奨事項を設定しておきたいわけだ。
内部でも使用するならinout定義にするという方向づけでも良いと思うけど、そうするとoutputで宣言した信号名の外部から見た定義が変わってしまう。
内部で内部信号と外部信号でわけると、可読性が若干下がるというのはあるけど、機能性を考えると内部信号と外部信号の定義はきっちり分けたほうがいいのかな?
IRISという記述言語を作り始めた。
Immutable RTL Implementation Standardの略で「不変的なRTLの標準実装」って意味合いで自分用ハードウェア記述言語である。
Verilog HDLやSystemVerilogの抽象度や言語仕様の曖昧性が大きく、記述による合成事故が多発しているので事故防止のために作り始めた。
一番多くおこしている事故は代入のところだ。
"<="と"="で動作が変わるのである。
仕様がブロッキングとノンブロッキングだからそうだと言われてしまえばそのままだけど、例えばalways文の中に両方を記載できてしまう点である。
そうするとシーケンシャル方向とパラレル方向、これだとちょっとイメージが湧きにくいので、言い換えると順次処理と並行処理が混ざってしまうのだ。
このことを利用して巧みに回路を作ってみたこともあるけど、一見可読性がよいようにいいソースコードに見えるけど、理解容易性が著しく低いのだ。
合成ツールでも取り扱いが違うところもあるようなのでそこも事故の元だな。
私的にはフリップフロップとワイヤー(ゲートも含め)でハードウェア記述が表現できればいいと思っている。
ハードウェア記述言語としてVerlyがあるけど、これはこれでウォッチする。