library ieee;
|
|
use ieee.std_logic_1164.all;
|
|
|
|
use work.pkg.all;
|
|
|
|
|
|
entity psl_always is
|
|
port (
|
|
clk : in std_logic
|
|
);
|
|
end entity psl_always;
|
|
|
|
|
|
architecture psl of psl_always is
|
|
|
|
signal a : std_logic;
|
|
|
|
begin
|
|
|
|
|
|
-- 012345
|
|
SEQ : sequencer generic map ("--____") port map (clk, a);
|
|
|
|
|
|
-- All is sensitive to rising edge of clk
|
|
default clock is rising_edge(clk);
|
|
|
|
-- Beware: potential pitfall!
|
|
-- Every time a PSL assertion is similar to a concurrent
|
|
-- VHDL assertion at that place, it is interpreted as such
|
|
-- This assert is considered as VHDL assert statement,
|
|
-- so it is active every cycle
|
|
-- This assertion doesn't hold at cycle 2
|
|
VHDL_ASSERT_a : assert a;
|
|
|
|
-- The PSL comment helps to mark this as PSL assert
|
|
-- This assertion holds
|
|
-- psl WITHOUT_ALWAYS_a : assert a;
|
|
|
|
-- This assertion doesn't hold at cycle 2
|
|
WITH_ALWAYS_a : assert always a;
|
|
|
|
-- Stop simulation after longest running sequencer is finished
|
|
-- Simulation only code by using pragmas
|
|
-- synthesis translate_off
|
|
stop_sim(clk, 6);
|
|
-- synthesis translate_on
|
|
|
|
|
|
end architecture psl;
|