バリアブルとバリアブルアサインメントと

pp.17-18

これまで使ってきたシグナルは、プロセス同士でやりとりするための一種のデータオブジェクトであった。バリアブルのほうはもっと単純である。バリアブルはアサインされた途端に更新される。バリアブルは、プロセス内またはサブプログラム内でしか宣言できないし、宣言したプロセスまたはサブプログラムのローカル変数であるため、プロセス同士あるいはエンティティ同士でやり取りするのには使えない。要するに普通のプログラミング言語の変数と同じである。アサインには:=を使う。

ということなので試してみる。

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

entity sute_vhdl is
    port(
        clk     : in std_logic;
        
        clk_out : out std_logic;
        original: out std_logic_vector(3 downto 0);
        copy    : out std_logic_vector(3 downto 0)
    );
end entity;

architecture rtl of sute_vhdl is
begin
    clk_out <= clk;
    
    process(clk)
        variable temp: std_logic_vector(3 downto 0):= "0000";
    begin
        if rising_edge(clk) then
            temp     := temp + 1;
            original <= temp;
            copy     <= temp;
        end if;
    end process;
     
end architecture;

f:id:ti-nspire:20210704071627p:plain:w500