久しぶりに M72

これより優先度の高い開発プロジェクトがある気がしますが、他がつまったり、機材が出せないなどの理由で久しぶりにこれをやってみました。

外部 CPU

PLD 内部は 64MHz で動き、外部の CPU は PLL も外付けして 8MHz だったのですが、非同期になり setup / hold time が守られないので動かない、と開発中断中に気づきました。

このために外部の PLL は停止し、 PLD の 64MHz を 8 分周したクロックを出力・供給することにしました。分周は回路は 3bit のカウンタ用意し、単純にインクリメントします。 bit2 は 8MHz となり、 bit2:0 の分周値で外の CPU のタイミングをとれるようにします。

この方法は以前は、10MHz より低い clock の供給として内部のCPUでやっていたのですが、動作が非常に安定しないので clock は PLL からでる clock を入力し、cke (clock enable) へ分周タイミングをいれることにしました。

外部の場合はそういうことが出来ないわけでこれでいいのかなと思いつつやっているのですが、いまのところは改善の兆し無し... 結構ソースを書いたのにそれに見合う結果を得られませんでした。なえる。

tilemap の書き込みミス

tilemap は VRAM の中でも中規模の容量を求められるため、PLD 外部の RAM としました。外部の RAM は SDRAM となるわけで、わりと複雑なコントローラがいります。

原因を探ってみたところ、CPU - video でのバスの切り換えが不適切でメモリアクセスが正しくできていませんでした。 CPU からの write 途中で、 video 側からのアクセスがあると、コントローラが write sequece を実行するものの、バスが video に切り替わっている上に read ではなく write が行われるというものでした。

SRAM とかならすぐに切り換えてもなんとかなってるんで、その感じで作ったらだめだったという。というか、いままで作っていたやつでもこういう事が発生してもいいのになぜ起きなかったのか。外部CPUだからいけないのか、アーキテクチャの問題なのか、ということを考えると自分がてきとーに作ってたことに気づきました。

まだまだ修行が足りないです。別の問題をいうとデバッグ用のシミュレーション条件を作る根気も無くなったみたいで、参ります。