--- /dev/null
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.std_logic_unsigned.all;
+use ieee.numeric_std.all;
+
+entity top is
+ port (
+ clk : in std_logic;
+ rst : in std_logic;
+ up : in std_logic;
+ down : in std_logic;
+ cnt : buffer std_logic_vector(7 downto 0)
+ );
+end entity;
+
+architecture rtl of top is
+begin
+ process (clk) begin
+ if rising_edge(clk) then
+ if rst = '1' then
+ cnt <= std_logic_vector(to_unsigned(0, 8));
+ elsif up = '1' then
+ cnt <= cnt + std_logic_vector(to_unsigned(1, 8));
+ elsif down = '1' then
+ cnt <= cnt - std_logic_vector(to_unsigned(1, 8));
+ end if;
+ end if;
+ end process;
+
+ -- PSL default clock is (rising_edge(clk));
+ -- PSL assume always ( down -> not up );
+ -- PSL assert always ( up |=> (cnt = prev(cnt) + std_logic_vector(to_unsigned(1, 8))) ) abort rst = '1';
+ -- PSL assert always ( down |=> (cnt = prev(cnt) - std_logic_vector(to_unsigned(1, 8))) ) abort rst = '1';
+end architecture;