|
どうも初めまして。 マクニカ 2022年度 新卒社員の 無知無知くん です。 電気電子工学科卒ですが、回路図読めない、半田怖い、プログラミングできない、が私の初期状態。FPGA について全くの初心者である私が、今年の夏 新人研修の製作実習を無事に終えることができました。 |
ここでは、実習内容を振り返りながら 今だからわかる 事前に知っておけば良かったことを再確認し、[過去の自分への教訓] にしたいと思います。
では、3ヶ月間の奮闘っぷりをご覧ください。
はじめに
無知無知くん が FPGA を使用して作成したモノは、"7セグメント LED 時計" です。
「こんなミスあったな、懐かしい」または「ちょうどここ分からなかった」など、人によって感想は様々だと思いますが 見ていただけると幸いです。
ちなみに、そもそも FPGA って何?という方は、先輩の記事『FPGAとは?超初級編』をご覧ください。
▶ 関連コンテンツ: これからはじめる インテル FPGA
目次
今回は、第一弾! 仕様書作りと拡張基板作成中に起きた「知らなくてヤバかった!」と思ったことをお話しします。
製作物の紹介
まずは完成した 7セグメント LED 時計 (以下 7seg 時計) をご覧ください。
|
★ 写真をクリックすると 動画が再生されます |
0~12時の間は 左側の顔が表示されます。ボタンを押すと 右側の困った顔に。 | それ以降の時間では 通常で左側の顔。ボタンを押すと ニッコリ笑顔です。 |
7セグメント LED は、通常時 14:30 のように 時:分 が4桁で表示されますが、
プッシュボタンを押している間だけ、下2桁が 秒 の表示に切り替わります。
そして、ドットマトリクス LED には顔が表示され、7セグの時刻に応じた 表情 を見せてくれます ❤
使用した部品と開発ソフトウェア
7seg 時計を作成した部品や開発ソフトウェアは、次のとおりです。
部品
|
EK-10CL025U256 |
7セグメント LED OSL-40562-IG |
ドットマトリクス LED MOA20UB019GJ |
|
ユニバーサル基板 PICOK 400A 94V-01521 |
プッシュボタン |
コネクター(pitch: 2.54mm) 抵抗、トランジスター など |
開発ソフトウェア
| インテル® Quartus® Prime Lite Edition 21.1 | |
| Questa* - Intel® FPGA Starter Edition 2021.2 |
実習課題と計画
この製作実習で出された課題は 2つありました。
① ハードウェア言語で動作させること
② Nios® II ソフトコア・プロセッサーを使用し、ソフトウェア言語で動作させること
実施内容は、下図のとおりステップごとに分かれていました。
無知無知くんは、わからないながらも考え、
時計表示をハードウェア言語で、ドットマトリクス LED の制御を Nios® II に実行させることにしました。
そして早速、7seg 時計の開発の土台となる ステップ 1. 仕様書作成 に取り掛かりました。
仕様書を作成
仕様書には、7seg 時計の概要や動作仕様の詳細の他、部品表、ピンリスト、接続図などを書きました。
GPIO のピン番号を特定
|
7seg やドットマトリクス LED などは 自作する拡張基板に搭載し、Cyclone® 10 LP 評価キット上の GPIO ピンソケットと接続します。 そのため、"Cyclone® 10 LP のユーザー I/O ピン" と "GPIO ピンソケットのピン" の配置を調べる必要がありました。 |
早速、無知無知くんは インテル社の公式 Web サイトから 回路図を入手 しました。
ctrl キー + F で 評価キットの回路図に書かれたピンレイアウトから GPIO を探しまくり、ヘッダーのどこに対応しているかを調べました。
調査の結果、GPIO ピンソケットの GPIO として使えるピンは 35 本と判明。
拡張基板に乗せる全ての部品のピン数が、35 以下だったら OK とわかり、いざ 部品調達へ!
今は簡単にネット注文ができますが「実際にモノを見て手に取って勉強して来い」との先輩の 命令、いや アドバイスにより、秋葉原という未知の領域へ足を踏み入れた無知無知くんでした。
接続図を作成
買ってきた部品を GPIO ピンソケットのどのピンにつなげるかを考え、接続図を作成しました。
| GPIO ピンソケットと Cyclone® 10 LP | プッシュボタン/ドットマトリクス LED/7seg |
半田づけ
ビビって このお方とは 距離を置いていたのですが…、目が合っちゃいました。
ロックオンされたらヤルしかなく…
|
はいー! 接続することだけ考えた結果、このような配線になりました!!
なんでこんなぐちゃぐちゃ空中配線をしてしまったんだろうかって 今なら 思えます。 しかし、このときは達成感で満たされていましたねぇ。 |
|
| 左: 表面 / 右: 裏面 |
そんなこんなで、ステップ 1 の課題を終えました。
振り返ってみると...
知らなくてヤバかったこと
知らヤバ 1. ピンと部品の接続関係
|
実は、評価ボート上の Cyclone® 10 LP の I/O ピンと GPIO ピンソケットのピンの接続関係、そして GPIO ソケットと自作基板上の部品とのピンの相関関係がわかっていませんでした....
|
GPIO、はいはい、見つければいいのね → 次 何するの...?
部品のピンと I/O ピン、どこをつなげるか決めるのね → 次 何するの...?
|
"次何するのマン" になってしまった無知無知くん。 なぜなら、"GPIO と拡張基板の部品を配線するだけで、Cyclone® 10 LP の各 I/O ピンが各部品へつながる" という 根本的な部分を理解していなかったのです。
|
Cyclone® 10 LP の評価ボードは FPGA と GPIO ピンソケットの各ピンがすでにつながっているので、自分は 7seg LED などの部品の各ピンと GPIO ピンソケットのピン、"どこ" と "どこ" を接続するか決めれば良いだけだったんですよねー。そこに時間がかかってしまいました。
知らヤバ 2. 部品の使い方
何とか Cyclone® 10 LP の回路図を見ながら GPIO の場所を特定。
さぁ、どこに接続しようか...
左: 作成した図 / 右: 部品の仕様書の図
おやおや?部品のピン、少なくないか!? と思いました。
無知無知くんの計画では、7seg は 28 ピン (8pin x 4桁)、ドットマトリクスは 35 ピン (7行 x 5列) は必要のはず…
7seg とドットマトリクス、それぞれ 12 本しかないのは "欠陥品でしょ(笑)" とか 本気で思ってました。
その思い込みのまま、各 LED の点灯仕様を把握するために 部品の仕様書を見ながらテスターを使い 1 箇所ずつ光らせることで LED のピンには、アノード側とカソード側があることがわかりました。
え?? でも、やっぱりピンの数が足りないし…
複数の箇所を同時に光らせること できなくない?
その疑問を払拭すべく、先輩にヒントをもらったり、調べに調べました。
すると、なんと
ダイナミック点灯を利用する必要がある!!
ほほぉ~、なるほど。これってそういう使い方なのね。
正直、ただ気に入った部品を買ってきただけでしたが、使える GPIO の本数を考えると
無知無知くんの部品選定は 結果 正解だったのでした。
このあと次のステップで、ダイナミック点灯に苦しむこととは つゆ知らず、
「この実習の道は見えた!」とウキウキで ステップ 1 の研修を終える無知無知くんでありました。
こうしときゃぁ良かったなポイント
仕様書作成や基板作成 (ステップ 1) で「こうしときゃ良かった」と実感したことが、いくつかありました。
仕様書の段階で、わからないことをできるだけつぶしておけば良かった
今 作業中の内容が、最終的にどんな結果になるのかを把握しておけば良かった
仕様書は誰が見てもわかりやすいものを書けば良かった
半田づけで空中配線をするんじゃなかった
空中配線だからか半田のつきが甘いのか、拡張基板に少し衝撃があると LED の点きに影響が...
次回予告
ステップ 1 から雲行きが怪しかったにも関わらず、何とかイケそうと考える無知無知くん。
彼はどのようにしてコードの記述に取り組んだのか!
次回、気絶寸前? ハードウェア設計編 です!
まぁ いけるっしょ (笑)