FPGA基板は抵抗とコンデンサであふれる
English Summary
After placing the major components such as the Zynq FPGA, DDR memory, eMMC, FTDI device, and connectors, the next challenge was dealing with the large number of resistors and capacitors surrounding them.
There were well over one hundred small passive components, possibly close to two hundred. At that point, it was difficult to imagine how everything would fit on a 50 mm × 50 mm PCB.
Most of these components were related to the FPGA and DDR circuitry. Components that needed to stay close to specific pins were placed as near as possible, while the back side of the PCB was also used extensively to save space.
Because manually moving such a large number of components is time-consuming, a small Python script was created to assist with placement in KiCad. By specifying a component reference and the related FPGA pin, the script could move the resistor or capacitor close to the desired location.
The script was not intended to determine the final placement automatically. Instead, it reduced repetitive work by moving components to roughly the correct area. The final positions still had to be adjusted manually while considering routing space, VIA locations, and interference with nearby components.
This part of the layout process required patience, but it also showed how useful small automation tools can be when designing a compact FPGA board.
前回は、Zynq FPGAやDDR、eMMC、FTDIなど、基板上の主要部品を配置しました。
主要部品だけを見ると、なんとか5cm角の中に入りそうに見えます。
ところが、ここからが大変でした。
次に待っていたのが、FPGAやDDRの周辺にある大量の抵抗とコンデンサです。

本当に5cm角に入るのか?
回路図上では、抵抗やコンデンサは小さな記号として並んでいます。
しかしPCB上では、当然それぞれに実際の面積が必要です。
今回の基板でも、抵抗やコンデンサはかなりの数になりました。
正確に数えたわけではありませんが、100個どころではなく、200個近くあったと思います。
主要部品を置いたあとでPCB全体を見ると、
「これ、本当に5cm角に全部入るのか?」
と思うくらいでした。
FPGAそのものは大きな部品ですが、実際の基板ではその周囲にある細かな部品もかなりの面積を使います。
特に多いのがFPGAとDDR周辺
大量の抵抗やコンデンサの多くは、FPGAやDDRの周辺に配置する必要があります。
特にコンデンサは、電源のデカップリング用途で大量に必要になります。
できるものについては、なるべくFPGAやDDRの近くへ配置しました。
ただし5cm角という限られたスペースなので、表面だけでは当然足りません。
そのため今回の基板では、表面に置けるものは表面へ置きつつ、基本的には裏面も積極的に使いました。
FPGAの裏側にも抵抗やコンデンサを配置して、できるだけ面積を有効利用しています。
小型基板では、表面だけを見て配置を考えるのではなく、裏面も含めて立体的に使うことが重要になります。
数百個を手作業で配置するのは大変
とはいえ、抵抗やコンデンサを一つずつ動かしていく作業はかなり大変です。
例えば、
「このコンデンサはFPGAのこの電源ピンの近く」
「この抵抗はこの信号ピンの近く」
というように、部品ごとにある程度置きたい場所があります。
数個なら手作業でも問題ありません。
しかし、これが100個、200個となると、かなり根気のいる作業になります。
そこで今回は、少し作業を楽にするためにスクリプトも使いました。
Pythonで部品配置を補助する
KiCadはスクリプトからPCBデータを操作できます。
そこで今回はPythonスクリプトを作り、
抵抗やコンデンサの部品番号と、配置したいFPGAのピンを指定すると、そのピンの近くへ部品を移動する
という簡単な配置支援を行いました。
例えば、
- 対象となる抵抗やコンデンサの番号
- 近くに配置したいFPGAのピン
を指定しておくと、その周辺へ部品を移動させます。
完全自動で最終配置まで決めるものではありません。
まずスクリプトで大まかな場所まで持ってきて、その後、人間が実際の配線や周辺部品を見ながら位置を調整するという使い方です。
このスクリプトはまだ公開していませんが、こうした単純作業を自動化するだけでも、かなり助かりました。
自動化しても最後は人間が調整する
PCB配置は、単純に部品を近くへ持ってくれば終わりではありません。
配線の通り道やVIAの位置、ほかの部品との干渉なども考える必要があります。
そのためスクリプトは、
「正しい位置を決めるツール」ではなく、「大量の部品をある程度正しい場所まで運ぶツール」
として使いました。
最終的にはPCB全体を見ながら、一つずつ調整していきます。
それでも、何百個もの部品を完全に手作業で移動するよりはかなり楽です。
小さな基板ほど周辺部品が効いてくる
今回改めて感じたのは、基板のサイズを小さくするとき、
大きなICだけを見ていてはいけない
ということでした。
FPGA、DDR、eMMCなどの主要部品が入ったとしても、その周囲には大量の抵抗やコンデンサがあります。
さらに、その後には配線とVIAのスペースも必要です。
5cm角に収めるには、
- 表面と裏面を両方使う
- FPGA周辺へ効率よく部品を配置する
- スクリプトなどで単純作業を減らす
- 最後は配線を考えながら人間が調整する
といった工夫が必要になりました。
主要部品を置いた段階では、
「なんとか入りそうだ」
と思っていました。
しかし抵抗とコンデンサを並べ始めると、
「本当に全部入るのか?」
という不安が再び出てきます。
小型FPGA基板では、こうした細かな部品の配置も、かなり重要な設計作業になります。
弊社では短期間基板開発を支援します
FPGAインフォメーションのページはこちらからどうぞ
お問い合わせは、こちらからです。
