aki_iic’s blog

己の欲せざる処人に施す事無かれ、狂人の真似するは即ち狂人なり

80C188でSBC(その3:再設計編)

80C188でSBC(その2:失敗に学ぶ編:)の続き

80C188でSBC(その2:失敗に学ぶ編:) - aki_iic’s blog

1.n80C188_v1の問題点(振返り)

 ・CPUからのA19-A16をALEでlatchしていなかった。

 ・nS2(M/IOに相当)もALEでlatchしていなかった。

 ・A18-A16(4Mbit SRAMのアドレス)のlatchしたアドレスをSRAMのA18-16として提供していなかった

 MPX busのaddressをaleでlatchしていないという基本的なミス(恥ずかし)・・・

2.対策内容

 ・A19,A18のPSD入力は(偶然)latch指定可能だったのでそのまま使用。A17,A16はlatch選択不可能だったのでlatch可能なピンに再割当て

 ・nS2をlatchは!aleでPSD内のマクロセル(DFF)でラッチし、nS2Lとして使用(n80c188_v1で適用済)

 ・4Mbit sramへのlatchしたA18-16をPSDの出力ピンに割当

 ・上記ピン数確保の為にnCFピンをPSDから80c188XLのPCS0に移動

3.PSDのピン再割り当て

n80c188_v2 PSD PIN assign

 図右上のCPLD inputがlatched addressに設定されています。A19-A16全て。

4.80c188メモリリード・ライトタイミング(再掲)

80c188 bus timing read cycle

80c188 bus timing write cycle

5.修正したPSDのPLA(抜粋:赤字が修正部分)

equations

rs0 = *1;
csiop = *2;
fs0 = *3;
! nCS16550 = *4;
! nRAM = *5;
! nFT245RD = *6;
FT245WR = *7;
a18o = a18;
a18o.oe = Vcc;
pb7.oe = _reset;
a16o = a16;
a16o.oe = Vcc;
a17o = a17;
a17o.oe = Vcc;
nS2L := nS2;
nS2L.ck = !ale;
la0.le = ale; "latched by ale/as
la1.le = ale; "latched by ale/as
la2.le = ale; "latched by ale/as
la3.le = ale; "latched by ale/as
la4.le = ale; "latched by ale/as
la5.le = ale; "latched by ale/as
la6.le = ale; "latched by ale/as
la7.le = ale; "latched by ale/as
a16.le = ale; "latched by ale/as
a17.le = ale; "latched by ale/as
a19.le = ale; "latched by ale/as
a18.le = ale; "latched by ale/as

end n80188v0

 A19-16をALEでlatchし、A18o-A16oとしてSRAMのA18-16に出力する。

6.再設計した回路図(n80c188_v2)

n80c188_v2 回路図

5月5日にJLCPCBに発注し、5月7日に出荷された様なので来週には手元に届くと思われる↓

7.PCSnレジスタ関連(80C188XL manualより)

PCBはPeripheral Control Block(プリント基板ではなく)なるintel 方言

 レジスタ設定は基板が届いてから・・・dba更新も

8.パターン図(全レイヤ合成)

n80c188_v2 パターン図(全レイヤ合成)

9.基板イメージ(3D:部品面)

n80c188_v2 3d top

(つづく)

 

前回のトピック:

aki-iic.hatenablog.com

*1:address >= ^h80000) & (address <= ^h81FFF) & (nS2L

*2:address >= ^hF000) & (address <= ^hF03F) & (!nS2L

*3:address >= ^hF8000) & (address <= ^hFFFFF) & (nS2L

*4:address >= ^hF090) & (address <= ^hF09F) & (!nS2L

*5:address >= ^h0000) & (address <= ^h7FFFF) & (nS2L

*6:address >= ^hF080) & (address <= ^hF08F) & (!nS2L & !_rd

*7:address >= ^hF080) & (address <= ^hF08F) & (!nS2L & !_wr