Hi,
I use these clocks to trigger three events. The option without flip-
flip will result in a simpler async logic.
Simpler than what?
With 'clk' running at 100Mhz, the flip-flip option would be beter.
Better than what?
If your intention is to then use the signals 'clk1', 'clk2' and 'clk3'
as the clock inputs to some other processes (as you alluded to by
saying "I use these clocks to trigger three events") then here are
some tips if you plan to implement the design in an FPGA.
1. Don't do that.
2. Really...don't do that...both approaches are bad.
3. The combinatorial approach is worse...
4. The synced up version is nearly just as bad.
5. Are you getting the point? Don't do it that way.
Anyway, the way you 'should' use the various clk1...clk3 signals in
your design would be
process(clk)
begin
if rising_edge(clk) then
if (clk1 = '1') then
-- Do whatever you were thinking of doing on rising_edge(clk1)
here
end if;
end if;
end process;
Repeat this template for 'clk2' and 'clk3'.
If you insist on trying to use 'clk1', 'clk2' and 'clk3' to clock
other things then I wish you good luck with your timing analysis and
even more good luck with getting the design to be stable over
temperature ranges. Creating gated clocks in FPGAs is not good
practice because inevitably the multiple clock domains need to
communicate with each other and there is always going to be some
uncontrollable skew between 'clk', 'clk1', 'clk2' and 'clk3' that
simply doesn't exist if you use a synchronous design approach (i.e.
using only 'clk' to clock anything).
Kevin Jennings