- プリント基板が Fusion PCB で安く作れるようになってプリント基板作りが楽しくなった。設計したものが形になって出来てくる -- これはとても嬉しいことなのだ。
- 0.5mm ピッチのハンダ付けはいままで避けてきたのだが、0.8mm ピッチのハンダづけが普通に出来るようになったので、0.5 mm に 挑戦したくなっている。
FPGA は Startan 3A シリーズの 50A と 200A (VQG100) にしようと思う。- 3A は、1.2V core + 3.3V だけで(も)良いので 電源が楽。
- SPI FLASH で コンフィグするのに (3E と比べて) 便利になっているようだ 。(プルアップ抵抗がいらない?)
- 50A は 501 円と安いし、200A と配線を共有できるので、これで(製作も含めて)練習して 本当に規模が足りなくなったら 200A に移行する腹づもり。
(メモ: Spartan 3E/3A VQG100 比較 )
ロジックセル スライス 乗算器 最大USER-IO(うち入力)
(換算) CLB ブロックRAM DCM 価格
50A 1584 176 704 6K x 9bit 3 2 68 (6) 501 円
200A 4032 448 1792 32K x 9bit 16 4 68 (6) 1014 円
100E 2160 240 960 8K x 9bit 4 2 66 (7) 861 円
250E 5508 612 2448 24K x 9bit 12 4 66 (7) 1181 円
ブロックRAM の個数 = 乗算器の個数 , 1 個 2K x 9 bit
FPGA ボードを作るなら SDRAM を付けたい。- SDRAM の使い方は以前調べた →『SDRAMの使い方(メモ)』。
- チップも入手済み。256Mbit (16bit幅) は安く 10 個買った。古い ノートPC用の SO-SIMM 512M byte (512Mbit 8bit 幅 x8) もひとつ入手済み。 そして 128Mbit は、256Mbit と交換したものが余っている。
だが、もっとも重要なのは、SDRAM を付けることで複雑な配線になるということ。単体の FPGA ボードだとコネクタに線を引き出すのが基本だから単調な配線になる。それでは達成感が得られない。 要するに、基板の設計を楽しみたいということだ。
もちろん、作った基板には意味を持たせなくてはならない。本当に有用かどうかはともかく、有用だと思えるものでなくてはならない。 - とりあえずは、CPU を作るようなことを考えようと思う。200A は ブロックRAM が 32KB もあるし、SRAM を外付けしなくとも あまり困らない。SDRAM を使うとすればフレームバッファとか OS で使うメインメモリということになりそうだ。
- CPU を作るだけなら I/O 線 はあまり必要ではないだろう。ホストとのインターフェイスが充実していれば十分のような気がしている。
- あと思いつくのは、ロジアナのようにキャプチャするもの。I/O 線 はいらないと書いたが、少しは考慮しておこう。
ホストとのインターフェイスはどうしよう。
まずは JTAG 。それとは別に ホストと通信する手段。+できたら リセットなどの操作。- 最近設計した AE-UM232Rピン互換ボード(UM162)を使ってみることにする。
- 一応、AE-UM232R でもちゃんと使えることを目指す。
こう考えると通信は 基本 シリアル。だが、BitBang による SPI という手もある。あと操作系は CBUS BitBang 。 - CB0/CB1 は Tx LED/Rx LED がデフォルトなので 避けるとして、CB2/CB3/CB4 が使える。
- CBx は MProg で設定することで クロック出力もできる。(最大 48MHz !) これを使わない手はない。以前から CB4 をクロック出力と決めているので、これを割り当てる。
- UM162 も CB4 相当は PWM を割り当てている。ただ PWM なので 16MHz で動かしても最大 8MHz 。データシートを見ると DLL が使える最低周波数は、5 MHz になっている。そうなる 3.3V かつ 16 MHz で無理やり動かしたくなる。ちなみに 3.3V で 動作が保証されている周波数は 8MHz ではない。13 MHz ぐらい -- 要するに 16 MHz はあまり無理なクロックアップではない。
その他の検討項目。 - 3A は、1.2V core + 3.3V だけで(も)良いので 電源が楽。
- スタンドアローンで動かすこともあるかも知れないので、オシレータは付けられるようにしておきたい。7mm サイズの SG-645PCP を採用しよう。
他の周波数だと マルツで扱っている KC7050Bが使える。ただし 472円とか結構高価。デジキーで安いのは、ASV シリーズ。これでも 167円とかする。
追記:Spartan-3A スタータキット:〜DCMでクロック生成〜 を見ると、DCM を使うと 逓倍が可能なようだ。-- 2倍だけなのかと思っていた。秋月のは 33.000 MHz だからきっちり とは行かないが 3 倍して分周すれば .. 50MHz (ぐらい) とかも作れそう。 - コンフィグには、SPI FLASH を使うことにする。特に 50A なら 少量で良く格安で買った 512Kbit のものでさえ使うことも出来る。ちなみに SPI FLASH は、コンフィグだけでなく、アプリケーションでも利用可能。
-- CPU を作ったら 使ってみるのも 面白いかも知れない。 - 電源は、3.3V と 1.2V の二電源。UM162/AE-UM232R は、3.3V の供給能力が 低いので、3.3V のレギュレータを外付けする。1.2V は、MCP1700 と SC189 の二種類を 選べるようにしようかと思う。50A は消費電流も少ないようなので、10 個で 336円と安い MCP1700で済まそうと思う。(SC189 も 74円で高くはないが、インダクタも考慮する必要がある )
- 他には ボタンとか LED とか。
簡単な動作確認手段はあった方が良さそう。UM162/AE-UM232R が付いているから ピンの状態を読むことで代替はできる。必要とまでは思わない。可能なら付けるというスタンス。 - 拡張用 I/O
実を言うとあまり使うつもりはない。CPU が動かせたらそれで満足してしまうような気がする。だが、有用であることを目指すなら必要だ。応用できる可能性は残しておく。
さて、Spartan 3A VQG100 はどれぐらいの I/O が使えて、そのうち SDRAM などで どれぐらい消費するのだろう? 見積もってみることにする。
- まず、100 ピンのうち GND が 13 本。VCCINT など電源ピンも 13本。あと JTAG と DONE/PROG_B は専用ピンで 計 6本。これを計算すると データシートにある 最大 USER-IO の 68 になる。
- だが、SPI FLASH での コンフィグには、4pin 必要。さらに Config 時に 使用する M2-M0 と VS2-VS0 , INIT_B がある。これらを共用しないとすれば、使えるピンは 57 pin まで減る。
- さらに 入力専用ピン(IP_XX) が 6 本ある。うち 4本は VREF にも使える。専用ピンぽいので 避けて使うとすれば、残り 51pin 。
- 一方 SDRAM は、16bit幅 512Mbit (最大サイズ)を使えるように全部 つなげる。DATA 16 本。アドレス + バンク で 15本。コントロールで 8 本の 計 39 本。
- これ以外に最低限付けようと思うのが、通信用の Tx/Rx と クロック 2系統 (UM162/AE-UM232R とオシレータ) 。
残りは ... なんと たったの 8 本。贅沢に使うとこうなるわけだが、あまり大幅には増やせない。でも、8本もあれば、いろいろ出来るから悲観しなくとも 良いはずだ。
基板はどういう風にしよう
ここからが本題。上記は状況設定のようなもの。
- Fusion PCB で作るのを前提にするので 50mm x 50mm 以内。これは絶対守る。
今回は 100mm x 100mm にパックしてみようと思う。いろいろ作って切り出すつもりで 0.8mm で作る。ただ、この基板に関しては 1.6mm が本来の形だと思う。0.8mm は試作目的。
あと、0.8mm にしたと言っても はさみで切れる程 余白は作れないかも知れない。
今回は、緑以外にしたい。まずは、赤にするつもり。 - 長辺は 可能なら 47mm にする。(1/2 C 基板サイズ)
- 短辺は可能なら 35mm (1/2 C基板サイズ) 。無理でも 37.5 mm (RFAD ケース サイズ) を目指す。
こう決めてちょっと配置を考えてみたのだが ... 600 mil 24 pin が かなり邪魔。収まりが悪いのだ。どう配置しよう。- 24pin ソケットの 中に SDRAM を置く。
まずこれを考えた。一応、収まることは収まる。ただし、ブリッジしやすい上に 『ソケットを一旦付けたら直せない。』という問題がある。 - 24pin ソケットを裏に付ける。
一応ソケットが裏なので、ピンが邪魔なものの、やりなおしはできる。 ... 。ピンをギリギリまでにカットすれば、すこしはマシになるかも知れない。 - 24pin ソケットを裏にずらして付ける。
最終的にこれにした。ソケットを最初に付ける。そのときに、ピンをぎりぎりにまで切り詰め、上に載る SDRAM がちゃんと付くようにしておく。なお、上に SDRAM が載らない側の辺は切らない。
ソケットを裏に付けるということは、普通は部品面を下にして使うことになる。LED とか操作に必要なものは裏面。FPGA , SDRAM 以外でも必要なものは表面というルールにすることにする。
上記を基本方針として、設計を進めていった。が、いくつか問題が出た。- 24 pin ソケットが邪魔。
配線の上でもやっぱり邪魔になった。最低でも ピン間 2 本を通せないと VIA だらけになる。まずは ソケットの drill を 1.1mm から 0.9mm に変更。
それでも うまくいかない。いつも 使っている dru をやめて Fusion の dru ベースにした。ただ、可能なら drill は 0.4mm まで 最低線幅は 8 mil にするつもり。 - auto ルータの配線が汚い。
これは仕方がない。FPGA は ピンアサインを自由に決められるので、最適なピンアサインを探りつつ手配線をベースにすることにした。手配線にすると波打った平行線みたいな配線ができる。-- 出来るというより、そうするためにピンアサインを変えていくわけだ。
- 24pin ソケットの 中に SDRAM を置く。
レイアウト完成
最終的にサイズは 47mm x 37.5mm にした。あと LED は FPGA の分と UM162/AE-UM232R の分が 付けられた。スイッチは、PROG_B 用を付けることにした。
- PROG_B は、FPGA のコンフィグをロードし直す -- リセットのようなものらしい。必要かも知れないので付けることにした。
- LED は、VS0 と VS2 に割り当て L で点灯。
SPI FLASH でコンフィグするのに VS2-VS0 で設定することになっている。想定した設定は 111 (FAST READ コマンドを使う) と 101 (READ コマンドを使う)の 2 種類。"1" なら L で点灯する LED を付けられる。
十分堪能した。いろいろギリギリで、もうこれ以上手を加えたくない。
配線は、ほとんど手配線。しかも ちゃんと計画しないと 収まってくれない。とにかく、600 mil 24pin ソケットが邪魔で ピン間 2 本が精いっぱい。あと、配線でみっちりになるので、裏面が空いていても VIA が 自由には空けられない。
回路図はこんな感じ。回路図書くのも一苦労。この回路図は 書きなおしたもの。1 回目は 、機能別に して ライブラリの シンボルを作ったので 途中で わけがわからなくなった。なにか織物のような 感じまでする 回路図になってしまったので、PIN の順番を基本にして シンボルを作り直している 。 - 8bit 幅の SDRAM を使った場合の未使用ピン用コネクタは諦め。線は引き出せないし、コネクタの場所もない。無理。
- USER I/O は結局 8bit 分 だけ。1 本は入力専用。GCLK はひとつ。コネクタ形状は、1.27 mm ピッチで フラットケーブル直付けを想定。一応 VIA のドリル は 0.6mm でピンを立てることも配慮した。
- 裏面左上 M2-M0 と VS2-VS1 には 抵抗を付ける。設定は決めてしまっているが、一応 変更可能なように配慮した。
- UM162/AE-UM232R との接続は、JTAG 用に 4 本。通信用に 4 本( TxD/RxD/DTR/RTS で SPI も配慮) 。CB4 は GCLK に接続し、さらに PROG_B と INIT_B を CB2/CB3 に接続。
CB0/CB1 は LED 。使えるものは全部割り当てた。 - パスコンは裏面に 8 つ -- 表に付けるのは無理。うち 2 個が SDRAM 。1.2V core 用に 2 つで、3.3V 用が 4 つ。
これらは 1608 の 1uF を想定。-- 普通は 0.1uF だが 1608 は持っていないので 1uF にするつもり。 - 電源は、VBUS から取るか VIN から外部電源を入力するかを選択。D1 はダイオードの表記だが、ジャンパしても良いし、リセッタブルヒューズにできるかも知れない。
本当にダイオードを使うのは、1.2V にレギュレータ MCP1700 を使ったとき。供給電圧を下げて 負担を減らすのが目的。
UM162/AE-UM232R の VIO は、3.3V に設定する。5V はまずい。ちなみに 電源関係は、VBUS から 電源を取っているだけ。VCC や VIO は接続しない。
手は加えたくないが、もう少し 検討が必要そうだ。
- 余りピンの VIA 。
これぐらいはしておいた方が良さそう。付けておかないと 必要になったときどうにもならない。 - スレーブシリアルモードの コンフィグ
ホストから使うのなら、こっちの方が断然便利ではないか。-- 無理してでも付けたほうが良いか。
あと バグはあるかも知れない。特に ライブラリから作っているので、意外な間違いがあるかも知れない。
追記: 検討してみた。
M2-M0 の設定について: 設定は いろいろあるが 次のものだけ考えることにした。- 001 マスタ SPI モード
- 101 JTAG モード
JTAG モードは、勝手にコンフィグをしないモード。こう設定しないと JTAG でコンフィグできないわけではない。 - 111 スレーブシリアルモード
AVR など コントローラで コンフィグするモード。CCLK と DIN で 書きこむ。ただし、PROG_B を一旦 L にして初期化しないと いけないし、INIT_B でエラーが起きているかチェックすべき。ピンに余裕があれば DONE も チェックすべきだろう。2 本のみで OK というわけではない。
JTAG が付いていれば、別にスレーブシリアルモードはいらない。ただ、SPI FLASH を付けないで MicroSD のファイルをロードするような システムを作るときは有用で、可能にしておくべきだろう。
あと LED は 起電力があるのを忘れていた。これだと明るいところで L レベルになってしまうかも知れない。デフォルトを 1 にするなら H で 点灯という風に変更することにした。暗いところで "0" にならないか 不安があるが最悪は LED を外すことで対処。
いろいろ検討したが、- M0 は 無接続(常に 1)
- MI/M2 は、LED を接続(H で点灯) した上で、CB0/CB1 に接続 (TX/RX LED) 。
AE-UM232R だと CBUS Bitbang で モードを選択可能。LED は UM162/AE-UM232R 側が使うが 排他で FPGA からも使える。 - VS0/VS2 は LED を接続(H で点灯) 。
こちらは、FPGA 専用。"0" に設定した場合でも 1K を接続するだけなので、LED は使える。 - AE-UM232R では使えないが、UM162 では あと 2pin 使えるので CCLK, DIN に接続。
- PROG_B/INIT_B を CB2/CB3 に接続。
- PUDC_B を GND に接続
PUDC_B を L にすることで、USER-IO ピンを プルアップする機能で、普通そうするもののようだ。最初はどうでも良いかと思ったが、不安定になったりすると嫌なので ちゃんとすることにした。
基本的に ボードには手を触れないで操作できるように設計した。.. といっても AE-UM232R では、リセットして SPI FLASH から コンフィグするか JTAG からコンフィグするか選べるだけ。
UM162 では、スレーブシリアルモード もサポート可能。ただし、スレーブシリアルモードのコードを開発する目的で使う。普通は JTAG を使う。
ちなみに、SPI FLASH に書きこむには、バウンダリスキャンで、ちまちま書きこむか、書き込み専用の 論理を合成して 通信することで書きこむ。
これは、ザイリンクスが提供している。詳しくは ここの XAPP974 に書いてあるらしい。
余りピンの処理については、8bit SDRAM 時 使わないピンを VIA に出した。いちど 1.27mm ピッチで作ってみたが、drill が 0.4mm φにしかできず ピンも立てられないので、2.0mm ピッチにした。ほとんどは 一筆書きで VIA を付けられたが 1 つ は無理だった。これを外して 7bit にしたほうが良いかも。
.. といっても 裏に IC ソケットがあるので ピンは普通では 立てられない。先に立ててしまうと、SDRAM のハンダ付けが困難になる。干渉しないような 一列の IC ソケットを使えば良いわけだが、0.8mm 厚の場合基板が弱いので、注意が必要。
結局は役に立たないと思えるが一応。
(追記) XAPP974 をちょっとだけ見てみた。PUDC_B を GND に接続している。これは、コンフィグ中に I/O を全部 pull-up する機能。一本だけ未使用 I/O (#49)があったので入れ替えて、PUDC(#99) GND に接続することに。
03e:
ちょっと MCP1700 が本当に使えるのか気になったので確認。
1.2V の MCP1700 自体は、200mA が 定格だった。だが、これは放熱が完璧なときの話。いまの回路は 4.4 V (5V - ダイオード) 入力で 1.2V まで 3.2V も電圧差がある。.. となると core 電圧については、FPGA 自体が消費する 電力の 2.6 倍もレギュレータが消費することになる。50A でも、ひどいことになりそうなので、MCP1700 の場合は、3.3V から入力することにした。そうすると 3.3V のレギュレータの負担が増えるが、ダイオードで少しでも負担を減らすことで対処する。
まぁ、相当厳しいような気がするが、クロックが低ければなんとかなるに違いない。
こうすると 3.3V の負担が増えるので、結局やめて 別のダイオードを入れることにした。
ダイオードを使わずに抵抗を入れるのもあり。最大消費電流の 150mA のとき 3V ほど落とせば良いわけで 1/2 W 20 Ωを入れる。
DC/DC コンバータの SC189 を使えば core 電圧の方は心配しなくて良さそうだ。3.3V の方 は 大食いのSDRAM もある。だが、中華PMP の電源もこんな感じだからたぶん大丈夫だろう。
最悪は、3.3V 外部電源。これなら問題ないだろう。
TI に Spartan-3A 電源の必要条件 というページがあった。
これみると 1.2V の Imax が 50A で 150mA, 200A で 350mA と書いてある。 3.3V は I/O 用が 3A で vccaux が 100mA 。今の回路だと 1.2V に 150mA 流せても そのときは 3.3v が苦しくなる。-- やはり SC189 を使った方が良さそうだ。3.3V も SC189 にしたほうが安心できるかも知れない。
50A で 1.2V が 150mA といっても 最大クロックで動かした場合。クロックを落とせば電流は減るだろうから、MCP1700 で 3.3V から電源を取るのはやめようと思う。
あと 03e で穴をあけてみた。穴をあけられる場所は、2 ヶ所しかなかった。しかも 2.2mm φがやっと。
これで固定するのは無理。位置決めぐらいには使えるかも知れない。
ところで VIA でコネクタもどきにしたが、これは使えるのだろうか?
秋月に 1.27mmピッチのピンソケット などは売っている。データシートもあるので見てみたら 0.42 mm 角で drill は 0.7mm にするらしい。
細かすぎて使えるような気がしないが、ユニバーサル基板もあるし、ピンだけはささるようにしておこう。
これに合う変換基板もついでに作っておくのが、良いかも知れない。2.54mm ヒンペッダ とか MicroSD とか USB とか。
とりあえずスナップショット。 - 001 マスタ SPI モード
一緒につくる基板について
- 足は 9x2列 を 両側に配置する。2 列あるが、1 列のみだけでも使えるように配慮する。そうすると 32 の ピンを使えるということになるが、ピンは 32A の 32 pin 分を出す。(JTAG は別コネクタ。)

まず、CPLD 基板。
Cool Runner II XC2C32A/XC2C64A が 32A で 114円と 結構安いし、手軽に使えると良いように思うのだ。64A にしても 223 円で そんなには高くない。
こちらのボードも MCP1700 (1.8V) を載せる。MCP1700 も割と安く 10 個で 336円。これで 3.3V 単一電源で使えるモジュールにする。
サイズは 50mm x 50mm に 2 枚取れるようにする方針で考えた。今回は 10cm x 10cm の 1/4 で 2 枚取れるから だいたい 1 枚 50円ぐらいの計算になる。基板の値段も これに見合う。
こうやって出来たものは、29.4 x 24.0 mm になった。47 mm に抑えた基板と組み合わせることで 2.5mm 程度の余白が取れる。
次に 『FLASH アダプタとか』の記事で作った基板のリベンジ。-- VIA をスルーホールにする計画だったのだが レジストでマスクされてしまっていた。
これだけ入れてもまだまだ入る。それはともかく面付けはどうしよう。
検討したが、Fusion PCB でも『ガーバーデータのツール』が使えそうだ。ただし、ドリルデータ(TXT) の オフセットが 標準 CAM と 違う。... というか viewer でちゃんと見れるこっちの方が標準的だろう。大丈夫に違いない。

いまのところ こういう感じ。
まだまだ手直ししていくつもり。Fusion PCB のほうも 2/8 まで受注停止で 出来上がっても発注できない。
とりあえずスナップショットとして出来たものを保存しておく。
- fpgaset1-02.zip
上で説明していない基板は、まだまだ考察不足だが 一応説明しておくと .. - 右下 UM162 ボード x 2
赤にするならついでに作りたいと思っただけで (製作中の基板にバグがない限り) 必要ではない。置き換えるかも。 - 中央下 clk44 ボード
これも以前作ったボードがベース。水晶の発振周波数を 調整できる仕組みを入れたいので作ってみることに。 - 中央 TN8102BC キャラクタ液晶変換基板。
以前記事にしたが、解析中のまま放置中。低消費電力の LCD は欲しいと思っているので、発注までに解析を再開して FIX したい。 - 中央上 plltest ボード
これまた 記事にしている。XMEGAボードを作ったとき おまけに付けた回路なのだが、余白があるのなら単独のものを仕込んでおきたい。
CPLD や FPGA なら PLL 自体は論理回路なので 楽に組める。そしてあれば嬉しい機能でもある。 なので単独の VCO を 作ってみたわけだ。 ただ、これも放置中で 未テスト。
version 04

今はこうなっている。um162 は外そうかとも思ったが、一式載せる方針にした。

新しいのは、これ FPGA ボード用拡張ボード。 MicroSD , USB あと上記の pll 用 VCO 。一応は使えるものを目指した。

UM162 と同様に裏面に付ける。1.27 mm ピッチ 1 列の ピンヘッダ/ソケットで取り付けはできるが、固定する方法がない。今のところ 両面テープとか使って 無理やり固定するつもり。
マウントの方法がいまいちだが、良い方法を思いついていない。ネジ穴を切った ブロックを 下に貼り付けるぐらい?
あと、FPGA 側の拡張用の信号線を 少し変更。-- USB を付けようと 差動 I/O のペアを 調べたら、変な割り当てにしていたので。この変更で、差動 I/O が 2 つ取れるようになった。
これで、載せる基板はだいたい決まった。下半分は FIX 。右上 1/4 FIX 済み。決め切れていないのは、右上 1/4 。特に VCO 基板は重複してしまっている。
- FPGA ボードから切りだして作っている。大きさは、LED とか ボタン , UM162 と 干渉しないように決めた。
- 10 pin の ピンヘッダを付けて、他の使い方もできるように配慮した。
USB: - D+/D- 差動 I/O のペアを割り付け 抵抗を入れられるようにした。
- スルー 用の端子をつけた。アナライザ用
- HOST にできるかも知れないので、MINI コネクタの ID を ピンに割り当て。あと、VBUS を 出力 できるように FET スイッチを付けた。
- プルアップ/プルダウン用の 抵抗と制御線を入れるべきかも。不要にできるのかどうか分かっていないが、まだ付けていない。
(追記) やはり プルアップ抵抗用の制御線を付けた方が良さそう。LowSpeed なら D- FullSpeed なら D+ をプルアップするから 2 本と抵抗が必要。それに加えて VBUS 検出用の 信号線も 付けよう。これは VBUS を 分圧して入力するから抵抗が さらに +2 。
MicroSD : - 一応全結線。
- 電源ラインに インダクタを入れられるようにしておいた。カードの中にコンデンサがあるらしいので、インダクタのみ。ホットプラグしないなら、ジャンパで良い。
VCO : - 回路は、以前作ったもの のやきなおし。
- フランクリン発振回路なので、LC メータとか作れるように配慮。
- 水晶発振器のVCOにもなるよう ピン配置を決定。
フランクリン発振回路の C を容量可変ダイオードで変化させるもの。FMトランスミッタで似た様な構成のものがあるから 部品の選定次第で FM 帯域までいけるはず。
LC を調整して LC メータとかも作れる。タンク回路の部分に 端子を付けておいた。ここに C または L を付けることで周波数が変化するから 差分から 値がわかる。
C5/C6 はこの回路では付けない。
C5/C6 を付けて XIN/XOUT (白で囲んだ端子) に水晶を付けると 水晶発振器の回路になる。ただし下の部分を接続しない。
C1 をジャンパして、容量可変ダイオードを活かすと 水晶発振器の周波数を調整できる。温度をセンスしてフィードバックをかける用途を想定。
ちなみに、上にある Tiny44A のボードは、この回路を組み込んだもの。... 下半分でこれだけ違う。FPGA ボード関連のものにしたほうが良さそう。
検討してみた。2mm ピッチの方の 拡張基板というのはどうだろう? 2mm ピッチの方は 3.3V が接続されていない代わりに 5V が接続されている。USB 基板は、3.3V を必要としない上に 5V があると便利になる。MINI-B から 電源を取るだけでも良いし、HOST にした場合供給することもできる。
詳しくは後述する。
スナップショット。 - ピンアサインのメモ: (04a)
MicroSD USB PLL
#1 VCC
#2 DETECT D- PULLUP PLLCTRL
#3 DAT2 -- --
#4 DAT3/CS D- INV
#5 -- D+ XIN
#6 CMD/DI D+ PULLUP --
#7 DAT0/DO VBUS DETECT GND
#8 DAT1 VBUS SWITCH --
#9 CLK -- XOUT
(PLLCLOCK)
#10 GND
NOTE: #9 (GCLK) , #4/#5 #6/#7 (DIFF PAIR)
ちょっと考えたのだが、MicroSD は カードを入れなければ、#2 DETECT 以外 OPEN 。これを FPGA ボードに貼りつけて配線してしまえば、2x5 の ピンヘッダを立てられる。ほかのカードは 、ピンヘッダを利用して スタックして使えば良い。
DETECT は 片側を GND にしたスイッチで カードを入れなければ OPEN ではあるが pullup して使うことを想定しているので、ボードに 抵抗を追加するかも。
#3 は、配線が面倒なので 他のカードでは使っていない。#2 と #3 を入れ替えるべきだろう。
ついでに、FPGA 側の信号線との関係。
コネクタ FPGA 信号名
#2 #28 L03P_2
#3 #32 L05P_2
#4 #33 L06P_2
#5 #35 L06N_2
#6 #36 L07P_2
#7 #37 L07N_2
#8 #39 IP_2/VREF_2
#9 #41 L08N_2/GCLK15
あ、#8 は 入力専用なのを忘れていた。これも直さないと。 - version 04b
サイズは同じだが、今度のは、2mm ピッチのほうに付く USB ボード。5V 外部電源用の スルーホールを利用して 2 ヶ所で止められる。そして、1.27mm にも 依然として付けられる。
ただ、スルー用のコネクタは付けられなかった。あと 1.27mm ピッチの #1 3.3V も無理だった。また差動ペアの割り当ては無理。どうせ 12Mbps までしか無理だろうし 別に困らないとは思うので気にしない。
このボードには部品を付けないで、単に 2x5 の変換基板としても使える。ただし、#1 3.3V は接続されていない。(裏面に)パッドは用意できたので、どこからか、3.3V を引っ張ってくれば、他のオプションカードの取り付けができる。 - version 04c
今はこうなっている。04b で clk44 ボードをやめて、オプションボードを追加したが、04c で さらに追加
今回 は、3.3V 電源強化 ボード。sc189 ボードを変更して取り付けられるようにした。
これで、3.3V の消費電流が 増えたときも対応できる。
最初から組み込めば良いとも思ったが、このサイズには入らない。それに、必要とは限らないし、これでヨシとする。
その他の変更- plltst ボードは 1 つにして、sc120 ボードと sc189 ボード(normal) を追加。... sc189 は、前の小基板セットで失敗しているし、リベンジ。
- xc2c32a CPLD ボードに 水晶 を取り付けられるよう変更。別に付けなくとも良いが、付けたくなるケースが多いだろうと想定。インバーターは CPLD 側で用意するのが前提。
そろそろ、これで FIX 。あとは、チェックあるのみ。
スナップショット:
そろそろ、... と思ったのだが、1.27mm ピッチの部分、どうにかならないか。
1.27mm ピッチ単列だと 強度的に不安がある。一応 ケーブル直付けできるようにしていたのだが、 ケーブルを直付けするのは 美しくない。だが、2.54mm ピッチだと 入らない。
試しに 2mm ピッチ 2x5 を 置いてみたら入りそうなので、検討してみることにした。- ピンヘッダ(2.0mm/2列)[PHEADER-2.0PT-D] 40pin 50円
- 接続ケーブル(2.0mmピッチ10P)[CB-2PT10P-25] 100円
で十分か。ちなみに、1x10 だと PHR-10 というのがある。 - ケーブルアセンブリ[CB-PHR10P-240] 片側コネクタ 150円
- ケーブルアセンブリ[CB-PHR10-10-26AWG-220] フラットケーブル 両側コネクタ 100円
このあたり。ピンヘッダは、在庫切れだが、秋月にある。
コネクタなどは、入手できることが分かった。で、うまくいくのか?
こんな感じ。コネクタと IC が近すぎる。これだと FPGA をハンダ付けするときに、ポリミドテープとかでマスクしてハンダ付けしないと、ハンダでスルーホールを埋めてしまいそうだ。
ただ、1.27mm ピッチにしたとしても、さほど事情は良くならない。また、1.27mm ピッチではケーブルを引き出すコネクタがない。コネクタがあるのは 1.25mm ピッチで微妙に合わない。
... というわけで 2x5 に全面的に切り替えることにした。位置合わせはさほど難しくない。全部もとは同じなので、同じ座標に置けば良いのだ。ただ、基板が増えているので 修正は面倒。
表面に装着したイメージ。今回は青基板の画像を作ってみた。- 青基板の方が良いかも知れない。
- パターンの露出面を 金色っぽくしているが、ENIG だとハンダの乗りが悪いそうなので、HASL にするつもり。
- 左上の 穴は 2.2 φ→1.5 φにした。あまりにぎりぎりだと、パターンを痛めそうなので小さくした。
- USB アダプタは、16bit幅 SDRAM とは 両立しないので、たぶん 使わない。
こちらは、UM162/AE-UM232R を載せる方。裏なのだが、普通はこちらを上にして使う。- MicroSD アダプタ を置いてみた。ソケットが 2.54mm ピッチの方にかぶるので、MicroSD アダプタ と 2.54mm ピッチ変換は両立しなかった。
- ケーブルが引き出せることが分かったので、基板に直接載せる 使い方はしないかも。
- アダブタにコネクタ付きケーブルを付けるのなら、2.54mm ピッチに一回通して 2mm ピッチ側にハンダ付けするのが良いかも知れない。
- 青基板の方が良いかも知れない。
2mm ピッチは aitendo で 結構な種類を扱っている。2x5 だと
ところで、イメージファイルを作るのが面倒。ガーバデータは解析できているのだから自力でイメージを作るようにした方が便利かも知れない。ちょっと検討してみよう。
あと、CPLD ボード。こんなにいらない。手軽に使うには潤沢に持っている方が良いと思って x2 にしているのだが ... どうしよう。 - plltst ボードは 1 つにして、sc120 ボードと sc189 ボード(normal) を追加。... sc189 は、前の小基板セットで失敗しているし、リベンジ。
忘れそうなのでメモ。
全般:
verstion 05b
- plltst をついに外した。入れたのは、2x5 の変換基板。180 °回転と、裏表入れ替え。作っておくとマウント方法に幅ができる。特に 180°回転なんて変換基板はないと思うし 配線が面倒なので有用かも知れない。ちなみに 単に 2mm ピッチ→ 2.54 ピッチ変換するだけなら、他の拡張基板に付いているから切りだしても良い。あと aitendo で扱っている基板から切り出す手もある。
- 右上 pmpset1 で 2mm ピッチのところ に ラインを入れた。こうしておくと RC を付けたいとき 使えるかも。
- CPLD 基板みなおし。変換基板だから単純なのだが、VCC と GND を接続したりしていると悲惨なことになる。たぶんこの基板はもう作る機会がないと思うので ちゃんとチェックした。
結果は 一応 OK なのだが、水晶を 付けるピンを 1つしかない Global Set/Reset を使わないよう変更した。
さて、そろそろと書いてから、だいぶん変更を重ねてしまった。FPGA ボードの方の配線のチェックは、一応済ませた。(後ろでまとめている)。あとは位置的な問題と周辺回路のチェック。
スナップショット:

今はこう。
追記: イメージファイルの生成
- 随時更新している。
最新では、Makefile を入れた。ファイルの数が増えてきたので管理しきれない。CAM プロセッサーは自動では動かせないが、時刻をチェックして 更新もれを防ぐようにしている。あと、生成したイメージファイルの 削除とかにも便利。-- xpm はかなりでかい。全体画像だと 4MB (png だと 170KB まで圧縮される)
下の画像も make で作っている。これぐらいの解像度でイメージに変換してブラウザでチェックするのが、一番見やすいような気がする。
version 05d/05e
中央上の 2x5 変換基板に抵抗を入れることにした。入れるのは #4-#7 の 差動用端子。入出力を動的に切り替えるかも知れないので衝突対策。変換基板が大きくなったので、sc189 基板を外した。
大して変えていないのだが、これで良いのか?不安なので、ファイルを変更。
あらためて画像を見ると、だんだん FPGA ボードのサポートボードの面積が増えてきた。FIX したら 1.6mm であらためて発注しようとは思ってはいるのだが、肝心のFPGA ボードで失敗するとだいなし。いまいちどチェックしよう。
05e では、FPGA ボードのアートワークを見直し。左右のボード端の部品を少しでも内側に寄せるようにした。(ケース MK6040 に固定するとき部品が端にあると困る)
さすがにそろそろ FIX か。あと一週間になったし、UM162 ボード や tn8102bc ボードの確認もしておきたい。
スナップショット:
いよいよ、発注の時期が迫ってきた。冷静にレイアウトを眺めていると 拡張ボードばかりなのが気になる。これら、全部有用なのか? やりたいことや開発の手順を考えてみたが、USB とか MicroSD とか 割と後回しになる。
大体、USB を使ってみたくとも 33MHz 以外のクロックを付ける予定がなかったりする。x2 の 66MHz で 無理やり動かすとか考えだすと、なかなかにハードルが高くなる。
各ボードの 2mm ピッチ 2x5 を 外すとかして小さくして、FPGA ボードに関係したものを 下半分にまとめられないか 検討してみよう。
追記:
『つれづれ日記』で知ったのだが、『Microtouch - a handheld AVR touch screen demo board』-- すごくいい。基板サイズは、45mm x 50mm で 右上の pmpset1 と置き換えられる。突っ込んでしまいたい。mega32u4 も持っているし、液晶も 37pin タイプのようだ。ただ、水晶とか MicroSD スロットとか 一部の部品が秋月で買える部品と 違うものを使っている。液晶も 1mm / 0.8mm ピッチではないかも知れない。手直しして突っ込むか -- どうしよう。
別記事 『microtouch』で検討してみたが、今回はパス。慌てる必要はない。じっくり検討しよう。
『ガーバーデータのツール』をもとに、自力でイメージファイルを生成することに成功した。これで 貼り付ける画像の作成が楽になる。詳しくは、該当記事に追記しているので参照のこと。
CPLD 基板をどうするか、再度検討。
CPLD 基板でやりたいことをする基板は前に作ったのだった。作った基板を使わないうちに 新しい基板を作らないことにした。
で、おなじサイズで差し替え用の基板を作ることにした。ひとつは 照明用LED基板。5mm の LED を 12 個載っけて 12V で使う。
あと tn8102bc 基板を復活させる。ただし、発注する前に 動作確認ができた場合の話。もし動けば普通の キャラクタ液晶の 1/10 程度の消費電流(0.1mA ぐらい)になる見込みで やはり使いたいのだ。

こんな感じか。作り直したらパターンをコンパクトにできた。コネクタの配線は、普通のキャラクタLCD に合わせてみた。使えそうなら、このパターンをベースにして、AVR を載せて... みたいなことを考えたい。
スナップショット:
設計してみた感想 .. というか、今後どうするかについての想定
Startan 3A 50A と 200A の 100ピンタイプ(VQG100)を選択してみたわけだが、SDRAM だけで ピンがほとんど埋まってしまった。SDRAM を付けた以上なにか高速な I/O をしたくなるが、I/O 用のピンが少ないのがネック。2 枚のボードを接続してある程度高速に通信できるようなら、SDRAM なしの I/O 専用ボードというのも考えてみたい。
I/O 専用ボードでも 100ピンを使っても良いのかも知れないが、144ピンのデバイスを探してみると、Startan 3AN 50A が 812円で買えることが分かった。 HUB みたいにしてSDRAM付きボードを何枚か接続できて 外部のデバイスを扱えるようにするものを考えてみたい。... といっても SDRAM付きボードが使いこなせてからの話。実現できるかどうか分からないが考慮だけはしておこうと思う。
これ以上の規模になると、BGA になってしまう。2 層基板では無理だし 電子工作の範疇を超えそうだ。100 pin の 200A と 144pin の 50A だけでなんとかすることにして、チップ間の通信に力を入れるようにしたい。
あ、144pin の Spartan-6 が買えるのか。じゃぁこれ一択だ。良くは知らないが。まぁ 先の話。
(メモ: Spartan 3A VQG100/Spartan 6 LX9 TQG144 比較 )
ロジックセル スライス 乗算器 最大USER-IO(うち入力)
(換算) CLB ブロックRAM DCM 価格
50A 1584 176 704 6K x 9bit 3 2 68 (6) 501 円
200A 4032 448 1792 32K x 9bit 16 4 68 (6) 1014 円
LX9 9152 ? 1430 64K x 9bit 16 4 102 (?) 1286 円
ブロックRAM 1 個 2K x 9 bit
LX9 は、CMT に 2 個の DCM と 1個の PLL が含まれている
LX9 は、DSP48A1 スライス に 1 個 の 乗算器 と 加算器 ,
アキュームレータが含まれる。
やはり一択っぽい。だが、これを選ぶと今回のデザインにはなり得ない。だからステップアップするときに使えば良く、今回はこれで良いのだ。
ところで、8bit しかない I/O でどれぐらいの性能が出せるのだろう?
ちなみに SDRAM は、前に調べたところ、連続した 8 つのデータ を読み書きするなら、16bit 幅なら 2x8 の 16 バイトに CL2 で 13 クロック(CL3 でも 15 クロック)。1 クロックあたり 1 バイト前後。大雑把に言って 66MHz システムクロックなら 66MB/sec 。これと比べて 数分の一ぐらいの帯域は欲しいところ。
単一のシステムクロックで全部動かすつもりだったのだが、I/O だけ 倍速や 4倍速にするのは可能なようで、その想定はやめた。どうせ高速 I/O なら FIFO を入れるつもりだし、非同期でも問題ないようにもできる。
こう考えることにすると 3.3V の シングルエンドは 物理的な配線の都合から 33MHz の DDR が限界だと考えた方が良さそうだ。これが可能なら シングルエンド 4bit で 33MB/sec まで行く。あまり心配する必要はなさそう。ひょっとしたらもっとクロックを上げられるかも知れない。PC の DIMM なんかでもシングルエンド(しかもバス)で 133 MHz 実現していたわけだし。
ちなみに FIFO を ブロック RAM に取るとすると 1KB x 16bit 。ちょっとオーバースペックだが 200A なら 16個あるから 積極的に使っても良いのかも知れない。ただ、50A は 3 個しかない。I/O 専用ボードも なるべくなら 200A にした方が良さそう。
小容量の FIFO は、分散RAM を使うのが普通らしい。8 データのバースト用バッファなら 16bit x 16 あれば良さそう。ただ CPU の バーストアクセスのために WAIT が入るような作りだと この数倍必要。大容量の FIFO を使うにしても クロックの乗り換えのために 小容量の FIFO を一回通すのは良いような気がする。
さて I/O ピンは 8bit 分しかない。しかも 1本は入力専用なので クロスしない配線で済ますとすれば 7bit分 しかない。そのうち 4bit は、差動 I/O に使える。シングルエンドにしても この 4bit を使って 高速 I/O することにしよう。その場合 CLK が別に必要になりそうなので、+1 本を クロック専用ピンということにする。
残りは 2 本だが、これは I2C のような 使い方をしようと思う。並列でつなぐので、どういう風に 高速 I/O 用のピンを 接続するのかネゴしたい。つながった後は あまり関与する必要はなさそうだが、BREAK みたいなことは出来た方が良いかも知れない。ug331 を 確認したら 3STATE_PULLUP という設定があったのでこういう使い方はできそうだ。
高速 I/O 用のピンのひとつの使い方は、上記のものだが、差動 I/O もあるので、これも考えておきたい。
とりあえず、調歩同期を考えてみる。2 チャンネルあるが、どちら向きで使うかは、I2C でネゴ。ひとつの 差動 I/O では、システムクロック x 2 でサンプリングすることにして、3 クロックで 1bit にしようと思う。66 MHz なら 44 Mbps 。10bit で 1 バイトだから 4.4 MB/sec 。片方向に 2 チャンネル使うなら 8.8 MB/sec 。
この数倍も可能なような気がするのだが、クロックがない。66MHz を 2 倍にして 133 MHz がせいぜいか。そういえば、SDRAM 自体も 133MHz までいけるのだから、メモリコントローラも システムクロックの 2 倍速で動かしても良いはずだ。 これもいずれトライしたい。今は忘れないようメモのみ。
ちなみに 480x272 16bpp のグラフィックデータを 30fps で送るとすれば、7.47 MB/sec 。だいたいこれぐらいの帯域。しょぼいと言えばしょぼいのだが、まずはこのあたりを目標にしたい。
FPGA の使い方の考察は、この程度にしておこう。ここではなんとかなるということが分かれば十分。
追記: 2/9 いよいよ 発注の時期が迫ってきた。わけだが ... ここに至って、Pmod というのを知った。Digilent が 設計して 拡張モジュールを発売しているらしい。で、大概の学習モジュールは、これに対応したピンヘッダが出ている。Pmod は 12ピン -- 2列x6 で 1列だけで使うこともできる。
対応すべきかどうか? .. 本体はもう変えたくない。2mm ピッチだし同じにはできない。10 ピンのケーブルなども 入手済みだし。-- それで良いだろう。だが、拡張ボードの類はどうだろう? 2.54 mm ピッチは 本体とは関係ない。できることなら合わせておいたほうが良いのでは? ... ちょっと悩んでみよう。
追記: 2/15 予定の期日を過ぎてしまった。結局、最後の 05f をそのまま出した。今は FPGA での設計の方が楽しくなってきていて、基板にはこれ以上時間をかける気がなくなった。失敗するかも知れないが、出してみる。
ところで色については気が変わった。白にすることにした。価格は $50 。over $50 で送料無料と書いてあったが、$50 で無料になった。ただし、ただの書留。どうせ、設計している間に来てしまうのだ。遅くても全然かまわない。
発注データ:
追記 2/16 : 作れないというメールが来た。問い合わせてみると、1 ボードにするのは、OK だが、テストできない ということらしい。テストできないのを 許容するなら OK 。
無条件でテストしないというのは嫌なので、どう変更したら良いか問い合わせ中。
追記 2/17 : 答えの代わりに『13 個の PCB のうち 5 個までならテストするよ』という返事が来た。

画像を送って、『OK なら 製造開始してね』 ということにした。
良く分からないのは、右上が、1 枚と認識されること。実際一枚なのだが --- マージの仕方がだめなのだろうか? といってもツールを変更することは怖くて出来ない。
3/3 追記: Fusion PCB の方には書いたのだが、こっちにも記載。
結局、上記のは勘違いで、『5 枚を残して消したデータを送れ』ということだった。それは嫌なので、panelize.ulp でマージしたのをさらに 面付けしたデータを作って送った。

その後、2/28 に 送付という連絡が来た。たぶん 受け取りは 3/10 前後になるだろう。
(注意) 今回は、無理を言って作ってもらった感がある。5 枚もの ボードを面付けして 送っても 受け付けてもらえないかも知れない。面付けしたデータも公開しているが、それをそのまま送って作ってもらうのは、推奨しない。
もし自分で基板を切ることを前提にして 面付けしたいのならば、個々のボードを panelize.ulp でマージしてほしい。この場合は、1 枚として認識されるので問題ないようだ。
あといちいち書いておくが、公開したボードデータのライセンスは、GPL ということにする。この EAGLE ファイルを使って ボードを作り、それを他の人に渡すのであれば、(作ったボードそのものの) EAGLE ファイルも渡さなければならない。そして、渡された人が GPL の範囲で利用することを妨げることはできない。それを守る限り 商用利用も OK 。なお自分のためにボードを作り他の人に渡さないなら、私的利用 であり 著作権は及ばないとみなす。
- Spartan-3 ユーザーガイド ug331 (日本語 pdf)
- Spartan-3 コンフィグレーションガイド ug332 (日本語 pdf)
- Spartan-3A データシート ds529 (日本語 pdf)
- Spartan-3AN データシート ds557 (日本語 pdf)
付録: 参考資料のリンク
付録: ピンアサイン一覧
1.27 mm ピッチ拡張コネクタ
MicroSD USB PLL
#1 VCC
#2 DAT2 D- PULLUP PLLCTRL
#3 DETECT -- --
#4 DAT3/CS D- INV
#5 CMD/DI D+ XIN
#6 DAT0/DO D+ PULLUP --
#7 DAT1 VBUS DETECT GND
#8 -- -- --
#9 CLK VBUS SWITCH XOUT
(PLLCLOCK)
#10 GND
NOTE: #9 (GCLK) , #4/#5 #6/#7 (DIFF PAIR) , #8 INPUT
2mm ピッチ コネクタのアサイン
コネクタ SDRAM FPGA 信号名
#1 5V
#2 DQ14 #19 L06P_3
#3 DQ12 #15 L05P_3
#4 DQ10 #12 L04P_3
#5 DQ1 #9 L03P_3
#6 DQ3 #5 L02P_3
#7 DQ5 #3 L01P_3
#8 DQ7 #98 L06P_0
#9 DQ8 #71 L05N_1
#10 GND
SDRAM の割り当て表 (2mm ピッチに出ているものを除く)
SDRAM FPGA 信号名
DQ0 #10 L03N_3
DQ2 #6 L02N_3
DQ4 #4 L01N_3
DQ6 #49 L10N_2
DQ9 #72 L05P_1
DQ11 #13 L04N_3
DQ13 #16 L05N_3
DQ15 #20 L06N_3
LDQM #94 L05N_0
UDQM #70 L05P_1
WE #93 L05P_0
RAS #89 L04N_0
CAS #90 IO_0
CS #88 L04P_0
CKE #64 L04P_1
CLK #65 L04N_1
BA0 #86 L03N_0
BA1 #85 L03P_0
A10/AP #84 L02N_0
A0 #83 L02P_0
A1 #78 L01N_0
A2 #77 L01P_0
A3 #73 L06N_1
A4 #50 L11P_2
A5 #52 L12P_2
A6 #56 L01P_1
A7 #57 L01N_1
A8 #59 L02P_1
A9 #60 L02N_1
A11 #61 L03P_1
A12 #62 L03N_1
UM162/AE-UM232R との接続表
Serial + SPI
#1 TXD(PD3) (MOSI) #7 IP_3/VREF_3
#2 DTR(PD7) (SS) #21 IP_3
#3 RTS(PD6) (SCLK) #40 L08P_2/GCLK14
#5 RXD(PD2) (MISO) #34 L05N_2
Clock:
#11 CB4(PC5) #44 L09N_2/GCLK1
Config:
#12 CB2(PC4) #100 PROG_B
#16 (PC2) - J2 - #53 CCLK(L12N_2)
#17 (PD0) - J1 - #51 DIN(L11N_2)
#18 CB3(PD1) #48 INIT_B(L10P_2)
#22 RX_LED/CB1(PD4) #24 M2(L02P_2)
#23 TX_LED/CB0(PD5) #23 M1(L01P_2)
JTAG:
#6 SS #1 TMS
#8 SCLK #76 TCK
#9 MOSI #2 TDI
#10 MISO #75 TDO
CPLD ボードピンアサイン
A B brd-opt C D
1 31(GO) 30(GRS) VCC VCC
2 33(GO) 32(GO) XIN 29 28
3 36 34(GO) XINV 27 23
4 38 37 22 21
5 40 39 20 19
6 42 41 16 14
7 44(GC) 43(GC) 13 12
8 2 1(GC) XOUT 8 6
9 GND GND 5 3
GO : Global Output
GC : Global Clock
GRS : Global Set/Reset
水晶使用時:
XIN -- |>o -- XINV -- |>o -- XOUT
を組む。
JTAG
1 24 TDO
2 11 TCK
3 9 TDI
4 10 TMS
5 GND
VCC 7,26,35
CORE 15
GND 4,17,25
N.C 18 (INPUT)
メモ: UM162 ボードのピン配置。