library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity WishBoneCheckerE is port ( --+ wishbone system if WbRst_i : in std_logic; WbClk_i : in std_logic; --+ wishbone outputs WbMCyc_i : in std_logic; WbMStb_i : in std_logic; WbMWe_i : in std_logic; WbMAdr_i : in std_logic_vector; WbMDat_i : in std_logic_vector; --+ wishbone inputs WbSDat_i : in std_logic_vector; WbSAck_i : in std_logic; WbSErr_i : in std_logic; WbRty_i : in std_logic ); end entity WishBoneCheckerE; architecture check of WishBoneCheckerE is begin -- psl default clock is rising_edge(WbClk_i); -- -- Wishbone protocol checks -- -- psl property initialize_interface (boolean init_state) is -- always ({WbRst_i} |=> {init_state[+] && {WbRst_i[*]; not(WbRst_i)}}); -- -- psl RULE_3_00 : assert initialize_interface (not(WbMCyc_i) and not(WbMStb_i) and not(WbMWe_i)) -- report "Wishbone rule 3.00 violated"; -- -- psl property reset_signal is -- always {not(WbRst_i); WbRst_i} |=> {(WbRst_i and not(WbClk_i))[*]; WbRst_i and WbClk_i}; -- -- psl RULE_3_05 : assert reset_signal -- report "Wishbone rule 3.05 violated"; -- -- psl property CYC_O_signal is -- always {not(WbMStb_i); WbMStb_i} |-> {(WbMCyc_i and WbMStb_i)[+]; not(WbMStb_i)}; -- -- psl RULE_3_25 : assert CYC_O_signal -- report "Wishbone rule 3.25 violated"; -- -- psl property slave_no_response is -- always not(WbMCyc_i) -> not(WbSAck_i) and not(WbSErr_i); -- -- psl property slave_response_to_master is -- always {not(WbMStb_i); WbMStb_i} |-> -- {{(WbMStb_i and not(WbSAck_i))[*]; -- WbMStb_i and WbSAck_i; -- not(WbMStb_i)} | -- {(WbMStb_i and not(WbSErr_i))[*]; -- WbMStb_i and WbSErr_i; -- not(WbMStb_i)} | -- {(WbMStb_i and not(WbRty_i))[*]; -- WbMStb_i and WbRty_i; -- not(WbMStb_i)} -- }; -- -- psl RULE_3_30_0 : assert slave_no_response -- report "Wishbone rule 3.30_0 violated"; -- -- psl RULE_3_30_1 : assert slave_response_to_master -- report "Wishbone rule 3.30_0 violated"; -- -- psl property slave_response is -- always {not(WbMStb_i); WbMCyc_i and WbMStb_i} |-> -- {not(WbSAck_i or WbSErr_i or WbRty_i)[*]; WbSAck_i or WbSErr_i or WbRty_i}; -- -- psl RULE_3_35 : assert slave_response -- report "Wishbone rule 3.35 violated"; -- -- psl property response_signals is -- never ((WbSErr_i and WbRty_i) or (WbSErr_i and WbSAck_i) or (WbSAck_i and WbRty_i)); -- -- psl RULE_3_45 : assert response_signals -- report "Wishbone rule 3.45 violated"; -- -- -- psl property slave_negated_response is end architecture check;