電子工作/FPGAで何をしようか
SuzTiki:電子工作
趣味として、FPGA を何につかったら、満足が得られるか考えてみる。
ほんとうのところは、ただ ただ FPGA を使ってみたいのだが、
使ったことで満足を得られるかどうか ... これがポイント。
CPU を作るというのは、興味深いのだが、出来たからどうなのだろう?
成果物が実際のなにかの役に立つような気がしない。
CPU を作るのは手段ならば良いが、目的にするにはすこしおもしろくない。
自分が満足する条件を考えてみると
- FPGA で なければ作れないもの or FPGA だから シンプルに作れるもの。
- 組み込み用の 8 or 16 bit CPU で作れるものはダメ。→
ある程度 高速なデバイス
- 高度な 32bit 以上の CPU ではできてもよいが、それを撰択するより
シンプルか コスト的に見合うもの。
この2つの条件を満たすものを考えていたのだが
- イーサネットの先に直接つながるデバイス。たとえば IDE Disk を
制御できるもの
というのを考えてみた。もちろん 10Mbps 程度のイーサネットではおもしろくない。
100 Mbps の PCI の チップをつなぎ 実際に高いスループットで転送できる
ようなもの。
- なぜ、イーサネットかというと、(PC を含めて)家のマシンはどれも
ろくな インターフェイスを持っていない。100 Mbps の イーサネット以外だと
USB 1.0 しかないし、小型 PCばっかりなので、PCI で拡張ってのも無理がある。
PC 以外だと、拡張できないような 携帯PC とか ルータ系とか ...
長年 ネットワークにつがなることだけを優先しつづけてきたので、
かたよりがあるのだ。
- 多くの組み込み用の CPU では、PCI のホストになるのは大変だ。
FGPA を使えば、ちゃんとしたホストと言えなくとも 特定の PCI のデバイス
ぐらいは制御できるのではないか。
- もちろん、PCI バスをもっている CPU を使えば そういうことは
できてしまうのだが、FPGA と同等以上の規模になるはずだ ...
と思っておく。
- SH系 なら簡単などとは考えない。なぜならFPGAを使いたい
というのが、もともとの動機であって、ここではそれを強化しているにすぎないから。
ただし、SH とくらべて システムが大幅に高くなるというのではやはりダメ。
... うーん落しどころが難しい。
- 低速でも良いのなら、たいがいのものは、8/16 bit CPU を使えばできる。
FPGA で回路を組むということは、それらでは達成できない性能を得る
ということが条件になる。ただ、
NP-BBRsx のように TX39/H2 コアの
TMR3927AF
を使った 方が
安上がりで妥当なものが作れそうなカテゴリのものではダメだ。
で、プロトコルコンバータのようなもの がとりあえずターゲット。
そういうことを考えて行くと、片側の媒体が Ethernet で 反対側は
IDE という組み合わせが 妥当じゃないかという 結論が出てきた。
ただ、SH や TM9327AF のような 安価な 32bit CPU で作れるものでは、
本当は おもしろくない。なんか もうひとひねり必要だと思うのだが、
十分ノウハウがない状態では 想像してもあなまり意味がないかも。
そういう意味で、足掛かりとして取り組むというのも想定する。
- さて、イーサネットの先にデバイスが直接つながるとどう便利だろうか。
HOST に制限されないから、そのデバイスを接続した PC を立ち上げておくといった
ことをせずにすむ。こういう特長が便利な場面は いくつかあるように思う。
- もちろんプリンタなどは 十分便利なのだが、それゆえに安価に製品が
出ている。
- たとえば USB で制御できる メジャーな装置
キーボード、マウス、リームーバブル-ストレージ、
ディスク、スキャナ、カメラ、プリンタ、パラレルポート、シリアルポート、
イーサネット、無線、デジカメ,MP3プレイヤーなどの携帯装置
あたりを イーサネットにつなぐとどうなるか考えてみる。
- キーボード、マウスは、Bluetooth ならおもしろいかもしれない。
HHK を改造して作って、Bluetooth 搭載の PDA につなぐ...とか。ただここでは
考えない。
- プリンタは既に安価。カメラもある。スキャナは、有望かもしれない。
ただ、スキャナ自体は、自分ではとくに欲しいものではない。
- リームーバブル-ストレージ や DISK は、欲しい。
- パラレルポート、シリアルポートは、汎用かつ高速 多チャンネル なら
欲しいかなぁ。
- イーサネット -- イーサネット は
スイッチングハブとかルータが既に安価にある。
- 無線LAN, bluetooth のアクセスステーションは、
カテゴリとして 既に確定。ハード自作のターゲットにはならない。
- 携帯装置は、種類が多すぎる。
USB のプロトコルを Ethernet に流すだけでインテリジェントでなければ可能かも。
ただ、IDE DISK より難易度はたかそう。
- セキュリティについてはどうか .. はっきりいって 通常の意味の
セキュリティを持たせるのは無理。ではどうするか。安全なように
デバイス専用の Network を物理的に組む ことを前堤にせざるを得ないかも
しれない。
なにが出来るかわからないが、なにをしないといけないか...考えてみる。
ステップ1
- 1000円 ぐらいで売られている PCI の 100M イーサを
単に デバイスと扱えるモノを作ってみる。
最初は、HOST に 接続して、HOST から
デバイスのレジスタを読めるだとか そういうのを目標にする。
- PCI を良く知らないし、どれぐらいの規模になるのか想像もつかないが、
もし CPLD で扱えてしまうのなら、それだけでも 満足いく成果だと思う。
- もちろんこの段階で、PCI とはどういうもので、どうやって動くのかを
勉強することになる。
ステップ2
- ステートマシンの高度なものか、CPU を作りこんで
イーサネットから受信/送信できるものを作る。
- これもまた現時点では 良く分からないのだが、Linux や BSD のドライバ
や カーネルの PCI の制御 などをちゃんと読めば わかるだろう。
- 考えてみれば、PIC でも制御できているんだから、
なんとか作れるんではないかという気になる。
- IP を作ってプログラムを書くのも良いが、
ステートマシンの高度なもので作れた方が 満足度はたかそうだ。
- ある論理を 回路レベルでコンパイルするわけ
だから .. 結果としては似たものなのかも。
- ここは楽しみどころだ。いろんなやり方がありそうだし、ここだけで
loop してしまうかも。.... それでもいいのだ。
ステップ3
- プロトコルを考えて、贋者のデバイス ( 実際にはものはないが、
あたかもあるようなふりをするもの) をでっちあげる。
- プロトコルは、TCP が実装できればそれにこしたことはないが...
別に それ以外のオリジナルなものでもかまわない。
- 相手はかしこく/自分はバカ というのを前堤にして、
非対称な もの を考えた方が 簡単そうだ。将来 iSCSI がメジャーに
なってくるかもしれないのだが、それに拘れば 作れそうにない。
- ここも自由度が高いから 楽しめそうだ。
ある程度は知識があるつもりだが ... どんなものに仕上がるのか
想像できていない。
ステップ4
- 10 Mbps 以下でしか送受信できないようなものになってしまうと
作った意味がないから、プロトコルの完成度より 高スループットで、
送受信できるものを考える。
- 実際に高スループットでデータ転送できるデバイスは、やっぱり DISK とか
... リアルタイムの動画とか ... 欲しいのはストレージなんで一応 DISK
それも IDE を考えることにする。
- IDE DISK をどう制御するかという話は、基本的に ステップ1ー3の流れと
独立だから、Network 系でいきづまったら、手を付けるのも良いかもしれない。
最終的に動くものを作り上げるのは、いろんなことを知らないといけないし、
かなり難しいと思う。でも、もし作ることができたら
かなりの満足が得られそうだ。
- バッファとして RAM を付けなければならなそうだという予想はあるが...
IDE ディスクの中にも キャッシュはあるわけだ。( しかも高速 )
ひょっとしたら、RAM を付けなくともなんとかなるのかも知れない。
そういうシンプルなものを作ることができたら、大満足だなぁ。
到達できなかったとしてもそれぞれのステップで十分楽しめそうだし、
とりあえずは、そういうのを目標にして、FPGA で遊ぶということにしよう。
2002/06/27
あぁ。買うことにしてしまった。XC2S100-5TQ-144C しかも 5つ。
もう 一生遊べるにちがいない。
まあ、長期に渡って遊ぶから、あわてないのだが 、評価用ボードを
手に入れないといけない。
秋月C基板でスパルタン2な
ボードをわけてもらうというのを視野にいれつつ、
ボード設計も楽しいから、まずは自分で考えてみようかと思う。
上記のことを想定すると ... PCI のスロットと IDE 用のピンヘッダを
付けられる必要が ありそうだ。
EAGLE で free で使える範囲だと、10cm x 8cm までに押える必要がある。
手もとの PCI の Ethernet のカードは、端子の幅が 8cm ぐらい。
長辺で 物理的には スロットを 接続できそうだ。
IDE 40 pin は、51mm ぐらいだから、短辺でも置けそうだ。
1 スロットを 1:1 でつなぐつもりだけども、ターミネータとかいるのかなぁ。
ここは、ちゃんと勉強しないと わからない。
さて、IDE はというと、実はこれも ちゃんと勉強しないと わからない。
40 pin のピンヘッダを立てて、片側は ほとんど GND だったと思うけど
それぐらいしか知らない。
で、まんなかに 144 pin の FPGA。
さて、これだけで良いか... というと .. RAM を付けておきたい。
本来の目的でも バッファに使うかもしれないし。
で、config 系は どうしよう。jtag ポートを付けるとして、それだけで
良いか。... HOST と常に接続するのを前堤にすればそれでも良いらしい。
手もとに Flush ROM と VQ64 の CPLD があるはずだから ...
これを 使って config 用 の 部分を組むのがよさそうだ。
で、FPGA が enable になった後は、Flush ROM を直接アクセスできるように
もしたい。
- 直接は無理 -- PCI と IDE で I/O を ほとんど使ってしまう。
RAMU もだめ。
あと電源系 ... 3.3V と 2.5V のレギューレータでいいことにする。
- あ、5V の信号を接続できるかどうか... ちゃんと押えていない。
だめだったらマズイなぁ。
- 5V TTL レベル は OK 。
クロックはもちろん必要。PCI 33Mhz だそうだが、正確でなくてもよさそう。
40Mhz の クロックモジュールが手もとにあるんだが...こんなんで良いのか?
まあ、そんなボード を 考えてみることにする。もちろん いろいろ調べて
からでないと .. ダメだが。あわてないし、のんびりやることにする。
CPLD や FPGA を使うと嬉しいのは、pin 接続の制限がないこと。
ボードの配置を先にきめて、配線できる。
PIN 数が足りるかどうかは分からないが ... 144 pin だし、
だいじょうぶじゃないかなぁ。
もし足りなければ ROM と RAM を バス接続することにするとか ...
ROM をシリアル接続だけにするとか .. いくつか方法はあるだろう。
とりあえず部品を並べてみた。
10cm x 8cm にはいらないことはなさそうだ。
- 1 つのボードに PCI,IDE,ROM,RAM が入るとなると、まともな コンピュータ
システムにしたくなる... したくなるが、
そういうのは、一応主要な目的からはあえて外す。
- FPGA の I/O ピンが足りなくて RAM は載せられない。ROM も FPGA 側から
直にアクセスするのは無理。
XC2S100-5TQ144 のメモ
- ロジック規模 10万 ゲート (RAM を含む)
- Logic Cells 2700
- CLB Array 20x30
- I/O 92 -- 思っていたより少なかった
- PQ208 なら 140 使えるけど、ボード自作できるのが条件になって
しまい、保険がなくなってしまう。
- Total Distributed RAM 38,400
- Total Block RAM 40K
- 電源は、2.5V , I/O 用に 3.3V
- I/O は、TTLレベル、PCI ともに OK。
- 最大 200Mhz
- コンフィグデータ 781216 bits (97652 bytes)
IDE のメモ
PCIのメモ
- 重要そうな信号線 ( いまのところ)
- AD00 - AD31 32
- INTA# - INTD# 4
- CBE0 - CBE3 4
- RST
- CLK (スキュー(or 線長) 重要らしい)
- FRAME
- TRDY
- STOP
- DEVSEL
- PAR
- LOCK
- すなおに 信号をつなぐと PCI 50 ぐらい/IDE 32 で
I/O ピンの 92 のほとんどが埋まってしまう。
他のデバイスは あんまりつけられない。
- RAM 入れたかったなぁ。背伸びして、PQ208 を撰択すべきだったか。
まぁ、これが遊べるレベルにまでなってから、次考えればいいか。
ならなければ、次考える必要もないわけだが... 次のレベルは、
RAM と ROM 入れて、いまどきの電子ブロック的ハードにしたいなぁ。
- そうであれば ... PC 接続専用ということにしよう。
- PC 接続専用にしても USB 使えないかなぁ。
カメレオンUSBみたいに
AN2135SC じゃなくて、(XC9572XL or H8/3664) + USBN9603 がいいなぁ。
なぜかというと、できあがった頃には、AN2135SC は 入手できないかも。
あと、gcc で開発できないのが 厭だったりする。
XC9572XLの中にステートマシン組み入れて、USBN9604 コントロールするというのは
難しそうだが、どこまでできるのか やってみるのはおもしろそうだ。
H8/3664 なら CPU に作れるだけの能力はあるし、チップ単体なら 800円だし。
これでも良いわけだが... 多機能だから他のこともやらせたくなってくるし、
CPLD でできるのならそっちが良いなぁ。
- CPLD の線はほぼ消えた。どうしても載せたいなら、H8/3664 +USBN9603 か。
- メモ:
- 秋月の 1M シリアル EEPROM AT24C1024 (800円) は、
2.7V-5.5V で扱える。
スバルタンII XC2S150 以下は、1Mbit 以下なので、容量的には OK。
XC2S200 から 1Mbit を越える。(1,335,840 bits)。H8 付けるのならこれも。
メモ
PCI 以外のインターフェイス で 100M のイーサネット
- LAN91C111
というのがあるらしい。組み込み用途で LAN の範囲が拡がっているから
そんなものがあるわけか。でも、どうやって入手するんだろうか?
... このチップ メーカ製 Linux ドライバもあるらしい。
- MII インターフェイス。MII というキーワード ドライバのソース
見ているといろいろでてくるんだが 25Mhz で 4bit を扱うインターフェイス
らしい。100M イーサって 25Mhz で 4bit に多重化して送っているから
物理層を扱うもの。まあ、これを扱おうと思うのは私には無理そうだが一応めも。
- MAC 内蔵 CPU というのがあるらしい。SH7615/7616 とか。
北斗電子の SH7515 ボードは、
DP83843 とかいう のを使っている。
- あ、PC のチップセットでも そういうのがあるか。ということは、
MII インターフェイス ってのは 、わりと一般的?
(最終更新 Thu Mar 30 19:01:14 2006)