DE0-Nanoの覚え書き

Spartan-3AN スタータ キットの覚え書きを書いてたら、ちょっと前に買ったDE0-Nanoのことを思い出しました。
しかし、書き込み方法を覚えてないっていう・・・
というわけで、今度はDE0-Nanoに書き込むための覚え書きです。
とは言っても全部マニュアルに載ってますけどね。

スポンサーリンク

今回はQuartusⅡは既にインストールしているものと考えます。
もちろん言語はVHDLですよ。

QuartusⅡ Web Editionの起動と新しいプロジェクトの作成

QuartusⅡを起動して、メニューの[File]から[New Project Wizard…]をクリックします。
FileからNew Project Wizardを選択

これをクリックしたらこんなウィンドウが出るはずです。
New Project Wizard

とりあえず、[Next >]をクリックします。
Wizard page 1 of 5
こんな画面になるので、プロジェクトの名前とかを適当に埋めていきます。
今回の名前は「test」にしました。
埋めたら[Next >]を押します。
[Finish]は押したらダメですよ!
「Add File」というページになると思いますが、スルーして[Next >]をクリックします。

その次のページではまず、[Family:]の項目で[Cyclone Ⅳ E]を選択します。
次に、[Available devices:]の項目で[EP4CE22F17C6]を選択します。
Wizard page 3 of 5
Target deviceの項目は最初「Auto device…」になっていると思いますが、[Available devices:]の中の項目を選択すると、勝手に「Specific device…」になるので気にしなくていいです。
そして[Finish]をクリックします。
ここで[Next >]を押しても構いませんが、触る項目は今のところありません。
シミュレーションとかの項目があったけど、それは追々・・・

これでプロジェクトの作成は完了です。

VHDLファイルの作成

[Finish]を押してNew Project Wizardが閉じられたら、メニューの[File]から[New…]または赤枠のアイコンをクリックしてます。
新しいファイルを作成
ここで[Design Files]の中から[VHDL File]を選択し、[OK]をクリックします。
すると真っ白なページが現れるのでそこにプログラムを書いていきます。

VHDLの記述と論理合成

DE0-NanonにはLEDが8つ付いているので今回もISEの覚え書きと同様のコードをテストプログラムとして動かします。

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;

entity test is
    Port ( CLK : in  std_logic;
           LED : out std_logic_vector(7 downto 0));
end test;

architecture Behavioral of test is

signal DFF_24 : std_logic_vector(23 downto 0);
signal DFF_4 : std_logic_vector(3 downto 0);

begin
  process(CLK)
  begin
    if (CLK'event and CLK = '1') then
      DFF_24 <= DFF_24 + '1';
    end if;
  end process;

  process(DFF_24(23))
  begin
    if (DFF_24(23)'event and DFF_24(23) = '1') then
      DFF_4 <= DFF_4 + '1';
      case DFF_4 is
      when "0000" => LED <= "00000001";
      when "0001" => LED <= "00000010";
      when "0010" => LED <= "00000100";
      when "0011" => LED <= "00001000";
      when "0100" => LED <= "00010000";
      when "0101" => LED <= "00100000";
      when "0110" => LED <= "01000000";
      when "0111" => LED <= "10000000";
      when "1000" => LED <= "10000000";
      when "1001" => LED <= "01000000";
      when "1010" => LED <= "00100000";
      when "1011" => LED <= "00010000";
      when "1100" => LED <= "00001000";
      when "1101" => LED <= "00000100";
      when "1110" => LED <= "00000010";
      when "1111" => LED <= "00000001";
      when others => LED <= "XXXXXXXX";
      end case;
    end if;
  end process;
end Behavioral;

LEDが左右に行ったり来たりするだけのプログラムです。
ちょうどクロック周波数もSpartan-3AN スタータ キットとおなじ50MHzなので変更点はありません。

書き終わったら、左下メニューの[Compile Design]のツリーを開き、[Analytics & Synthesis]をダブルクリックして、論理合成します。
ここで1回論理合成しているとピンアサインの設定が楽になります。
こうしないでノードが登録(?)できる方法があったら教えて下さい。

ピンアサインの設定

1回論理合成が終わったら、メニューの[Assignment]から[Pin Planner]をクリックします。
そうするとこんなページが出るはずです。
Pin Planner

ここで設定したいノードのLocationをクリックしてピン設定をしてきます。
ちなみに「PIN_A15」と書きたいなら「a15」と書くだけで補完してくれます。

DE0-Nanoに搭載されているLEDや加速度センサ、たくさんのピンはどこに繋がっているのかはマニュアルに載っています。
付属のCDのToolsに入っているSystemBuilderを利用すれば、使いたいデバイスやIOピンを選択して[Generate]を押せば、ピンアサインが入力されたプロジェクトファイルが出力されるので超便利です。
出力するファイルはVerilogです(´・ω・`)
でも.qfsファイルはあるのでやっぱり便利ですよ。

タクトスイッチ

KEY0とKEY1の2つのタクトスイッチがあり、どちらもチャタリング処理がされているようです。
接続はプルアップになっています。
KEY0は[PIN_J15]、KEY1は[PIN_E1]に配線されています。

LED

LEDは全部で8つあります。
LED[0]から[PIN_A15]、[PIN_A13]、[PIN_B13]、[PIN_A11]、[PIN_D1]、[PIN_F3]、[PIN_B1]、[PIN_L3]に配線されています。

DIPスイッチ

DIPスイッチは4つのものが搭載されています。
手では動かしにくい位置にありますが・・・
右からSW[0]で[PIN_M1]、[PIN_T8]、[PIN_B9]、[PIN_M15]に配線されています。

その他

その他にもROMや加速度センサやADCなどが搭載されていますが、マニュアル見れば分かりますのここでは省略します(オイ

プログラムファイルの作成

ピンアサインの設定ができたら、左下メニューの[Compile Design]をダブルクリックして、プログラムファイルを作成します。
プログラムのコンパイル
結構時間がかかりますが、今回のプログラムでは成功すると思います。
WANINGは出ても構いません。

FPGAにプログラムを書き込む

左下のメニューの[Program Device]をダブルクリックすると、次のようなウィンドウが出ると思います。
Programmer 起動

別に何も触らなくてもいいと思います。
左メニューの[Start]をクリックすれば、簡単にFPGAに書き込むことができます。
できなければ、上の画像に合わせてください。

ROMにプログラムを書き込む

先ほどの方法だと電源を切るとプログラムまで消えてしまいます。
そこでROMに書き込んで電源を切ってもプログラムが消えないようにします。

まず、Programmerのウィンドウではなく、メインのウィンドのメニューの[File]から[Convert Programming Files…]をクリックします。
すると新しいウィンドウが出てくるはずです。
Convert Programming

[Output programming file]という項目の[Programming file type]は[JTAG Indirect Configuration File (.jic)]を選択し、[Configuration device]は[EPCS16]を選択します。

[Input files to convert]ではまず、[Flash Loader]を選択して[Add Device…]をクリックし、出てきたウィンドウから[Cyclone Ⅳ E] →[EP4CE22]を選択し、[OK]を押します。
次に[SOF Data]を選択し[Add File…]をクリックし、.sofファイルを選択します。

ひと通り終われば、上の画像のようになると思いますので、間違いがなければ[Generate]を押します。
すると.jicファイルができると思います。

.jicファイルの作成が終わったら、もう一度Programmerのウィンドウを開きます。
.jicファイルに変更
そこでもともとあった.sofファイルの項目を右クリックし[Change File]を選択します。
選択ウィンドウが出るので、先ほど作成した.jicファイルを選択します。

すると次のような画面に変わるのでEPCS16を選択し、ProgramとVerifyにチェックを入れます。
ROMに書き込み
その後、[Start]を押せば、ROMにプログラムが書き込まれます。


これでやっとDE0-Nanoも迷わず書き込むことができます。
研究ではXilinxのFPGAを使っているのでこちらを使うことはなかなかないと思いますが、操作方法ぐらい覚えていても損はないと思います。
学校の実験でQuartusⅡは使ったんですけど1回しか触らず、忘れてしまったのでいい機会になりました。
あとはこの基板を触る機会をどうやって増やすかですね・・・

スポンサーリンク

Leave a Comment