I would like to present the following two versions of VHDL code for a flip flop.
Clock and reset in the sensitivity list of the clocked process:
library ieee;
use ieee.std_logic_1164.all;
entity example_ff_clk_rst is
port (
i_clk : in std_logic;
i_rst : in std_logic;
i_data : in std_logic;
o_data : out std_logic
);
end example_ff_clk_rst;
architecture rtl of example_ff_clk_rst is
signal s_ff_q, s_ff_d : std_logic;
begin
s_ff_d <= i_data;
process(i_clk, i_rst)
begin
if i_rst = '1' then
s_ff_q <= '0';
elsif rising_edge(i_clk) then
s_ff_q <= s_ff_d;
end if;
end process;
o_data <= s_ff_q;
end rtl;
Using keyword all
to infer the sensitivity list of the clocked process:
library ieee;
use ieee.std_logic_1164.all;
entity example_ff_all is
port (
i_clk : in std_logic;
i_rst : in std_logic;
i_data : in std_logic;
o_data : out std_logic
);
end example_ff_all;
architecture rtl of example_ff_all is
signal s_ff_q, s_ff_d : std_logic;
begin
s_ff_d <= i_data;
process(all)
begin
if i_rst = '1' then
s_ff_q <= '0';
elsif rising_edge(i_clk) then
s_ff_q <= s_ff_d;
end if;
end process;
o_data <= s_ff_q;
end rtl;
My assumption was that the keyword all
can only be used for a combinational process. However, after searching through the IEEE 1076-2008 VHDL LRM, I could not find any such restriction.
Question: Can the keyword all
be used in the sensitivity list of a clocked process for synthesis? From asking my colleagues, it works in Intel Quartus. Are there any downfalls to using the keyword all
instead of a sensitivity list with clock and reset for clocked processes?
Thank you for your answers.