##// END OF EJS Templates
Renamed the SPW_Light test directory from Validation_SPW_light to Test_SPW_Light....
Renamed the SPW_Light test directory from Validation_SPW_light to Test_SPW_Light. Added Test ADC RHF1401

File last commit:

r302:6b992ec40bf9 WaveFormPicker-0-0-10 (MINI-LFR) JC
r687:88431f3070cd Simu-LFR-FM
Show More
CY7C1061DV33.vhd
664 lines | 20.6 KiB | text/x-vhdl | VhdlLexer
--************************************************************************
--** MODEL : async_1Mx16.vhd **
--** COMPANY : Cypress Semiconductor **
--** REVISION: 1.0 Created new base model **
--************************************************************************
-------------------------------------------------------------------------------JC\/
--Library ieee,work;
LIBRARY ieee;
-------------------------------------------------------------------------------JC/\
USE IEEE.Std_Logic_1164.ALL;
USE IEEE.Std_Logic_unsigned.ALL;
-------------------------------------------------------------------------------JC\/
--use work.package_timing.all;
--use work.package_utility.all;
LIBRARY lpp;
USE lpp.package_timing.ALL;
USE lpp.package_utility.ALL;
-------------------------------------------------------------------------------JC/\
------------------------
-- Entity Description
------------------------
ENTITY CY7C1061DV33 IS
GENERIC
(ADDR_BITS : INTEGER := 20;
DATA_BITS : INTEGER := 16;
depth : INTEGER := 1048576;
MEM_ARRAY_DEBUG : INTEGER := 32;
TimingInfo : BOOLEAN := true;
TimingChecks : STD_LOGIC := '1'
);
PORT (
CE1_b : IN STD_LOGIC; -- Chip Enable CE1#
CE2 : IN STD_LOGIC; -- Chip Enable CE2
WE_b : IN STD_LOGIC; -- Write Enable WE#
OE_b : IN STD_LOGIC; -- Output Enable OE#
BHE_b : IN STD_LOGIC; -- Byte Enable High BHE#
BLE_b : IN STD_LOGIC; -- Byte Enable Low BLE#
A : IN STD_LOGIC_VECTOR(addr_bits-1 DOWNTO 0); -- Address Inputs A
DQ : INOUT STD_LOGIC_VECTOR(DATA_BITS-1 DOWNTO 0) := (OTHERS => 'Z')-- Read/Write Data IO;
);
END CY7C1061DV33;
-----------------------------
-- End Entity Description
-----------------------------
-----------------------------
-- Architecture Description
-----------------------------
ARCHITECTURE behave_arch OF CY7C1061DV33 IS
TYPE mem_array_type IS ARRAY (depth-1 DOWNTO 0) OF STD_LOGIC_VECTOR(DATA_BITS-1 DOWNTO 0);
SIGNAL write_enable : STD_LOGIC;
SIGNAL read_enable : STD_LOGIC;
SIGNAL byte_enable : STD_LOGIC;
SIGNAL CE_b : STD_LOGIC;
SIGNAL data_skew : STD_LOGIC_VECTOR(DATA_BITS-1 DOWNTO 0);
SIGNAL address_internal, address_skew : STD_LOGIC_VECTOR(addr_bits-1 DOWNTO 0);
CONSTANT tSD_dataskew : TIME := tSD - 1 ns;
CONSTANT tskew : TIME := 1 ns;
-------------------------------------------------------------------------------JC\/
TYPE mem_array_type_t IS ARRAY (MEM_ARRAY_DEBUG-1 DOWNTO 0) OF STD_LOGIC_VECTOR(DATA_BITS-1 DOWNTO 0);
SIGNAL mem_array_0 : mem_array_type_t;
SIGNAL mem_array_1 : mem_array_type_t;
SIGNAL mem_array_2 : mem_array_type_t;
SIGNAL mem_array_3 : mem_array_type_t;
-------------------------------------------------------------------------------JC/\
BEGIN
CE_b <= CE1_b OR NOT(CE2);
byte_enable <= NOT(BHE_b AND BLE_b);
write_enable <= NOT(CE1_b) AND CE2 AND NOT(WE_b) AND NOT(BHE_b AND BLE_b);
read_enable <= NOT(CE1_b) AND CE2 AND (WE_b) AND NOT(OE_b) AND NOT(BHE_b AND BLE_b);
data_skew <= DQ AFTER 1 ns; -- changed on feb 15
address_skew <= A AFTER 1 ns;
PROCESS (OE_b)
BEGIN
IF (OE_b'EVENT AND OE_b = '1' AND write_enable /= '1') THEN
DQ <= (OTHERS => 'Z') after tHZOE;
END IF;
END PROCESS;
PROCESS (CE_b)
BEGIN
IF (CE_b'EVENT AND CE_b = '1') THEN
DQ <= (OTHERS => 'Z') after tHZCE;
END IF;
END PROCESS;
PROCESS (write_enable'DELAYED(tHA))
BEGIN
IF (write_enable'DELAYED(tHA) = '0' AND TimingInfo) THEN
ASSERT (A'LAST_EVENT = 0 ns) OR (A'LAST_EVENT > tHA)
REPORT "Address hold time tHA violated";
END IF;
END PROCESS;
PROCESS (write_enable'DELAYED(tHD))
BEGIN
IF (write_enable'DELAYED(tHD) = '0' AND TimingInfo) THEN
ASSERT (DQ'LAST_EVENT > tHD) OR (DQ'LAST_EVENT = 0 ns)
REPORT "Data hold time tHD violated";
END IF;
END PROCESS;
-- main process
PROCESS
VARIABLE mem_array : mem_array_type;
--- Variables for timing checks
VARIABLE tPWE_chk : TIME := -10 ns;
VARIABLE tAW_chk : TIME := -10 ns;
VARIABLE tSD_chk : TIME := -10 ns;
VARIABLE tRC_chk : TIME := 0 ns;
VARIABLE tBAW_chk : TIME := 0 ns;
VARIABLE tBBW_chk : TIME := 0 ns;
VARIABLE tBCW_chk : TIME := 0 ns;
VARIABLE tBDW_chk : TIME := 0 ns;
VARIABLE tSA_chk : TIME := 0 ns;
VARIABLE tSA_skew : TIME := 0 ns;
VARIABLE tAint_chk : TIME := -10 ns;
VARIABLE write_flag : BOOLEAN := true;
VARIABLE accesstime : TIME := 0 ns;
BEGIN
IF (address_skew'EVENT) THEN
tSA_skew := NOW;
END IF;
-- start of write
IF (write_enable = '1' AND write_enable'EVENT) THEN
DQ(DATA_BITS-1 DOWNTO 0) <= (OTHERS => 'Z') after tHZWE;
IF (A'LAST_EVENT >= tSA) THEN
address_internal <= A;
tPWE_chk := NOW;
tAW_chk := A'LAST_EVENT;
tAint_chk := NOW;
write_flag := true;
ELSE
IF (TimingInfo) THEN
ASSERT false
REPORT "Address setup violated";
END IF;
write_flag := false;
END IF;
-- end of write (with CE high or WE high)
ELSIF (write_enable = '0' AND write_enable'EVENT) THEN
--- check for pulse width
IF (NOW - tPWE_chk >= tPWE OR NOW - tPWE_chk <= 0.1 ns OR NOW = 0 ns) THEN
--- pulse width OK, do nothing
ELSE
IF (TimingInfo) THEN
ASSERT false
REPORT "Pulse Width violation";
END IF;
write_flag := false;
END IF;
IF (NOW > 0 ns) THEN
IF (tSA_skew - tAint_chk > tskew) THEN
ASSERT false
REPORT "Negative address setup";
write_flag := false;
END IF;
END IF;
--- check for address setup with write end, i.e., tAW
IF (NOW - tAW_chk >= tAW OR NOW = 0 ns) THEN
--- tAW OK, do nothing
ELSE
IF (TimingInfo) THEN
ASSERT false
REPORT "Address setup tAW violation";
END IF;
write_flag := false;
END IF;
--- check for data setup with write end, i.e., tSD
IF (NOW - tSD_chk >= tSD_dataskew OR NOW - tSD_chk <= 0.1 ns OR NOW = 0 ns) THEN
--- tSD OK, do nothing
ELSE
IF (TimingInfo) THEN
ASSERT false
REPORT "Data setup tSD violation";
END IF;
write_flag := false;
END IF;
-- perform write operation if no violations
IF (write_flag = true) THEN
IF (BLE_b = '1' AND BLE_b'LAST_EVENT = write_enable'LAST_EVENT AND NOW /= 0 ns) THEN
mem_array(conv_integer1(address_internal))(7 DOWNTO 0) := data_skew(7 DOWNTO 0);
END IF;
IF (BHE_b = '1' AND BHE_b'LAST_EVENT = write_enable'LAST_EVENT AND NOW /= 0 ns) THEN
mem_array(conv_integer1(address_internal))(15 DOWNTO 8) := data_skew(15 DOWNTO 8);
END IF;
IF (BLE_b = '0' AND NOW - tBAW_chk >= tBW) THEN
mem_array(conv_integer1(address_internal))(7 DOWNTO 0) := data_skew(7 DOWNTO 0);
ELSIF (NOW - tBAW_chk < tBW AND NOW - tBAW_chk > 0.1 ns AND NOW > 0 ns) THEN
ASSERT false REPORT "Insufficient pulse width for lower byte to be written";
END IF;
IF (BHE_b = '0' AND NOW - tBBW_chk >= tBW) THEN
mem_array(conv_integer1(address_internal))(15 DOWNTO 8) := data_skew(15 DOWNTO 8);
ELSIF (NOW - tBBW_chk < tBW AND NOW - tBBW_chk > 0.1 ns AND NOW > 0 ns) THEN
ASSERT false REPORT "Insufficient pulse width for higher byte to be written";
END IF;
-------------------------------------------------------------------------------JC\/
all_mem_array_obs: FOR I IN 0 TO MEM_ARRAY_DEBUG-1 LOOP
IF I + ((2**15) *0) < depth THEN mem_array_0(I) <= mem_array(I+((2**15) *0)); END IF;
IF I + ((2**15) *1) < depth THEN mem_array_1(I) <= mem_array(I+((2**15) *1)); END IF;
IF I + ((2**15) *2) < depth THEN mem_array_2(I) <= mem_array(I+((2**15) *2)); END IF;
IF I + ((2**15) *3) < depth THEN mem_array_3(I) <= mem_array(I+((2**15) *3)); END IF;
END LOOP all_mem_array_obs;
-------------------------------------------------------------------------------JC/\
END IF;
-- end of write (with BLE high)
ELSIF (BLE_b'EVENT AND NOT(BHE_b'EVENT) AND write_enable = '1') THEN
IF (BLE_b = '0') THEN
--- Reset timing variables
tAW_chk := A'LAST_EVENT;
tBAW_chk := NOW;
write_flag := true;
ELSIF (BLE_b = '1') THEN
--- check for pulse width
IF (NOW - tPWE_chk >= tPWE) THEN
--- tPWE OK, do nothing
ELSE
IF (TimingInfo) THEN
ASSERT false
REPORT "Pulse Width violation";
END IF;
write_flag := false;
END IF;
--- check for address setup with write end, i.e., tAW
IF (NOW - tAW_chk >= tAW) THEN
--- tAW OK, do nothing
ELSE
IF (TimingInfo) THEN
ASSERT false
REPORT "Address setup tAW violation for Lower Byte Write";
END IF;
write_flag := false;
END IF;
--- check for byte write setup with write end, i.e., tBW
IF (NOW - tBAW_chk >= tBW) THEN
--- tBW OK, do nothing
ELSE
IF (TimingInfo) THEN
ASSERT false
REPORT "Lower Byte setup tBW violation";
END IF;
write_flag := false;
END IF;
--- check for data setup with write end, i.e., tSD
IF (NOW - tSD_chk >= tSD_dataskew OR NOW - tSD_chk <= 0.1 ns OR NOW = 0 ns) THEN
--- tSD OK, do nothing
ELSE
IF (TimingInfo) THEN
ASSERT false
REPORT "Data setup tSD violation for Lower Byte Write";
END IF;
write_flag := false;
END IF;
--- perform WRITE operation if no violations
IF (write_flag = true) THEN
mem_array(conv_integer1(address_internal))(7 DOWNTO 0) := data_skew(7 DOWNTO 0);
IF (BHE_b = '0') THEN
mem_array(conv_integer1(address_internal))(15 DOWNTO 8) := data_skew(15 DOWNTO 8);
END IF;
END IF;
--- Reset timing variables
tAW_chk := A'LAST_EVENT;
tBAW_chk := NOW;
write_flag := true;
END IF;
-- end of write (with BHE high)
ELSIF (BHE_b'EVENT AND NOT(BLE_b'EVENT) AND write_enable = '1') THEN
IF (BHE_b = '0') THEN
--- Reset timing variables
tAW_chk := A'LAST_EVENT;
tBBW_chk := NOW;
write_flag := true;
ELSIF (BHE_b = '1') THEN
--- check for pulse width
IF (NOW - tPWE_chk >= tPWE) THEN
--- tPWE OK, do nothing
ELSE
IF (TimingInfo) THEN
ASSERT false
REPORT "Pulse Width violation";
END IF;
write_flag := false;
END IF;
--- check for address setup with write end, i.e., tAW
IF (NOW - tAW_chk >= tAW) THEN
--- tAW OK, do nothing
ELSE
IF (TimingInfo) THEN
ASSERT false
REPORT "Address setup tAW violation for Upper Byte Write";
END IF;
write_flag := false;
END IF;
--- check for byte setup with write end, i.e., tBW
IF (NOW - tBBW_chk >= tBW) THEN
--- tBW OK, do nothing
ELSE
IF (TimingInfo) THEN
ASSERT false
REPORT "Upper Byte setup tBW violation";
END IF;
write_flag := false;
END IF;
--- check for data setup with write end, i.e., tSD
IF (NOW - tSD_chk >= tSD_dataskew OR NOW - tSD_chk <= 0.1 ns OR NOW = 0 ns) THEN
--- tSD OK, do nothing
ELSE
IF (TimingInfo) THEN
ASSERT false
REPORT "Data setup tSD violation for Upper Byte Write";
END IF;
write_flag := false;
END IF;
--- perform WRITE operation if no violations
IF (write_flag = true) THEN
mem_array(conv_integer1(address_internal))(15 DOWNTO 8) := data_skew(15 DOWNTO 8);
IF (BLE_b = '0') THEN
mem_array(conv_integer1(address_internal))(7 DOWNTO 0) := data_skew(7 DOWNTO 0);
END IF;
END IF;
--- Reset timing variables
tAW_chk := A'LAST_EVENT;
tBBW_chk := NOW;
write_flag := true;
END IF;
END IF;
--- END OF WRITE
IF (data_skew'EVENT AND read_enable /= '1') THEN
tSD_chk := NOW;
END IF;
--- START of READ
--- Tri-state the data bus if CE or OE disabled
IF (read_enable = '0' AND read_enable'EVENT) THEN
IF (OE_b'LAST_EVENT >= CE_b'LAST_EVENT) THEN
DQ <= (OTHERS => 'Z') after tHZCE;
ELSIF (CE_b'LAST_EVENT > OE_b'LAST_EVENT) THEN
DQ <= (OTHERS => 'Z') after tHZOE;
END IF;
END IF;
--- Address-controlled READ operation
IF (A'EVENT) THEN
IF (A'LAST_EVENT = CE_b'LAST_EVENT AND CE_b = '1') THEN
DQ <= (OTHERS => 'Z') after tHZCE;
END IF;
IF (NOW - tRC_chk >= tRC OR NOW - tRC_chk <= 0.1 ns OR tRC_chk = 0 ns) THEN
--- tRC OK, do nothing
ELSE
IF (TimingInfo) THEN
ASSERT false
REPORT "Read Cycle time tRC violation";
END IF;
END IF;
IF (read_enable = '1') THEN
IF (BLE_b = '0') THEN
DQ (7 DOWNTO 0) <= mem_array (conv_integer1(A))(7 DOWNTO 0) AFTER tAA;
END IF;
IF (BHE_b = '0') THEN
DQ (15 DOWNTO 8) <= mem_array (conv_integer1(A))(15 DOWNTO 8) AFTER tAA;
END IF;
tRC_chk := NOW;
END IF;
IF (write_enable = '1') THEN
--- do nothing
END IF;
END IF;
IF (read_enable = '0' AND read_enable'EVENT) THEN
DQ <= (OTHERS => 'Z') after tHZCE;
IF (NOW - tRC_chk >= tRC OR tRC_chk = 0 ns OR A'LAST_EVENT = read_enable'LAST_EVENT) THEN
--- tRC_chk needs to be reset when read ends
tRC_CHK := 0 ns;
ELSE
IF (TimingInfo) THEN
ASSERT false
REPORT "Read Cycle time tRC violation";
END IF;
tRC_CHK := 0 ns;
END IF;
END IF;
--- READ operation triggered by CE/OE/BHE/BLE
IF (read_enable = '1' AND read_enable'EVENT) THEN
tRC_chk := NOW;
--- CE triggered READ
IF (CE_b'LAST_EVENT = read_enable'LAST_EVENT) THEN -- changed rev2
IF (BLE_b = '0') THEN
DQ (7 DOWNTO 0) <= mem_array (conv_integer1(A)) (7 DOWNTO 0) AFTER tACE;
END IF;
IF (BHE_b = '0') THEN
DQ (15 DOWNTO 8) <= mem_array (conv_integer1(A)) (15 DOWNTO 8) AFTER tACE;
END IF;
END IF;
--- OE triggered READ
IF (OE_b'LAST_EVENT = read_enable'LAST_EVENT) THEN
-- if address or CE changes before OE such that tAA/tACE > tDOE
IF (CE_b'LAST_EVENT < tACE - tDOE AND A'LAST_EVENT < tAA - tDOE) THEN
IF (A'LAST_EVENT < CE_b'LAST_EVENT) THEN
accesstime := tAA-A'LAST_EVENT;
IF (BLE_b = '0') THEN
DQ (7 DOWNTO 0) <= mem_array (conv_integer1(A)) (7 DOWNTO 0) AFTER accesstime;
END IF;
IF (BHE_b = '0') THEN
DQ (15 DOWNTO 8) <= mem_array (conv_integer1(A)) (15 DOWNTO 8) AFTER accesstime;
END IF;
ELSE
accesstime := tACE-CE_b'LAST_EVENT;
IF (BLE_b = '0') THEN
DQ (7 DOWNTO 0) <= mem_array (conv_integer1(A)) (7 DOWNTO 0) AFTER accesstime;
END IF;
IF (BHE_b = '0') THEN
DQ (15 DOWNTO 8) <= mem_array (conv_integer1(A)) (15 DOWNTO 8) AFTER accesstime;
END IF;
END IF;
-- if address changes before OE such that tAA > tDOE
ELSIF (A'LAST_EVENT < tAA - tDOE) THEN
accesstime := tAA-A'LAST_EVENT;
IF (BLE_b = '0') THEN
DQ (7 DOWNTO 0) <= mem_array (conv_integer1(A)) (7 DOWNTO 0) AFTER accesstime;
END IF;
IF (BHE_b = '0') THEN
DQ (15 DOWNTO 8) <= mem_array (conv_integer1(A)) (15 DOWNTO 8) AFTER accesstime;
END IF;
-- if CE changes before OE such that tACE > tDOE
ELSIF (CE_b'LAST_EVENT < tACE - tDOE) THEN
accesstime := tACE-CE_b'LAST_EVENT;
IF (BLE_b = '0') THEN
DQ (7 DOWNTO 0) <= mem_array (conv_integer1(A)) (7 DOWNTO 0) AFTER accesstime;
END IF;
IF (BHE_b = '0') THEN
DQ (15 DOWNTO 8) <= mem_array (conv_integer1(A)) (15 DOWNTO 8) AFTER accesstime;
END IF;
-- if OE changes such that tDOE > tAA/tACE
ELSE
IF (BLE_b = '0') THEN
DQ (7 DOWNTO 0) <= mem_array (conv_integer1(A)) (7 DOWNTO 0) AFTER tDOE;
END IF;
IF (BHE_b = '0') THEN
DQ (15 DOWNTO 8) <= mem_array (conv_integer1(A)) (15 DOWNTO 8) AFTER tDOE;
END IF;
END IF;
END IF;
--- END of OE triggered READ
--- BLE/BHE triggered READ
IF (BLE_b'LAST_EVENT = read_enable'LAST_EVENT OR BHE_b'LAST_EVENT = read_enable'LAST_EVENT) THEN
-- if address or CE changes before BHE/BLE such that tAA/tACE > tDBE
IF (CE_b'LAST_EVENT < tACE - tDBE AND A'LAST_EVENT < tAA - tDBE) THEN
IF (A'LAST_EVENT < BLE_b'LAST_EVENT) THEN
accesstime := tAA-A'LAST_EVENT;
IF (BLE_b = '0') THEN
DQ (7 DOWNTO 0) <= mem_array (conv_integer1(A)) (7 DOWNTO 0) AFTER accesstime;
END IF;
IF (BHE_b = '0') THEN
DQ (15 DOWNTO 8) <= mem_array (conv_integer1(A)) (15 DOWNTO 8) AFTER accesstime;
END IF;
ELSE
accesstime := tACE-CE_b'LAST_EVENT;
IF (BLE_b = '0') THEN
DQ (7 DOWNTO 0) <= mem_array (conv_integer1(A)) (7 DOWNTO 0) AFTER accesstime;
END IF;
IF (BHE_b = '0') THEN
DQ (15 DOWNTO 8) <= mem_array (conv_integer1(A)) (15 DOWNTO 8) AFTER accesstime;
END IF;
END IF;
-- if address changes before BHE/BLE such that tAA > tDBE
ELSIF (A'LAST_EVENT < tAA - tDBE) THEN
accesstime := tAA-A'LAST_EVENT;
IF (BLE_b = '0') THEN
DQ (7 DOWNTO 0) <= mem_array (conv_integer1(A)) (7 DOWNTO 0) AFTER accesstime;
END IF;
IF (BHE_b = '0') THEN
DQ (15 DOWNTO 8) <= mem_array (conv_integer1(A)) (15 DOWNTO 8) AFTER accesstime;
END IF;
-- if CE changes before BHE/BLE such that tACE > tDBE
ELSIF (CE_b'LAST_EVENT < tACE - tDBE) THEN
accesstime := tACE-CE_b'LAST_EVENT;
IF (BLE_b = '0') THEN
DQ (7 DOWNTO 0) <= mem_array (conv_integer1(A)) (7 DOWNTO 0) AFTER accesstime;
END IF;
IF (BHE_b = '0') THEN
DQ (15 DOWNTO 8) <= mem_array (conv_integer1(A)) (15 DOWNTO 8) AFTER accesstime;
END IF;
-- if BHE/BLE changes such that tDBE > tAA/tACE
ELSE
IF (BLE_b = '0') THEN
DQ (7 DOWNTO 0) <= mem_array (conv_integer1(A)) (7 DOWNTO 0) AFTER tDBE;
END IF;
IF (BHE_b = '0') THEN
DQ (15 DOWNTO 8) <= mem_array (conv_integer1(A)) (15 DOWNTO 8) AFTER tDBE;
END IF;
END IF;
END IF;
-- END of BHE/BLE controlled READ
IF (WE_b'LAST_EVENT = read_enable'LAST_EVENT) THEN
IF (BLE_b = '0') THEN
DQ (7 DOWNTO 0) <= mem_array (conv_integer1(A)) (7 DOWNTO 0) AFTER tACE;
END IF;
IF (BHE_b = '0') THEN
DQ (15 DOWNTO 8) <= mem_array (conv_integer1(A)) (15 DOWNTO 8) AFTER tACE;
END IF;
END IF;
END IF;
--- END OF CE/OE/BHE/BLE controlled READ
--- If either BHE or BLE toggle during read mode
IF (BLE_b'EVENT AND BLE_b = '0' AND read_enable = '1' AND NOT(read_enable'EVENT)) THEN
DQ (7 DOWNTO 0) <= mem_array (conv_integer1(A)) (7 DOWNTO 0) AFTER tDBE;
END IF;
IF (BHE_b'EVENT AND BHE_b = '0' AND read_enable = '1' AND NOT(read_enable'EVENT)) THEN
DQ (15 DOWNTO 8) <= mem_array (conv_integer1(A)) (15 DOWNTO 8) AFTER tDBE;
END IF;
--- tri-state bus depending on BHE/BLE
IF (BLE_b'EVENT AND BLE_b = '1') THEN
DQ (7 DOWNTO 0) <= (OTHERS => 'Z') after tHZBE;
END IF;
IF (BHE_b'EVENT AND BHE_b = '1') THEN
DQ (15 DOWNTO 8) <= (OTHERS => 'Z') after tHZBE;
END IF;
WAIT ON write_enable, A, read_enable, DQ, BLE_b, BHE_b, data_skew, address_skew;
END PROCESS;
END behave_arch;