FPGAはじめました

Amazonで売っている1万円未満で入手できるFPGA(Cyclon II EP2C5T144C8N)を手配し、Linux環境を用意してセットアップした。
ハマった内容や動作した内容を自分のためにメモ。

SDKが Windows 版と Linux 版しか提供されていない

Macで環境を作りたかったが、そもそも存在していないので諦めるしかない。

Quartus Prime Lite Edition が入手できない(アルテラのサイトが消滅している)

参った。
多くのサイトでは、「dl.altera.com」のドメインのサーバーからQuartus Prime Lite Edition をダウンロードするように紹介されているが、サーバーが消滅していてダウンロードできなかった。

同じソフトは既に入手不能だが、Intelの「Intel® Quartus® II Web Edition Design Software Version 13.0sp1 for Linux」や「Intel® Quartus® II Web Edition Design Software Version 13.0sp1 for Windows」で、ダウンロードできるようだ。
※バージョン 13.0sp1 より新しいものは Cyclon II のサポートを打ち切っているため使えない

色々なサイトを参考にして結局環境を作った時のメモ(手順書ではないので、この通りに実行できない)

Web Edition をダウンロードし、解凍すると下記のような構成が出来上がる。

components/ModelSimSetup-13.0.1.232.run
components/QuartusHelpSetup-13.0.1.232.run
components/QuartusSetupWeb-13.0.1.232.run
components/arria_web-13.0.1.232.qdz
components/cyclone_web-13.0.1.232.qdz
components/cyclonev-13.0.1.232.qdz
components/max_web-13.0.1.232.qdz
setup.sh

setup.sh を実行すれば良いようだ。
セットアップ中の画面では「Installing Quartus II Web Edition (Free) 13.0.1.232」と表示されるため、無償版ということで間違いは無いようだ。

結局 Linux 版では USB Blaster を認識させることができなかった。。くそぅ。。

その後も色々試行錯誤したが、結局、Linuxだと USB Blaster を正常に認識させることができず、書き込みできなかった・・・(ハード側の問題の可能性も疑い、別環境を作ることにした)
仕方がないので、Windows 7 のパソコンを発掘して環境作ったら、何の問題もなくあっさり動いた。。。

動作させた時の工程のメモ

買ったボードだと
PIN3 : D2 (LED)
PIN7 : D4 (LED)
PIN9 : D5 (LED)
PIN144 : KEY (BUTTON)
PIN17 : CLK
となっていた。

VHDL版で作ったサンプル (Vhdl1.vhd)

-- VHDL
library ieee;

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

entity Vhdl1 is
  port (
    key : in std_logic;
    d2 : out std_logic;
    d4 : out std_logic;
    d5 : out std_logic
  );
end Vhdl1;

architecture logic of Vhdl1 is
begin
  d2 <= key;
  d4 <= key;
  d5 <= key;
end logic;

Verilog HDL版で作ったサンプル (Verilog1.v)

// Verilog HDL
module Verilog1
(
  input key,
  output d2,
  output d4,
  output d5
);

  assign d2 = key;
  assign d4 = key;
  assign d5 = key;

endmodule

ソースを変更した後にやること

Menu > Processing > Start > Start Analysis & Elaboration
(これをやらないと次の工程で一覧に出てこない)

ピンの割り当て

Menu > Assignments > Pin Planner
d2 <- PIN_3
d4 <- PIN_7
d5 <- PIN_9
key <- PIN_144

書き込むものを作る

Menu > Processing > Start Compilation

書き込む

Menu > Tools > Programmer > Start

クロックを使ったLチカ

-- Clock: 50MHz
-- LED Blink: 1Hz
--
-- d2  <- PIN_3
-- clk <- PIN_17
-- key <- PIN_144

library IEEE;

use IEEE.std_logic_1164.all;
use ieee.std_logic_unsigned.ALL;

entity Vhdl2 is
  port (
    key : in std_logic;
    clk : in std_logic;
    d2  : out std_logic
  );
end Vhdl2;

architecture RTL of Vhdl2 is
  -- 32bit constant
  constant MAX_COUNT  : std_logic_vector (31 downto 0) := X"02FAF080"; -- 50000000 (50MHz)
  -- 32bit constant
  constant HALF_COUNT : std_logic_vector (31 downto 0) := X"017D7840"; -- 25000000 (50MHz)
  -- 32bit variable
  signal   counter    : std_logic_vector (31 downto 0) := X"00000000"; -- 0
begin
  process (key,clk)
  begin
    if (key = '0') then
      counter <= (others => '0');
    elsif (clk'event and clk = '1') then
      if (counter = MAX_COUNT - 1 ) then
        counter <= (others => '0');
      else
        counter <= counter + 1;
      end if;
    end if;
  end process;

  d2 <= '1' when (counter > HALF_COUNT) else '0';
end RTL;

コメントを残す

メールアドレスが公開されることはありません。