|
@ -171,17 +171,6 @@ begin |
|
|
type t_cmd is (READ, WRITE, NOP); |
|
|
type t_cmd is (READ, WRITE, NOP); |
|
|
signal s_cmd : t_cmd; |
|
|
signal s_cmd : t_cmd; |
|
|
|
|
|
|
|
|
type t_vai is record |
|
|
|
|
|
Start : std_logic; |
|
|
|
|
|
Stop : std_logic; |
|
|
|
|
|
Data : std_logic_vector(7 downto 0); |
|
|
|
|
|
Valid : std_logic; |
|
|
|
|
|
Accept : std_logic; |
|
|
|
|
|
end record t_vai; |
|
|
|
|
|
|
|
|
|
|
|
signal s_job_req : t_vai; |
|
|
|
|
|
signal s_job_ack : t_vai; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
begin |
|
|
begin |
|
|
|
|
|
|
|
@ -190,8 +179,6 @@ begin |
|
|
process is |
|
|
process is |
|
|
begin |
|
|
begin |
|
|
wait until rising_edge(Clk_i); |
|
|
wait until rising_edge(Clk_i); |
|
|
s_job_req <= (DinStart_i, DinStop_i, Din_i, DinValid_i, DinAccept_o); |
|
|
|
|
|
s_job_ack <= (DoutStart_o, DoutStop_o, Dout_o, DoutValid_o, DoutAccept_i); |
|
|
|
|
|
if (s_fsm_state = GET_HEADER) then |
|
|
if (s_fsm_state = GET_HEADER) then |
|
|
if (DinValid_i = '1' and DinStart_i = '1') then |
|
|
if (DinValid_i = '1' and DinStart_i = '1') then |
|
|
s_cmd <= READ when Din_i(3 downto 0) = x"0" else |
|
|
s_cmd <= READ when Din_i(3 downto 0) = x"0" else |
|
@ -208,26 +195,26 @@ begin |
|
|
-- RESTRICTIONS |
|
|
-- RESTRICTIONS |
|
|
|
|
|
|
|
|
-- Initial reset |
|
|
-- Initial reset |
|
|
INITIAL_RESET : restrict {Reset_n_i = '0'[*2]; Reset_n_i = '1'[+]}[*1]; |
|
|
|
|
|
|
|
|
INITIAL_RESET : restrict {not Reset_n_i[*2]; Reset_n_i[+]}[*1]; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-- CONSTRAINTS |
|
|
-- CONSTRAINTS |
|
|
|
|
|
|
|
|
-- Valid stable until accepted |
|
|
-- Valid stable until accepted |
|
|
JOB_REQ_VALID_STABLE : assume always |
|
|
JOB_REQ_VALID_STABLE : assume always |
|
|
DinValid_i and not DinAccept_o -> next (DinValid_i until_ DinAccept_o); |
|
|
|
|
|
|
|
|
DinValid_i and not DinAccept_o -> next (stable(DinValid_i) until_ DinAccept_o); |
|
|
|
|
|
|
|
|
-- Start stable until accepted |
|
|
-- Start stable until accepted |
|
|
JOB_REQ_START_STABLE : assume always |
|
|
JOB_REQ_START_STABLE : assume always |
|
|
DinValid_i and not DinAccept_o -> next (DinStart_i = s_job_req.Start until_ DinAccept_o); |
|
|
|
|
|
|
|
|
DinValid_i and not DinAccept_o -> next (stable(DinStart_i) until_ DinAccept_o); |
|
|
|
|
|
|
|
|
-- Stop stable until accepted |
|
|
-- Stop stable until accepted |
|
|
JOB_REQ_STOP_STABLE : assume always |
|
|
JOB_REQ_STOP_STABLE : assume always |
|
|
DinValid_i and not DinAccept_o -> next (DinStop_i = s_job_req.Stop until_ DinAccept_o); |
|
|
|
|
|
|
|
|
DinValid_i and not DinAccept_o -> next (stable(DinStop_i) until_ DinAccept_o); |
|
|
|
|
|
|
|
|
-- Data stable until accepted |
|
|
-- Data stable until accepted |
|
|
JOB_REQ_DIN_STABLE : assume always |
|
|
JOB_REQ_DIN_STABLE : assume always |
|
|
DinValid_i and not DinAccept_o -> next (Din_i = s_job_req.Data until_ DinAccept_o); |
|
|
|
|
|
|
|
|
DinValid_i and not DinAccept_o -> next (stable(Din_i) until_ DinAccept_o); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-- ASSERTIONS |
|
|
-- ASSERTIONS |
|
@ -315,19 +302,19 @@ begin |
|
|
|
|
|
|
|
|
-- Valid has to be stable until accepted |
|
|
-- Valid has to be stable until accepted |
|
|
JOB_ACK_VALID_STABLE : assert always |
|
|
JOB_ACK_VALID_STABLE : assert always |
|
|
DoutValid_o and not DoutAccept_i -> next (DoutValid_o until_ DoutAccept_i); |
|
|
|
|
|
|
|
|
DoutValid_o and not DoutAccept_i -> next (stable(DoutValid_o) until_ DoutAccept_i); |
|
|
|
|
|
|
|
|
-- Start has to be stable until accepted |
|
|
-- Start has to be stable until accepted |
|
|
JOB_ACK_START_STABLE : assert always |
|
|
JOB_ACK_START_STABLE : assert always |
|
|
DoutValid_o and not DoutAccept_i -> next (DoutStart_o = s_job_ack.Start until_ DoutAccept_i); |
|
|
|
|
|
|
|
|
DoutValid_o and not DoutAccept_i -> next (stable(DoutStart_o) until_ DoutAccept_i); |
|
|
|
|
|
|
|
|
-- Stop has to be stable until accepted |
|
|
-- Stop has to be stable until accepted |
|
|
JOB_ACK_STOP_STABLE : assert always |
|
|
JOB_ACK_STOP_STABLE : assert always |
|
|
DoutValid_o and not DoutAccept_i -> next (DoutStop_o = s_job_ack.Stop until_ DoutAccept_i); |
|
|
|
|
|
|
|
|
DoutValid_o and not DoutAccept_i -> next (stable(DoutStop_o) until_ DoutAccept_i); |
|
|
|
|
|
|
|
|
-- Data has to be stable until accepted |
|
|
-- Data has to be stable until accepted |
|
|
JOB_ACK_DOUT_STABLE : assert always |
|
|
JOB_ACK_DOUT_STABLE : assert always |
|
|
DoutValid_o and not DoutAccept_i -> next (Dout_o = s_job_ack.Data until_ DoutAccept_i); |
|
|
|
|
|
|
|
|
DoutValid_o and not DoutAccept_i -> next (stable(Dout_o) until_ DoutAccept_i); |
|
|
|
|
|
|
|
|
-- Data from selected address has to be read |
|
|
-- Data from selected address has to be read |
|
|
READ_DATA : assert always |
|
|
READ_DATA : assert always |
|
@ -352,7 +339,7 @@ begin |
|
|
DinValid_i and not DinStart_i and DinStop_i and not DinAccept_o [*]; |
|
|
DinValid_i and not DinStart_i and DinStop_i and not DinAccept_o [*]; |
|
|
DinValid_i and not DinStart_i and DinStop_i and DinAccept_o} |
|
|
DinValid_i and not DinStart_i and DinStop_i and DinAccept_o} |
|
|
|=> |
|
|
|=> |
|
|
{s_register(s_addr) = s_job_req.Data}; |
|
|
|
|
|
|
|
|
{s_register(s_addr) = prev(Din_i)}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-- FUNCTIONAL COVERAGE |
|
|
-- FUNCTIONAL COVERAGE |
|
|