回路プログラム本体が入ります。
例として、上位階層からビット数を指定できるカウンタのentityを書きます。
下位層が無いシンプルな回路ですが、いろんな要素が含まれています。
architecture RTL of Ncuntr is --entityと同じ名前
signal q : std_logic_vector (n-1 downto 0); --内部ロジックでのみ使う信号
begin
Qout <= q; --出力信号は内部で使用できないためQoutを設定
Carry <= and_reduce(q); --全ビットのand use ieee.std_logic_misc.all;が必要
process (Rst_n, Clk) begin
if Rst_n = '0' then --非同期リセット
q <= (others => '0');
elsif (Clk'event and Clk = '1') then --Clk立ち上がりFF
if (Syncz_n='0') then --同期クリア
q <= (others => '0');
elsif (Cnten='1') then
q <= q + '1'; --カウントアップ
end if;
end if;
end process;
end RTL;
VHDLでは出力信号(out)は内部で使うことができないため、Qout, q に分けています。
私は内部信号と外部信号を分けるため、内部信号は小文字から、外部信号は大文字から始まる信号名としています。
others => '0' は全ビットに 0 を書き込むことをしめします。便利な記述ですが、入門書にはあまり書かれていません。