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;