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;
|