SN/Xはごく僅かの書き換えでパイプラインプロセッサになる。
ただ、パイプラインプロセッサにすると、LiveCygwinのテストベンチを動かす、IcarusVerilogのバグにあたるようで、テストベンチがうまく動かない。
そこで、テストベンチを少し手直しした。
パイプラインプロセッサを snxp.sfl として作成し、
テストベンチを mainp.v としておけば、
make P=p sim1
となどとして、合成からシミュレーションまでを実行可能。
main.v ⇒ mainp.v のもっとも大きな違いは、always @(negedge m_clock) のブロックの中に、複数のif文を入れいていたのを、1ブロック1if文に修正したことだ。
Icarusは、elseなしで、複数の同時実行対象のif文があると、どうも扱いがまずいらしい。参考までに、パッチファイルを上げておこう。