VHDLで記述するのはあくまで回路内部の動作です。したがって記述した回路と外の世界、具体的にはFPGAのピンを何らかの方法で接続しない限り、記述した回路は実体として動作しません。
この、結合の役割を果たすのがVHDL側ではトップ・レベルと呼ばれるエンティティで、Quartus Prime側ではPin Plannerと呼ばれるツールです。
トップ・レベル
トップ・レベルはVHDLによるエンティティとアーキテクチャの対です。これ自身はVHDLに沿って書かれており、何の変哲もありません。昨日紹介したVHDLコードをコンポーネントとして使用するトップ・レベルが以下のコードです。
-- LED display demo on BeMicro MAX10 -- Shifting LED pattern every second. library ieee; use ieee.std_logic_1164.all; entity blink_top is port ( reset_n : in std_logic; clock : in std_logic; -- assign 50Mhz clock. led_n : out std_logic_vector( 7 downto 0 ) ); end entity blink_top; architecture rtl of blink_top is component blink_slide is generic( period : integer := 50000000 ); port ( reset : in std_logic; clock : in std_logic; -- assign 50Mhz clock. led : out std_logic_vector( 7 downto 0 ) ); end component blink_slide; signal display_data : std_logic_vector( 7 downto 0 ); begin blinker : blink_slide generic map ( period => 25000000 ) port map ( reset => not reset_n, clock => clock, led => display_data ); led_n <= not display_data; end architecture rtl;
特に変哲もありません。書いてみた実感は「単なる結線だった」と言うところでしょうか。ネット上の例も呼んでみましたが、トップ・レベルで行うのはおおむね下位のコンポーネントの結線と、ポートを通した外部との接続だけのようです。
トップ・レベルを作り終わったら、Analysis & Elaborationを実行します。これによって、トップ・レベル・エンティティのポート名をシステムが読み取ることができます。
Pin Planner
Analysis & Elaborationが成功したら、Pin Plannerを開きます。すると、All Pin ペインにトップ・レベル・エンティティのポート名が現れます。これはAnalysis & Elaborationによってシステムが読み込んだ結果です。
エンティティのポートとFPGAのピンの結線はこのウィンドウで行います。結線はノード名をピン上にドラッグ&ドロップするか、ロケーションフィールドにピン名を書き込むことで行います。ロケーションへの書き込みは”PIN_”を付けずに書き込んでもかまいません。システムが自動的に補います。