2014.1.21

前へ
次へ
ホームページトップへ戻る

CPLD+SIMMを使ってUSBプロトコルの解析を!
VHDLを速習! XC95144XL+16MB・SIMMを使ってUSBプロトコルアナライザを作ってしまいました!
主目的は差し迫った事情からUSBプロトコルの解析をすることだったのですが、その手段として選んだのがコレ!


[第4回]


●16MB SIMMの端子接続図

前回はインターネットを通じて入手した16MB SIMMにNECの2MB DRAM、μPD4217405が8個使われていると書きました。
SIMM基板そのものは単なるメモリの集合体のようなものですから、個々のDRAMチップにアクセスするようなつもりでメモリのREAD、WRITEを行ないます。
16MB SIMM基板には72個の端子があって、そこに各メモリチップからの配線がつながっています。
72pinと書きましたが実は基板の表裏に各72pinの端子がありますからほんとうは144pinです。
しかし同じ位置にある表と裏の端子には同じ信号が配置されていますから、実質的には72pinと変わりません。
そういうことからこのタイプのメモリを72pinSIMMと呼んでいたのではないかと思います。
このメモリを使うからには、各端子にどの信号が配線されているかがわからなくてはなりません。
やる気になればメモリチップの端子と基板の端子の導通をテスタで調べればわからないことはないのですが、幸いそんな手間をかけなくても、これもインターネットで調べることができました。
下に72pinSIMMのコネクタ端子の信号配置を示します。

GND
D0
D16
D1
D17
D2
D18
D3
D19
10 VCC
11 n/c
12 A0
13 A1
14 A2
15 A3
16 A4
17 A5
18 A6
19 A10
20 D4
21 D20
22 D5
23 D21
24 D6
25 D22
26 D7
27 D23
28 A7
29 A11
30 VCC
31 A8
32 A9
33 _RAS3
34 _RAS2
35 n/c
36 n/c
37 n/c
38 n/c
39 GND
40 _CAS0
41 _CAS2
42 _CAS3
43 _CAS1
44 _RAS0
45 _RAS1
46 n/c
47 _WE
48 n/c
49 D8
50 D24
51 D9
52 D25
53 D10
54 D26
55 D11
56 D27
57 D12
58 D28
59 VCC
60 D29
61 D13
62 D30
63 D14
64 D31
65 D15
66 n/c
67 PD1
68 PD2
69 PD3
70 PD4
71 n/c
72 GND

この基板の場合A11,_RAS0,_RAS3はn/cです。
PD1〜PD4はパソコンに実装したときのメモリサイズ、アクセスタイム検出用端子です。今回の目的では使いませんから接続不要です。
_OEは基板内部でGNDに接続されています。
データ幅4ビットのμPD4217405チップ8個がD0〜D31に割り当てられています。
_RASと_CASはチップに対して異なる組み合わせで配線されていますが、データラインは8個のチップにそれぞれ独立して割り当てられていますから(下図参照)、_RAS線と_CAS線はそれぞれまとめて同時に信号を供給します。



●CPLD+SIMM版USBプロトコルアナライザの構成図

メモリも入手できたところで、全体のシステム構成について、その概略を図に示します。



当初はカメレオンUSB(CPLD)は1個で全てをまかなうつもりだったのですが、VHDLでプログラムを書いてみましたら、容量オーバーになってしまいました。
ちょっと見込みが甘かったようです。
しかし今更ほかのシステムに乗り換えるわけにもいきません。
急遽もう1セット、カメレオンUSB+ロジアナを購入してしまいました。
ロジアナ基板は以前に購入していますから、カメレオンUSBだけあればよいのですけれど、前にも書きましたように、カメレオンUSB単体での販売は終了してしまっているとかで、ロジアナとのセットでしか入手できません。
ロジアナ基板が余ってしまいますが仕方がありません。

制御の詳細については次回以降に少しずつ説明をしていきますが、なかなかに面倒なことをやっているのです。
DRAMは容量を大きくできて端子数も少なくできるのですが、その代わりにリフレッシュが必要です。
アドレスも同じA0〜A10のラインにロウとカラムの2回に分けて出力しなければなりません。
そのときにRASとCASをそれぞれアクティブにします。
それがRAS(Row Address Strobe)とCAS(Column Address Strobe)の信号名称の由来です。

DRAM(Dynamic Random Access Memory)はその名の通りSRAM(Static Random Access Memory)と違って、データを静的に保持することができません。
非常に短い期間内にロウアドレスにつながっているメモリ素子を繰り返しREAD/WRITEしなければ、値が失われてしまいます。
どのくらいの期間内にアクセスする必要があるかといいますと、32msの間にA0〜A10で示されるアドレスの全てを一巡しなければなりません。
32ms/211ですから、32000/2048≒15μsになります。
つまり15μs以内ごとにA0〜A10が000〜7FFに順次変化するようなメモリアクセスをし続けなければなりません。
普通はそんなに都合の良いメモリアクセスをすることはできませんから、通常のメモリアクセスとは別にリフレッシュサイクルを設けて、その期間に順次リフレッシュを行なうようにします。
ただ、今回は幸いに12MHzで送られてくるUSB信号を順次メモリに記録しておくのがデータロガーの役目ですから、うまく回路を構成すれば各データの書き込みをリフレッシュに利用できそうだと考えました。

とにかく12MHzで送られてくるデータをシリアルパラレル変換してからメモリに書き込みますから、1バイトのデータをメモリに書き込むサイクルは、(1/12)×8≒0.667μsになります。
当初は32ビット変換するごとに書き込むつもりでいましたから、0.667×4=2.667μsになりますが、それでも15μsよりも十分短いサイクルでメモリにデータを書き込むことができます。
この場合にはデータ書き込みをもってリフレッシュに代えることができます。

しかしそのようにして保存したデータを読み出すときは、そうはいきません。
実はデータの書き込みよりも読み出しをどうするかが問題でした。

本日は時間がなくなってしまいましたので、そのことにつきましては、次回に説明をいたします。

CPLD+SIMMを使ってUSBプロトコルの解析を![第4回]
2014.1.21upload

前へ
次へ
ホームページトップへ戻る