DevioLabавтоматичне керування капіталом
ПРАЦЮЄ 24/7
КРИПТОВАЛЮТИ · АКЦІЇ · 10 БІРЖ

Портфель, який керується автоматично

DevioLab підбирає стратегії, відстежує ринки та автоматизує купівлю і продаж активів. Кількість доступних криптовалют, акцій і торгових можливостей зростає щодня.

10підключених біржCrypto + Stocksв одному портфелі24/7автоматичний контроль

Проектування спеціалізованого обчислювача

Оригінальна назва роботи

Міністерство освіти і науки України

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

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

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

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

Про що ця робота

У курсовій роботі виконано проектування спеціалізованого обчислювача згідно із заданим варіантом та робочою формулою. Розроблено структурні, функціональні та принципові схеми пристрою, а також його VHDL-реалізацію.

У роботі розглядаються

  • Спеціалізований обчислювач
  • Комп’ютерна схемотехніка
  • Мікропрограмний автомат
  • Оперативно запам’ятовуючий пристрій
  • Постійний запам’ятовуючий пристрій
  • VHDL-моделювання
  • Цифрові пристрої

Зміст і розділи

  1. Завдання
  2. Реалізація обчислювача
  3. Блок схема алгоритму обчислення
  4. Функціональна схема обчислювача
  5. Принципова схема та її опис
  6. Автомат керування
  7. VHDL реалізація проекту
  8. Список використаної літератури
Для кого:Студенти технічних спеціальностей, викладачі та фахівці з комп'ютерної схемотехніки і цифрової електроніки.
Викладачі:Кузьо М.М.

Ключові поняття

обчислювачмікропрограмний автоматОЗППЗПшина данихVHDLтактсхемотехніка

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

Міністерство освіти і науки України Національний університет “Львівська політехніка” Кафедра ЕОМ Курсова робота "Проектування спеціалізованого обчислювача" з дисципліни: "Комп’ютерна схемотехніка" Прийняв: Старший викладач Кузьо М.М Львів – 2018 2 Зміст 1. Завдання ............................................................................................................... 3 2. Реалізація обчислювача ...................................................................................... 4 2.1 Блок схема алгоритму обчислення.................................................................. 4 2.2 Функціональна схема обчислювача ................................................................ 5 2.3 Принципова схема та її опис ........................................................................... 5 2.3.1 Лічильник ................................................................................................... 5 2.3.2 Оперативно запам’ятовуючий пристрій .................................................. 6 2.3.3 Двійковий суматор ..................................................................................... 9 2.3.4 Регістр зсуву ............................................................................................. 10 2.3.5 Постійний запам’ятовуючий пристрій ................................................. 11 2.3.6 Шинний формувач ................................................................................... 13 2.3.7 Інвертор ..................................................................................................... 14 2.4 Автомат керування ......................................................................................... 16 2.4.1 Структура регістра команд ..................................................................... 17 2.4.2 Формування прошивки ПЗП керуючого автомату ............................... 19 2.5 Обчислення загального часу роботи обчислювача ..................................... 23 3. VHDL реалізація проекту ..................................................................................... 24 3.1 Архітектура обчислювальної машини .......................................................... 24 3.2 Результати моделювання у вигляді часових діаграм .................................. 24 3.3 VHDL опис використаних пристроїв ............................................................ 25 Список використаної літератури ............................................................................. 38 Додатки ...................................................................................................................... 39 3 1. Завдання Розробити спеціалізований обчислювач, що має відповідати наступним вимогам : 1. структурна схема обчислювача : мікропрограмний автомат Мілі; 2. робоча формула : див. таблицю (варіант задається керівником проекту); 3. формат даних : 8 бітний доповняльний код 4. інформаційний обмін здійснюється через паралельну 8-ти розрядну двонаправлену шину даних за допомогою додаткових сигналів синхронізації ( рівні сигналів сумісні з ТТЛ ); 5. керуючий автомат реалізувати на основі ПЗП та регістра; напруга живлення та тактові імпульси надходять від зовнішньог о джерела а сигнал початкового скидання також формується ззовні. № N Формула 10 11 Yi = 5∙Xi/8– Xi+1/4 4 2. Реалізація обчислювача 2.1 Блок схема алгоритму обчислення Початок Встановлення лічильника в початковий стан і=5 Запис данних в пам ять І++ Р_15=0 НІ Встановлення лічильника в початковий стан і=5 Так Запис першого операнда в регістр 1 І++ Запис 2-го операдна в регістр 2 І-- Запис результату обчислень в ОЗП І++ Р_15=0 НІ Встановлення лічильника в початковий стан і=5 Так Читання даних з ОЗП та вивід І++ Р_15=0 НІ Так Кінець 5 2.2 Функціональна схема обчислювача Функціональна схема обчислювача знаходиться в додатку 1. 2.3 Принципова схема та її опис Принципова схема знаходиться в додатку 2. 2.3.1 Лічильник Лічильником називають послідовнісний цифровий пристрій, призначений для підрахунку та запам’ятовування числа імпульсів, поданих на його лічильний вхід. До синхронних лічильників відносяться лічильники, в яких переключення розрядів відбувається одночасно, незалежно від віддаленості розряду від лічильного входу. Це досягається подаванням на всі тригери синхронізуючих імпульсів, які додатнім або від’ємним перепадом викликають переключення тригерів у відповідності із логікою роботи лічильника. Завдяки такій синхронізації досягається мінімальний час встановлення лічильника, який не перевищує час встановлення одного тригера, чим забезпеч ується максимальна частота зміни станів лічильника. На рис. 1 подана мікросхема серії ТТЛ К155ИЕ7, яка являє собою лічильник. D1 D2 D4 D8 L R +1 -1 CT2 1 2 4 8 15 1 4 5 14 9 10 11 2 6 7 3 ≥0 ≥15 12 13 8 – Gnd; 16 - +5V Рис.1. Лічильник Лічильник представляє із себе двійковий синхронний лічильник. И Е7 має асинхронне скидання і асинхронне початкове завантаження. 6 Таблиця істинності лічильника подана на рис. 6. Рис.2. Таблиця істинності лічильника 2.3.2 Оперативно запам’ятовуючий пристрій Запам’ятовуючі пристрої (ЗП) складають самостійний, широко розвинений клас мікросхем середнього, великого і надвеликого ступеня інтеграції. Напівпровідникові ЗП за режимом занесення інформації поділяються на оперативні і постійні, за принципом вибірки інформації – на пристрої з довільною та з послідовною вибіркою, за технологією виготовлення – на біполярні та уніполярні. Оперативні запам’ятовуючі пристрої (ОЗП) поділяються на дві великі групи: статичні і динамічні. В накопичувачах статичних ОЗП застосовуються тригерні елементи пам’яті. В ОЗП динамічного типу запам’ ятовуючим елементом служить конденсатор, в якому інформація зберігається в формі наявності або відсутності заряду. Перевагою статичних ОЗП перед динамічними є відсутність схеми регенерації інформації, що значно спрощує керування. Крім того, швидкодія статичних ОЗП суттєво перевищує швидкодію динамічних ОЗП. З іншого боку, ємність мікросхем динамічних ОЗП набагато вища, ніж статичних. 7 На рис. 4 наведено типову структурну схему напівпровідникового ОЗП, яка складається з наступних типових вузлів: матриці запам’ятовуючих елементів (ЗЕ), дешифраторів рядків і стовбців (DCX, DCY) пристрою запису (ПЗ), пристрою читання (ПЧ) і пристрою керування (ПК). При об’єднанні ЗП в систему пам’яті використовуються типові елементи, пов’язані з вхідними та вихідними схемами. Вхідні схеми являють собою логічні елементи, через які інформаційні, керуючі і адресні сигнали надходять в ЗП. Вхідні інформаційні сигнали DI надходять в пристрій запису ПЗ, який служить для записування інформації в елементи пам’яті, об’єднані в матриці ЗЕ. Вихідні інформаційні сигнали DO зчитуються із ЗП через пристрій читання ПЧ. Керуючі сигнали CS і WR надходять в пристрій керування ПК і пристрій запису ПЗ і визначають режим роботи ЗП (запис, збереження, зчитува ння інформації). Рис.4 Структурна схему напівпровідникового ОЗП В даній роботі у якості запам’ятовуючих елементів використовується мікросхема моделі CY7C128A(RAM). Для запису шістнадцяти розрядних слів використовується дві мікросхеми. В яких використовуються такі входи: А10…А0 – адресні входи, WE – Вхід дозволу запису та зчитування OE – вхід управління станом вхідного буфера DCX ПЗ ПК DCY ПЧ Матриця ЗЕ DC A0..AN DI CS WR 8 СE - Вхід вибору кристала Таблиця даного ОЗП приведена в таблиці 1. Таблиця 1 Режим CE OE WE DQ Збереження 0 1 1 Z Запис 0 0 0 DATAin Читання 0 0 1 DATAout Неробочий режим 1 X X Z Рис. 5 Умовне графічне позначення ОЗП CY7C128A Рис. 6 Цикл читання 1 Рис. 7 Цикл читання 2 9 Рис. 8 Цикл запису WE Рис. 9 Цикл запису CE 2.3.3 Двійковий суматор Суматори – це комбінаці йні пристрої, що здійснюють основну арифметичну операцію – додавання чисел в двійковому коді. Найбільш поширені двійкові повні суматори. Кожний розряд двійкового повного суматора має три входи (A і B – для доданків, P0 – сигнал переносу від попереднього розряду) і два виходи (S – суми і P – сигналу переносу в наступний розряд). Входи A, B і P0 в загальному рівноправні. Сигнал суми S приймає значення лог.1 при непарній кількості одиниць на входах A, B і P0, і лог.0 при парній. Сигнал переносу P рівень лог.1 при кількості одиниць на входах, рівній 2 або 3. Логічні функції виходів повного одно-розрядного суматора: P0AP0BBAP P0BAS •••= = Мікросхема SN74S283 – це швидкодіючий повний 4-розрядний двійковий суматор. В якому використовуються такі входи та виходи : А0…А4 - входи даних 10 В0…В4 –входи даних Р0 – вхід переносу Р4 – вихід сигналу переносу S1…S4 – виходи на яких появляються суми вхідних слів Рис. 10 Умовне графічне позначення суматора SN74S283 2.3.4 Регістр зсуву Регістри – це послідовні пристрої, призначені для прийому, збереження, простих перетворень та передачі двійкових кодів. Під простими перетвореннями розуміють зсув кодів на задану кількість розрядів, а також перетворення послідовного двійкового коду в паралельний і паралельного в послідовний. Базовими елементами регістрів є тригери, які доповнюються комбінаційними логічними елементами для реалізації певних зв’язків між розрядами регістра і для керування прийомом та передачею операндів. Одне з функціональних призначень регістрів – оперативна пам ’ять для багато розрядних двійкових кодів. Мікросхема К555ИР22 (рис. 11) - восьмирозрядний регістр зберігання інформації, з можливістю перекладу виходів у високоімпедансний стан. Запис інформації в тригери регістра відбувається при подачі лог. 1 на вхід ER, в цьому випадку сигнали на виходах регістра повторюють вхідні, регістр << прозорий> для сигналів на входах D1 - D8. При подачі лог. 0 на вхід З регістр переходить в режим зберігання інформації. 11 Рис. 11 Умовне графічне позначення регістра зсуву К555ИР22 Рис. 12 Таблиця істинності регістра зсуву К555ИР22 2.3.5 Постійний запам’ятовуючий пристрій Постійні запам'ятовуючі пристрої призначені для зберігання одноразово записаної інформації, яка має зберігатися навіть за умов знеструмлення комп'ютеру. Т акою інформацією є, наприклад, дані і програми, потрібні для завантаження операційної системи та керування роботою зовнішніх пристроїв комп'ютеру ( BIOS). Таким чином, постійний запам'ятовуючий пристрій – це комбінаційна багато входова схема з одним або кіл ькома виходами Q0,...,Qk- ПЗП призначені для зберігання інформації, яка залишається незмінною протягом всього часу роботи пристрою. Ця інформація не зникає при 12 відключенні напруги живлення. Тому в ПЗП можливий лише режим зчитування інформації, причому зчитування інформації не супроводжується її порушенням. Рис.13 Умовне графічне позначення постійного запам’ятовуючого пристрою К155РЕ4 13 2.3.6 Шинний формувач Шинний формувач представляє 8 - розрядний паралельний передатчик з три стабільними виходами і використовується як буферний пристрій шини даних в мікропроцесорних системах. Пристрій передає данні з шини А в шину В або з B шини у А шину , в залежності від логіки рівня в напрямку контролю (DIR - вхід керування напрямком передачі ). OUT -Enable (OE) вхід може бути використаний для відключення пристрою, щоб шина була надійно ізольована. Рис.15 Умовне графічне позначення шинного формувача SN74LV245 Таблиця істинності показана в табл. 4. Таблиця 4 Dir OE 0 0 A<=B 0 1 ZZZZZ 1 0 B<=A 1 1 ZZZZZ 14 Рис.16 Часові діаграми тривалості імпульсу формувача SN74LV245 Рис.17 Графік часової затримки сигналів SN74LV245 2.3.7 Інвертор Інвертор представляє собою пристрій для інверсії двійкових розрядів. Для нашого спеціалізованого обчислювача ми вибрали мікросхему 7404, яка містить в собі 6 незалежних інверторів і працює за логічною формулою Y=/A. 15 Таблиця істинності інвертора Входи A Виходи Y H L HL 16 2.4 Автомат керування Мікропрограма у відповідності із заданим варіантом В даному випадку: А0-A20– стани мікро програмного автомата; Мікропрограма обчислювального автомата А0: Скидання лічильника йти до А1 А1: Початок вводу чисел йти до А2 А2: Відкрити буфер йти до А3 А3: Запис числа до ОЗП йти до А4 А4: Відключити ОЗП йти до А5 А5: Лічильник +1, Якщо P_15 йти до А6, інакше А2 А6: Скидання лічильника йти до А7 А7: Зчитування даних з ОЗП йти до А8 А8: Запис даних до першого регістру йти до А9 А9: Лічильник +1 йти до А10 А10: Зчитування даних з ОЗП йти до А11 А11: Запис даних до другого регістру йти до А12 А12: Лічильник -1 йти до А13 А13: Відкрити буфер йти до А14 А14: Запис даних до ОЗП йти до А15 А15: Лічильник +1, Якщо P_15 йти до А16. Інакше А7 А16: Скидання лічильника йти до А17 А17: Читання даних з ОЗП йти до А18 A18: Відкрити буфер Йти до А19 А19: Відключити ОЗП і буфер Йти до А20 А20: Лічильник +1, Якщо P_15 Йти до А0, інакше А17 17 2.4.1 Структура регістра команд Таблиця відповідності виводів регістру D15 та керуючих сигналів: Q1 S5 Q2 S4 Q3 S3 Q4 S2 Q5 S1 Q6 DIR2 Q7 OE2 Q8 OE1 Таблиця відповідності виводів регістру D17 та керуючих сигналів: Q1 ER2 Q2 CL2 Q3 CL1 Q4 ER1 Q5 WE Q6 OE Q7 INC Q8 DEC 18 Таблиця відповідності виводів регістру D19 та керуючих сигналів: Q1 V Q2 Q3 Q4 Q5 Q6 Q7 Q8 19 2.4.2 Формування прошивки ПЗП керуючого автомату Для занесення інформації в ПЗП необхідно скласти таблицю прошиття, яка встановлює відповідність між адресами і даними. Занесення інформації в ПЗП здійснюється користувачем за допо могою програматора. В моєму випадку таблиця прошиття має такий вигляд Для занесення інформації в ПЗП необхідно скласти таблицю прошиття, яка встановлює відповідність між адресами і даними. Занесення інформації в ПЗП здійснюється користувачем за допо могою програматора. В моєму випадку таблиця прошиття має такий вигляд P_15 S5 S4 S3 S2 S1 S5 S4 S3 S2 S1 DIR2 OE2 OE1 ER2 CL2 CL1 ER1 WE OE INC DEC V 1 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1 0 0 1 1 1 0 1 0 2 0 0 0 0 0 1 0 0 0 1 0 0 1 1 1 0 0 1 1 1 0 1 1 3 0 0 0 0 1 0 0 0 0 1 1 0 0 1 1 0 0 1 1 1 0 1 1 4 0 0 0 0 1 1 0 0 1 0 0 0 0 1 1 0 0 1 0 0 0 1 1 5 0 0 0 1 0 0 0 0 1 0 1 0 0 1 1 0 0 1 1 1 0 1 1 6 0 0 0 1 0 1 0 0 0 1 0 0 1 1 1 0 0 1 1 1 1 1 1 P_15 S5 S4 S3 S2 S1 S5 S4 S3 S2 S1 DIR2 OE2 OE1 ER2 CL2 CL1 ER1 WE OE INC DEC V 7 0 0 0 1 1 0 0 0 1 1 1 1 1 1 1 0 0 1 1 1 0 1 0 8 0 0 0 1 1 1 0 1 0 0 0 1 1 1 1 0 0 0 1 0 0 1 1 9 0 0 1 0 0 0 0 1 0 0 1 1 1 1 1 0 1 0 1 0 0 1 1 10 0 0 1 0 0 1 0 1 0 1 0 1 1 1 1 0 0 0 1 1 1 1 1 11 0 0 1 0 1 0 0 1 0 1 1 1 1 1 1 0 0 0 1 0 1 0 1 12 0 0 1 0 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 0 1 0 1 13 0 0 1 1 0 0 0 1 1 0 1 1 1 1 0 0 0 0 1 1 1 1 1 14 0 0 1 1 0 1 0 1 1 1 0 1 1 0 0 0 0 0 1 1 0 1 1 15 0 0 1 1 1 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 16 0 0 1 1 1 1 0 0 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 P_15 S5 S4 S3 S2 S1 S5 S4 S3 S2 S1 DIR2 OE2 OE1 ER2 CL2 CL1 ER1 WE OE INC DEC V 17 0 1 0 0 0 0 1 0 0 0 1 1 1 1 1 0 0 1 1 1 0 1 0 18 0 1 0 0 0 1 1 0 0 1 0 1 1 1 1 0 0 1 1 0 0 1 1 19 0 1 0 0 1 0 1 0 0 1 1 1 0 1 1 0 0 1 1 0 0 1 1 20 0 1 0 0 1 1 1 0 0 0 0 1 1 1 1 0 0 1 1 1 0 1 1 21 0 1 0 0 0 0 1 0 0 0 1 1 1 1 1 0 0 1 1 1 1 1 1 22 1 0 0 0 1 0 0 0 1 1 0 1 1 1 1 0 0 1 1 1 0 1 1 23 1 0 0 1 1 1 1 0 1 1 0 1 1 1 0 0 0 0 1 1 0 1 1 24 1 1 0 0 0 1 0 0 0 0 0 0 1 1 1 0 0 1 1 1 0 1 1 № Поточний стан Наступний стан Керуючі сигнали 20 Таблиця прошиття для ПЗП D14: № Адреса Дані A[10;6] А5 А4 А3 А2 А1 А0 D0 D1 D2 D3 D4 D5 D6 D7 P_15 S5 S4 S3 S2 S1 S5 S4 S3 S2 S1 DIR2 OE2 OE1 Ввід 1 0 1 0 0 0 0 0 0 0 0 0 1 0 1 1 2 0 1 0 0 0 0 1 0 0 0 1 0 0 1 1 3 0 1 0 0 0 1 0 0 0 0 1 1 0 0 1 4 0 1 0 0 0 1 1 0 0 1 0 0 0 0 1 5 0 1 0 0 1 0 0 0 0 1 0 1 0 0 1 6 0 1 0 0 1 0 1 0 0 0 1 0 0 1 1 Обчислення 7 0 1 0 0 1 1 0 0 0 1 1 1 1 1 1 8 0 1 0 0 1 1 1 0 1 0 0 0 1 1 1 9 0 1 0 1 0 0 0 0 1 0 0 1 1 1 1 10 0 1 0 1 0 0 1 0 1 0 1 0 1 1 1 11 0 1 0 1 0 1 0 0 1 0 1 1 1 1 1 12 0 1 0 1 0 1 1 0 1 1 0 0 1 1 1 13 0 1 0 1 1 0 0 0 1 1 0 1 1 1 1 14 0 1 0 1 1 0 1 0 1 1 1 0 1 1 0 15 0 1 0 1 1 1 0 0 1 1 1 1 1 1 0 16 0 1 0 1 1 1 1 0 0 1 1 1 1 1 1 Вивід 17 0 1 1 0 0 0 0 1 0 0 0 1 1 1 1 18 0 1 1 0 0 0 1 1 0 0 1 0 1 1 1 19 0 1 1 0 0 1 0 1 0 0 1 1 1 0 1 20 0 1 1 0 0 1 1 1 0 0 0 0 1 1 1 21 0 1 1 0 0 0 0 1 0 0 0 1 1 1 1 Команди переходів 22 0 0 0 0 0 1 0 0 0 1 1 0 1 1 1 23 0 0 0 0 1 1 1 1 0 1 1 0 1 1 1 24 0 0 1 0 0 0 1 0 0 0 0 0 0 1 1 21 Таблиця прошиття для ПЗП D16: № Адреса Дані A[10;6] А5 А4 А3 А2 А1 А0 D0 D1 D2 D3 D4 D5 D6 D7 P_15 S5 S4 S3 S2 S1 ER2 CL2 CL1 ER1 WE OE INC DEC Ввід 1 0 1 0 0 0 0 0 1 0 0 1 1 1 0 1 2 0 1 0 0 0 0 1 1 0 0 1 1 1 0 1 3 0 1 0 0 0 1 0 1 0 0 1 1 1 0 1 4 0 1 0 0 0 1 1 1 0 0 1 0 0 0 1 5 0 1 0 0 1 0 0 1 0 0 1 1 1 0 1 6 0 1 0 0 1 0 1 1 0 0 1 1 1 1 1 Обчислення 7 0 1 0 0 1 1 0 1 0 0 1 1 1 0 1 8 0 1 0 0 1 1 1 1 0 0 0 1 0 0 1 9 0 1 0 1 0 0 0 1 0 1 0 1 0 0 1 10 0 1 0 1 0 0 1 1 0 0 0 1 1 1 1 11 0 1 0 1 0 1 0 1 0 0 0 1 0 1 0 12 0 1 0 1 0 1 1 0 1 0 0 1 0 1 0 13 0 1 0 1 1 0 0 0 0 0 0 1 1 1 1 14 0 1 0 1 1 0 1 0 0 0 0 1 1 0 1 15 0 1 0 1 1 1 0 0 0 0 0 0 0 0 1 16 0 1 0 1 1 1 1 0 0 0 0 1 1 1 1 Вивід 17 0 1 1 0 0 0 0 1 0 0 1 1 1 0 1 18 0 1 1 0 0 0 1 1 0 0 1 1 0 0 1 19 0 1 1 0 0 1 0 1 0 0 1 1 0 0 1 20 0 1 1 0 0 1 1 1 0 0 1 1 1 0 1 21 0 1 1 0 0 0 0 1 0 0 1 1 1 1 1 Команди переходів 22 0 0 0 0 0 1 0 1 0 0 1 1 1 0 1 23 0 0 0 0 1 1 1 0 0 0 0 1 1 0 1 24 0 0 1 0 0 0 1 1 0 0 1 1 1 0 1 22 Таблиця прошиття для ПЗП D18: № Адреса Дані A[10;6] А5 А4 А3 А2 А1 А0 D0 D1 D2 D3 D4 D5 D6 D7 P_15 S5 S4 S3 S2 S1 V Ввід 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 1 0 0 0 0 1 1 0 0 0 0 0 0 0 3 0 1 0 0 0 1 0 1 0 0 0 0 0 0 0 4 0 1 0 0 0 1 1 1 0 0 0 0 0 0 0 5 0 1 0 0 1 0 0 1 0 0 0 0 0 0 0 6 0 1 0 0 1 0 1 1 0 0 0 0 0 0 0 Обчислення 7 0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 8 0 1 0 0 1 1 1 1 0 0 0 0 0 0 0 9 0 1 0 1 0 0 0 1 0 0 0 0 0 0 0 10 0 1 0 1 0 0 1 1 0 0 0 0 0 0 0 11 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 12 0 1 0 1 0 1 1 1 0 0 0 0 0 0 0 13 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0 14 0 1 0 1 1 0 1 1 0 0 0 0 0 0 0 15 0 1 0 1 1 1 0 1 0 0 0 0 0 0 0 16 0 1 0 1 1 1 1 1 0 0 0 0 0 0 0 Вивід 17 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 18 0 1 1 0 0 0 1 1 0 0 0 0 0 0 0 19 0 1 1 0 0 1 0 1 0 0 0 0 0 0 0 20 0 1 1 0 0 1 1 1 0 0 0 0 0 0 0 21 0 1 1 0 0 0 0 1 0 0 0 0 0 0 0 Команди переходів 22 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 23 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 24 0 0 1 0 0 0 1 1 0 0 0 0 0 0 0 23 2.5 Обчислення загального часу роботи обчислювача • Такт вводу: Для того, щоб записати одне число в пам’ять необхідно 4 такти. Ми записуємо 10 чисел, тому для запису чисел необхідно 40 тактів. Щоб закінчити цикл вводу, ми переходимо на 1 старшу адресу, тому необхідно ще 1 такт. Загалом 41 такт. • Такт виводу: Для того, щоб вивести одне число в пам’ять необхідно 4 такти. Ми виводимо 10 чисел, тому для запису чисел необхідно 40 тактів. Щоб закінчити цикл виводу, ми переходимо на 1 старшу адресу, тому необхідно ще 1 такт. Загалом 41 такт. • Такт обчислення: Для обчислення одного результату необхідно 9 тактів. Ми виконуємо 10 обчислень, тому для множення необхідно 90 тактів. Щоб закінчити цикл обчислення, ми переходимо на 1 старшу адресу, тому необхідно ще 1 такт. Загалом 91 тактів. Додаємо ще 2 такти на виставлення адреси початку роботи, та проміжні 2 такти. Загальна к-сть тактів: 176 тактів. 24 3. VHDL реалізація проекту 3.1 Архітектура обчислювальної машини 3.2 Результати моделювання у вигляді часових діаграм Рис.19. Часова діаграма роботи VHDL моделі 25 3.3 VHDL опис використаних пристроїв counter.vhd library IEEE; use IEEE.STD_LOGIC_1164.all; use IEEE.STD_LOGIC_UNSIGNED.all; entity COUNTER_4B is port( CLR : in std_logic; LOAD : in std_logic; ENP : in std_logic; ENT : in std_logic; CLK : in std_logic; D : in std_logic_vector(3 downto 0); RCO : out std_logic; Q : out std_logic_vector(3 downto 0)); end COUNTER_4B; architecture COUNTER_4B of COUNTER_4B is signal val : std_logic_vector (3 downto 0);-- <= (others => "0000000"); begin process (clk,clr,load,enp,ent,d) begin if (clr = '0') then val <="0000"; elsif (clk'event and clk = '1') then if(ENP = '1' and ENT ='1') then val<=val+'1'; end if; elsif (LOAD = '0') then val <= D; end if; end process; process (val) begin Q <= val; if (val = "1111") then RCO <= '1'; else RCO <= '0'; end if; end process; end COUNTER_4B; ram.vhd library IEEE; use IEEE.STD_LOGIC_1164.all; use IEEE.STD_LOGIC_UNSIGNED.all; entity RAM_2Kx8 is 26 port( A : in std_logic_vector (10 downto 0); I_O : inout std_logic_vector (7 downto 0); CS : in std_logic; OE : in std_logic; WE : in std_logic ); end RAM_2Kx8; architecture RAM_2Kx8 of RAM_2Kx8 is type ram2Kx8 is array (2047 downto 0) of std_logic_vector (7 downto 0); signal RAM : ram2Kx8;-- <= (others => "0000000"); begin process (cs, a, I_O, oe, we) begin if (cs ='1' or (oe = '1' and we ='1')) then I_O <= (others => 'Z'); elsif (cs='0' and oe = '0' and we = '1') then I_O <= RAM (conv_integer(A)); elsif (cs='0' and we = '0') then RAM (conv_integer(A)) <= I_O; end if; end process; end RAM_2Kx8; rg.vhd library IEEE; use IEEE.STD_LOGIC_1164.all; entity RG_8 is port( MR : in std_logic; --reset CLK : in std_logic; --clock SEL : in std_logic; --load D : in std_logic_vector (7 downto 0); --Input Q : out std_logic_vector (7 downto 0) ); --Output end RG_8; architecture RG_8 of RG_8 is begin process (CLK,D) begin if rising_edge(clk) then if(MR = '1') then Q <= (others => '0'); elsif SEL='0' then Q <=D; end if; end if; 27 end process; -- process (clk) -- begin -- Q <=val; -- end process; end RG_8; full addr.vhd library IEEE; use IEEE.STD_LOGIC_1164.all; entity RG_8 is port( MR : in std_logic; --reset CLK : in std_logic; --clock SEL : in std_logic; --load D : in std_logic_vector (7 downto 0); --Input Q : out std_logic_vector (7 downto 0) ); --Output end RG_8; architecture RG_8 of RG_8 is begin process (CLK,D) begin if rising_edge(clk) then if(MR = '1') then Q <= (others => '0'); elsif SEL='0' then Q <=D; end if; end if; end process; -- process (clk) -- begin -- Q <=val; -- end process; end RG_8; bt.vhd library IEEE; use IEEE.STD_LOGIC_1164.all; use IEEE.STD_LOGIC_UNSIGNED.all; entity BT_8 is port( A : inout std_logic_vector (7 downto 0):="ZZZZZZZZ"; B : inout std_logic_vector (7 downto 0); OE : in std_logic:='1'; DIR : in std_logic ); 28 end BT_8; architecture BT_8 of BT_8 is begin process (OE, DIR,A,B) begin if (OE = '1') then A <= (others =>'Z'); B <= "ZZZZZZZZ"; elsif (oe='0' and DIR = '1') then A <=B; elsif (oe='0' and dir='0') then B <= A; end if; end process; end BT_8; eprom.vhd library IEEE; use IEEE.STD_LOGIC_1164.all; use IEEE.STD_LOGIC_UNSIGNED.all; entity EPROM_64Kx16b is port( A : in std_logic_vector (15 downto 0); O : out std_logic_vector (0 to 15); CS : in std_logic; OE : in std_logic ); end EPROM_64Kx16b; architecture EPROM_64Kx16b of EPROM_64Kx16b is --type ram2Kx8 is array (2047 downto 0) of std_logic_vector (7 downto 0); --signal RAM: ram2Kx8;-- <= (others => "0000000"); -- constant EROM array of std_logic begin O <= "0011011111110000" when A(3 downto 0) = "0000" and A(4)='1' else "0010011111110001" when A(3 downto 0) = "0000" and A(4)='0' else "0011011111110001" when A(3 downto 0) = "0001" and A(4)='1' else "0001011011110010" when A(3 downto 0) = "0001" and A(4)='0' else "0001001011110011" when A(3 downto 0) = "0010" else "0001011011110100" when A(3 downto 0) = "0011" else "0011111111110101" when A(3 downto 0) = "0100" else "0011011111110001" when A(3 downto 0) = "0101" and A(6)='0'else "0010011111110110" when A(3 downto 0) = "0101" and A(6)='1'else "0011010111010111" when A(3 downto 0) = "0110" else "0011010110011000" when A(3 downto 0) = "0111" else 29 "0011010111011001" when A(3 downto 0) = "1000" else "0011110111011010" when A(3 downto 0) = "1001" else "0011011111111011" when A(3 downto 0) = "1010" else "0011011101111011" when A(3 downto 0) = "1011" and A(5)='1'else "0011011101101100" when A(3 downto 0) = "1011" and A(5)='0'else "0011011110111101" when A(3 downto 0) = "1100" and A(5)='1'else "0011011101101100" when A(3 downto 0) = "1100" and A(5)='0'else "0011011111111110" when A(3 downto 0) = "1101" else "0011111111111111" when A(3 downto 0) = "1110" else "0011010111011010" when A(3 downto 0) = "1111" and A(6)='0'else "0011011111110000" when A(3 downto 0) = "1111" and A(6)='1'else "0011011111110000"; end EPROM_64Kx16b; invertor.vhdl library IEEE; use IEEE.STD_LOGIC_1164.all; entity Inv_9 is port( X : in std_logic_vector (7 downto 3); --Input Y : out std_logic_vector (7 downto 3) ); --Output end Inv_9; architecture Inv_9 of Inv_9 is begin process (X) begin Y<=not(X); end process; end Inv_9; top_scheme.vhdl library IEEE; use IEEE.STD_LOGIC_1164.all; entity top_design is port( CLK : in STD_LOGIC; RA : in STD_LOGIC; WR : in STD_LOGIC; RR : out STD_LOGIC; WA : out STD_LOGIC; DATA_BUS : inout STD_LOGIC_VECTOR (7 downto 0) ); end entity top_design; 30 architecture top_design of top_design is signal cntrl_signals : std_logic_vector (15 downto 0); signal i_o_b : std_logic_vector (7 downto 0); signal sram_b : std_logic_vector (7 downto 0):="ZZZZZZZZ"; signal xi1_b : std_logic_vector (7 downto 0); signal xi_rg_b : std_logic_vector (7 downto 0); signal xi_s_b : std_logic_vector (16 downto 0); signal result_b : std_logic_vector (7 downto 0); signal sram_adr_b : std_logic_vector (10 downto 0):="00000000000"; signal cur_state_b : std_logic_vector (15 downto 0):="0000000000000000"; signal xi1_5_b : std_logic_vector (8 downto 0); signal xi_crr : std_logic; signal res_crr : std_logic; signal RCO : std_logic; signal inv_clk : std_logic; constant vcc : std_logic :='1'; constant gnd : std_logic :='0'; signal ggnd : std_logic; signal start_reset : std_logic :='0'; ------------------------------------ signal rg_input : std_logic_vector (7 downto 0); signal Xi1_AddH_A : std_logic_vector (3 downto 0); signal Xi1_AddH_B : std_logic_vector (3 downto 0); signal Res_addH : std_logic_vector (3 downto 0); ------------------------------------ component EPROM_64Kx16b is port( A : in std_logic_vector (15 downto 0); O : out std_logic_vector (0 to 15); CS : in std_logic; OE : in std_logic ); end component; ------------------------------------ component BT_8 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_4B port ( 31 CLK : in STD_LOGIC; CLR : in STD_LOGIC; D : in STD_LOGIC_VECTOR(3 downto 0); ENP : in STD_LOGIC; ENT : in STD_LOGIC; LOAD : in STD_LOGIC; Q : out STD_LOGIC_VECTOR(3 downto 0); RCO : out STD_LOGIC ); end component; ------------------------------------ component FULL_ADDR_4 port ( A : in STD_LOGIC_VECTOR(3 downto 0); B : in STD_LOGIC_VECTOR(3 downto 0); Cin : in STD_LOGIC; Cout : out STD_LOGIC; S : out STD_LOGIC_VECTOR(3 downto 0) ); end component; ------------------------------------ component Inv_9 port ( X : in STD_LOGIC_VECTOR(7 downto 3); Y : out STD_LOGIC_VECTOR(7 downto 3) ); end component; ------------------------------------ component RAM_2Kx8 port ( A : in STD_LOGIC_VECTOR(10 downto 0); CS : in STD_LOGIC; OE : in STD_LOGIC; WE : in STD_LOGIC; I_O : inout STD_LOGIC_VECTOR(7 downto 0) ); end component; ------------------------------------ component RG_8 port ( CLK : in STD_LOGIC; D : in STD_LOGIC_VECTOR(7 downto 0); MR : in STD_LOGIC; SEL : in STD_LOGIC; Q : out STD_LOGIC_VECTOR(7 downto 0) ); 32 end component; --***********************************************************************-- begin -------------------------------------------------- -- process(clk) -- begin -- if not(start_reset = '1') then -- cur_state_b<=(others =>'0'); -- start_reset <='1'; -- end if; -- end process; -------------------------------------------------- process (clk) begin inv_clk <=not clk; end process; -------------------------------------------------- process (cntrl_signals) begin WA<=cntrl_signals(8); RR<=cntrl_signals(7); end process; -------------------------------------------------- process (RCO , RA , WR , cntrl_signals (3 downto 0)) begin rg_input <= ('0' & RCO & RA & WR & cntrl_signals (3 downto 0)); end process; DD1_st_reg : rg_8 port map( CLK => CLK, D => rg_input, MR => GND, SEL => GND, Q => cur_state_b (7 downto 0)); -------------------------------------------------- DD2_eprom : EPROM_64Kx16b port map( A => cur_state_b, O => cntrl_signals, cs => gnd, oe => gnd); -------------------------------------------------- DD3_adr_counter : COUNTER_4B 33 port map( CLK => cntrl_signals(11), CLR => VCC, D => "0100", ENP => VCC, ENT => VCC, LOAD => cntrl_signals(12), Q => sram_adr_b(3 downto 0), RCO => RCO); -------------------------------------------------- DD4_sram : RAM_2Kx8 port map( A => sram_adr_b, CS => GND, OE => cntrl_signals(9), WE => cntrl_signals(10), I_O => sram_b); -------------------------------------------------- DD5_bt_inp : BT_8 port map( DIR => GND, OE => cntrl_signals(13), A => data_bus, B => sram_b); -------------------------------------------------- DD6_Xi1_reg : RG_8 port map( CLK => inv_clk, D => sram_b, MR => GND, SEL => cntrl_signals(5), Q => xi1_b); -------------------------------------------------- DD9_Xi_reg : RG_8 port map( CLK => inv_clk, D => xi1_b, MR => GND, SEL => cntrl_signals(6), Q => xi_rg_b); -------------------------------------------------- DD7_Xi_addL : FULL_ADDR_4 port map( A => xi_rg_b(6 downto 3), B => xi_rg_b(4 downto 1), Cin => GND, 34 Cout => xi_crr, S => xi_s_b(3 downto 0)); -------------------------------------------------- DD8_Xi_addH : FULL_ADDR_4 port map( A(3) => '0', A(2) => '0', A(1) => '0', A(0) => xi_rg_b(7), B(3) => '0', B(2) => xi_rg_b(7), B(1) => xi_rg_b(6), B(0) => xi_rg_b(5), Cin => xi_crr, Cout => ggnd, S => xi_s_b(7 downto 4)); -------------------------------------------------- DD10_inv : Inv_9 port map( X(7 downto 3) => xi1_b(7 downto 3), Y(7 downto 3) => xi_s_b (12 downto 8)); -------------------------------------------------- DD11_Res_addL : FULL_ADDR_4 port map( A => xi_s_b(11 downto 8), B => xi_s_b(3 downto 0), Cin => VCC, Cout => res_crr, S => result_b(3 downto 0)); -------------------------------------------------- process (xi_rg_b) begin Res_addH<="000" & xi_rg_b(7); end process; -------------------------------------------------- DD12_Res_addH : FULL_ADDR_4 port map( A(3) => '1', A(2) => '1', A(1) => '1', A(0) => xi_s_b(12), B => xi_s_b(7 downto 4), Cin => res_crr, Cout => ggnd, S => result_b(7 downto 4)); -------------------------------------------------- 35 DD13_bt_out : BT_8 port map( DIR => GND, OE => cntrl_signals(4), A => result_b, B => data_bus); -------------------------------------------------- end architecture top_design; test.vhdl library IEEE; use IEEE.STD_LOGIC_1164.all; use IEEE.STD_LOGIC_UNSIGNED.all; use IEEE.NUMERIC_STD.all; entity testbench is end entity testbench; architecture testbench of testbench is ---------------------------- component top_design is port( CLK : in STD_LOGIC; RA : in STD_LOGIC; WR : in STD_LOGIC; RR : out STD_LOGIC; WA : out STD_LOGIC; DATA_BUS : inout STD_LOGIC_VECTOR (7 downto 0) ); end component; signal count1,count2 : integer :=0; signal WR,WA,RR,RA, CLK : std_logic:='1'; signal io : std_logic_vector (7 downto 0):=(others =>'Z'); signal data : std_logic_vector (7 downto 0):="11110000"; type ram32x8 is array (32 downto 0) of std_logic_vector (7 downto 0); type ram16x8 is array (9 downto 0) of std_logic_vector (7 downto 0); signal calc_val : ram16x8:=(others =>"00000000"); signal inpt_val : ram16x8:=(others =>"00000000"); type ramx8 is array (26 downto 0) of integer ; signal tmp : ramx8:=(others =>0); begin 36 process begin wait for 10 ns; clk<=not clk; end process; comp_syst : top_design port map( CLK=> CLK, RR=>RR, RA=>RA, WR=>WR, WA=>WA, DATA_BUS=>IO); process begin if count1 = 0 then wait for 100ns; end if; wait for 100ns; if(count1<11) then WR <= '0'; wait on wa; if wa = '0' then io <= data - count1*3; tmp(count1) <= to_integer(unsigned(data - count1*3)); count1<=count1 +1; wait on wa; if wa='1' then io <=(others=>'Z'); wr <='1'; end if; end if; end if; if(count1 = 11 and count2 <10) then calc_val(count2) <= std_logic_vector(to_signed(((tmp(count2))/2 + tmp(count2)/8 - tmp(count2+1)/8),8)); wait on rr; if rr='0' then ra <='0'; wait on io; inpt_val(count2) <= io; wait on clk; wait on clk; wait on clk; wait on clk; 37 ra<='1'; count2<=count2+1; end if; end if; end process; end testbench; 38 Список використаної літератури 1. Павлов В.Н., Ногин В.Н. Схемотехника аналоговых электронных устройств: Учебник для вузов.- М.: Горячая Линия, Телеком, 2001; 2. Хоровиц П., Хилл У. Искусство схемотехники.- М.: Мир,2001; 3. Бойко В.И. Схемотехника электронных систем. Цифровые устройства.- СПб.: БХВ-Петербург, 2004; 4. Угрюмов Е.П. Цифровая схемотехника. — СПб.: БХВ — Санкт – Петербург, 2000; 5. Титце У., Шенк К. Полупроводниковая схемотехника. 12-е изд. Том II: Пер. с нем.- М.: ДМК Пресс, 2007. 39 Додатки
Допоможи студентському архіву

Ми допомогли тобі — допоможи наступному студенту

Файл ще не обрано

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

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

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

Admin

26.02.2023 12:38

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