Article header odyssey max10  3

FPGA ではじめてのLチカ!

Article header hanako 25x25  9

こんにちは、インテル・アルテラ・ハナコ です。

Article header img01  1

今回はインテル® (旧アルテラ)の MAX® 10 FPGA で “Lチカ” します。
基板上のプッシュボタン(PB0)を押したときだけ LED0 が点灯し、PB0 を離すと消灯します。
こんな感じ →→→

はじめて FPGA を開発するあなたにご紹介するLチカは、この2つ。

今回は手始めとして、HDL 言語を書いてLチカしましょう。

用意するもの

ここからは、評価ボードに Mpression 製 Odyssey(オデッセイ)MAX 10 FPGA 評価キットを使ってご案内します。

Article header img02  1

USB-microUSB ケーブル
(PC と Odyssey 接続用)
Quartus® Prime
ライト・エディション

(有償エディションでもOK)

基板上の プッシュボタン/FPGA/LED の接続構成はこんな感じ

Article header img03  5

PB0 と LED0 は、基板上で図のような接続構成になっています。
“PB0 を押したら LED0 が点いて離すと消える”
この説明だけだと「なんだ、線でつなぐだけじゃん!」って思いますよね。そう!PB0 につながっている FPGA のピンと LED0 につながっているピンを単純につなげばいいんです。
Odyssey 上の MAX® 10 では
 ・PB0: K13 ピン
 ・LED0: L13 ピン

でも、つなぐって…どうやって…?
FPGA のは中身が空っぽのただの箱です(あくまでもイメージですよ)。
なので FPGA が動くため、つまり PB0 と LED0 をつなぐ論理回路設計をします!

早速 Quartus® Prime で設計スタート!

インテル® デバイスの開発環境 Quartus® Prime を使って、FPGA/CPLD の一般的な開発フロー に基づいて作業を進めます。

1. 論理回路を設計する

プロジェクトを作って HDL 言語で論理回路を書きます。VHDL 言語で書いてみると、こんな感じ。
library ieee;
use ieee.std_logic_1164.all;

entity led_press_button is
 port (
    PB0 : in std_logic;
    LED0 : out std_logic
 );
end led_press_button;

architecture rtl of led_press_button is
begin
  LED0 <= PB0;
end rtl;

2. 論理シミュレーションをする

自分で書いた論理回路のコードデバッグを ModelSim* - Intel® FPGA Edition でします。…なんですけど、今回の論理回路(線でつないでいるだけ)はファンクション検証の必要もないくらいのコードなので、省略します。

3. 制約を設定する

再び Quartus Prime です。

3-1. 論理回路上の入力ピンと出力ピンに、基板レイアウトに応じたデバイス上のピン番号を指定します。それと同時にピンの I/O 規格などのピン・オプションも設定します。

Article header img04  1

Odyssey の場合は、Pin Planner を上図のように設定します。
各ピンの I/O Standard(I/O 規格)を 3.3-V LVTTL にしている理由は、Odyssey 上の MAX 10 のピン K13、L13 が I/O Bank 5 に属していて、そのバンクの電源は3.3Vが供給されているからです。(だから LED0 のプルアップ電源も3.3Vなんです。)

Article header img05  6

その他、ユーザー I/O ピン(出力ピン)には Current Strength オプションが適用できて出力ピンの接続先に向けたドライブ電流量を設定できますが、LED0 に接続されているピン L13 はドライブ電流を必要としない仕様なので、今回 Current Strength オプションの設定は不要(デフォルトのまま)です。

3-2. コンフィギュレーション・モードを選択します。
MAX® 10 の CFM(コンフィギュレーション用のフラッシュ・メモリ)をどう使うか=何モードを選ぶか、になるのですが、今回は Single Compressed Image を選択します。(Odyssey の Dip スイッチ(SW1) は全部 OFF のデフォルトのまま)

Article header img06  1

3-3. 論理回路に対するタイミング制約を作成&設定します。
今回はクロック制御とは無関係で、スピードを必要とする論理回路ではないですし、Pin to Pin の超単純動作なので、省略します。


4. コンパイルをする

Article header img07  1

コンパイルを実行するため Start Compilation ボタン、ポチッ♪
これで論理合成と配置配線が実行されて、FPGA 内部で実行させるプログラム・データも同時に生成されます。


5. タイミング検証をする

コンパイル終了後に生成されたコンパイル・レポートにおいて、TimeQuest Timing Analyzer レポート箇所をチェックし、タイミング制約で与えた条件を満たした結果になったかをチェックし、タイミング検証します。
タイミング違反している場合には、TimeQuest Timing Analyzer を使って、解析を行いながら改善に努めてください。でも、今回は上記の手順3-3で述べた理由から省略します。

6. プログラミングをする

Quartus® Prime のデバイス書き込みユーティリティ “Programmer“ を使って、基板上の MAX 10 にデータを転送します。
MAX® 10 をコンパイルすると、SOF ファイルと POF ファイルの2種類の書き込み用ファイルが生成されます。今回は、デバッグ目的でデータを転送したいので、MAX® 10 内の CRAM(Configuration RAM)に SOF ファイルをダウンロードします。

Article header img08  5

Odyssey とパソコン、USB-Blaster™ II を準備(接続)します。Programmer を起動して、SOF ファイルをセットしたら、Start ボタンをポチッ♪
Programmer の Progress バーが100%になったらデータ転送完了です。

Article header img09  2

  

いざ!実機で検証

では、Odyssey の PB0 をポチッ♪と押してみましょう。

Article header img10  1

おぉ、Lチカ!できました!

Article header cb line top  2

今書き込んだのは CRAM なので、Odyssey の電源を OFF にするとデータは消去されます。製品化するには電源 ON で MAX® 10 が動かなくてはいけないので、コンフィギュレーション・データの書き込み先を CFM にします。そのため、Programmer では POF ファイルを選択してください。

Article header cb line btm  3

Article header hanako 25x25  10

MAX® 10 は FPGA = プログラマブル・デバイスですから、今回の論理回路はそのままに、出力ピンの番号を別の LED に接続されているピン番号に変更すれば、点灯する LED も変わりますよ。
今回はわかりやすくピンとピンをつなぐだけのシンプルな回路でしたが、もっともっと拡張して論理回路を作れば、様々な可能が広がります。みなさんも是非挑戦してみてください。


第二弾は、「FPGA に Nios® II を入れてLチカ」したいと思います。


おすすめ記事はこちら

Odyssey でLチカしてみた!」シリーズ
こちらも是非ご覧ください。 

関連タグ