FPGA初心者(かつハードウェア素人)が再度トライ
5年前に購入したFPGA評価ボードを長い間ほったからしにしていたのであるが、久しぶりに触ってみたくなので、ついでに記録を残す。
評価ボード
すでに販売中止となっている、Odyssey MAX10 FPGA Eval Kit。
開発環境
Alteraはずっと前にIntelに買収されていた。ここから、無料版(Lite)の開発環境一式をDownloadする。(インテルのアカウントが必要だったかもしれない。)
- Quartus Prime (includes Nios II EDS)
- ModelSim-Intel FPGA Edition (includes Starter Edition)
- MAX 10 FPGA device support
これらすべてを同じフォルダーにダウンロードしておけば、Quartusインストール時に、ModelSimもMax 10関連ファイルも同時にインストールされる。
まずは参考サイト
- マクニカサイト「インテルFPGAではじめてのLチカ!」の手順に従って作業を進めた。ただし、ピン情報はこれとは異なるようだ。
- Impression 製 Odyssey MAX10 評価キットを使ってFPGAをはじめてみる
- Odyssey MAX10でLチカ
プロジェクト作成
Quartusを起動。New Project Wizardを用いる。
プロジェクト名などを入れ、Empty Projectとする。
Add Filesでは何もせずスキップ。
Odyssey Max10ボードを選択。
EDA Tool Settingsはとりあえず後回し(スキップ)。
作成したプロジェクトのサマリが表示され、プロジェクト作成完了。
VHDLファイル
ボード上の2つのボタンを押したらLEDが点灯、、を実現する。「File」-「New」で「VHDL File」を選択。
library ieee;
use ieee.std_logic_1164.all;
entity btn_led is
port (
BUTTON0, BUTTON1: in std_logic;
LED0, LED2: out std_logic);
end btn_led;
architecture rtl of btn_led is
begin
LED0 <= BUTTON0 or BUTTON1;
LED2 <= BUTTON0 and BUTTON1;
end rtl;
btn_led.vhdとして保存する。記述ミスなどのチェック(Start Analysis & Elaboration)を実施。
問題がなければ、次のように表示される。
論理シミュレーション
これを参考に、次のテストベンチファイルをつくる。
library ieee;
use ieee.std_logic_1164.all;
entity testsim is
end testsim;
architecture sim of testsim is
constant t : time := 1 ns;
signal BUTTON0, BUTTON1, LED0, LED2 : std_logic;
component btn_led
port (BUTTON0, BUTTON1 : in std_logic;
LED0, LED2 : out std_logic );
end component;
begin
u1 : btn_led
port map (BUTTON0 => BUTTON0, BUTTON1 => BUTTON1, LED0 => LED0, LED2 => LED2);
push : process begin
BUTTON0 <= '0'; BUTTON1 <= '0'; wait for t * 100;
BUTTON0 <= '1'; BUTTON1 <= '0'; wait for t * 200;
BUTTON0 <= '0'; BUTTON1 <= '1'; wait for t * 300;
BUTTON0 <= '1'; BUTTON1 <= '1'; wait for t * 400;
BUTTON0 <= '0'; BUTTON1 <= '0'; wait;
end process push;
end sim;
Settingでシミュレーションの設定を行う。ModelSim-Alteraを選択し、Test Benchesをクリック。
さきほどのテストベンチファイルを指定、1500ns動作させる。
シミュレーション開始
RTL Simulationをクリック。
すると、ModelSimが起動し、
のような結果が得られる。
ボードにプログラミング
Pin Plannerを使ってピンアサイン
Odyssey MAX10の回路図によると、LED0はL13、LED2はK12、ボタン0はK13、ボタン1はJ12にアサインされている。たとえば、回路図には
のような記載が見つかる。
のようにアサイン。上述した参考サイトに従って、I/O Standardは1.5Vにした(詳細不明)。
コンフィグレーション
参考サイトに従って、「Single Compressed Image」を選択(「Assignments」->「Device」->「Device and Options」->「Configuration」->「Configuration mode」)。
コンパイル
ボードにプログラム転送
USB Blasterの互換品利用。Programmerをクリック。
sofファイルはRAMでの動作用、pofファイルはボードの不揮発性領域に書き込んで使用するもの。pofファイルを、Add Filesで選択した場合は、次のように表示される。
実験
押して確認するのみ。完了。