-- ------------------------------------------------------- -- -- SuperVISE -- System Design Environment from ICL -- VHDL file produced by Version 3.0.0 -- -- Copyright ICL 1997 -- -- NOTICE : -- This VHDL has been generated automatically from the -- SuperVISE product. The algorithms used to generate -- the VHDL are Copyright ICL 1997 and are subject to -- patent applications. -- -- ------------------------------------------------------- package POCL_TYPES is type OP is array (0 to 1) of INTEGER; end POCL_TYPES; package body POCL_TYPES is end POCL_TYPES; use WORK.POCL_TYPES.ALL; library IEEE; use IEEE.STD_LOGIC_1164.ALL; library SV_LIB; use SV_LIB.SV_TYPES.ALL; entity POCL1 is port ( UNKNOWN_NINO_REQUEST_X : IN SV_CONTROL; UNKNOWN_NINO_ACCEPT_X : OUT SV_CONTROL; UNKNOWN_NINO_ACTIVE_X : OUT SV_STATE; UNKNOWN_NINO_ENQ_IN_X : IN OP; UNKNOWN_NINO_ENQ_OUT_X : OUT OP; ACK_UNKNOWN_NINO_REQUEST_X : IN SV_CONTROL; ACK_UNKNOWN_NINO_ACCEPT_X : OUT SV_CONTROL; ACK_UNKNOWN_NINO_ACTIVE_X : OUT SV_STATE; ACK_UNKNOWN_NINO_OFF_ID_IN_X : IN INTEGER; ACK_UNKNOWN_NINO_OFF_ID_OUT_X : OUT INTEGER; PAYMENT_AMOUNT_1_REQUEST_X : IN SV_CONTROL; PAYMENT_AMOUNT_1_ACCEPT_X : OUT SV_CONTROL; PAYMENT_AMOUNT_1_ACTIVE_X : OUT SV_STATE; PAYMENT_AMOUNT_1_AMOUNT_IN_X : IN INTEGER; PAYMENT_AMOUNT_1_AMOUNT_OUT_X : OUT INTEGER; PAYMENT_AMOUNT_2_REQUEST_X : IN SV_CONTROL; PAYMENT_AMOUNT_2_ACCEPT_X : OUT SV_CONTROL; PAYMENT_AMOUNT_2_ACTIVE_X : OUT SV_STATE; PAYMENT_AMOUNT_2_AMOUNT_IN_X : IN INTEGER; PAYMENT_AMOUNT_2_AMOUNT_OUT_X : OUT INTEGER ); end POCL1; architecture VHDL of POCL1 is subtype UNKNOWN_NINO_RANGE is INTEGER range 0 to 0; type UNKNOWN_NINO_ENQ_TYPE is array (UNKNOWN_NINO_RANGE) of OP; signal UNKNOWN_NINO_ENQ_IN : UNKNOWN_NINO_ENQ_TYPE; signal UNKNOWN_NINO_ENQ_OUT : OP; signal UNKNOWN_NINO_ENQ_VALUE : OP; signal UNKNOWN_NINO_REQUEST : SV_CONTROL_LIST (UNKNOWN_NINO_RANGE); signal UNKNOWN_NINO_ACCEPT : SV_CONTROL_LIST (UNKNOWN_NINO_RANGE); signal UNKNOWN_NINO_VALID : SV_CONTROL := false; signal UNKNOWN_NINO_STATUS : SV_CONTROL := false; signal UNKNOWN_NINO_ACTIVE : SV_STATE := SV_inactive; signal UNKNOWN_NINO_LP_SET : BOOLEAN := false; signal UNKNOWN_NINO_LP_TIME : TIME; signal UNKNOWN_NINO_LOCAL_PAUSE : BOOLEAN := false; signal UNKNOWN_NINO_TIMEUP_MIN : BOOLEAN := true; signal UNKNOWN_NINO_TIMEUP_MAX : BOOLEAN := true; signal UNKNOWN_NINO_TIMER_STARTED : BOOLEAN := false; subtype ACK_UNKNOWN_NINO_RANGE is INTEGER range 0 to 0; type ACK_UNKNOWN_NINO_OFF_ID_TYPE is array (ACK_UNKNOWN_NINO_RANGE) of INTEGER; signal ACK_UNKNOWN_NINO_OFF_ID_IN : ACK_UNKNOWN_NINO_OFF_ID_TYPE; signal ACK_UNKNOWN_NINO_OFF_ID_OUT : INTEGER; signal ACK_UNKNOWN_NINO_OFF_ID_VALUE : INTEGER; signal ACK_UNKNOWN_NINO_REQUEST : SV_CONTROL_LIST (ACK_UNKNOWN_NINO_RANGE); signal ACK_UNKNOWN_NINO_ACCEPT : SV_CONTROL_LIST (ACK_UNKNOWN_NINO_RANGE); signal ACK_UNKNOWN_NINO_VALID : SV_CONTROL := false; signal ACK_UNKNOWN_NINO_STATUS : SV_CONTROL := false; signal ACK_UNKNOWN_NINO_ACTIVE : SV_STATE := SV_inactive; signal ACK_UNKNOWN_NINO_LP_SET : BOOLEAN := false; signal ACK_UNKNOWN_NINO_LP_TIME : TIME; signal ACK_UNKNOWN_NINO_LOCAL_PAUSE : BOOLEAN := false; signal ACK_UNKNOWN_NINO_TIMEUP_MIN : BOOLEAN := true; signal ACK_UNKNOWN_NINO_TIMEUP_MAX : BOOLEAN := true; signal ACK_UNKNOWN_NINO_TIMER_STARTED : BOOLEAN := false; subtype PAYMENT_AMOUNT_1_RANGE is INTEGER range 0 to 0; type PAYMENT_AMOUNT_1_AMOUNT_TYPE is array (PAYMENT_AMOUNT_1_RANGE) of INTEGER; signal PAYMENT_AMOUNT_1_AMOUNT_IN : PAYMENT_AMOUNT_1_AMOUNT_TYPE; signal PAYMENT_AMOUNT_1_AMOUNT_OUT : INTEGER; signal PAYMENT_AMOUNT_1_AMOUNT_VALUE : INTEGER; signal PAYMENT_AMOUNT_1_REQUEST : SV_CONTROL_LIST (PAYMENT_AMOUNT_1_RANGE); signal PAYMENT_AMOUNT_1_ACCEPT : SV_CONTROL_LIST (PAYMENT_AMOUNT_1_RANGE); signal PAYMENT_AMOUNT_1_VALID : SV_CONTROL := false; signal PAYMENT_AMOUNT_1_STATUS : SV_CONTROL := false; signal PAYMENT_AMOUNT_1_ACTIVE : SV_STATE := SV_inactive; signal PAYMENT_AMOUNT_1_LP_SET : BOOLEAN := false; signal PAYMENT_AMOUNT_1_LP_TIME : TIME; signal PAYMENT_AMOUNT_1_LOCAL_PAUSE : BOOLEAN := false; signal PAYMENT_AMOUNT_1_TIMEUP_MIN : BOOLEAN := true; signal PAYMENT_AMOUNT_1_TIMEUP_MAX : BOOLEAN := true; signal PAYMENT_AMOUNT_1_TIMER_STARTED : BOOLEAN := false; subtype PAYMENT_AMOUNT_2_RANGE is INTEGER range 0 to 0; type PAYMENT_AMOUNT_2_AMOUNT_TYPE is array (PAYMENT_AMOUNT_2_RANGE) of INTEGER; signal PAYMENT_AMOUNT_2_AMOUNT_IN : PAYMENT_AMOUNT_2_AMOUNT_TYPE; signal PAYMENT_AMOUNT_2_AMOUNT_OUT : INTEGER; signal PAYMENT_AMOUNT_2_AMOUNT_VALUE : INTEGER; signal PAYMENT_AMOUNT_2_REQUEST : SV_CONTROL_LIST (PAYMENT_AMOUNT_2_RANGE); signal PAYMENT_AMOUNT_2_ACCEPT : SV_CONTROL_LIST (PAYMENT_AMOUNT_2_RANGE); signal PAYMENT_AMOUNT_2_VALID : SV_CONTROL := false; signal PAYMENT_AMOUNT_2_STATUS : SV_CONTROL := false; signal PAYMENT_AMOUNT_2_ACTIVE : SV_STATE := SV_inactive; signal PAYMENT_AMOUNT_2_LP_SET : BOOLEAN := false; signal PAYMENT_AMOUNT_2_LP_TIME : TIME; signal PAYMENT_AMOUNT_2_LOCAL_PAUSE : BOOLEAN := false; signal PAYMENT_AMOUNT_2_TIMEUP_MIN : BOOLEAN := true; signal PAYMENT_AMOUNT_2_TIMEUP_MAX : BOOLEAN := true; signal PAYMENT_AMOUNT_2_TIMER_STARTED : BOOLEAN := false; begin -- ------------------------------- -- message UNKNOWN_NINO -- ------------------------------- -- ---------------------------- concurrent sig assignments UNKNOWN_NINO_REQUEST(0) <= UNKNOWN_NINO_REQUEST_X; UNKNOWN_NINO_ACCEPT_X <= UNKNOWN_NINO_ACCEPT(0); UNKNOWN_NINO_ACTIVE_X <= UNKNOWN_NINO_ACTIVE; UNKNOWN_NINO_ENQ_in(0) <= UNKNOWN_NINO_ENQ_in_x; UNKNOWN_NINO_ENQ_out_x <= UNKNOWN_NINO_ENQ_out; -- ------------------------------- UNKNOWN_NINO_ARBITER : process variable START : INTEGER; variable NUM : INTEGER; variable GOTIT : BOOLEAN; begin wait on UNKNOWN_NINO_REQUEST; start := UNKNOWN_NINO_REQUEST'low; loop SV_find_request(UNKNOWN_NINO_REQUEST,start,gotit,num); if gotit then UNKNOWN_NINO_VALID <= TRUE; UNKNOWN_NINO_ENQ_VALUE <= UNKNOWN_NINO_ENQ_IN(num); loop wait on UNKNOWN_NINO_STATUS; if UNKNOWN_NINO_STATUS then UNKNOWN_NINO_ACCEPT(num) <= TRUE; exit; end if; end loop; loop wait on UNKNOWN_NINO_REQUEST; if NOT UNKNOWN_NINO_REQUEST(num) then UNKNOWN_NINO_VALID <= FALSE; exit; end if; end loop; wait until NOT UNKNOWN_NINO_STATUS; UNKNOWN_NINO_ACCEPT(num) <= FALSE; else exit; end if; end loop; end process UNKNOWN_NINO_ARBITER; UNKNOWN_NINO_CORE : process begin if NOT UNKNOWN_NINO_VALID then wait until UNKNOWN_NINO_VALID; end if; UNKNOWN_NINO_STATUS <= TRUE; for i in 1 to 10 loop wait for 0 nS; end loop; UNKNOWN_NINO_ACTIVE <= SV_active; UNKNOWN_NINO_ENQ_out <= UNKNOWN_NINO_ENQ_value; wait for 25 NS; UNKNOWN_NINO_ACTIVE <= SV_inactive; wait until NOT UNKNOWN_NINO_VALID; UNKNOWN_NINO_STATUS <= FALSE; end process UNKNOWN_NINO_CORE; -- ------------------------------- -- message ACK_UNKNOWN_NINO -- ------------------------------- -- ---------------------------- concurrent sig assignments ACK_UNKNOWN_NINO_REQUEST(0) <= ACK_UNKNOWN_NINO_REQUEST_X; ACK_UNKNOWN_NINO_ACCEPT_X <= ACK_UNKNOWN_NINO_ACCEPT(0); ACK_UNKNOWN_NINO_ACTIVE_X <= ACK_UNKNOWN_NINO_ACTIVE; ACK_UNKNOWN_NINO_OFF_ID_in(0) <= ACK_UNKNOWN_NINO_OFF_ID_in_x; ACK_UNKNOWN_NINO_OFF_ID_out_x <= ACK_UNKNOWN_NINO_OFF_ID_out; -- ------------------------------- ACK_UNKNOWN_NINO_ARBITER : process variable START : INTEGER; variable NUM : INTEGER; variable GOTIT : BOOLEAN; begin wait on ACK_UNKNOWN_NINO_REQUEST; start := ACK_UNKNOWN_NINO_REQUEST'low; loop SV_find_request(ACK_UNKNOWN_NINO_REQUEST,start,gotit,num); if gotit then ACK_UNKNOWN_NINO_VALID <= TRUE; ACK_UNKNOWN_NINO_OFF_ID_VALUE <= ACK_UNKNOWN_NINO_OFF_ID_IN(num); loop wait on ACK_UNKNOWN_NINO_STATUS; if ACK_UNKNOWN_NINO_STATUS then ACK_UNKNOWN_NINO_ACCEPT(num) <= TRUE; exit; end if; end loop; loop wait on ACK_UNKNOWN_NINO_REQUEST; if NOT ACK_UNKNOWN_NINO_REQUEST(num) then ACK_UNKNOWN_NINO_VALID <= FALSE; exit; end if; end loop; wait until NOT ACK_UNKNOWN_NINO_STATUS; ACK_UNKNOWN_NINO_ACCEPT(num) <= FALSE; else exit; end if; end loop; end process ACK_UNKNOWN_NINO_ARBITER; ACK_UNKNOWN_NINO_CORE : process begin if NOT ACK_UNKNOWN_NINO_VALID then wait until ACK_UNKNOWN_NINO_VALID; end if; ACK_UNKNOWN_NINO_STATUS <= TRUE; for i in 1 to 10 loop wait for 0 nS; end loop; ACK_UNKNOWN_NINO_ACTIVE <= SV_active; ACK_UNKNOWN_NINO_OFF_ID_out <= ACK_UNKNOWN_NINO_OFF_ID_value; wait for 25 NS; ACK_UNKNOWN_NINO_ACTIVE <= SV_inactive; wait until NOT ACK_UNKNOWN_NINO_VALID; ACK_UNKNOWN_NINO_STATUS <= FALSE; end process ACK_UNKNOWN_NINO_CORE; -- ------------------------------- -- message PAYMENT_AMOUNT_1 -- ------------------------------- -- ---------------------------- concurrent sig assignments PAYMENT_AMOUNT_1_REQUEST(0) <= PAYMENT_AMOUNT_1_REQUEST_X; PAYMENT_AMOUNT_1_ACCEPT_X <= PAYMENT_AMOUNT_1_ACCEPT(0); PAYMENT_AMOUNT_1_ACTIVE_X <= PAYMENT_AMOUNT_1_ACTIVE; PAYMENT_AMOUNT_1_AMOUNT_in(0) <= PAYMENT_AMOUNT_1_AMOUNT_in_x; PAYMENT_AMOUNT_1_AMOUNT_out_x <= PAYMENT_AMOUNT_1_AMOUNT_out; -- ------------------------------- PAYMENT_AMOUNT_1_ARBITER : process variable START : INTEGER; variable NUM : INTEGER; variable GOTIT : BOOLEAN; begin wait on PAYMENT_AMOUNT_1_REQUEST; start := PAYMENT_AMOUNT_1_REQUEST'low; loop SV_find_request(PAYMENT_AMOUNT_1_REQUEST,start,gotit,num); if gotit then PAYMENT_AMOUNT_1_VALID <= TRUE; PAYMENT_AMOUNT_1_AMOUNT_VALUE <= PAYMENT_AMOUNT_1_AMOUNT_IN(num); loop wait on PAYMENT_AMOUNT_1_STATUS; if PAYMENT_AMOUNT_1_STATUS then PAYMENT_AMOUNT_1_ACCEPT(num) <= TRUE; exit; end if; end loop; loop wait on PAYMENT_AMOUNT_1_REQUEST; if NOT PAYMENT_AMOUNT_1_REQUEST(num) then PAYMENT_AMOUNT_1_VALID <= FALSE; exit; end if; end loop; wait until NOT PAYMENT_AMOUNT_1_STATUS; PAYMENT_AMOUNT_1_ACCEPT(num) <= FALSE; else exit; end if; end loop; end process PAYMENT_AMOUNT_1_ARBITER; PAYMENT_AMOUNT_1_CORE : process begin if NOT PAYMENT_AMOUNT_1_VALID then wait until PAYMENT_AMOUNT_1_VALID; end if; PAYMENT_AMOUNT_1_STATUS <= TRUE; for i in 1 to 10 loop wait for 0 nS; end loop; PAYMENT_AMOUNT_1_ACTIVE <= SV_active; PAYMENT_AMOUNT_1_AMOUNT_out <= PAYMENT_AMOUNT_1_AMOUNT_value; wait for 25 NS; PAYMENT_AMOUNT_1_ACTIVE <= SV_inactive; wait until NOT PAYMENT_AMOUNT_1_VALID; PAYMENT_AMOUNT_1_STATUS <= FALSE; end process PAYMENT_AMOUNT_1_CORE; -- ------------------------------- -- message PAYMENT_AMOUNT_2 -- ------------------------------- -- ---------------------------- concurrent sig assignments PAYMENT_AMOUNT_2_REQUEST(0) <= PAYMENT_AMOUNT_2_REQUEST_X; PAYMENT_AMOUNT_2_ACCEPT_X <= PAYMENT_AMOUNT_2_ACCEPT(0); PAYMENT_AMOUNT_2_ACTIVE_X <= PAYMENT_AMOUNT_2_ACTIVE; PAYMENT_AMOUNT_2_AMOUNT_in(0) <= PAYMENT_AMOUNT_2_AMOUNT_in_x; PAYMENT_AMOUNT_2_AMOUNT_out_x <= PAYMENT_AMOUNT_2_AMOUNT_out; -- ------------------------------- PAYMENT_AMOUNT_2_ARBITER : process variable START : INTEGER; variable NUM : INTEGER; variable GOTIT : BOOLEAN; begin wait on PAYMENT_AMOUNT_2_REQUEST; start := PAYMENT_AMOUNT_2_REQUEST'low; loop SV_find_request(PAYMENT_AMOUNT_2_REQUEST,start,gotit,num); if gotit then PAYMENT_AMOUNT_2_VALID <= TRUE; PAYMENT_AMOUNT_2_AMOUNT_VALUE <= PAYMENT_AMOUNT_2_AMOUNT_IN(num); loop wait on PAYMENT_AMOUNT_2_STATUS; if PAYMENT_AMOUNT_2_STATUS then PAYMENT_AMOUNT_2_ACCEPT(num) <= TRUE; exit; end if; end loop; loop wait on PAYMENT_AMOUNT_2_REQUEST; if NOT PAYMENT_AMOUNT_2_REQUEST(num) then PAYMENT_AMOUNT_2_VALID <= FALSE; exit; end if; end loop; wait until NOT PAYMENT_AMOUNT_2_STATUS; PAYMENT_AMOUNT_2_ACCEPT(num) <= FALSE; else exit; end if; end loop; end process PAYMENT_AMOUNT_2_ARBITER; PAYMENT_AMOUNT_2_CORE : process begin if NOT PAYMENT_AMOUNT_2_VALID then wait until PAYMENT_AMOUNT_2_VALID; end if; PAYMENT_AMOUNT_2_STATUS <= TRUE; for i in 1 to 10 loop wait for 0 nS; end loop; PAYMENT_AMOUNT_2_ACTIVE <= SV_active; PAYMENT_AMOUNT_2_AMOUNT_out <= PAYMENT_AMOUNT_2_AMOUNT_value; wait for 25 NS; PAYMENT_AMOUNT_2_ACTIVE <= SV_inactive; wait until NOT PAYMENT_AMOUNT_2_VALID; PAYMENT_AMOUNT_2_STATUS <= FALSE; end process PAYMENT_AMOUNT_2_CORE; end VHDL; library IEEE; use IEEE.STD_LOGIC_1164.ALL; library SV_LIB; use SV_LIB.SV_TYPES.ALL; use WORK.POCL_TYPES.ALL; use WORK.POCL_TYPES.ALL; entity CENTRE is port ( CEN1 : INOUT BOOLEAN := FALSE; IPORT_UNKNOWN_NINO_ACTIVE : IN SV_STATE; IPORT_UNKNOWN_NINO_ENQ_OUT : IN OP; IPORT_ACK_UNKNOWN_NINO_REQUEST_X : OUT SV_CONTROL; IPORT_ACK_UNKNOWN_NINO_ACCEPT_X : IN SV_CONTROL; IPORT_ACK_UNKNOWN_NINO_ACTIVE : IN SV_STATE; IPORT_ACK_UNKNOWN_NINO_OFF_ID_IN_X : OUT INTEGER; IPORT_PAYMENT_AMOUNT_1_REQUEST_X : OUT SV_CONTROL; IPORT_PAYMENT_AMOUNT_1_ACCEPT_X : IN SV_CONTROL; IPORT_PAYMENT_AMOUNT_1_ACTIVE : IN SV_STATE; IPORT_PAYMENT_AMOUNT_1_AMOUNT_IN_X : OUT INTEGER; IPORT_PAYMENT_AMOUNT_2_REQUEST_X : OUT SV_CONTROL; IPORT_PAYMENT_AMOUNT_2_ACCEPT_X : IN SV_CONTROL; IPORT_PAYMENT_AMOUNT_2_ACTIVE : IN SV_STATE; IPORT_PAYMENT_AMOUNT_2_AMOUNT_IN_X : OUT INTEGER ); end CENTRE; architecture ONE of CENTRE is type PAYMENTS is array (1 to 10) of INTEGER; signal NULLSIG : BIT; subtype IPORT_ACK_UNKNOWN_NINO_RANGE is INTEGER range 0 to 4; type IPORT_ACK_UNKNOWN_NINO_OFF_ID_TYPE is array (IPORT_ACK_UNKNOWN_NINO_RANGE) of INTEGER; signal IPORT_ACK_UNKNOWN_NINO_OFF_ID_IN : IPORT_ACK_UNKNOWN_NINO_OFF_ID_TYPE; signal IPORT_ACK_UNKNOWN_NINO_REQUEST : SV_CONTROL_LIST (IPORT_ACK_UNKNOWN_NINO_RANGE); signal IPORT_ACK_UNKNOWN_NINO_ACCEPT : SV_CONTROL_LIST (IPORT_ACK_UNKNOWN_NINO_RANGE); subtype IPORT_PAYMENT_AMOUNT_1_RANGE is INTEGER range 0 to 4; type IPORT_PAYMENT_AMOUNT_1_AMOUNT_TYPE is array (IPORT_PAYMENT_AMOUNT_1_RANGE) of INTEGER; signal IPORT_PAYMENT_AMOUNT_1_AMOUNT_IN : IPORT_PAYMENT_AMOUNT_1_AMOUNT_TYPE; signal IPORT_PAYMENT_AMOUNT_1_REQUEST : SV_CONTROL_LIST (IPORT_PAYMENT_AMOUNT_1_RANGE); signal IPORT_PAYMENT_AMOUNT_1_ACCEPT : SV_CONTROL_LIST (IPORT_PAYMENT_AMOUNT_1_RANGE); subtype IPORT_PAYMENT_AMOUNT_2_RANGE is INTEGER range 0 to 4; type IPORT_PAYMENT_AMOUNT_2_AMOUNT_TYPE is array (IPORT_PAYMENT_AMOUNT_2_RANGE) of INTEGER; signal IPORT_PAYMENT_AMOUNT_2_AMOUNT_IN : IPORT_PAYMENT_AMOUNT_2_AMOUNT_TYPE; signal IPORT_PAYMENT_AMOUNT_2_REQUEST : SV_CONTROL_LIST (IPORT_PAYMENT_AMOUNT_2_RANGE); signal IPORT_PAYMENT_AMOUNT_2_ACCEPT : SV_CONTROL_LIST (IPORT_PAYMENT_AMOUNT_2_RANGE); begin process variable Q : OP; variable AMOUNT : INTEGER; variable DATA : PAYMENTS := (11,12,13,14,15,16,17,18,19,20); variable UNIFORM_STATE : SV_UNIFORM_TYPE := 1; variable PT : SV_TICKLIST (1 to 1); begin -- ---------------------------- unit serial receive -- RECEIVE IPORT.UNKNOWN_NINO -- ---------------------------- loop wait until IPORT_UNKNOWN_NINO_ACTIVE = SV_active; wait until IPORT_UNKNOWN_NINO_ACTIVE /= SV_active; if (IPORT_UNKNOWN_NINO_ACTIVE = SV_inactive) then exit; end if; end loop; Q := IPORT_UNKNOWN_NINO_ENQ_out; wait for 0 nS; -- ---------------------------- end unit serial receive assert FALSE report "centre received UNKNOWN_NINO" severity NOTE; -- --------------------------- unit serial send -- SEND IPORT.ACK_UNKNOWN_NINO -- --------------------------- if IPORT_ACK_UNKNOWN_NINO_ACCEPT(1) then wait on IPORT_ACK_UNKNOWN_NINO_ACCEPT until NOT IPORT_ACK_UNKNOWN_NINO_ACCEPT(1); end if; IPORT_ACK_UNKNOWN_NINO_OFF_ID_in(1) <= Q(0); IPORT_ACK_UNKNOWN_NINO_REQUEST(1) <= TRUE; wait on IPORT_ACK_UNKNOWN_NINO_ACCEPT until IPORT_ACK_UNKNOWN_NINO_ACCEPT(1); wait until IPORT_ACK_UNKNOWN_NINO_ACTIVE /= SV_active; IPORT_ACK_UNKNOWN_NINO_REQUEST(1) <= FALSE; -- --------------------------- end unit serial send assert FALSE report "CENTRE sent ACK" severity NOTE; wait for 25 NS; if Q(0) = 1 then -- --------------------------- unit serial send -- SEND IPORT.PAYMENT_AMOUNT_1 -- --------------------------- if IPORT_PAYMENT_AMOUNT_1_ACCEPT(2) then wait on IPORT_PAYMENT_AMOUNT_1_ACCEPT until NOT IPORT_PAYMENT_AMOUNT_1_ACCEPT(2); end if; IPORT_PAYMENT_AMOUNT_1_AMOUNT_in(2) <= DATA(Q(1)); IPORT_PAYMENT_AMOUNT_1_REQUEST(2) <= TRUE; wait on IPORT_PAYMENT_AMOUNT_1_ACCEPT until IPORT_PAYMENT_AMOUNT_1_ACCEPT(2); wait until IPORT_PAYMENT_AMOUNT_1_ACTIVE /= SV_active; IPORT_PAYMENT_AMOUNT_1_REQUEST(2) <= FALSE; -- --------------------------- end unit serial send assert FALSE report "CENTRE sends amount to office 1" severity NOTE; else -- --------------------------- unit serial send -- SEND IPORT.PAYMENT_AMOUNT_2 -- --------------------------- if IPORT_PAYMENT_AMOUNT_2_ACCEPT(3) then wait on IPORT_PAYMENT_AMOUNT_2_ACCEPT until NOT IPORT_PAYMENT_AMOUNT_2_ACCEPT(3); end if; IPORT_PAYMENT_AMOUNT_2_AMOUNT_in(3) <= DATA(Q(1)); IPORT_PAYMENT_AMOUNT_2_REQUEST(3) <= TRUE; wait on IPORT_PAYMENT_AMOUNT_2_ACCEPT until IPORT_PAYMENT_AMOUNT_2_ACCEPT(3); wait until IPORT_PAYMENT_AMOUNT_2_ACTIVE /= SV_active; IPORT_PAYMENT_AMOUNT_2_REQUEST(3) <= FALSE; -- --------------------------- end unit serial send assert FALSE report "CENTRE sends amount to office 2" severity NOTE; end if; DATA(Q(1)) := 0; end process; IPORT_ACK_UNKNOWN_NINO_ARBITER : process variable START : INTEGER; variable NUM : INTEGER; variable GOTIT : BOOLEAN; begin wait on IPORT_ACK_UNKNOWN_NINO_REQUEST; start := IPORT_ACK_UNKNOWN_NINO_REQUEST'low; loop SV_find_request(IPORT_ACK_UNKNOWN_NINO_REQUEST,start,gotit,num); if gotit then IPORT_ACK_UNKNOWN_NINO_REQUEST_X <= TRUE; IPORT_ACK_UNKNOWN_NINO_OFF_ID_IN_X <= IPORT_ACK_UNKNOWN_NINO_OFF_ID_IN(num); loop wait on IPORT_ACK_UNKNOWN_NINO_ACCEPT_X; if IPORT_ACK_UNKNOWN_NINO_ACCEPT_X then IPORT_ACK_UNKNOWN_NINO_ACCEPT(num) <= TRUE; exit; end if; end loop; loop wait on IPORT_ACK_UNKNOWN_NINO_REQUEST; if NOT IPORT_ACK_UNKNOWN_NINO_REQUEST(num) then IPORT_ACK_UNKNOWN_NINO_REQUEST_X <= FALSE; exit; end if; end loop; wait until NOT IPORT_ACK_UNKNOWN_NINO_ACCEPT_X; IPORT_ACK_UNKNOWN_NINO_ACCEPT(num) <= FALSE; else exit; end if; end loop; end process IPORT_ACK_UNKNOWN_NINO_ARBITER; IPORT_PAYMENT_AMOUNT_1_ARBITER : process variable START : INTEGER; variable NUM : INTEGER; variable GOTIT : BOOLEAN; begin wait on IPORT_PAYMENT_AMOUNT_1_REQUEST; start := IPORT_PAYMENT_AMOUNT_1_REQUEST'low; loop SV_find_request(IPORT_PAYMENT_AMOUNT_1_REQUEST,start,gotit,num); if gotit then IPORT_PAYMENT_AMOUNT_1_REQUEST_X <= TRUE; IPORT_PAYMENT_AMOUNT_1_AMOUNT_IN_X <= IPORT_PAYMENT_AMOUNT_1_AMOUNT_IN(num); loop wait on IPORT_PAYMENT_AMOUNT_1_ACCEPT_X; if IPORT_PAYMENT_AMOUNT_1_ACCEPT_X then IPORT_PAYMENT_AMOUNT_1_ACCEPT(num) <= TRUE; exit; end if; end loop; loop wait on IPORT_PAYMENT_AMOUNT_1_REQUEST; if NOT IPORT_PAYMENT_AMOUNT_1_REQUEST(num) then IPORT_PAYMENT_AMOUNT_1_REQUEST_X <= FALSE; exit; end if; end loop; wait until NOT IPORT_PAYMENT_AMOUNT_1_ACCEPT_X; IPORT_PAYMENT_AMOUNT_1_ACCEPT(num) <= FALSE; else exit; end if; end loop; end process IPORT_PAYMENT_AMOUNT_1_ARBITER; IPORT_PAYMENT_AMOUNT_2_ARBITER : process variable START : INTEGER; variable NUM : INTEGER; variable GOTIT : BOOLEAN; begin wait on IPORT_PAYMENT_AMOUNT_2_REQUEST; start := IPORT_PAYMENT_AMOUNT_2_REQUEST'low; loop SV_find_request(IPORT_PAYMENT_AMOUNT_2_REQUEST,start,gotit,num); if gotit then IPORT_PAYMENT_AMOUNT_2_REQUEST_X <= TRUE; IPORT_PAYMENT_AMOUNT_2_AMOUNT_IN_X <= IPORT_PAYMENT_AMOUNT_2_AMOUNT_IN(num); loop wait on IPORT_PAYMENT_AMOUNT_2_ACCEPT_X; if IPORT_PAYMENT_AMOUNT_2_ACCEPT_X then IPORT_PAYMENT_AMOUNT_2_ACCEPT(num) <= TRUE; exit; end if; end loop; loop wait on IPORT_PAYMENT_AMOUNT_2_REQUEST; if NOT IPORT_PAYMENT_AMOUNT_2_REQUEST(num) then IPORT_PAYMENT_AMOUNT_2_REQUEST_X <= FALSE; exit; end if; end loop; wait until NOT IPORT_PAYMENT_AMOUNT_2_ACCEPT_X; IPORT_PAYMENT_AMOUNT_2_ACCEPT(num) <= FALSE; else exit; end if; end loop; end process IPORT_PAYMENT_AMOUNT_2_ARBITER; end ONE; library IEEE; use IEEE.STD_LOGIC_1164.ALL; library SV_LIB; use SV_LIB.SV_TYPES.ALL; use WORK.POCL_TYPES.ALL; use WORK.POCL_TYPES.ALL; entity OFFICE1 is port ( OFFICE1 : INOUT BOOLEAN := FALSE; SEND_PORT_UNKNOWN_NINO_REQUEST_X : OUT SV_CONTROL; SEND_PORT_UNKNOWN_NINO_ACCEPT_X : IN SV_CONTROL; SEND_PORT_UNKNOWN_NINO_ACTIVE : IN SV_STATE; SEND_PORT_UNKNOWN_NINO_ENQ_IN_X : OUT OP; SEND_PORT_ACK_UNKNOWN_NINO_ACTIVE : IN SV_STATE; SEND_PORT_ACK_UNKNOWN_NINO_OFF_ID_OUT : IN INTEGER; RECEIVE_PORT_PAYMENT_AMOUNT_1_ACTIVE : IN SV_STATE; RECEIVE_PORT_PAYMENT_AMOUNT_1_AMOUNT_OUT : IN INTEGER ); end OFFICE1; architecture ONE of OFFICE1 is type OFF_PAYMENTS is array (1 to 10) of INTEGER; signal ACK : BOOLEAN := FALSE; signal IDNO : INTEGER; signal WHO : INTEGER := 6; signal HOW_MUCH : INTEGER := 0; signal NULLSIG : BIT; subtype SEND_ENQUIRY_RANGE is INTEGER range 0 to 1; type SEND_ENQUIRY_ENQ_TYPE is array (SEND_ENQUIRY_RANGE) of OP; signal SEND_ENQUIRY_ENQ_IN : SEND_ENQUIRY_ENQ_TYPE; signal SEND_ENQUIRY_ENQ_OUT : OP; signal SEND_ENQUIRY_ENQ_VALUE : OP; signal SEND_ENQUIRY_REQUEST : SV_CONTROL_LIST (SEND_ENQUIRY_RANGE); signal SEND_ENQUIRY_ACCEPT : SV_CONTROL_LIST (SEND_ENQUIRY_RANGE); signal SEND_ENQUIRY_VALID : SV_CONTROL := false; signal SEND_ENQUIRY_STATUS : SV_CONTROL := false; signal SEND_ENQUIRY_ACTIVE : SV_STATE := SV_inactive; subtype GET_ACK_RANGE is INTEGER range 0 to 1; type GET_ACK_OFF_ID_TYPE is array (GET_ACK_RANGE) of INTEGER; signal GET_ACK_OFF_ID_IN : GET_ACK_OFF_ID_TYPE; signal GET_ACK_OFF_ID_OUT : INTEGER; signal GET_ACK_OFF_ID_VALUE : INTEGER; signal GET_ACK_REQUEST : SV_CONTROL_LIST (GET_ACK_RANGE); signal GET_ACK_ACCEPT : SV_CONTROL_LIST (GET_ACK_RANGE); signal GET_ACK_VALID : SV_CONTROL := false; signal GET_ACK_STATUS : SV_CONTROL := false; signal GET_ACK_ACTIVE : SV_STATE := SV_inactive; subtype SENDIT_RANGE is INTEGER range 0 to 1; type SENDIT_E_TYPE is array (SENDIT_RANGE) of OP; signal SENDIT_E_IN : SENDIT_E_TYPE; signal SENDIT_E_OUT : OP; signal SENDIT_E_VALUE : OP; signal SENDIT_REQUEST : SV_CONTROL_LIST (SENDIT_RANGE); signal SENDIT_ACCEPT : SV_CONTROL_LIST (SENDIT_RANGE); signal SENDIT_VALID : SV_CONTROL := false; signal SENDIT_STATUS : SV_CONTROL := false; signal SENDIT_ACTIVE : SV_STATE := SV_inactive; subtype SEND_PORT_UNKNOWN_NINO_RANGE is INTEGER range 0 to 2; type SEND_PORT_UNKNOWN_NINO_ENQ_TYPE is array (SEND_PORT_UNKNOWN_NINO_RANGE) of OP; signal SEND_PORT_UNKNOWN_NINO_ENQ_IN : SEND_PORT_UNKNOWN_NINO_ENQ_TYPE; signal SEND_PORT_UNKNOWN_NINO_REQUEST : SV_CONTROL_LIST (SEND_PORT_UNKNOWN_NINO_RANGE); signal SEND_PORT_UNKNOWN_NINO_ACCEPT : SV_CONTROL_LIST (SEND_PORT_UNKNOWN_NINO_RANGE); begin process variable OFF_DATA : OFF_PAYMENTS := (11,12,13,14,15,- 1,- 1,- 1,- 1,- 1); variable NINO : INTEGER; variable BENEFIT : INTEGER; variable MESS : OP; variable UNIFORM_STATE : SV_UNIFORM_TYPE := 2; variable PT : SV_TICKLIST (1 to 1); begin wait until OFFICE1; OFFICE1 <= TRUE , FALSE after 15 NS; NINO := WHO; if OFF_DATA(NINO) /= - 1 then assert FALSE report "Nino known, pay out from OFFICE1 local data" severity NOTE; HOW_MUCH <= OFF_DATA(NINO); OFF_DATA(NINO) := 0; else MESS(0) := 1; MESS(1) := NINO; -- ------------------------- serial activity call SENDIT PT(1) := SV_idle; loop -- ------------------------- parallel activity call SENDIT case PT(1) is when SV_idle => if NOT SENDIT_ACCEPT(1) then PT(1) := SV_requested; SENDIT_REQUEST(1) <= TRUE; SENDIT_E_IN(1) <= MESS; end if; when SV_requested => if SENDIT_ACCEPT(1) then PT(1) := SV_started; end if; when SV_started => if SENDIT_ACTIVE'event and SENDIT_ACTIVE /= SV_active then PT(1) := SV_finished; SENDIT_REQUEST(1) <= FALSE; MESS := SENDIT_E_out; else end if; when others => null; end case; -- --------------------- end parallel activity call if PT(1)=SV_finished then exit; end if; wait on SENDIT_ACTIVE,SENDIT_ACCEPT; end loop; wait for 0 nS; -- ------------------------- end serial activity call -- ---------------------------- unit serial receive -- RECEIVE RECEIVE_PORT.PAYMENT_AMOUNT_1 -- ---------------------------- loop wait until RECEIVE_PORT_PAYMENT_AMOUNT_1_ACTIVE = SV_active; wait until RECEIVE_PORT_PAYMENT_AMOUNT_1_ACTIVE /= SV_active; if (RECEIVE_PORT_PAYMENT_AMOUNT_1_ACTIVE = SV_inactive) then exit; end if; end loop; BENEFIT := RECEIVE_PORT_PAYMENT_AMOUNT_1_AMOUNT_out; wait for 0 nS; -- ---------------------------- end unit serial receive assert FALSE report "OFFICE1 receives data from centre" severity NOTE; HOW_MUCH <= BENEFIT; end if; end process; SEND_ENQUIRY_ARBITER : process variable START : INTEGER; variable NUM : INTEGER; variable GOTIT : BOOLEAN; begin wait on SEND_ENQUIRY_REQUEST; start := SEND_ENQUIRY_REQUEST'low; loop SV_find_request(SEND_ENQUIRY_REQUEST,start,gotit,num); if gotit then SEND_ENQUIRY_VALID <= TRUE; SEND_ENQUIRY_ENQ_value <= SEND_ENQUIRY_ENQ_in(num); loop wait on SEND_ENQUIRY_STATUS ; if SEND_ENQUIRY_STATUS then SEND_ENQUIRY_ACCEPT(num) <= TRUE; exit; end if; end loop; loop wait on SEND_ENQUIRY_REQUEST ; if NOT SEND_ENQUIRY_REQUEST(num) then SEND_ENQUIRY_VALID <= FALSE; exit; end if; end loop; wait until NOT SEND_ENQUIRY_STATUS; SEND_ENQUIRY_ACCEPT(num) <= FALSE; else exit; end if; end loop; end process SEND_ENQUIRY_ARBITER; SEND_ENQUIRY_CORE : process variable UNIFORM_STATE : SV_UNIFORM_TYPE := 3; variable PT : SV_TICKLIST (1 to 1); variable SEND_ENQUIRY_ENQ_LOCAL : OP; begin wait until SEND_ENQUIRY_VALID; SEND_ENQUIRY_STATUS <= TRUE; SEND_ENQUIRY_ENQ_local := SEND_ENQUIRY_ENQ_value; wait for 0 nS; SEND_ENQUIRY_ACTIVE <= SV_active; assert FALSE report "Office 1 starts to send UNKNOWN_NINO" severity NOTE; while ACK = FALSE loop -- --------------------------- unit serial send -- SEND SEND_PORT.UNKNOWN_NINO -- --------------------------- if SEND_PORT_UNKNOWN_NINO_ACCEPT(0) then wait on SEND_PORT_UNKNOWN_NINO_ACCEPT until NOT SEND_PORT_UNKNOWN_NINO_ACCEPT(0); end if; SEND_PORT_UNKNOWN_NINO_ENQ_in(0) <= SEND_ENQUIRY_ENQ_local; SEND_PORT_UNKNOWN_NINO_REQUEST(0) <= TRUE; wait on SEND_PORT_UNKNOWN_NINO_ACCEPT until SEND_PORT_UNKNOWN_NINO_ACCEPT(0); wait until SEND_PORT_UNKNOWN_NINO_ACTIVE /= SV_active; SEND_PORT_UNKNOWN_NINO_REQUEST(0) <= FALSE; -- --------------------------- end unit serial send end loop ; SEND_ENQUIRY_ENQ_out <= SEND_ENQUIRY_ENQ_local; wait for 0 nS; wait for 0 nS; SEND_ENQUIRY_ACTIVE <= SV_inactive; wait until NOT SEND_ENQUIRY_VALID; SEND_ENQUIRY_STATUS <= FALSE; end process SEND_ENQUIRY_CORE; GET_ACK_ARBITER : process variable START : INTEGER; variable NUM : INTEGER; variable GOTIT : BOOLEAN; begin wait on GET_ACK_REQUEST; start := GET_ACK_REQUEST'low; loop SV_find_request(GET_ACK_REQUEST,start,gotit,num); if gotit then GET_ACK_VALID <= TRUE; GET_ACK_OFF_ID_value <= GET_ACK_OFF_ID_in(num); loop wait on GET_ACK_STATUS ; if GET_ACK_STATUS then GET_ACK_ACCEPT(num) <= TRUE; exit; end if; end loop; loop wait on GET_ACK_REQUEST ; if NOT GET_ACK_REQUEST(num) then GET_ACK_VALID <= FALSE; exit; end if; end loop; wait until NOT GET_ACK_STATUS; GET_ACK_ACCEPT(num) <= FALSE; else exit; end if; end loop; end process GET_ACK_ARBITER; GET_ACK_CORE : process variable UNIFORM_STATE : SV_UNIFORM_TYPE := 4; variable PT : SV_TICKLIST (1 to 1); variable GET_ACK_OFF_ID_LOCAL : INTEGER; begin wait until GET_ACK_VALID; GET_ACK_STATUS <= TRUE; GET_ACK_OFF_ID_local := GET_ACK_OFF_ID_value; wait for 0 nS; GET_ACK_ACTIVE <= SV_active; IDNO <= 0; ACK <= FALSE; while IDNO /= GET_ACK_OFF_ID_local loop -- ---------------------------- unit serial receive -- RECEIVE SEND_PORT.ACK_UNKNOWN_NINO -- ---------------------------- loop wait until SEND_PORT_ACK_UNKNOWN_NINO_ACTIVE = SV_active; wait until SEND_PORT_ACK_UNKNOWN_NINO_ACTIVE /= SV_active; if (SEND_PORT_ACK_UNKNOWN_NINO_ACTIVE = SV_inactive) then exit; end if; end loop; IDNO <= SEND_PORT_ACK_UNKNOWN_NINO_OFF_ID_out; wait for 0 nS; -- ---------------------------- end unit serial receive end loop ; assert FALSE report " ACK of UNKNOWN_NINO received at Office 1" severity NOTE; ACK <= TRUE, FALSE after 75 NS; GET_ACK_OFF_ID_out <= GET_ACK_OFF_ID_local; wait for 0 nS; wait for 0 nS; GET_ACK_ACTIVE <= SV_inactive; wait until NOT GET_ACK_VALID; GET_ACK_STATUS <= FALSE; end process GET_ACK_CORE; SENDIT_ARBITER : process variable START : INTEGER; variable NUM : INTEGER; variable GOTIT : BOOLEAN; begin wait on SENDIT_REQUEST; start := SENDIT_REQUEST'low; loop SV_find_request(SENDIT_REQUEST,start,gotit,num); if gotit then SENDIT_VALID <= TRUE; SENDIT_E_value <= SENDIT_E_in(num); loop wait on SENDIT_STATUS ; if SENDIT_STATUS then SENDIT_ACCEPT(num) <= TRUE; exit; end if; end loop; loop wait on SENDIT_REQUEST ; if NOT SENDIT_REQUEST(num) then SENDIT_VALID <= FALSE; exit; end if; end loop; wait until NOT SENDIT_STATUS; SENDIT_ACCEPT(num) <= FALSE; else exit; end if; end loop; end process SENDIT_ARBITER; SENDIT_CORE : process variable UNIFORM_STATE : SV_UNIFORM_TYPE := 5; variable PT : SV_TICKLIST (1 to 2); variable SENDIT_E_LOCAL : OP; begin wait until SENDIT_VALID; SENDIT_STATUS <= TRUE; SENDIT_E_local := SENDIT_E_value; wait for 0 nS; SENDIT_ACTIVE <= SV_active; -- ---------------------------- activity parallel SV_ticklist_reset(PT); loop -- ------------------------- parallel activity call SEND_ENQUIRY case PT(1) is when SV_idle => if NOT SEND_ENQUIRY_ACCEPT(1) then PT(1) := SV_requested; SEND_ENQUIRY_REQUEST(1) <= TRUE; SEND_ENQUIRY_ENQ_IN(1) <= SENDIT_E_local; end if; when SV_requested => if SEND_ENQUIRY_ACCEPT(1) then PT(1) := SV_started; end if; when SV_started => if SEND_ENQUIRY_ACTIVE'event and SEND_ENQUIRY_ACTIVE /= SV_active then PT(1) := SV_finished; SEND_ENQUIRY_REQUEST(1) <= FALSE; SENDIT_E_local := SEND_ENQUIRY_ENQ_out; else end if; when others => null; end case; -- --------------------- end parallel activity call -- ------------------------- parallel activity call GET_ACK case PT(2) is when SV_idle => if NOT GET_ACK_ACCEPT(1) then PT(2) := SV_requested; GET_ACK_REQUEST(1) <= TRUE; GET_ACK_OFF_ID_IN(1) <= SENDIT_E_local(0); end if; when SV_requested => if GET_ACK_ACCEPT(1) then PT(2) := SV_started; end if; when SV_started => if GET_ACK_ACTIVE'event and GET_ACK_ACTIVE /= SV_active then PT(2) := SV_finished; GET_ACK_REQUEST(1) <= FALSE; SENDIT_E_local(0) := GET_ACK_OFF_ID_out; else end if; when others => null; end case; -- --------------------- end parallel activity call if SV_ticklist_complete(PT,2) then exit; end if; wait on SEND_ENQUIRY_ACCEPT,SEND_ENQUIRY_ACTIVE, GET_ACK_ACCEPT,GET_ACK_ACTIVE; end loop; wait for 0 nS; -- ---------------------------- end activity parallel SENDIT_E_out <= SENDIT_E_local; wait for 0 nS; wait for 0 nS; SENDIT_ACTIVE <= SV_inactive; wait until NOT SENDIT_VALID; SENDIT_STATUS <= FALSE; end process SENDIT_CORE; SEND_PORT_UNKNOWN_NINO_ARBITER : process variable START : INTEGER; variable NUM : INTEGER; variable GOTIT : BOOLEAN; begin wait on SEND_PORT_UNKNOWN_NINO_REQUEST; start := SEND_PORT_UNKNOWN_NINO_REQUEST'low; loop SV_find_request(SEND_PORT_UNKNOWN_NINO_REQUEST,start,gotit,num); if gotit then SEND_PORT_UNKNOWN_NINO_REQUEST_X <= TRUE; SEND_PORT_UNKNOWN_NINO_ENQ_IN_X <= SEND_PORT_UNKNOWN_NINO_ENQ_IN(num); loop wait on SEND_PORT_UNKNOWN_NINO_ACCEPT_X; if SEND_PORT_UNKNOWN_NINO_ACCEPT_X then SEND_PORT_UNKNOWN_NINO_ACCEPT(num) <= TRUE; exit; end if; end loop; loop wait on SEND_PORT_UNKNOWN_NINO_REQUEST; if NOT SEND_PORT_UNKNOWN_NINO_REQUEST(num) then SEND_PORT_UNKNOWN_NINO_REQUEST_X <= FALSE; exit; end if; end loop; wait until NOT SEND_PORT_UNKNOWN_NINO_ACCEPT_X; SEND_PORT_UNKNOWN_NINO_ACCEPT(num) <= FALSE; else exit; end if; end loop; end process SEND_PORT_UNKNOWN_NINO_ARBITER; end ONE; library IEEE; use IEEE.STD_LOGIC_1164.ALL; library SV_LIB; use SV_LIB.SV_TYPES.ALL; use WORK.POCL_TYPES.ALL; use WORK.POCL_TYPES.ALL; entity OFFICE2 is port ( OFFICE2 : INOUT BOOLEAN := FALSE; SEND_PORT_UNKNOWN_NINO_REQUEST_X : OUT SV_CONTROL; SEND_PORT_UNKNOWN_NINO_ACCEPT_X : IN SV_CONTROL; SEND_PORT_UNKNOWN_NINO_ACTIVE : IN SV_STATE; SEND_PORT_UNKNOWN_NINO_ENQ_IN_X : OUT OP; SEND_PORT_ACK_UNKNOWN_NINO_ACTIVE : IN SV_STATE; SEND_PORT_ACK_UNKNOWN_NINO_OFF_ID_OUT : IN INTEGER; RECEIVE_PORT_PAYMENT_AMOUNT_2_ACTIVE : IN SV_STATE; RECEIVE_PORT_PAYMENT_AMOUNT_2_AMOUNT_OUT : IN INTEGER ); end OFFICE2; architecture ONE of OFFICE2 is type OFF_PAYMENTS is array (1 to 10) of INTEGER; signal ACK : BOOLEAN := FALSE; signal IDNO : INTEGER; signal WHO : INTEGER := 2; signal HOW_MUCH : INTEGER := 0; signal NULLSIG : BIT; subtype SEND_ENQUIRY_RANGE is INTEGER range 0 to 1; type SEND_ENQUIRY_ENQ_TYPE is array (SEND_ENQUIRY_RANGE) of OP; signal SEND_ENQUIRY_ENQ_IN : SEND_ENQUIRY_ENQ_TYPE; signal SEND_ENQUIRY_ENQ_OUT : OP; signal SEND_ENQUIRY_ENQ_VALUE : OP; signal SEND_ENQUIRY_REQUEST : SV_CONTROL_LIST (SEND_ENQUIRY_RANGE); signal SEND_ENQUIRY_ACCEPT : SV_CONTROL_LIST (SEND_ENQUIRY_RANGE); signal SEND_ENQUIRY_VALID : SV_CONTROL := false; signal SEND_ENQUIRY_STATUS : SV_CONTROL := false; signal SEND_ENQUIRY_ACTIVE : SV_STATE := SV_inactive; subtype GET_ACK_RANGE is INTEGER range 0 to 1; type GET_ACK_OFF_ID_TYPE is array (GET_ACK_RANGE) of INTEGER; signal GET_ACK_OFF_ID_IN : GET_ACK_OFF_ID_TYPE; signal GET_ACK_OFF_ID_OUT : INTEGER; signal GET_ACK_OFF_ID_VALUE : INTEGER; signal GET_ACK_REQUEST : SV_CONTROL_LIST (GET_ACK_RANGE); signal GET_ACK_ACCEPT : SV_CONTROL_LIST (GET_ACK_RANGE); signal GET_ACK_VALID : SV_CONTROL := false; signal GET_ACK_STATUS : SV_CONTROL := false; signal GET_ACK_ACTIVE : SV_STATE := SV_inactive; subtype SENDIT_RANGE is INTEGER range 0 to 1; type SENDIT_E_TYPE is array (SENDIT_RANGE) of OP; signal SENDIT_E_IN : SENDIT_E_TYPE; signal SENDIT_E_OUT : OP; signal SENDIT_E_VALUE : OP; signal SENDIT_REQUEST : SV_CONTROL_LIST (SENDIT_RANGE); signal SENDIT_ACCEPT : SV_CONTROL_LIST (SENDIT_RANGE); signal SENDIT_VALID : SV_CONTROL := false; signal SENDIT_STATUS : SV_CONTROL := false; signal SENDIT_ACTIVE : SV_STATE := SV_inactive; subtype SEND_PORT_UNKNOWN_NINO_RANGE is INTEGER range 0 to 2; type SEND_PORT_UNKNOWN_NINO_ENQ_TYPE is array (SEND_PORT_UNKNOWN_NINO_RANGE) of OP; signal SEND_PORT_UNKNOWN_NINO_ENQ_IN : SEND_PORT_UNKNOWN_NINO_ENQ_TYPE; signal SEND_PORT_UNKNOWN_NINO_REQUEST : SV_CONTROL_LIST (SEND_PORT_UNKNOWN_NINO_RANGE); signal SEND_PORT_UNKNOWN_NINO_ACCEPT : SV_CONTROL_LIST (SEND_PORT_UNKNOWN_NINO_RANGE); begin process variable OFF_DATA : OFF_PAYMENTS := (- 1,- 1,- 1,- 1,- 1,16,17,18,19,20); variable NINO : INTEGER; variable BENEFIT : INTEGER; variable MESS : OP; variable UNIFORM_STATE : SV_UNIFORM_TYPE := 6; variable PT : SV_TICKLIST (1 to 1); begin wait until OFFICE2; OFFICE2 <= TRUE , FALSE after 15 NS; NINO := WHO; if OFF_DATA(NINO) /= - 1 then assert FALSE report "Nino known, pay out from OFFICE2 local data" severity NOTE; HOW_MUCH <= OFF_DATA(NINO); OFF_DATA(NINO) := 0; else MESS(0) := 2; MESS(1) := NINO; -- ------------------------- serial activity call SENDIT PT(1) := SV_idle; loop -- ------------------------- parallel activity call SENDIT case PT(1) is when SV_idle => if NOT SENDIT_ACCEPT(1) then PT(1) := SV_requested; SENDIT_REQUEST(1) <= TRUE; SENDIT_E_IN(1) <= MESS; end if; when SV_requested => if SENDIT_ACCEPT(1) then PT(1) := SV_started; end if; when SV_started => if SENDIT_ACTIVE'event and SENDIT_ACTIVE /= SV_active then PT(1) := SV_finished; SENDIT_REQUEST(1) <= FALSE; MESS := SENDIT_E_out; else end if; when others => null; end case; -- --------------------- end parallel activity call if PT(1)=SV_finished then exit; end if; wait on SENDIT_ACTIVE,SENDIT_ACCEPT; end loop; wait for 0 nS; -- ------------------------- end serial activity call -- ---------------------------- unit serial receive -- RECEIVE RECEIVE_PORT.PAYMENT_AMOUNT_2 -- ---------------------------- loop wait until RECEIVE_PORT_PAYMENT_AMOUNT_2_ACTIVE = SV_active; wait until RECEIVE_PORT_PAYMENT_AMOUNT_2_ACTIVE /= SV_active; if (RECEIVE_PORT_PAYMENT_AMOUNT_2_ACTIVE = SV_inactive) then exit; end if; end loop; BENEFIT := RECEIVE_PORT_PAYMENT_AMOUNT_2_AMOUNT_out; wait for 0 nS; -- ---------------------------- end unit serial receive assert FALSE report "OFFICE 2 receives data from centre" severity NOTE; HOW_MUCH <= BENEFIT; end if; end process; SEND_ENQUIRY_ARBITER : process variable START : INTEGER; variable NUM : INTEGER; variable GOTIT : BOOLEAN; begin wait on SEND_ENQUIRY_REQUEST; start := SEND_ENQUIRY_REQUEST'low; loop SV_find_request(SEND_ENQUIRY_REQUEST,start,gotit,num); if gotit then SEND_ENQUIRY_VALID <= TRUE; SEND_ENQUIRY_ENQ_value <= SEND_ENQUIRY_ENQ_in(num); loop wait on SEND_ENQUIRY_STATUS ; if SEND_ENQUIRY_STATUS then SEND_ENQUIRY_ACCEPT(num) <= TRUE; exit; end if; end loop; loop wait on SEND_ENQUIRY_REQUEST ; if NOT SEND_ENQUIRY_REQUEST(num) then SEND_ENQUIRY_VALID <= FALSE; exit; end if; end loop; wait until NOT SEND_ENQUIRY_STATUS; SEND_ENQUIRY_ACCEPT(num) <= FALSE; else exit; end if; end loop; end process SEND_ENQUIRY_ARBITER; SEND_ENQUIRY_CORE : process variable UNIFORM_STATE : SV_UNIFORM_TYPE := 7; variable PT : SV_TICKLIST (1 to 1); variable SEND_ENQUIRY_ENQ_LOCAL : OP; begin wait until SEND_ENQUIRY_VALID; SEND_ENQUIRY_STATUS <= TRUE; SEND_ENQUIRY_ENQ_local := SEND_ENQUIRY_ENQ_value; wait for 0 nS; SEND_ENQUIRY_ACTIVE <= SV_active; assert FALSE report "Office 2 starts to send UNKNOWN_NINO" severity NOTE; while ACK = FALSE loop -- --------------------------- unit serial send -- SEND SEND_PORT.UNKNOWN_NINO -- --------------------------- if SEND_PORT_UNKNOWN_NINO_ACCEPT(0) then wait on SEND_PORT_UNKNOWN_NINO_ACCEPT until NOT SEND_PORT_UNKNOWN_NINO_ACCEPT(0); end if; SEND_PORT_UNKNOWN_NINO_ENQ_in(0) <= SEND_ENQUIRY_ENQ_local; SEND_PORT_UNKNOWN_NINO_REQUEST(0) <= TRUE; wait on SEND_PORT_UNKNOWN_NINO_ACCEPT until SEND_PORT_UNKNOWN_NINO_ACCEPT(0); wait until SEND_PORT_UNKNOWN_NINO_ACTIVE /= SV_active; SEND_PORT_UNKNOWN_NINO_REQUEST(0) <= FALSE; -- --------------------------- end unit serial send end loop ; SEND_ENQUIRY_ENQ_out <= SEND_ENQUIRY_ENQ_local; wait for 0 nS; wait for 0 nS; SEND_ENQUIRY_ACTIVE <= SV_inactive; wait until NOT SEND_ENQUIRY_VALID; SEND_ENQUIRY_STATUS <= FALSE; end process SEND_ENQUIRY_CORE; GET_ACK_ARBITER : process variable START : INTEGER; variable NUM : INTEGER; variable GOTIT : BOOLEAN; begin wait on GET_ACK_REQUEST; start := GET_ACK_REQUEST'low; loop SV_find_request(GET_ACK_REQUEST,start,gotit,num); if gotit then GET_ACK_VALID <= TRUE; GET_ACK_OFF_ID_value <= GET_ACK_OFF_ID_in(num); loop wait on GET_ACK_STATUS ; if GET_ACK_STATUS then GET_ACK_ACCEPT(num) <= TRUE; exit; end if; end loop; loop wait on GET_ACK_REQUEST ; if NOT GET_ACK_REQUEST(num) then GET_ACK_VALID <= FALSE; exit; end if; end loop; wait until NOT GET_ACK_STATUS; GET_ACK_ACCEPT(num) <= FALSE; else exit; end if; end loop; end process GET_ACK_ARBITER; GET_ACK_CORE : process variable UNIFORM_STATE : SV_UNIFORM_TYPE := 8; variable PT : SV_TICKLIST (1 to 1); variable GET_ACK_OFF_ID_LOCAL : INTEGER; begin wait until GET_ACK_VALID; GET_ACK_STATUS <= TRUE; GET_ACK_OFF_ID_local := GET_ACK_OFF_ID_value; wait for 0 nS; GET_ACK_ACTIVE <= SV_active; IDNO <= 0; ACK <= FALSE; while IDNO /= GET_ACK_OFF_ID_local loop -- ---------------------------- unit serial receive -- RECEIVE SEND_PORT.ACK_UNKNOWN_NINO -- ---------------------------- loop wait until SEND_PORT_ACK_UNKNOWN_NINO_ACTIVE = SV_active; wait until SEND_PORT_ACK_UNKNOWN_NINO_ACTIVE /= SV_active; if (SEND_PORT_ACK_UNKNOWN_NINO_ACTIVE = SV_inactive) then exit; end if; end loop; IDNO <= SEND_PORT_ACK_UNKNOWN_NINO_OFF_ID_out; wait for 0 nS; -- ---------------------------- end unit serial receive end loop ; assert FALSE report " ACK of UNKNOWN_NINO received at Office 2" severity NOTE; ACK <= TRUE, FALSE after 75 NS; GET_ACK_OFF_ID_out <= GET_ACK_OFF_ID_local; wait for 0 nS; wait for 0 nS; GET_ACK_ACTIVE <= SV_inactive; wait until NOT GET_ACK_VALID; GET_ACK_STATUS <= FALSE; end process GET_ACK_CORE; SENDIT_ARBITER : process variable START : INTEGER; variable NUM : INTEGER; variable GOTIT : BOOLEAN; begin wait on SENDIT_REQUEST; start := SENDIT_REQUEST'low; loop SV_find_request(SENDIT_REQUEST,start,gotit,num); if gotit then SENDIT_VALID <= TRUE; SENDIT_E_value <= SENDIT_E_in(num); loop wait on SENDIT_STATUS ; if SENDIT_STATUS then SENDIT_ACCEPT(num) <= TRUE; exit; end if; end loop; loop wait on SENDIT_REQUEST ; if NOT SENDIT_REQUEST(num) then SENDIT_VALID <= FALSE; exit; end if; end loop; wait until NOT SENDIT_STATUS; SENDIT_ACCEPT(num) <= FALSE; else exit; end if; end loop; end process SENDIT_ARBITER; SENDIT_CORE : process variable UNIFORM_STATE : SV_UNIFORM_TYPE := 9; variable PT : SV_TICKLIST (1 to 2); variable SENDIT_E_LOCAL : OP; begin wait until SENDIT_VALID; SENDIT_STATUS <= TRUE; SENDIT_E_local := SENDIT_E_value; wait for 0 nS; SENDIT_ACTIVE <= SV_active; -- ---------------------------- activity parallel SV_ticklist_reset(PT); loop -- ------------------------- parallel activity call SEND_ENQUIRY case PT(1) is when SV_idle => if NOT SEND_ENQUIRY_ACCEPT(1) then PT(1) := SV_requested; SEND_ENQUIRY_REQUEST(1) <= TRUE; SEND_ENQUIRY_ENQ_IN(1) <= SENDIT_E_local; end if; when SV_requested => if SEND_ENQUIRY_ACCEPT(1) then PT(1) := SV_started; end if; when SV_started => if SEND_ENQUIRY_ACTIVE'event and SEND_ENQUIRY_ACTIVE /= SV_active then PT(1) := SV_finished; SEND_ENQUIRY_REQUEST(1) <= FALSE; SENDIT_E_local := SEND_ENQUIRY_ENQ_out; else end if; when others => null; end case; -- --------------------- end parallel activity call -- ------------------------- parallel activity call GET_ACK case PT(2) is when SV_idle => if NOT GET_ACK_ACCEPT(1) then PT(2) := SV_requested; GET_ACK_REQUEST(1) <= TRUE; GET_ACK_OFF_ID_IN(1) <= SENDIT_E_local(0); end if; when SV_requested => if GET_ACK_ACCEPT(1) then PT(2) := SV_started; end if; when SV_started => if GET_ACK_ACTIVE'event and GET_ACK_ACTIVE /= SV_active then PT(2) := SV_finished; GET_ACK_REQUEST(1) <= FALSE; SENDIT_E_local(0) := GET_ACK_OFF_ID_out; else end if; when others => null; end case; -- --------------------- end parallel activity call if SV_ticklist_complete(PT,2) then exit; end if; wait on SEND_ENQUIRY_ACCEPT,SEND_ENQUIRY_ACTIVE, GET_ACK_ACCEPT,GET_ACK_ACTIVE; end loop; wait for 0 nS; -- ---------------------------- end activity parallel SENDIT_E_out <= SENDIT_E_local; wait for 0 nS; wait for 0 nS; SENDIT_ACTIVE <= SV_inactive; wait until NOT SENDIT_VALID; SENDIT_STATUS <= FALSE; end process SENDIT_CORE; SEND_PORT_UNKNOWN_NINO_ARBITER : process variable START : INTEGER; variable NUM : INTEGER; variable GOTIT : BOOLEAN; begin wait on SEND_PORT_UNKNOWN_NINO_REQUEST; start := SEND_PORT_UNKNOWN_NINO_REQUEST'low; loop SV_find_request(SEND_PORT_UNKNOWN_NINO_REQUEST,start,gotit,num); if gotit then SEND_PORT_UNKNOWN_NINO_REQUEST_X <= TRUE; SEND_PORT_UNKNOWN_NINO_ENQ_IN_X <= SEND_PORT_UNKNOWN_NINO_ENQ_IN(num); loop wait on SEND_PORT_UNKNOWN_NINO_ACCEPT_X; if SEND_PORT_UNKNOWN_NINO_ACCEPT_X then SEND_PORT_UNKNOWN_NINO_ACCEPT(num) <= TRUE; exit; end if; end loop; loop wait on SEND_PORT_UNKNOWN_NINO_REQUEST; if NOT SEND_PORT_UNKNOWN_NINO_REQUEST(num) then SEND_PORT_UNKNOWN_NINO_REQUEST_X <= FALSE; exit; end if; end loop; wait until NOT SEND_PORT_UNKNOWN_NINO_ACCEPT_X; SEND_PORT_UNKNOWN_NINO_ACCEPT(num) <= FALSE; else exit; end if; end loop; end process SEND_PORT_UNKNOWN_NINO_ARBITER; end ONE; library IEEE; use IEEE.STD_LOGIC_1164.ALL; library SV_LIB; use SV_LIB.SV_TYPES.ALL; use WORK.POCL_TYPES.ALL; use WORK.POCL_TYPES.ALL; entity ATESTPOC2 is end ATESTPOC2; architecture ONE of ATESTPOC2 is component POCL1 port ( UNKNOWN_NINO_REQUEST_X : IN SV_CONTROL; UNKNOWN_NINO_ACCEPT_X : OUT SV_CONTROL; UNKNOWN_NINO_ACTIVE_X : OUT SV_STATE; UNKNOWN_NINO_ENQ_IN_X : IN OP; UNKNOWN_NINO_ENQ_OUT_X : OUT OP; ACK_UNKNOWN_NINO_REQUEST_X : IN SV_CONTROL; ACK_UNKNOWN_NINO_ACCEPT_X : OUT SV_CONTROL; ACK_UNKNOWN_NINO_ACTIVE_X : OUT SV_STATE; ACK_UNKNOWN_NINO_OFF_ID_IN_X : IN INTEGER; ACK_UNKNOWN_NINO_OFF_ID_OUT_X : OUT INTEGER; PAYMENT_AMOUNT_1_REQUEST_X : IN SV_CONTROL; PAYMENT_AMOUNT_1_ACCEPT_X : OUT SV_CONTROL; PAYMENT_AMOUNT_1_ACTIVE_X : OUT SV_STATE; PAYMENT_AMOUNT_1_AMOUNT_IN_X : IN INTEGER; PAYMENT_AMOUNT_1_AMOUNT_OUT_X : OUT INTEGER; PAYMENT_AMOUNT_2_REQUEST_X : IN SV_CONTROL; PAYMENT_AMOUNT_2_ACCEPT_X : OUT SV_CONTROL; PAYMENT_AMOUNT_2_ACTIVE_X : OUT SV_STATE; PAYMENT_AMOUNT_2_AMOUNT_IN_X : IN INTEGER; PAYMENT_AMOUNT_2_AMOUNT_OUT_X : OUT INTEGER ); end component; component CENTRE port ( CEN1 : INOUT BOOLEAN := FALSE; IPORT_UNKNOWN_NINO_ACTIVE : IN SV_STATE; IPORT_UNKNOWN_NINO_ENQ_OUT : IN OP; IPORT_ACK_UNKNOWN_NINO_REQUEST_X : OUT SV_CONTROL; IPORT_ACK_UNKNOWN_NINO_ACCEPT_X : IN SV_CONTROL; IPORT_ACK_UNKNOWN_NINO_ACTIVE : IN SV_STATE; IPORT_ACK_UNKNOWN_NINO_OFF_ID_IN_X : OUT INTEGER; IPORT_PAYMENT_AMOUNT_1_REQUEST_X : OUT SV_CONTROL; IPORT_PAYMENT_AMOUNT_1_ACCEPT_X : IN SV_CONTROL; IPORT_PAYMENT_AMOUNT_1_ACTIVE : IN SV_STATE; IPORT_PAYMENT_AMOUNT_1_AMOUNT_IN_X : OUT INTEGER; IPORT_PAYMENT_AMOUNT_2_REQUEST_X : OUT SV_CONTROL; IPORT_PAYMENT_AMOUNT_2_ACCEPT_X : IN SV_CONTROL; IPORT_PAYMENT_AMOUNT_2_ACTIVE : IN SV_STATE; IPORT_PAYMENT_AMOUNT_2_AMOUNT_IN_X : OUT INTEGER ); end component; component OFFICE1 port ( OFFICE1 : INOUT BOOLEAN := FALSE; SEND_PORT_UNKNOWN_NINO_REQUEST_X : OUT SV_CONTROL; SEND_PORT_UNKNOWN_NINO_ACCEPT_X : IN SV_CONTROL; SEND_PORT_UNKNOWN_NINO_ACTIVE : IN SV_STATE; SEND_PORT_UNKNOWN_NINO_ENQ_IN_X : OUT OP; SEND_PORT_ACK_UNKNOWN_NINO_ACTIVE : IN SV_STATE; SEND_PORT_ACK_UNKNOWN_NINO_OFF_ID_OUT : IN INTEGER; RECEIVE_PORT_PAYMENT_AMOUNT_1_ACTIVE : IN SV_STATE; RECEIVE_PORT_PAYMENT_AMOUNT_1_AMOUNT_OUT : IN INTEGER ); end component; component OFFICE2 port ( OFFICE2 : INOUT BOOLEAN := FALSE; SEND_PORT_UNKNOWN_NINO_REQUEST_X : OUT SV_CONTROL; SEND_PORT_UNKNOWN_NINO_ACCEPT_X : IN SV_CONTROL; SEND_PORT_UNKNOWN_NINO_ACTIVE : IN SV_STATE; SEND_PORT_UNKNOWN_NINO_ENQ_IN_X : OUT OP; SEND_PORT_ACK_UNKNOWN_NINO_ACTIVE : IN SV_STATE; SEND_PORT_ACK_UNKNOWN_NINO_OFF_ID_OUT : IN INTEGER; RECEIVE_PORT_PAYMENT_AMOUNT_2_ACTIVE : IN SV_STATE; RECEIVE_PORT_PAYMENT_AMOUNT_2_AMOUNT_OUT : IN INTEGER ); end component; signal NULLSIG : BIT; subtype I1_UNKNOWN_NINO_RANGE is INTEGER range 0 to 5; type I1_UNKNOWN_NINO_ENQ_TYPE is array (I1_UNKNOWN_NINO_RANGE) of OP; signal I1_UNKNOWN_NINO_ENQ_IN : I1_UNKNOWN_NINO_ENQ_TYPE; signal I1_UNKNOWN_NINO_ENQ_OUT : OP; signal I1_UNKNOWN_NINO_ENQ_VALUE : OP; signal I1_UNKNOWN_NINO_REQUEST : SV_CONTROL_LIST (I1_UNKNOWN_NINO_RANGE); signal I1_UNKNOWN_NINO_ACCEPT : SV_CONTROL_LIST (I1_UNKNOWN_NINO_RANGE); signal I1_UNKNOWN_NINO_VALID : SV_CONTROL := false; signal I1_UNKNOWN_NINO_STATUS : SV_CONTROL := false; signal I1_UNKNOWN_NINO_ACTIVE : SV_STATE; subtype I1_ACK_UNKNOWN_NINO_RANGE is INTEGER range 0 to 5; type I1_ACK_UNKNOWN_NINO_OFF_ID_TYPE is array (I1_ACK_UNKNOWN_NINO_RANGE) of INTEGER; signal I1_ACK_UNKNOWN_NINO_OFF_ID_IN : I1_ACK_UNKNOWN_NINO_OFF_ID_TYPE; signal I1_ACK_UNKNOWN_NINO_OFF_ID_OUT : INTEGER; signal I1_ACK_UNKNOWN_NINO_OFF_ID_VALUE : INTEGER; signal I1_ACK_UNKNOWN_NINO_REQUEST : SV_CONTROL_LIST (I1_ACK_UNKNOWN_NINO_RANGE); signal I1_ACK_UNKNOWN_NINO_ACCEPT : SV_CONTROL_LIST (I1_ACK_UNKNOWN_NINO_RANGE); signal I1_ACK_UNKNOWN_NINO_VALID : SV_CONTROL := false; signal I1_ACK_UNKNOWN_NINO_STATUS : SV_CONTROL := false; signal I1_ACK_UNKNOWN_NINO_ACTIVE : SV_STATE; subtype I1_PAYMENT_AMOUNT_1_RANGE is INTEGER range 0 to 5; type I1_PAYMENT_AMOUNT_1_AMOUNT_TYPE is array (I1_PAYMENT_AMOUNT_1_RANGE) of INTEGER; signal I1_PAYMENT_AMOUNT_1_AMOUNT_IN : I1_PAYMENT_AMOUNT_1_AMOUNT_TYPE; signal I1_PAYMENT_AMOUNT_1_AMOUNT_OUT : INTEGER; signal I1_PAYMENT_AMOUNT_1_AMOUNT_VALUE : INTEGER; signal I1_PAYMENT_AMOUNT_1_REQUEST : SV_CONTROL_LIST (I1_PAYMENT_AMOUNT_1_RANGE); signal I1_PAYMENT_AMOUNT_1_ACCEPT : SV_CONTROL_LIST (I1_PAYMENT_AMOUNT_1_RANGE); signal I1_PAYMENT_AMOUNT_1_VALID : SV_CONTROL := false; signal I1_PAYMENT_AMOUNT_1_STATUS : SV_CONTROL := false; signal I1_PAYMENT_AMOUNT_1_ACTIVE : SV_STATE; subtype I1_PAYMENT_AMOUNT_2_RANGE is INTEGER range 0 to 5; type I1_PAYMENT_AMOUNT_2_AMOUNT_TYPE is array (I1_PAYMENT_AMOUNT_2_RANGE) of INTEGER; signal I1_PAYMENT_AMOUNT_2_AMOUNT_IN : I1_PAYMENT_AMOUNT_2_AMOUNT_TYPE; signal I1_PAYMENT_AMOUNT_2_AMOUNT_OUT : INTEGER; signal I1_PAYMENT_AMOUNT_2_AMOUNT_VALUE : INTEGER; signal I1_PAYMENT_AMOUNT_2_REQUEST : SV_CONTROL_LIST (I1_PAYMENT_AMOUNT_2_RANGE); signal I1_PAYMENT_AMOUNT_2_ACCEPT : SV_CONTROL_LIST (I1_PAYMENT_AMOUNT_2_RANGE); signal I1_PAYMENT_AMOUNT_2_VALID : SV_CONTROL := false; signal I1_PAYMENT_AMOUNT_2_STATUS : SV_CONTROL := false; signal I1_PAYMENT_AMOUNT_2_ACTIVE : SV_STATE; begin FIRST_CENTRE : CENTRE port map ( IPORT_UNKNOWN_NINO_ACTIVE => I1_UNKNOWN_NINO_ACTIVE, IPORT_UNKNOWN_NINO_ENQ_OUT => I1_UNKNOWN_NINO_ENQ_OUT, IPORT_ACK_UNKNOWN_NINO_REQUEST_X => I1_ACK_UNKNOWN_NINO_REQUEST(0), IPORT_ACK_UNKNOWN_NINO_ACCEPT_X => I1_ACK_UNKNOWN_NINO_ACCEPT(0), IPORT_ACK_UNKNOWN_NINO_ACTIVE => I1_ACK_UNKNOWN_NINO_ACTIVE, IPORT_ACK_UNKNOWN_NINO_OFF_ID_IN_X => I1_ACK_UNKNOWN_NINO_OFF_ID_IN(0), IPORT_PAYMENT_AMOUNT_1_REQUEST_X => I1_PAYMENT_AMOUNT_1_REQUEST(0), IPORT_PAYMENT_AMOUNT_1_ACCEPT_X => I1_PAYMENT_AMOUNT_1_ACCEPT(0), IPORT_PAYMENT_AMOUNT_1_ACTIVE => I1_PAYMENT_AMOUNT_1_ACTIVE, IPORT_PAYMENT_AMOUNT_1_AMOUNT_IN_X => I1_PAYMENT_AMOUNT_1_AMOUNT_IN(0), IPORT_PAYMENT_AMOUNT_2_REQUEST_X => I1_PAYMENT_AMOUNT_2_REQUEST(0), IPORT_PAYMENT_AMOUNT_2_ACCEPT_X => I1_PAYMENT_AMOUNT_2_ACCEPT(0), IPORT_PAYMENT_AMOUNT_2_ACTIVE => I1_PAYMENT_AMOUNT_2_ACTIVE, IPORT_PAYMENT_AMOUNT_2_AMOUNT_IN_X => I1_PAYMENT_AMOUNT_2_AMOUNT_IN(0) ); FIRST_OFFICE : OFFICE1 port map ( SEND_PORT_UNKNOWN_NINO_REQUEST_X => I1_UNKNOWN_NINO_REQUEST(1), SEND_PORT_UNKNOWN_NINO_ACCEPT_X => I1_UNKNOWN_NINO_ACCEPT(1), SEND_PORT_UNKNOWN_NINO_ACTIVE => I1_UNKNOWN_NINO_ACTIVE, SEND_PORT_UNKNOWN_NINO_ENQ_IN_X => I1_UNKNOWN_NINO_ENQ_IN(1), SEND_PORT_ACK_UNKNOWN_NINO_ACTIVE => I1_ACK_UNKNOWN_NINO_ACTIVE, SEND_PORT_ACK_UNKNOWN_NINO_OFF_ID_OUT => I1_ACK_UNKNOWN_NINO_OFF_ID_OUT, RECEIVE_PORT_PAYMENT_AMOUNT_1_ACTIVE => I1_PAYMENT_AMOUNT_1_ACTIVE, RECEIVE_PORT_PAYMENT_AMOUNT_1_AMOUNT_OUT => I1_PAYMENT_AMOUNT_1_AMOUNT_OUT ); SECOND_OFFICE : OFFICE2 port map ( SEND_PORT_UNKNOWN_NINO_REQUEST_X => I1_UNKNOWN_NINO_REQUEST(3), SEND_PORT_UNKNOWN_NINO_ACCEPT_X => I1_UNKNOWN_NINO_ACCEPT(3), SEND_PORT_UNKNOWN_NINO_ACTIVE => I1_UNKNOWN_NINO_ACTIVE, SEND_PORT_UNKNOWN_NINO_ENQ_IN_X => I1_UNKNOWN_NINO_ENQ_IN(3), SEND_PORT_ACK_UNKNOWN_NINO_ACTIVE => I1_ACK_UNKNOWN_NINO_ACTIVE, SEND_PORT_ACK_UNKNOWN_NINO_OFF_ID_OUT => I1_ACK_UNKNOWN_NINO_OFF_ID_OUT, RECEIVE_PORT_PAYMENT_AMOUNT_2_ACTIVE => I1_PAYMENT_AMOUNT_2_ACTIVE, RECEIVE_PORT_PAYMENT_AMOUNT_2_AMOUNT_OUT => I1_PAYMENT_AMOUNT_2_AMOUNT_OUT ); I1 : POCL1 port map ( UNKNOWN_NINO_REQUEST_X => I1_UNKNOWN_NINO_VALID, UNKNOWN_NINO_ACCEPT_X => I1_UNKNOWN_NINO_STATUS, UNKNOWN_NINO_ACTIVE_X => I1_UNKNOWN_NINO_ACTIVE, UNKNOWN_NINO_ENQ_IN_X => I1_UNKNOWN_NINO_ENQ_VALUE, UNKNOWN_NINO_ENQ_OUT_X => I1_UNKNOWN_NINO_ENQ_OUT, ACK_UNKNOWN_NINO_REQUEST_X => I1_ACK_UNKNOWN_NINO_VALID, ACK_UNKNOWN_NINO_ACCEPT_X => I1_ACK_UNKNOWN_NINO_STATUS, ACK_UNKNOWN_NINO_ACTIVE_X => I1_ACK_UNKNOWN_NINO_ACTIVE, ACK_UNKNOWN_NINO_OFF_ID_IN_X => I1_ACK_UNKNOWN_NINO_OFF_ID_VALUE, ACK_UNKNOWN_NINO_OFF_ID_OUT_X => I1_ACK_UNKNOWN_NINO_OFF_ID_OUT, PAYMENT_AMOUNT_1_REQUEST_X => I1_PAYMENT_AMOUNT_1_VALID, PAYMENT_AMOUNT_1_ACCEPT_X => I1_PAYMENT_AMOUNT_1_STATUS, PAYMENT_AMOUNT_1_ACTIVE_X => I1_PAYMENT_AMOUNT_1_ACTIVE, PAYMENT_AMOUNT_1_AMOUNT_IN_X => I1_PAYMENT_AMOUNT_1_AMOUNT_VALUE, PAYMENT_AMOUNT_1_AMOUNT_OUT_X => I1_PAYMENT_AMOUNT_1_AMOUNT_OUT, PAYMENT_AMOUNT_2_REQUEST_X => I1_PAYMENT_AMOUNT_2_VALID, PAYMENT_AMOUNT_2_ACCEPT_X => I1_PAYMENT_AMOUNT_2_STATUS, PAYMENT_AMOUNT_2_ACTIVE_X => I1_PAYMENT_AMOUNT_2_ACTIVE, PAYMENT_AMOUNT_2_AMOUNT_IN_X => I1_PAYMENT_AMOUNT_2_AMOUNT_VALUE, PAYMENT_AMOUNT_2_AMOUNT_OUT_X => I1_PAYMENT_AMOUNT_2_AMOUNT_OUT ); I1_UNKNOWN_NINO_ARBITER : process variable START : INTEGER; variable NUM : INTEGER; variable GOTIT : BOOLEAN; begin wait on I1_UNKNOWN_NINO_REQUEST; start := I1_UNKNOWN_NINO_REQUEST'low; loop SV_find_request(I1_UNKNOWN_NINO_REQUEST,start,gotit,num); if gotit then I1_UNKNOWN_NINO_VALID <= TRUE; I1_UNKNOWN_NINO_ENQ_value <= I1_UNKNOWN_NINO_ENQ_in(num); loop wait on I1_UNKNOWN_NINO_STATUS ,I1_UNKNOWN_NINO_ENQ_IN ; if I1_UNKNOWN_NINO_STATUS then I1_UNKNOWN_NINO_ACCEPT(num) <= TRUE; exit; end if; end loop; loop wait on I1_UNKNOWN_NINO_REQUEST ,I1_UNKNOWN_NINO_ENQ_IN ; if NOT I1_UNKNOWN_NINO_REQUEST(num) then I1_UNKNOWN_NINO_VALID <= FALSE; exit; end if; end loop; wait until NOT I1_UNKNOWN_NINO_STATUS; I1_UNKNOWN_NINO_ACCEPT(num) <= FALSE; else exit; end if; end loop; end process I1_UNKNOWN_NINO_ARBITER; I1_ACK_UNKNOWN_NINO_ARBITER : process variable START : INTEGER; variable NUM : INTEGER; variable GOTIT : BOOLEAN; begin wait on I1_ACK_UNKNOWN_NINO_REQUEST; start := I1_ACK_UNKNOWN_NINO_REQUEST'low; loop SV_find_request(I1_ACK_UNKNOWN_NINO_REQUEST,start,gotit,num); if gotit then I1_ACK_UNKNOWN_NINO_VALID <= TRUE; I1_ACK_UNKNOWN_NINO_OFF_ID_value <= I1_ACK_UNKNOWN_NINO_OFF_ID_in(num); loop wait on I1_ACK_UNKNOWN_NINO_STATUS ,I1_ACK_UNKNOWN_NINO_OFF_ID_IN ; if I1_ACK_UNKNOWN_NINO_STATUS then I1_ACK_UNKNOWN_NINO_ACCEPT(num) <= TRUE; exit; end if; end loop; loop wait on I1_ACK_UNKNOWN_NINO_REQUEST ,I1_ACK_UNKNOWN_NINO_OFF_ID_IN ; if NOT I1_ACK_UNKNOWN_NINO_REQUEST(num) then I1_ACK_UNKNOWN_NINO_VALID <= FALSE; exit; end if; end loop; wait until NOT I1_ACK_UNKNOWN_NINO_STATUS; I1_ACK_UNKNOWN_NINO_ACCEPT(num) <= FALSE; else exit; end if; end loop; end process I1_ACK_UNKNOWN_NINO_ARBITER; I1_PAYMENT_AMOUNT_1_ARBITER : process variable START : INTEGER; variable NUM : INTEGER; variable GOTIT : BOOLEAN; begin wait on I1_PAYMENT_AMOUNT_1_REQUEST; start := I1_PAYMENT_AMOUNT_1_REQUEST'low; loop SV_find_request(I1_PAYMENT_AMOUNT_1_REQUEST,start,gotit,num); if gotit then I1_PAYMENT_AMOUNT_1_VALID <= TRUE; I1_PAYMENT_AMOUNT_1_AMOUNT_value <= I1_PAYMENT_AMOUNT_1_AMOUNT_in(num); loop wait on I1_PAYMENT_AMOUNT_1_STATUS ,I1_PAYMENT_AMOUNT_1_AMOUNT_IN ; if I1_PAYMENT_AMOUNT_1_STATUS then I1_PAYMENT_AMOUNT_1_ACCEPT(num) <= TRUE; exit; end if; end loop; loop wait on I1_PAYMENT_AMOUNT_1_REQUEST ,I1_PAYMENT_AMOUNT_1_AMOUNT_IN ; if NOT I1_PAYMENT_AMOUNT_1_REQUEST(num) then I1_PAYMENT_AMOUNT_1_VALID <= FALSE; exit; end if; end loop; wait until NOT I1_PAYMENT_AMOUNT_1_STATUS; I1_PAYMENT_AMOUNT_1_ACCEPT(num) <= FALSE; else exit; end if; end loop; end process I1_PAYMENT_AMOUNT_1_ARBITER; I1_PAYMENT_AMOUNT_2_ARBITER : process variable START : INTEGER; variable NUM : INTEGER; variable GOTIT : BOOLEAN; begin wait on I1_PAYMENT_AMOUNT_2_REQUEST; start := I1_PAYMENT_AMOUNT_2_REQUEST'low; loop SV_find_request(I1_PAYMENT_AMOUNT_2_REQUEST,start,gotit,num); if gotit then I1_PAYMENT_AMOUNT_2_VALID <= TRUE; I1_PAYMENT_AMOUNT_2_AMOUNT_value <= I1_PAYMENT_AMOUNT_2_AMOUNT_in(num); loop wait on I1_PAYMENT_AMOUNT_2_STATUS ,I1_PAYMENT_AMOUNT_2_AMOUNT_IN ; if I1_PAYMENT_AMOUNT_2_STATUS then I1_PAYMENT_AMOUNT_2_ACCEPT(num) <= TRUE; exit; end if; end loop; loop wait on I1_PAYMENT_AMOUNT_2_REQUEST ,I1_PAYMENT_AMOUNT_2_AMOUNT_IN ; if NOT I1_PAYMENT_AMOUNT_2_REQUEST(num) then I1_PAYMENT_AMOUNT_2_VALID <= FALSE; exit; end if; end loop; wait until NOT I1_PAYMENT_AMOUNT_2_STATUS; I1_PAYMENT_AMOUNT_2_ACCEPT(num) <= FALSE; else exit; end if; end loop; end process I1_PAYMENT_AMOUNT_2_ARBITER; end ONE;