シーケンシャルステートメント

pp.16-17

シーケンシャルステートメントはプロセス内かサブプログラム内かいずれかにしか記述できない。またプロセス内部でシグナルに値をアサインしても、そのシグナルの値はすぐには更新されない。プロセス内部でシグナルの値を読み取っても、そのシグナルの値は、プロセスがループを開始したときの値のままであり、シグナルの更新はプロセスの実行が終わるまで先延ばしされる。

ということなので試してみる。左がシグナルcopy、右がシグナルoriginal。copyは確かに1クロック遅れる。

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)
    begin
        if rising_edge(clk) then
            original <= original + 1;
            copy <= original;
        end if;
    end process;
end architecture;

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