なんとなくGUIを使わずに make コマンドとかでやりたくなった。
調べると同じことを考える人がいたのでメモ。
blink.vhd ファイルを作る。
-- 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 blink is
port (
key : in std_logic;
clk : in std_logic;
d2 : out std_logic
);
end blink;
architecture RTL of blink 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;
ピンのアサイン定義のため blink.qsf を作る(先に作るのは邪道っぽいけど気にしない)
set_location_assignment PIN_3 -to d2
set_location_assignment PIN_17 -to clk
set_location_assignment PIN_144 -to key
VHDL を Synthesis する。(コンパイル的な意味として理解)
quartus_map --64bit blink --part=EP2C5T144C8 --source=blink.vhd
fitterってやつを実行(よくわからん)
quartus_fit --64bit blink
assemblerってやつを実行(よくわからん)
quartus_asm --64bit blink
programmerで転送
quartus_pgm --64bit -c 1 -m jtag -o 'P;blink.sof@1'
感想
本来ならば Synthesis で 出力される qsf ファイルを先に作っておく必要があるという時点で、邪道臭ぷんぷん。。。
メモ) AS (Active Serial) で書き込む場合
quartus_pgm --64bit -c 1 -m as -o 'pv;blink.pof'