library ieee; use ieee.std_logic_1164.all; use work.pkg.all; entity psl_sere_consecutive_repetition is port ( clk : in std_logic ); end entity psl_sere_consecutive_repetition; architecture psl of psl_sere_consecutive_repetition is signal a, b, c : std_logic; signal d, e, f : std_logic; signal g, h, i : std_logic; begin -- 012345678 SEQ_A : sequencer generic map ("_-_______") port map (clk, a); SEQ_B : sequencer generic map ("__----___") port map (clk, b); SEQ_C : sequencer generic map ("______-__") port map (clk, c); -- 012345 SEQ_D : sequencer generic map ("_-____") port map (clk, d); SEQ_E : sequencer generic map ("______") port map (clk, e); SEQ_F : sequencer generic map ("__-___") port map (clk, f); -- 0123456789 SEQ_G : sequencer generic map ("_-________") port map (clk, g); SEQ_H : sequencer generic map ("__-_-_-___") port map (clk, h); SEQ_I : sequencer generic map ("________-_") port map (clk, i); -- All is sensitive to rising edge of clk default clock is rising_edge(clk); -- Simple SERE with repetitions done manual without operators -- This assertion holds SERE_0_a : assert always {a} |=> {b; b; b; b; c}; -- Repetition of 4 cycles -- In all these cycles b has to be active -- This assertion holds SERE_1_a : assert always {a} |=> {b[*4]; c}; -- Repetition in range of 3 to 5 cycles -- In all these cycles b has to be active -- This assertion holds SERE_2_a : assert always {a} |=> {b[*3 to 5]; c}; -- Repetition of any number of cycles, including none -- In all these cycles b has to be active -- This assertion holds SERE_3_a : assert always {a} |=> {b[*]; c}; -- Repetition of any number of cycles, excluding none -- In all these cycles b has to be active -- This assertion holds SERE_4_a : assert always {a} |=> {b[+]; c}; -- Repetition of any number of cycles, including none -- In all these cycles e has to be active -- This assertion holds SERE_5_a : assert always {d} |=> {e[*]; f}; -- Repetition of any number of cycles, excluding none -- In all these cycles e has to be active -- This assertion doesn't hold at cycle 2 SERE_6_a : assert always {d} |=> {e[+]; f}; -- Repetition of 3 cycles -- In all these cycles h has to be active -- This assertion doesn't hold at cycle 3 SERE_7_a : assert always {g} |=> {h[*3]; i}; -- Repetition in range of 2 to 4 cycles -- In all these cycles h has to be active -- This assertion doesn't hold at cycle 3 SERE_8_a : assert always {g} |=> {h[*2 to 4]; i}; -- Repetition of any number of cycles, including none -- In all these cycles h has to be active -- This assertion doesn't hold at cycle 3 SERE_9_a : assert always {g} |=> {h[*]; i}; -- Repetition of any number of cycles, exluding none -- In all these cycles h has to be active -- This assertion doesn't hold at cycle 3 SERE_10_a : assert always {g} |=> {h[+]; i}; -- Repetition of any 6 cycles -- This assertion holds SERE_11_a : assert always {g} |=> {[*6]; i}; -- Upper bound can also be infinity -- This assertion holds SERE_12_a : assert always {g} |=> {[*6]; i; not i[*1 to inf]}; -- All repetition operators can also be used with SERE -- This assertion holds SERE_13_a : assert always {g} |=> {{h; not h}[*3]; i}; -- Stop simulation after longest running sequencer is finished -- Simulation only code by using pragmas -- synthesis translate_off stop_sim(clk, 10); -- synthesis translate_on end architecture psl;