バグ取り

とりあえず、バグの原因は判明。
C言語(というか、gccの>>演算子)において、shiftの第二引数は31以下である必要があるようだ。そうでない場合の動作はおそらく未定義なのだろうけれど、見たところmod 32をしているような動作。下位ビットしかみていないのだろう。
で、これが原因でバグが発生していたようなのだけれど、まあ仕方が無いので、32より大きい場合には0を入れるという仕様にしたところ、きちんと動作した。とはいえ、本当にこれでシミュレータ上で動作するかはまだ分からないけれど。
今からやるのは、Xilinxのシミュレータでも、そうなるのかどうかの検証。そうであれば良し。

・・・と思ってやっていたら、ハードウェア上の回路は正しくなっているようだ。あくまでシミュレータのバグらしい。残念。もう一度FPUの命令のデバッグをやらなくては。