第8章:用語集・トラブルシューティング
本講座の締めくくりとして、予習・復習や試験対策、そして演習中につまずいたときにその場で引けるリファレンスをまとめます。用語は分野別の一行定義、トラブルは「症状 → 原因 → 対処」の形で整理しました。
8.1 必須用語20選(分野別)
試験前は、分野ごとに「用語 → 一行定義」を言えるか確認すると効率的です。
① FPGAとデバイス
- FPGA
- 内部の論理回路の構成を、設計データによって何度でも書き換えられる集積回路。Field Programmable Gate Array の略。
- LUT(ルックアップテーブル)
- 「入力の組み合わせ → 出力」を表として持ち、任意の論理を作り出すFPGAの基本部品。真理値表を直接記憶していると考えてよい。
- スライス(CLB)
- 複数のLUTとフリップフロップをひとまとめにした、FPGAの構成単位。これが多数並んでFPGAを構成する。
- フリップフロップ(FF)
- 1ビットを記憶する順序回路の基本素子。Verilogで
reg+always @(posedge clk)と書くと、これになる。
② Basys 3 と書き込み
- Basys 3
- Digilent社の入門向けFPGA開発ボードとされ、LED・スイッチ・7セグメント表示などを搭載。本講座の対象ボード。
- Artix-7(XC7A35T)
- Basys 3 に搭載されたFPGAチップ本体の型番。本講座で扱う「書き換え可能な半導体」の実体。
- ビットストリーム
- RTLから生成される、FPGAの内部構成を決める書き込み用データ(
.bit)。これをFPGAに送ると回路が出来上がる。 - コンフィグレーション
- ビットストリームをFPGAに書き込み、内部回路を構成する操作。電源を切ると消えるため、起動のたびに行う(または不揮発メモリから自動ロード)。
③ 制約ファイル(.xdc)
- .xdc(制約ファイル)
- 設計の信号を、ボードのどの物理ピンにつなぐか・クロックの速さは何か、などをVivadoに伝えるファイル。Xilinx Design Constraints の略。
- PACKAGE_PIN
- 「この信号をチップのこの物理ピンに割り当てる」という指定。例:
PACKAGE_PIN W5は100MHzクロックのピン。 - IOSTANDARD(LVCMOS33)
- ピンの電気的な規格。Basys 3 の多くのピンは3.3V信号の
LVCMOS33を指定する。合っていないとエラーになる。 - create_clock
- 「このクロックは周期○ns(=○MHz)」とVivadoに教える制約。タイミング検証を正しく行わせるために必要。
④ ツールとフロー
- Vivado
- 設計・合成・配置配線・書き込みを行う統合開発ソフト。無償版でArtix-7(Basys 3)を扱えるとされる。
- 論理合成(Synthesis)
- Verilogで書いたRTLを、LUTやフリップフロップへの割り当て(ネットリスト)に変換する工程。
- Implementation(配置配線)
- 合成結果を、FPGA内の実際の位置に配置し、配線でつなぐ工程。この後にビットストリームを生成できる。
- Utilization(利用率)
- FPGAの資源(LUT・FF・BRAM等)を、設計がどれだけ使っているかの割合。レポートで確認する。
⑤ 設計の概念
- 組み合わせ回路 / 順序回路
- 入力だけで出力が決まる回路が「組み合わせ回路」(例:スイッチ→LED)。クロックと記憶(FF)を持ち、時間で状態が変わる回路が「順序回路」(例:カウンタ)。
- インスタンス化
- あるモジュール(部品)を、別のモジュールの中で1個の部品として呼び出して設置すること。
部品名 呼び名 ( ... );と書く。 - リセットの極性
- リセットが「1で有効」か「0で有効(負論理
rst_n)」かの区別。極性が違う相手をつなぐときは~(反転)で合わせる。 - 分周(クロックディバイダ)
- 速いクロックをカウンタで数えて、ゆっくりした信号を作ること。Lチカやゆっくりした動作の観察に使う。
📘 発展用語(本講座で登場した応用語)
- ダイナミック点灯
- 複数桁の7セグメント表示で、1桁ずつ高速に順番に点けて、人の目には同時に光って見せる方式(第5章)。
- PWM(パルス幅変調)
- デジタル出力を高速で点滅させ、点いている時間の割合(デューティ比)でLEDの明るさなどを擬似的に調整する手法(第5章)。
- XADC
- Artix-7 に内蔵されたアナログ-デジタル変換器。外部のアナログ電圧を数字として取り込める(第5章で概念紹介)。
- MMIO(メモリマップドI/O)
- 特定のメモリ番地への読み書きを、LEDなどの周辺機器の操作に割り当てる方式。第6章では
0x4000_0000をLEDに割り当てた。 - PC(プログラムカウンタ)
- CPUが「次にどの番地の命令を実行するか」を覚えているレジスタ。PCが進むことがCPUが動いている証(第6章)。
- PicoRV32
- 小型のオープンソースRISC-V CPUコア。FPGAに数%の資源で載せられる(第6章)。
8.2 トラブルシューティング(症状 → 原因 → 対処)
演習中に手が止まりやすい代表的な症状を一覧で俯瞰し、その後で要点を補足します。
症状 主な原因 最初に試す対処
─────────────────────────────────────────────────────────────────────────────
ボードが認識されない ケーブルドライバ未導入/ ドライバ導入・データ用ケーブルに交換・
(Auto Connectで出ない) 充電専用ケーブル/USBハブ経由 PCへ直挿し(第3章3.5)
合成は通るがピンでエラー .xdcの信号名がポート名と不一致/ 信号名を一致させる・IOSTANDARDを
(unconstrained / no ports) IOSTANDARD未指定 LVCMOS33で指定
LEDが点滅しない 点滅ビットの選択/リセット極性 counterのビット位置・rst極性を確認
(点きっぱ/消えっぱ) (第4章)
7セグがちらつく/薄い 桁切替(リフレッシュ)が selに使うビット位置を1〜2ビット
遅すぎ/速すぎ 調整(第5章)
タイミング違反(負のslack) 1クロック内の論理が深すぎ create_clockの周期確認・分周や
MMCMでクロックを見直す
CPUのLEDが光らない(第6章) 命令ROMの内容/MMIO番地の不一致 ROMの機械語・0x4000_0000の判定を確認
Q1:書き込もうとしても、Hardware Manager にボードが出てこない
【対処】 FPGAで最も多いつまずきです。(1) Vivado導入時のケーブルドライバが入っているか、(2) ケーブルがデータ通信対応か(充電専用だと認識されません)、(3) USBハブを介さずPCへ直挿ししているか、を順に確認してください。多くはこのどれかで解決します。
Q2:合成は成功するのに、Implementationやビットストリームで「ポートが見つからない/制約されていない」と出る
【対処】 .xdc の [get_ports 名前] が、Verilogモジュールのポート名と一字一句一致しているか確認してください(led と led0 の違いなど)。また、使う全ピンに IOSTANDARD LVCMOS33 が指定されているかも確認します。名前の不一致と規格の指定漏れが二大原因です。
Q3:LEDが「点滅」ではなく、点きっぱなし(または消えっぱなし)になる
【対処】 LEDにつないでいるカウンタのビット位置を確認してください(第4章)。低すぎるビットは速すぎて「薄く点灯」に、高すぎるビットは遅すぎて「止まって見える」ことがあります。あわせて、リセットを押しっぱなしにしていないか(リセット中はカウンタが止まります)も確認します。
8.3 おわりに ― ここから、自分で作る
本講座では、FPGAの正体を分解し、自分でRTLを書いて実機で光らせ、スイッチや7セグで遊び、ついにはRISC-VのCPUを載せて走らせるところまで来ました。もうあなたは、FPGAで「自分の回路」を作って動かせます。
ここから先は、作りたいものを作る番です。もっと複雑な回路、自分だけの周辺機器、CPUに走らせるプログラム――書き換え自由なFPGAは、何度でもあなたの挑戦に付き合ってくれます。困ったときは本章に戻り、深めたくなったら実践編やASIC連携(第7章)へ。あなたの手の中のFPGAで、ぜひ何かを作ってみてください。