if rising_edge(clk) and (select='1')
gemacht werden würde.
Gefragt getan, gleich wurde ein kleines Testprojekt aufgesetzt, das die Frage klären hilft:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.numeric_std.ALL;
entity ClockEnable is
Port ( clk : in STD_LOGIC;
inp : in STD_LOGIC_VECTOR (7 downto 0);
out3 : out STD_LOGIC_VECTOR (7 downto 0);
out2 : out STD_LOGIC_VECTOR (7 downto 0);
out1 : out STD_LOGIC_VECTOR (7 downto 0);
sel3 : in STD_LOGIC;
sel2 : in STD_LOGIC;
sel1 : in STD_LOGIC);
end ClockEnable;
architecture Verhalten of ClockEnable is
begin
process (clk)
begin
if rising_edge(clk) then
if (sel1='1') then
out1 <= inp;
end if;
end if;
end process;
process (clk, sel2)
begin
if rising_edge(clk) and (sel2='1') then
out2 <= inp;
end if;
end process;
process (clk, sel3)
begin
if (sel3='1') then
if rising_edge(clk) then
out3 <= inp;
end if;
end if;
end process;
end;
Alle drei Beschreibungen führen zum gleichen Ergebnis: Es werden Register mit Clock-Enable generiert.
Trotzdem ist diese Schreibweise der if-Abfrage von sel2 und sel3 zumindest recht überraschend und sollte vermieden werden.