Розробка спеціалізованого обчислювача

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

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

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

Рік:
2024
Тип роботи:
Курсова робота
Предмет:
Моделювання комп ютерних систем

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА” Кафедра ЕОМ / КУРСОВА РОБОТА з курсу “Комп’ютерна схемотехніка” і “моделювання комп’ютерних систем.” На тему: «Розробка спеціалізованого обчислювача» Зміст Завдання…………………………………………………………………………..3 Структурна схема спецобчислювача……………………………………………4 Блок схема алгоритму задачі…………………………………………………….5 Функціональна схема спеціалізованого обчислювача…………………………6 Принципова схема та її опис…………………….………………………………7 Обчислення загального часу роботи алгоритму множення…………………11 Такт вводу……………………………………………………………………11 Такт виводу. …………………………………………………………………11 Такт обчислення. ……………………………………………………………11 Опис автомата керування ……………………………………………………..12 Таблиця прошиття ПЗП……………………..…………………………………………………13 Граф автомата……………………………………………………….……14 VHDL реалізація проекту………………………………………………………15 7.1. Результати моделювання…………………………………………………..16 7.2. VHDL опис використаних пристроїв……………………………………..17 Висновок. …………………………………………………………………...………22 Список використаної літератури. ………………………………………..………..23 Додатки. ЗАВДАННЯ: Розробити спеціалізований обчислювач, що має відповідати наступним вимогам : структурна схема обчислювача : мікропрограмний автомат Мілі; робоча формула : див. таблицю (варіант задається керівником проекту); формат даних : 8 бітний доповняльний код інформаційний обмін здійснюється через паралельну 8-ти розрядну двонаправлену шину даних за допомогою додаткових сигналів синхронізації ( рівні сигналів сумісні з ТТЛ ); керуючий автомат реалізувати на основі ПЗП та регістра; напруга живлення та тактові імпульси надходять від зовнішнього джерела а сигнал початкового скидання також формується ззовні. Згідно варіанту формула: Yi = Xi/16 – 7∙Xi+1 /8 К-сть введених значень: 14 Структурна схема спецобчислювача На рис 1. подана структурна схема спецобчислювача. / Рис.1 Структурна схема спецобчислювача Схема складається з двох елементів, а саме операційного пристрою, і пристрою керування. Операційний пристрій виконує обрахунок заданої формули за допомогою значень, що надходять ззовні через двонаправлену шину вводу/виводу даних. Пристрій керування реалізований на автоматі Мілі, він подає відповідні сигнали керування операційному пристрою для коректного опрацювання даних. Блок схема алгоритму задачі.  Функціональна схема спеціалізованого обчислювача. На рис.4 подана функціональна схема спецобчислювача  До складу вищенаведеного спеціалізованого обчислювача входять наступні елементи: ОЗП; Суматор; Регістр зсуву; Лічильник адреси; Буфер виводу; Буфер вводу-виводу; ПЗП; Регістр автомата. Обмін інформацією виконується через паралельну 8-ти розрядну двонаправлену шину даних. Отримавши потрібний сигнал від пристрою керування, дані проходять через буфер вводу/виводу і записуються в пам’ять. Така послідовність дій повторюється N разів (з кожним повтором лічильник адреси збільшується на одиницю). Далі, в залежності від прошиття автомата керування, відбувається читання даних з пам’яті і обрахунок за допомогою цих пристроїв( додавання, ділення зсувом на 2, інверсія, і.т.д.). Після цього через буфер вводу/виводу виводимо дані порціями N разів. Автомат керування реалізований на основі постійно запам’ятовуючого пристрою (ПЗП) і регістра. Для керування спецобчислювача потрібно 16 сигналів, також 8 сигналів потрібно для зворотнього зв’язку. Отож, автомат керування складається з поєднання трьох пар восьмирозрядного регістра і ПЗП. 4.1. Елементи принципової схеми ОПЕРАТИВНО ЗАПАМ’ЯТОВУЮЧИЙ ПРИСТРІЙ На рис. 5 поданий оперативно запам’ятовуючий пристрій серії CY7C128A .  12 – Gnd; 24 - +5V Рис.2. ОЗП ОЗП серії IDT611SA являє собою асинхронну оперативну пам’ять об’ємом 16 кбит. Організація пам’яті 2К х 8. Таблиця даного ОЗП приведена в таблиці 1. Таблиця 1 Режим CE OE WE DQ  Збереження 0 1 1 Z  Запис 0 0 0 DATAin  Читання 0 0 1 DATAout  Неробочий режим 1 X X Z   РЕГІСТР ЗСУВУ На рис. 9 подана мікросхема серії ТТЛ К155ИР13 , яка являє собою універсальний, восьми розрядний, синхронний регістр зсуву  12 – Gnd; 24 - +5V Рис.4. Універсальний регістр Кожна операція триває в регістрі не більше 20 нс, тому він придатний для обслуговування швидкісних процесорів та ЗУ як буферний накопичувач байта. Синхронну роботу регістру забезпечують спеціальні входи вибору режиму S0 і S1. У таблиці вказані поєднання рівнів на цих входах, що дозволяють переводити регістр в режими: зберігання (на входах S0 і S1 напруги низького рівня), паралельної завантаження (на цих входах напруги високого рівня), зсуву вліво (S1-в, S0-н) та зсуву вправо (S1-н, SO-в). Таблиця істинності даного регістра зображена в табл.3. Таблиця 3 Режим роботи Вхід Вихід   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 подана мікросхема серії ТТЛ К155ИЕ7, яка являє собою лічильник.  8 – Gnd; 16 - +5V Рис.5. Лічильник Лічильник представляє із себе двійковий синхронний лічильник. ИЕ7 має асинхронне скидання і асинхронне початкове завантаження. Таблиця істинності лічильника подана на рис. 6. / Рис.6. Таблиця істинності лічильника БУФЕР На рис. 7 подана мікросхема серії SN74LV245 , яка являє собою двонаправлений буфер з можливістю переходу в третій стан.  10 – Gnd; 20 - +5V Рис.7. Буфер Таблиця істинності показана в табл. 4. Таблиця 4 Dir OE   0 0 A<=B  0 1 ZZZZZ  1 0 B<=A  1 1 ZZZZZ   В таблиці 3 символи «ZZZZZ» позначають високий імпеданс. Вирази «A<=B» означає присвоєння сигналу А значення сигналу В. Вирази «B<=A» означає присвоєння сигналу B значення сигналу A 5. Обчислення загального часу роботи алгоритму множення. Такт вводу: Для того, щоб записати одне число в пам’ять необхідно 2 такти. Ми записуємо 14 чисел, тому для запису чисел необхідно 28 тактів. Щоб закінчити цикл вводу, ми переходимо на старші адреси, тому необхідно ще 2 такти. Загалом 30 такти. Такт виводу: Для того, щоб вивести одне число в пам’ять необхідно 1 такт. Ми виводимо 13 чисел, тому для запису чисел необхідно 13 тактів. Щоб закінчити вивід, ми переходимо на старші адреси, тому необхідно ще 1 такт. Загалом 14 тактів. Такт обчислення: Для обчислення одного результату необхідно 42 такти. Ми виконуємо 13 обчислень, тому для множення необхідно 546 тактів. Щоб закінчити цикл обрахунку, ми переходимо на старші адреси, тому необхідно ще 1 такт. Загалом 547 такти. Загальна к-сть тактів: 590 тактів. 6.Опис автомата керування Структура регістру керування автоматом подана в табл.5. Таблиця 5 / Буфер вводу/виводу: ОЕ- дозвіл роботи DIR:- напрям передавання даних Лічильник: +1 - інкремент -1 - декремент Load – паралельний запис Оперативно запам’товуючий пристрій: WE-режим запису\читання ОЕ-дозвіл виводу на виходи ОЗП Регістр : S1 – вхід для вибору команди запису/зсуву вліво So – вхід для вибору команди запису/зсуву вправо СLK - синхроімпульс 6.1. Таблиця прошиття ПЗП aaddr(7:0) N(3:0) INC DEC ct_ld R ram_oe ram_we Invert DR DL rg_sl rg_sr rg_rst clk2 res_en io_en r_or_l   0 1 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 Підготовказапису(S0)  1025 1 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 ЗАПИС У ПАМЯТЬ(S1-S2)  1026 1 1 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0   1282 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 закриття буфера(S3)  1283 1 0 1 1 0 0 0 0 0 0 0 0 0 1 0 1 0 збереження в рег 1 адреси(S4)  3 1 0 1 1 0 1 0 0 0 0 0 0 0 0 0 1 0 Інкремент(S23)  4 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 0   46 1 1 1 1 0 0 0 0 0 0 0 0 0 1 0 1 0 збереження в регістр(S24)  5 1 0 1 1 0 1 0 0 0 0 0 1 0 0 0 1 0 зсув вправо(S5-S6)  12 1 0 1 1 0 1 0 0 0 0 0 1 0 1 0 1 0   13 1 0 1 1 0 1 0 0 0 0 0 1 0 1 1 1 0 ВЫДКРИТТЯ ВНБУФ(S7)  14 1 0 1 1 0 0 1 0 0 0 0 1 0 1 1 1 0 ЗАПИС У ПАМЯТЬ(S8)  15 1 0 1 1 0 1 0 0 0 0 0 0 1 0 0 1 0 обнулення регістра(S9-S10)  16 1 0 1 1 0 1 0 0 0 0 0 0 1 1 0 1 0   17 1 1 1 1 0 0 0 1 0 0 0 0 0 0 0 1 0 вичитування Хі+1(S11)  30 1 1 1 1 0 1 0 0 0 0 0 0 0 1 0 1 0 збереження в регістр(S12)  31 1 1 0 1 0 1 0 0 0 0 0 1 0 0 0 1 0 зсув вправо 3 рази(S13-S14)  36 1 1 0 1 0 1 0 0 0 0 0 1 0 1 0 1 0   37 1 1 0 1 0 1 0 0 0 0 0 0 0 0 0 1 0 підготовка до вичитування Хі(S15)  38 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 0 вичитування Хі і додавання(S16)  39 1 1 1 1 0 0 0 0 0 0 0 0 0 1 0 1 0 збереження в рег (S17)  40 1 1 1 1 0 1 0 0 0 0 0 0 0 0 0 1 0 підготовка до вичитування з регістра(S18)  41 1 1 1 1 0 1 0 0 0 0 1 1 0 1 0 1 0 Вичитування(S19)  42 1 1 1 1 0 1 0 0 0 0 1 1 0 1 1 1 0 відкриття буфера(S20)  43 1 1 1 1 0 0 1 0 0 0 1 1 0 1 1 1 0 ЗАПИС У ПАМЯТЬ(S21)  44 1 1 1 1 0 1 0 0 0 0 0 0 1 0 0 1 0 обнулення регістра(S9-S10)  45 1 1 1 1 0 1 0 0 0 0 0 0 1 1 0 1 0   559 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 Вивід(S25)  560 2 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1   561 3 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1   562 4 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1   563 5 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1   564 6 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1   565 7 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1   566 8 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1   567 9 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1   568 A 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1   569 B 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1   570 C 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1   572 D 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1   60 1 0 0 0 1 1 0 0 0 0 0 0 0 0 0 1 0 кінець   6.2 Граф автомата  7.VHDL реалізація проекту / / 7.1. Результати моделювання: / / Рис. 8,9. Результат роботи спец обчислювача 7.2. VHDL опис використаних пристроїв: Лічильник: library IEEE; use IEEE.STD_LOGIC_1164.all; use IEEE.STD_LOGIC_unsigned.all; entity ct is port( ct_ld : in STD_LOGIC; INC : in STD_LOGIC; DEC : in STD_LOGIC; R : in STD_LOGIC; N : in STD_LOGIC_VECTOR(3 downto 0); ct_full : out STD_LOGIC; A : out STD_LOGIC_VECTOR(3 downto 0) ); end ct; architecture ct of ct is signal MEM:std_logic_vector(3 downto 0):="0000"; begin process(ct_ld,INC,DEC,R,MEM,N) begin if R='1' then MEM<=(others=>'0'); ct_full<='0'; A<=(others=>'0'); else if ct_ld='0' then A<=N; MEM<=N; ct_full<='0'; elsif rising_edge(INC) and DEC='1' then MEM<=MEM+1; A<=MEM+1; elsif rising_edge(DEC) and INC='1'then MEM<=MEM-1; A<=MEM-1; end if; if INC='1' and MEM="1111" then ct_full<='1'; else ct_full<='0'; end if; if DEC='1'and MEM="0000" then ct_full<='1'; else ct_full<='0'; end if; end if; end process; end ct; ОЗП: library IEEE; use IEEE.STD_LOGIC_1164.all; use IEEE.std_logic_unsigned.all; entity pamyat is port( A : in STD_LOGIC_VECTOR(3 downto 0); ram_oe : in STD_LOGIC; ram_we : in STD_LOGIC; Q : inout STD_LOGIC_VECTOR(7 downto 0) ); end pamyat; architecture pamyat of pamyat is begin process(A,ram_oe,ram_we) type ar is array(15 downto 0) of STD_LOGIC_VECTOR(7 downto 0); variable B : ar := ( "00000000", "00000000", "00000000", "00000000", "00000000", "00000000", "00000000", "00000000", "00000000", "00000000", "00000000", "00000000", "00000000", "00000000", "00000000", "00000000"); begin if (A/="ZZZZ" or A/="UUUU") then if ram_oe ='0' then if ram_we ='1' then B(conv_integer(A)):=Q; else Q<=B(conv_integer(A)); end if; else Q<="ZZZZZZZZ"; end if; else Q<="ZZZZZZZZ"; end if; end process; end pamyat; Суматор: library IEEE; use IEEE.STD_LOGIC_1164.all; use IEEE.std_logic_unsigned.all; entity sumator is port( A : in STD_LOGIC_VECTOR(11 downto 0); B : in STD_LOGIC_VECTOR(7 downto 0); Invert : in STD_LOGIC; Q : in STD_LOGIC; S : out STD_LOGIC_VECTOR(11 downto 0); P12 : out STD_LOGIC ); end sumator; architecture sumator of sumator is begin process(A,B,Invert) variable c:std_logic; variable n:std_logic; variable sum:STD_LOGIC_VECTOR(12 downto 0); begin if((B/="ZZZZZZZZ" OR B/="UUUUUUUU") AND (A/="ZZZZZZZZZZZZ" OR A/="UUUUUUUUUUUU") )then if(Invert='U' or Invert='Z' or Invert ='0')then n:='0'; else n:='1'; end if; if(Q='0' or Q='Z')then c:='0'; else c:='1'; end if; sum:= ('0'& A) + ('0'&( c & c & c & c xor Invert & Invert & Invert & Invert) & B(7 downto 0)) + ('0' & n); S<=sum(11 downto 0); P12<=sum(12); else S<="ZZZZZZZZZZZZ"; P12<='Z'; end if; end process; end sumator; Універсальний регістр: library IEEE; use IEEE.STD_LOGIC_1164.all; entity parvreg is port( S : in STD_LOGIC_VECTOR(11 downto 0); DR : in STD_LOGIC; DL : in STD_LOGIC; rg_sr : in STD_LOGIC; rg_sl : in STD_LOGIC; rg_rst : in STD_LOGIC; clk2 : in STD_LOGIC; A : out STD_LOGIC_VECTOR(11 downto 0) ); end parvreg; architecture parvreg of parvreg is begin process(clk2) variable reg:STD_LOGIC_VECTOR(11 downto 0):="000000000000"; begin if(clk2='1')then if( rg_sr='0' and rg_sl='0' and rg_rst='0' ) then reg:=S; elsif( rg_sr='0' and rg_sl='1'and rg_rst='0' ) then A(11 downto 1)<=S(10 downto 0); A(0)<='0'; reg(11 downto 1):=S(10 downto 0); reg(0):='0'; elsif( rg_sr='1' and rg_sl='0'and rg_rst='0' ) then A(10 downto 0)<=S(11 downto 1); A(11)<=S(11); reg(10 downto 0):=S(11 downto 1); reg(11):=S(11); elsif(rg_sr='1' and rg_sl='1'and rg_rst='0' ) then A<=reg; elsif(rg_rst='1')then reg:="000000000000"; A<="000000000000"; end if; elsif(clk2='0')then if(reg/="UUUUUUUUUUUU" AND REG/="000000000000")THEN A<=reg; else A<="000000000000"; end if; end if; end process; end parvreg; Буфер даних: library IEEE; use IEEE.STD_LOGIC_1164.all; use IEEE.std_logic_unsigned.all; entity buf0 is port( r_or_l : in STD_LOGIC; io_en : in STD_LOGIC; Q : inout STD_LOGIC_VECTOR(7 downto 0); data : inout STD_LOGIC_VECTOR(7 downto 0) ); end buf0; architecture buf0 of buf0 is begin Q<=data when (io_en='0' and r_or_l='0') else (others=> 'Z'); data<=Q when (io_en='0' and r_or_l='1') else (others=> 'Z'); end buf0; Автомат: library IEEE; use IEEE.STD_LOGIC_1164.all; use IEEE.STD_LOGIC_UNSIGNED.all; use ieee.std_logic_arith.ALL; entity kavtpzp is port( oec : in STD_LOGIC; wr_rdy : in STD_LOGIC; rd_ack : in STD_LOGIC; aaddr : in STD_LOGIC_VECTOR(7 downto 0); avt : out STD_LOGIC_VECTOR(31 downto 0) ); end kavtpzp; architecture kavtpzp of kavtpzp is begin process (aaddr,wr_rdy,rd_ack) variable temp:integer; begin temp:= conv_integer(wr_rdy & rd_ack & oec & aaddr(7 downto 0)); -- 0/1 + õõõõ õõõõ (àäðåñíèé ïðîñò³ð) A8-A0 case temp is when 0 => avt <= x"00011802"; when 1024 => avt <= x"2011C800"; --vkaz na zukl zapucy when 1025 => avt <= x"20216800"; --zukl zapucy when 1026 => avt <= x"2011E400"; --zukl zapucy when 3 => avt <= x"00416802"; --inc 0 when 4 => avt <= x"02E1E002"; --inc 1 when 46 => avt <= x"0051E00A"; --zberegty v reg when 5 => avt <= x"00616822"; -- --------------------- when 6 => avt <= x"0071682A"; -- when 7 => avt <= x"00816822"; -- when 8 => avt <= x"0091682A"; -- when 9 => avt <= x"00A16822"; -- ZSYB NA 4 when 10 => avt <= x"00B1682A"; -- when 11 => avt <= x"00C16822"; -- when 12 => avt <= x"00D1682A"; -- -------------------- when 13 => avt <= x"00E1682E"; -- ZBEREZHENNIA when 14 => avt <= x"00F1642E"; -- --------------------- when 15 => avt <= x"01016812"; -- ------------------------ -- obnyllennia registra when 16 => avt <= x"0111681A"; -- ------------------------ ---------------------------- when 17 => avt <= x"0121E202"; -- -XI+1 when 18 => avt <= x"0131E80A"; -- ZAPYS V REG when 19 => avt <= x"0141E202"; -- -XI+1 when 20 => avt <= x"0151E80A"; -- ZAPYS V REG when 21 => avt <= x"0161E202"; -- -XI+1 when 22 => avt <= x"0171E80A"; -- ZAPYS V REG when 23 => avt <= x"0181E202"; -- -XI+1 when 24 => avt <= x"0191E80A"; -- ZAPYS V REG when 25 => avt <= x"01A1E202"; -- -XI+1 when 26 => avt <= x"01B1E80A"; -- ZAPYS V REG when 27 => avt <= x"01C1E202"; -- -XI+1 when 28 => avt <= x"01D1E80A"; -- ZAPYS V REG when 29 => avt <= x"01E1E202"; -- -XI+1 when 30 => avt <= x"01F1E80A"; ----------------------- when 31 => avt <= x"0201A822"; --zsyv vpravo when 32 => avt <= x"0211A82A"; -- when 33 => avt <= x"0221A822"; when 34 => avt <= x"0231A82A"; when 35 => avt <= x"0241A822"; when 36 => avt <= x"0251A82A"; ----------------- when 37 => avt <= x"0261A802"; --------- when 38 => avt <= x"0271E002"; -- read Xi and sum when 39 => avt
Антиботан аватар за замовчуванням
Med

26.03.2018 21:03-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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