Make/Day

毎日なにか作ります

62日目 ~CPUの検証完❕~

こんにちは!今日はデジタル回路の話題で更新します。

今回は、これまで何回かの更新(関連記事はこの記事の最後に貼っています)で悩んできたCPUの検証を終わらせてしまいます!
というわけで、長かったテストベンチもこれで終わりです。

前回はプログラムカウンタの値がおかしくて、命令を読みだせなくなっている所で終わりました。

次の値が持ち越せていない

次のサイクルでカウンタの値が引き継げていないので、load関連の記述を見てみると...

PC  pc0(outA, loadpc, true, reset, clk, pc);

ありましたカウンタのロード可否の入力(前から3つめ)がtrueとなっています。true信号(いわゆる、ブーリアン)を受け取るように想定していないので、動かなくて当然ですね(´・ω・`) コンパイラ君はここまでは気づいてくれないようです。ここは以下のようにtrue=>1`b1と書き換えます。

PC  pc0(outA, loadpc, 1`b1, reset, clk, pc);

あとは、テストベンチでCPU全体をリセットするように設定してやると、

赤線は不定値(どんな値でもよい) なので気にしない

それぞれ出力と期待値を上下になるように設置しました。これで無事に動いていそうです。(テストベンチが90パターンしかなかったから目視で点検したのは内緒(* ̄  ̄))
ちなみに、これまでは期待値との比較はif文を用いていましたが、不定値の判定を上手くしてくれなかったので波形出力にしました。何か方法があれば教えていただけると幸いですm(_ _)m

そんなわけで、長かったコンピュータの実装まであと一息というところまで来ました!次回は、コンピュータとして組みあげ、テストプログラムを動かしてみます!

CPU関連の記事

今回の更新に伴い、書き換えました。
in-reality.hatenablog.com
in-reality.hatenablog.com
in-reality.hatenablog.com