13.ポストレイアウトシミュレーション

論理合成は出来ましたが、果たしてこの回路が自分の意図通り合成されているかを検証します。デバイスはまだありません。そこでポストレイアウトシミュレーションを行います。ポストレイアウトシミュレーションではRTLで使用したテストベンチをそのまま使用します。合成された回路ファイル*.voが出力されたフォルダでプロジェクトファイルを構成してシミュレーションを走らせます。なお、StratixUの場合、トップ層以下、複数のvoファイルが出力される場合がありますが、Top層だけの指定でOKです。

<結果>

残念ながら、StatixU(Quartas Version4.0 BUILD190)では、走りませんでした。解析したところ、減算の論理合成(または、ネットリスト生成)でバグがあるらしく、次の簡単な記述でも減算結果がおかしくなりました。

   assign sum=a_reg-b_reg; // a_reg,b_reg は32ビット、sumは33ビット、a_reg=0,b_reg=0にしてもsumが0にならず、1FFFF_FFFFになる

しょうがないので、減算の記述は、
   assign sum={1'b0,a_reg}+~{1'b0,b_reg}+1'b1;//に変更しました。ALUとMul_DIV_Module

未だ、デバイスの現物がないので誰も指摘していないのでしょう。なお、CYCLONEでのシミュレーションでは、そんなことをしなくとも、駆動周波数20数MHzで合成出来、ポストレイアウトシミュレーションも問題なく通っています。また、上記現象はMODELSIMでも同じなのでVeritakのバグでもないでしょう。

この解析をするのにALUから信号をテストベンチまで引っ張り出し、ALUのベンチを書いて、MUL_DIVのベンチを書いて、という具合に範囲を段々狭めていきました。何しろ全体を論理合成するのに1時間、遅延シミュレーションで目的時刻まで数時間かかるので、障害箇所をしぼりこんで、論理合成->遅延シミュレーションのサイクルを小さくしないと解析効率が悪いです。結果として解析して対策結果確認まで丸2日を要してしまいました。各モジュール毎のテストベンチも必要に応じて作成が必要です。

上記記述変更後は、StratixUでも問題なくシミュレーションが通りました。コンパイルから実行終了まで筆者の低Spec.マシンで約十数時間かかりました。これで、ようやく設計したRTL記述が、意図通り合成されていることが検証できました。ハードがなくとも検証はできるのです。

ポストレイアウトゲートシミュレーションのVeritak上のプロジェクト


論理合成したファイルH8.voと、RTLテストベンチファイル、stratixUのプリミティブライブラリファイルを指定します。

なお、遅延シミュレーションした際の合成器ログです。内部信号をテストベンチまで持ってきたためLUT数が若干アップしています。




タイミングは向上して35MHzになりました。

以下は遅延ゲートシミュレーションのログです。リードソロモンの訂正がきちんと行われコンペアエラーも発生していません。