6502互換CPUのm65をNSLで書き直しました。
シミュレーション上でWozのモニタ(Applie-Iのモニタ)を動作させるパッケージとしています。
コンパイルは、20110511版以降のNSLCOREが必要となります。
シミュレーションには論理シミュレータが必要です。私は、Icarus Verilogを使っていますが、シミュレーション構文はあまり複雑なものを合成しないので、大抵のシミュレータで動作すると思います。なお、Makefileを書き換えればSystemCでもシミュレーション可能だと思いますが、まだ試していません。
この規模の回路になると、行数が多くなるので、NSLCOREの非商用ライセンスが必要になります。
NSLはSFLよりもできることが多いのですが、SFLのレベルの構文もほぼ用意しているので、SFLからNSLへの書き直しは、機械的にできる軽微な修正となります。なので、あまり時間をかけずに可能でした。ただし、taskを複数利用するケースだけは注意が必要です。SFLのタスクは、それぞれがステージ中の特定の動作状況を表しますが、私(と私を参考にコードを書いた学生)のコード以外に1つのステージに複数のタスクを書く例はほぼなかったので、NSLでは、ステージとタスクを1つの手続きとしてまとめました。m65は複数のタスクと内部関数を使って、直行する制御を実現していたので、この部分の修正が単純な置き換えではできません。
色々とやり方を検討したのですが、タスク相当のレジスタを手続きの引数で与えることにしました。他にも状態と内部関数を利用するとか、いくつも代替手段はありますが、あまり手間をかけずに動作させることを優先しました。今後、もう少し概念を整理して、きれいな記述になる方法を検討してみます。
シミュレーション上でWozのモニタ(Applie-Iのモニタ)を動作させるパッケージとしています。
コンパイルは、20110511版以降のNSLCOREが必要となります。
シミュレーションには論理シミュレータが必要です。私は、Icarus Verilogを使っていますが、シミュレーション構文はあまり複雑なものを合成しないので、大抵のシミュレータで動作すると思います。なお、Makefileを書き換えればSystemCでもシミュレーション可能だと思いますが、まだ試していません。
この規模の回路になると、行数が多くなるので、NSLCOREの非商用ライセンスが必要になります。
NSLはSFLよりもできることが多いのですが、SFLのレベルの構文もほぼ用意しているので、SFLからNSLへの書き直しは、機械的にできる軽微な修正となります。なので、あまり時間をかけずに可能でした。ただし、taskを複数利用するケースだけは注意が必要です。SFLのタスクは、それぞれがステージ中の特定の動作状況を表しますが、私(と私を参考にコードを書いた学生)のコード以外に1つのステージに複数のタスクを書く例はほぼなかったので、NSLでは、ステージとタスクを1つの手続きとしてまとめました。m65は複数のタスクと内部関数を使って、直行する制御を実現していたので、この部分の修正が単純な置き換えではできません。
色々とやり方を検討したのですが、タスク相当のレジスタを手続きの引数で与えることにしました。他にも状態と内部関数を利用するとか、いくつも代替手段はありますが、あまり手間をかけずに動作させることを優先しました。今後、もう少し概念を整理して、きれいな記述になる方法を検討してみます。