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;