КУРСОВА РОБОТА з дисципліни «Комп’ютерна схемотехніка»

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
КН
Кафедра:
Не вказано

Інформація про роботу

Рік:
2013
Тип роботи:
Курсова робота
Предмет:
Комп’ютерна схемотехніка

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки, молоді та спорту України Національний університет «Львівська політехніка»  КУРСОВА РОБОТА з дисципліни «Комп’ютерна схемотехніка» З А В Д А Н Н Я Розробити спеціалізований обчислювач, що має відповідати наступним вимогам : структурна схема обчислювача : мікропрограмний автомат Мілі; робоча формула : Yi = ( Xi * N) mod 216, де 5 ≤ i ≤ 10 ( значення N та i задаються керівником курсового проекта ); формат даних : 16 бітний беззнаковий двійковий код з фіксованою комою ( тобто коди від (0).0000 0000 0000 0000 до (0).1111 1111 1111 1111 ); інформаційний обмін здійснюється через паралельну 16-ти розрядну двонаправлену шину даних за допомогою додаткових сигналів синхронізації ( рівні сигналів сумісні з ТТЛ ); керуючий автомат реалізувати на основі ПЗП та регістра; напруга живлення та тактові імпульси надходять від зовнішнього джерела, а сигнал початкового скидання формується локально. Варіант №64 - константа N = 9В5616 , i=5 Зміст Структурна схема спецобчислювача. 4 Блок схема алгоритму задачі. 5 Блок схема алгоритму роботи спецобчислювача. 5 Блок схема алгоритму обчислення добутку. 6 Функціональна схема спеціалізованого обчислювача. 7 Часові діаграми. 13 Режим вводу даних. 13 Режим виводу даних. 13 Часова діаграма обчислення проміжної суми. 14 Часова діаграма зсуву проміжної суми. 15 Принципова схема . Опис автомата керування . 16 Обчислення загального часу роботи алгоритму множення. 17 Такт вводу. 17 Такт виводу. 17 Такт обчислення. 17 Моделювання засобами VHDL схеми спецобчислювача. 18 Моделювання роботи спеціалізованого обчислювача. 29 Висновок. 20 Список використаної літератури. 31 Додатки. СТРУКТУРНА СХЕМА СПЕЦОБЧИСЛЮВАЧА Схема складається з операційного пристрою, і пристрою керування. Операційний пристрій виконує множення заданої константи на число яке подається ззовні через двонаправлену шину вводу/виводу даних. Структурна схема спецобчислювача подана на рис.1.  Рис.1 Структурна схема спецобчислювача БЛОК СХЕМА АЛГОРИТМУ ЗАДАЧІ Блок схема алгоритму роботи спецобчислювача. Алгоритм роботи спецобчислювача включає в себе наступні кроки: Ввід даних; Обчислення результату множення; Перевірка кількості обчислень; Вивід результату обчислень; На двонаправлену 16-ти розрядну шину подаються по черзі 5 чисел, які заносяться в пам’ять. Потім, кожне число перемножується на задану константу. Провівши множення над всіма числами, результат подається на 16-ти розрядну шину і виводиться на зовні.  Рис.2 Блок схема алгоритму роботи спецобчислювача Блок схема алгоритму обчислення добутку. Для обчислення добутку на шину подаємо число (Ме) яке записане в пам’яті. Наступним кроком буде аналіз молодшого розряду Мк (задана константа). Якщо молодший розряд рівний одиниці, то до проміжної суми S (спочатку S = 0), потрібно додати Мe і отриманий результат зсунути на один розряд вправо. Якщо молодший розряд рівний нулю, то достатньо зсунути проміжну суму S на один розряд. Виконавши ці кроки, потрібно перейти до наступного розряду Mк і повторити вищесказані дії. Після опрацювання останнього 16-го розряду множника зберігаємо отриману проміжну суму S в пам’ять.  Рис.3 Блок схема алгоритму обчислення добутку ФУНКЦІОНАЛЬНА СХЕМА СПЕЦІАЛІЗОВАНОГО ОБЧИСЛЮВАЧА / Рис.4 Функціональна схема спецобчислювача Спеціалізований обчислювач Рис.4 складається з таких елементів : Лічильник адреси; ОЗП; Суматор; Регістр зсуву; Буфер виводу; Буфер вводу-виводу; Автомат керування; Інформаційний обмін здійснюється через паралельну 16-ти розрядну двонаправлену шину даних. Отримавши потрібний сигнал від пристрою керування, дані проходять через буфер вводу/виводу і записуються в пам’ять. Така послідовність дій повторюється N разів (з кожним повтором лічильник адреси збільшується на одиницю). Далі, в залежності від прошиття автомата керування, відбувається читання даних з пам’яті, додавання їх до проміжної суми, або зсув. Зсув відбувається в універсальному регістрі зсуву, який в даному випадку зсуває лише вправо. Автомат керування реалізований на основі постійно запам’ятовуючого пристрою (ПЗП) і регістра. Для керування спецобчислювача потрібно 14 сигналів, також 10 сигналів потрібно для зворотнього зв’язку. Отож, автомат керування складається з поєднання трьох пар восьми розрядного регістра і ПЗП. Для реалізації на принциповому рівні використаємо наступні елементи: ЛІЧИЛЬНИК АДРЕСИ / 8 – Gnd 16 - +5V Рис.5 Лічильник адреси 1 – вхід інформаційний D2; 2 – вихід другого розряду Q2; 3 – вихід першого розряду Q1; 4 – вхід «обернений рахунок»; 5 – вхід «прямий рахунок»; 6 – вихід третього розряду Q3; 7 – вихід четвертого розряду Q4; 8 – Gnd; 9 – вхід інформаційний D8; 10 – вхід інформаційний D4; 11 – вхід попереднього запису; 12 – вихід «прямий перенос» 13 – вихід «обернений перенос» 14 – вхід установки в «0» R; 15 – вхід інформаційний D1; ОПЕРАТИВНО ЗАПАМ’ЯТОВУЮЧИЙ ПРИСТРІЙ  12 – Gnd 24 - +5V Рис.6 ОЗП ОЗП серії CY7C128A (рис.6) являє собою асинхронну оперативну пам’ять об’ємом 16 кбит. Організація пам’ті 2К х 8. Цикл читання зображено на рис.7. Цикл запису в ОЗП показано на рис.8. / Рис.7 Цикл читання / Рис.8 Цикл запису СУМАТОР  8 – Gnd 16 - +5V Рис.9 Суматор Суматор серії ТТЛ К564ИМ1 – повний чотирьох розрядний суматор з переносом (рис.9) . Таблиця істинності даного суматора зображена в табл.1. Таблиця 1 Ai Bi Pi Si Pi  0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 0 1 1 0 1 0 0 1 0 0 0 1 0 1 1 1   Pi-1 –перенос з попереднього розряду; Pi - перенос в наступний розряд; РЕГІСТР ЗСУВУ  12 – Gnd 24 - +5V Рис.10 Універсальний регістр Мікросхема серії ТТЛ К155ІР13 - універсальний, восьми розрядний, синхронний регістр зсуву (рис.10). Кожна операція триває в регістрі не більше 20 нс, тому він придатний для обслуговування швидкісних процесорів та ЗУ як буферний накопичувач байта. Синхронну роботу регістру забезпечують спеціальні входи вибору режиму S0 і S1. У таблиці вказані поєднання рівнів на цих входах, що дозволяють переводити регістр в режими: зберігання (на входах S0 і S1 напруги низького рівня), паралельної завантаження (на цих входах напруги високого рівня), зсуву вліво (S1-в, S0-н) та зсуву вправо (S1-н, SO-в). Таблиця істинності даного регістра зображена в табл.2. Таблиця 2 Режим роботи Вхід Вихід   C /R S0 S1 DR DL Q0 Q1-Q6 Q7  Скид x 0 x x x x 0 0-0 0  Зберігання ↑ 1 0 0 x x q0 q1-q6 q7  Зсув вліво ↑ 1 0 0 x 1 q1 q2-q7 0   ↑ 1 1 0 x 1 q1 q2-q7 1  Зсув вправо ↑ 1 0 1 0 x 0 q0-q5 q6   ↑ 1 0 1 1 x 1 q0-q5 q6   БУФЕР  10 – Gnd 20 - +5V Рис.11 Буфер Мікросхема серії SN74LV245 (рис.11) - двонаправлений буфер з можливістю переходу в третій стан. Таблиця істинності показана в табл. 3. Таблиця 3 Dir OE   0 0 A<=B  0 1 ZZZZZ  1 0 B<=A  1 1 ZZZZZ   ЧАСОВІ ДІАГРАМИ Режим вводу даних. Режим вводу даних передбачає встановлення буфера вводу/виводу в передачу з B на A. Це здійснюється за рахунок подачі низького рівня сигналу на входи керування. Далі дані поступають до ОЗП. Низьким рівнем сигналу на вхід WE дані записуються в потрібну область пам’яті. Часова діаграма вводу даних зображена на рис.12.  Рис.12 Часова діаграма вводу даних Режим виводу даних. Режим виводу даних передбачає встановлення буфера вводу/виводу в передачу з А на В. Це здійснюється за рахунок подачі низького рівня сигналу на вхід OE і високого рівня на вхід Dir. Наступним кроком буде читання отриманих результатів з пам’яті. Для цього встановлюємо низький рівень сигналу на вході дозволу читання ОЗП. Часова діаграма виводу даних зображена на рис.13.  Рис.13 Часова діаграма виводу даних Часова діаграма обчислення проміжної суми. На вході A0,…,A15 суматора поступають дані з регістра. Для обчислення проміжної суми, потрібно прочитати з пам’яті Me. Часова діаграма обчислення проміжної суми зображена на рис.14.  Рис.14. Часова діаграма обчислення суми Часова діаграма зсуву проміжної суми. Зсув проміжної суми відбувається в регістрі. Для зсуву на вхід S0 подаємо низький рівень сигналу, а на вхід S1 подаємо високий рівень. Часова діаграма зсуву проміжної суми зображена на рис.15.  Рис.15. Часова діаграма зсуву проміжної суми ПРИНЦИПОВА СХЕМА Принципова схема в додатку. ОПИС АВТОМАТА КЕРУВАННЯ 6.1 Cтруктура регістру керування автоматом S  RG  RAM  COUNTER  Буф. в/в  Буф. Вих.   23  22  21  20  19  18  17  16  15  14  13  12  11  10  9  8  7  6  5  4  3  2  1  0          S1 S0 R CLK  WE OE CE zr pr R L OE DIR OE DIR   5-6  4  3  2  1   6.2 Коди керування: - цикл вводу даних 004 7B 0111 1011 A9 1010 1001 01 0000 0001  Ввід  005 BB 1011 1011 09 0000 1001 01 0000 0001   006 F9 1111 1001 09 0000 1001 01 0000 1001   007 3B 0011 1011 09 0000 1001 02 0000 0010    - цикл обчислення 014 4F 0100 1111 8F 1000 1111 05 0000 0101  Сума  015 8F 1000 1111 0F 0000 1111 05 0000 0101   016 FA 1111 1010 0F 0000 1111 05 0000 0101   017 3F 0011 1111 0F 0000 1111 06 0000 0110   018 7B 0111 1011 8F 1000 1111 06 0000 0110   019 AB 1010 1011 8F 1000 1111 06 0000 0110 Зсув  01A CF 1100 1111 8F 1000 1111 06 0000 0110    - цикл запису результату 04F 3B 0011 1011 0C 0000 1100 14 0001 0100 Запис  050 79 0111 1001 0C 0000 1100 14 0001 0100   051 BB 1011 1011 0C 0000 1100 14 0001 0100   052 F9 1111 1001 C3 1100 0011 14 0001 0100    - цикл виводу 14F 3B 0011 1011 A9 1010 1001 54 0101 0100 Вивід  150 7B 0111 1011 0B 0000 1011 54 0101 0100   151 BA 1011 1010 0B 0000 1011 54 0101 0100   152 FB 1111 1011 0B 0000 1011 54 0    ОБЧИСЛЕННЯ ЗАГАЛЬНОГО ЧАСУ РОБОТИ АЛГОРИТМУ МНОЖЕННЯ Такт вводу: Запис одного числа в пам’ять займає 4 такти. Оскільки, в завданні сказано працювати з п’ятьма числами, то загальний такт вводу займає 20 тактів; Такт виводу: Вивід одного числа займає 4 тактів. Оскільки є 5 чисел, то загальний такт виводу займатиме 20 тактів; Такт обчислення: Для обчислення одного множення потрібно 62 такти. Загальна кількість тактів на обчислення – 310. Загальний час роботи – 350 тактів. МОДЕЛЮВАННЯ ЗАСОБАМИ VHDL СХЕМИ СПЕЦОБЧИСЛЮВАЧА Модель розробленого спеціалізованого обчислювача показано на рис.16. Рис. 16 VHDL коди складових спецобчислювача: Лічильник адреси; library IEEE; use IEEE.STD_LOGIC_1164.all; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity counter is port( L : in STD_LOGIC; -- âõ³ä ïîïåðåäíüîãî çàïèñó R : in STD_LOGIC; -- ñêèä òðèãåð³â â "0" pr : in STD_LOGIC; -- âõ³ä "ïðÿìèé ðàõóíîê" zr : in STD_LOGIC; -- âõ³ä "çâîðîòí³é ðàõóíîê" D : in STD_LOGIC_VECTOR(0 to 3); -- ³íôîðìàö³éí³ âõîäè Q : out STD_LOGIC_VECTOR(0 to 3); -- ³íôîðìàö³éí³ âèõîäè pp : out STD_LOGIC; -- âèõ³ä "ïðÿìèé ïåðåíîñ" zp : out STD_LOGIC -- âèõ³ä "çâîðîòí³é ïåðåíîñ" ); end counter; architecture counter of counter is signal CNT_VAL: std_logic_vector(3 downto 0); begin Q<=CNT_VAL; process(L,R,pr,zr) begin pp<='0'; zp<='0'; if pr'event and pr='0' then if R='1' then CNT_VAL<=(others=>'0'); else if L='0' then CNT_VAL<=D; else if L='1' then CNT_VAL<=CNT_VAL+1; if CNT_VAL="1111" then pp<='1'; end if; end if; end if; end if; end if; if zr'event and zr='0' then if R='1' then CNT_VAL<=(others=>'0'); else if L='0' then CNT_VAL<=D; else if L='1' then CNT_VAL<=CNT_VAL-1; if CNT_VAL="0000" then zp<='1'; end if; end if; end if; end if; end if; end process; end counter; ОЗП; library IEEE; use IEEE.STD_LOGIC_1164.all; entity ram is port( CE : in STD_LOGIC; WE : in STD_LOGIC; OE : in STD_LOGIC; AD : in STD_LOGIC_VECTOR(10 downto 0); D : inout STD_LOGIC_VECTOR(7 downto 0) ); end ram; architecture ram of ram is type MEM is array(0 to 2047) of std_logic_vector (7 downto 0); begin PROCESS(AD, CE, OE, WE, D) TYPE ram_array IS ARRAY (0 TO 2047) OF BIT_VECTOR(7 DOWNTO 0); VARIABLE index : INTEGER := 0; VARIABLE ram_store : ram_array; BEGIN IF CE = '0' THEN index := 0; FOR i IN AD'RANGE LOOP IF AD(i) = '1' THEN index := index + 2**i; END IF; END LOOP; IF rising_edge(WE) THEN ram_store(index) := To_bitvector(D); ELSIF OE = '0' THEN D <= To_StdlogicVector(ram_store(index)); ELSE D <= "ZZZZZZZZ"; END IF; ELSE D <= "ZZZZZZZZ"; END IF; END PROCESS; end ram; Суматор; library IEEE; use IEEE.STD_LOGIC_1164.all; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.all; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity Sum is port( C0 : in STD_LOGIC; A : in STD_LOGIC_VECTOR(3 downto 0); B : in STD_LOGIC_VECTOR(3 downto 0); C4 : out STD_LOGIC; P : out STD_LOGIC_VECTOR(3 downto 0) ); end Sum; architecture Sum_arc of Sum is signal tmp: std_logic_vector(4 downto 0); begin tmp <= conv_std_logic_vector((conv_integer(A) + conv_integer(B) + conv_integer(C0)), 5); P <= tmp(3 downto 0); C4 <= tmp(4); end Sum_arc; architecture Sum_arc of Sum is signal tmp: std_logic_vector(4 downto 0); begin tmp <= conv_std_logic_vector((conv_integer(A) + conv_integer(B) + conv_integer(C0)), 5); P <= tmp(3 downto 0); C4 <= tmp(4); end Sum_arc; Регістр зсуву; library IEEE; use IEEE.STD_LOGIC_1164.all; entity RG is port( CLK : in STD_LOGIC; CLR : in STD_LOGIC; DSR : in STD_LOGIC; DSL : in STD_LOGIC; S0 : in STD_LOGIC; S1 : in STD_LOGIC; D : in STD_LOGIC_VECTOR(7 downto 0); Q : out STD_LOGIC_VECTOR(7 downto 0) ); end RG; architecture RG of RG is SIGNAL INT_DAT : std_logic_vector (7 downto 0); SIGNAL S1_S0 : std_logic_vector (1 downto 0); begin Q<=INT_DAT; S1_S0 <= S1&S0; process (CLK, CLR) begin if CLR ='0' then INT_DAT<=(others =>'0') ; elsif rising_edge(CLK) then case S1_S0 is when "01" => INT_DAT <= INT_DAT (6 downto 0) & DSR; when "10" => INT_DAT <= DSL & INT_DAT(7 downto 1); when "11" => INT_DAT <= D; when others => end case; end if; end process ; end RG; Буфер; library IEEE; use IEEE.STD_LOGIC_1164.all; entity Buf is port( Dir : in STD_LOGIC; OE : in STD_LOGIC; A : inout STD_LOGIC_VECTOR(7 downto 0); B : inout STD_LOGIC_VECTOR(7 downto 0) ); end Buf; --}} End of automatically maintained section architecture Buf of Buf is begin A<=B when (OE = '0' and Dir = '0') else (others =>'Z'); B<=A when (OE = '0' and Dir = '1') else (others =>'Z'); end Buf; Автомат керування; library IEEE; use IEEE.STD_LOGIC_1164.all; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.all; entity Avt is port( Clk : in STD_LOGIC; Res : in STD_LOGIC; load : in STD_LOGIC; We_RE : in STD_LOGIC; S : in STD_LOGIC_VECTOR(7 downto 0); O : out STD_LOGIC_VECTOR(23 downto 0); Mk : out STD_LOGIC_VECTOR(15 downto 0) ); end Avt; architecture Avt of Avt is signal q:integer; signal k :std_logic_vector(23 downto 0); begin process(CLK,Res) begin if Res = '1' then k <= X"00473D"; elsif (CLK ='1' and CLK'event) then q<= CONV_INTEGER(S); case q is when 0 => k <= X"01C733"; when 1 => k <= X"02E613"; when 2 => k <= X"03E213"; when 3 => k <= X"04E613"; when 4=> k <= X"05A719"; when 5=> k <= X"06371D"; when 6=> k <= X"07371F"; when 7=> k <= X"08361F"; when 8=> k <= X"09E41F"; when 9=> k <= X"0aF61F"; when 10=> k <= X"0bE71D"; when 11=> k <= X"0c371F"; when 12=> k <= X"0d361F"; when 13=> k <= X"0eE41F"; when 14=> k <= X"0fF61F"; when 15=> k <= X"10E71D"; when 16=> k <= X"11A719"; when 17=> k <= X"12371D"; when 18=> k <= X"13371F"; when 19=> k <= X"14361F"; when 20=> k <= X"15E41F"; when 21=> k <= X"16F61F"; when 22=> k <= X"17E71D"; when 23=> k <= X"18A719"; when 24=> k <= X"19371D"; when 25=> k <= X"1a371F"; when 26=> k <= X"1b361F"; when 27=> k <= X"1cE41F"; when 28=> k <= X"1dF61F"; when 29=> k <= X"1eE71D"; when 30=> k <= X"1fA719"; when 31=> k <= X"20371D"; when 32=> k <= X"21371F"; when 33=> k <= X"22361F"; when 34=> k <= X"23E41F"; when 35=> k <= X"24F61F"; when 36=> k <= X"25E71D"; when 37=> k <= X"26371F"; when 38=> k <= X"27361F"; when 39=> k <= X"28E41F"; when 40=> k <= X"29F61F"; when 41=> k <= X"2aE71D"; when 42=> k <= X"2bA719"; when 43=> k <= X"2c371D"; when 44=> k <= X"2d371F"; when 45=> k <= X"2e361F"; when 46=> k <= X"2fE41F"; when 47=> k <= X"30F61F"; when 48=> k <= X"31E71D"; when 49=> k <= X"32371F"; when 50=> k <= X"33361F"; when 51=> k <= X"34E41F"; when 52=> k <= X"35F61F"; when 53=> k <= X"36E71D"; when 54=> k <= X"37A719"; when 55=> k <= X"38371D"; when 56=> k <= X"39A719"; when 57=> k <= X"3a371D"; when 58=> k <= X"3b371F"; when 59=> k <= X"3c361F"; when 60=> k <= X"3dE41F"; when 61=> k <= X"3eF615"; when 62=> k <= X"3fE715"; when others => k <= X"000000"; END CASE; end if; O<=k; END PROCESS; end Avt; VHDL код спецобчислювача: library IEEE; use IEEE.std_logic_1164.all; entity COMP is port( CLK : in STD_LOGIC; LOAD : in STD_LOGIC; RES : in STD_LOGIC; WE_RE : in STD_LOGIC; Cnt : out STD_LOGIC_VECTOR(3 downto 0); S : out STD_LOGIC_VECTOR(7 downto 0); Temp : out STD_LOGIC_VECTOR(15 downto 0); Q : inout STD_LOGIC_VECTOR(15 downto 0) ); end COMP; architecture COMP of COMP is ---- Component declarations ----- component Avt port ( Clk : in STD_LOGIC; Res : in STD_LOGIC; S : in STD_LOGIC_VECTOR(7 downto 0); We_RE : in STD_LOGIC; load : in STD_LOGIC; Mk : out STD_LOGIC_VECTOR(15 downto 0); O : out STD_LOGIC_VECTOR(23 downto 0) ); end component; component Buf port ( Dir : in STD_LOGIC; OE : in STD_LOGIC; A : inout STD_LOGIC_VECTOR(7 downto 0); B : inout STD_LOGIC_VECTOR(7 downto 0) ); end component; component counter port ( D : in STD_LOGIC_VECTOR(0 to 3); L : in STD_LOGIC; R : in STD_LOGIC; pr : in STD_LOGIC; zr : in STD_LOGIC; Q : out STD_LOGIC_VECTOR(0 to 3); pp : out STD_LOGIC; zp : out STD_LOGIC ); end component; component ram port ( AD : in STD_LOGIC_VECTOR(10 downto 0); CE : in STD_LOGIC; OE : in STD_LOGIC; WE : in STD_LOGIC; D : inout STD_LOGIC_VECTOR(7 downto 0) ); end component; component reg_16 port ( CLK : in STD_LOGIC; D : in STD_LOGIC_VECTOR(15 downto 0); DSL : in STD_LOGIC; R : in STD_LOGIC; S0 : in STD_LOGIC; S1 : in STD_LOGIC
Антиботан аватар за замовчуванням

04.06.2014 22:06-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!