CPU実験室

誰も見向きもしない古いCPUをいじって動かしてみようというプロジェクトです

タイミング確認

最小ループプログラムが動作したのでハード的にはもうOKと思い、シリアル制御を含むすこしサイズの大きい
プログラムをコーディングしたところ、どうも動きが安定しません。
シリアルからインクリメントデータを吐き出すループを実行させると途中で止まったり、数回に1回は
全く動作しないこともあります。
メモリアクセスに問題が無いかタイミングを見直してみました。
 
現状実装されているメモリです
ROMはAMDのAm29F010で128KByteのものですがそのうち32kByteをDSPのプログラムメモリ空間の
0000h-07FFFhに割付。
これを2個使い16bit32kWORDとしています
 
RAMはNECのuPD434016で16bit幅256kWORDあるのでそのうち32kWORDをプログラムメモリ空間
8000h-FFFFhに32kWORDをデータメモリ空間8000h-FFFFhに割付けています
 
イメージ 1
 
DSPは非常に高速なメモリを要求します。
TMS320C25を40MHzで駆動したときのメモリ読出しタイミングですがアドレス確定後、/STRBの立下りから
約30ns以内にメモリのデータが確定している必要があります
 
イメージ 4
 
ROMのほうですが、アクセスタイム90ns品のもっとも高速な/OE制御でも35nsたたないとデータが
確定しません。
実力からいえばぎりぎりセーフなのかもしれませんが危ないですね
さらに接写した写真を見てから気付いたのですが片方のROMが120ns品になっています・・・・
これではますますダメです
 
イメージ 2
 
一方、RAMのほうは非常に高速です。
最悪値のアドレス制御でもアクセスタイム15nsを保証していますからDSPの要求に充分間に合います。
しかもワード幅なので1個で済みますが全容量の4分の1しか使ってないのがちょっともったいない。
 
イメージ 3
 
いままでこのROMのタイミングでまがりなりにも動いていたのが不思議ですが
まずはROMアクセスにウェイトを挿入しなければなりません