Синтез схеми ПЛІС для інвертора

Курсовой проект - Компьютеры, программирование

Другие курсовые по предмету Компьютеры, программирование

?оступом (RAM/ПДД); память містить тетрадні комірки з адресами від 0х0 до 0хF.

3.Арифметичний і логічний пристрій (ALU/АЛП).

4.Акумулятор (АК/ACC).

5.Однобітові означні прапорці нульового результату і переносу (Zero, Carry).

Розробка архітектури рівня машинних інструкцій

Відомості про інструкції, що виконує процесор “Гном”, подані таблицями 1 і 2.

Таблиця 1 Перелік і функції машинних інструкцій процесора “Гном”

Mнемокод

Символічний

записФункція

load #dACC <= RdЗавантажити акумулятор вмістимим комірки RAM з адресою Rd.

d є в межах [0..15].

load RdACC < = dЗавантажити до акумулятора значення d.

d є в межах [0..15].

store RdRd <= ACCЗберігти вмістиме акумулятора в RAM в комірці Rd.

d є в межах [0..15].

add #dACC<=ACC+d+c;

C <= carry outДодати значення d і прапорець C до акумулятора.

d є в межах [0..15].

add RdACC<=ACC+Rd+c

C <= carry outДодати вмістиме адреси RAM за адресою Rd и прапорець C до акумулятора. d змінюється в межах [0..15]. Сформувати вихідний перенос carry out.

xor RdACC<=ACC xor RdСума по модулю 2 вмістимого RAM за адресою Rd з акумулятором. d знаходиться в межах [0..15].

test RdACC<=ACC and Rd; C <= 1 when ACC=0 else 0;Встановити прапорець С, коли логічний добуток RAM за адресою Rd і акумулятора є нульовим. Інакше скинути прапорець С. d є адресою в межах [0..15].

clear_cC <= 0Записати в прапорець C нуль.

set_cC <= 1Записати в прапорець C одиницю.

skip_cPC <= PC + 1 + CКоли C=1, тоді перестрибнути наступну інструкцію подвійним інкрементуванням програмного лічильника замість одинарного. Коли C=0, тоді виконати наступну інструкцію.

skip_zPC <= PC + 1 + ZКоли Z=1, тоді перестрибнути наступну інструкцію подвійним інкрементуванням програмного лічильника замість одинарного. Коли Z=0, тоді виконати наступну інструкцію.

jump #aPC <= aСтрибнути на програмну адресу a, після чого виконати інструкцію, що розташована за цією адресою. a знаходиться в межах [0..127].

В тексті записки треба обгрунтувати доцільність реалізації кожної поданої машинної інструкції, пояснити до якого класу (CISC або RISC) належить ця система інструкцій, та чи можливе скорочення ціеї системи інструкцій.

Інструкція

КодуванняФаза FETCHФаза DECODEФаза EXECUTE

load Rd0100 d3d2d1d0IR <=(PC) , PC <= PC +1[IR3..IR0]<=([IR3..IR0])ACC <= [IR3..IR0]

load #d0001 d3d2d1d0IR <=(PC) , PC <= PC +1 ACC <= [IR3..IR0]

store Rd0011 d3d2d1d0IR <=(PC) , PC <= PC +1 ([IR3..IR0])<=ACC

add #d0010 d3d2d1d0IR <=(PC) , PC <= PC +1 ACC<=

ACC+[IR3..IR0]+C

add Rd0101 d3d2d1d0IR <=(PC) , PC <= PC +1[IR3..IR0]<=([IR3..IR0])ACC<=

ACC +[IR3..IR0]+C

xor Rd0110 d3d2d1d0IR <=(PC) , PC <= PC +1[IR3..IR0]<=([IR3..IR0])ACC<=

ACC xor [IR3..IR0]

test Rd0111 d3d2d1d0IR <=(PC) , PC <= PC +1[IR3..IR0]<=([IR3..IR0])ACC<=

ACC and [IR3..IR0]

cear_c00000000IR <=(PC) , PC <= PC +1 C <= 0

set_c00000001IR <=(PC) , PC <= PC +1 C <= 1

skip_c00000010IR <=(PC) , PC <= PC +1 PC <= PC + C

skip_z00000011IR <=(PC) , PC <= PC +1 PC <= PC + Z

jump #a1 a6a5a4a3a2a1a0IR <=(PC) , PC <= PC +1 PC <= [IR6..IR0]

Пояснення:

1.IR регістр інструкції, [IR3..IR0] бінарний код, що зберігає його молодша тетрада.

2.([IR3..IR0]) вмістиме комірки памяті даних за адресою, що містить молодша тетрада регістра інструкцій.

3.Виконання будь-якої інструкції розкладено на три фази (стадії):

-FETCH : вибирання нової інструкції з памяті інструкцій на регістр інструкцій, обчислення адреси наступної інструкції програми за правилом “поточна адреса + 1”;

-DECODE : декодування поточної інструкції (в нас це читання операнду з памяті даних до молодшої тетради регістру інструкцій);

-EXECUTE : виконання поточної інструкції за її алгоритмом, що може вимагати корекції вмістимого програмного лічильника РС.

4.d3, d2, d1, d0, a6, a5, a4, a3, a2, a1, a0 позначки окремих бітів формату машинної інструкції.

Зазначимо, що процесор не є конвеєрним. Отже, доки виконуються всі три стадії поточної інструкції, обробка наступної інструкції не розпочинається. Тут відсутні відомі негативні ефекти конвеєра інструкцій, а саме, наявність і необхідність скасування залежностей даних, керування і структур. Питання, на яке потрібно подати письмову відповідь в пояснювальній записці, є наступним: чи можна цю систему інструкцій конвеєризувати? Коли так, то як це зробити?

Розробка тестової програми

Призначення тестової програми верифікувати розроблений і імплементований до ПЛІС компютер як єдність апаратних і програмних засобів. Маючи тестову програму, верифікацію можна провести двома способами.

1.Здійснити віртуальне часове моделювання функціонування компютера, що керується тестовою програмою (засобами програмного симулятора ModelSim).

2.Завантажити отриманий проектуванням файл конфігурування цільової ПЛІС до фізичного емулятора (прототипної плати) і за допомогою генератора сигналу і осцилографа (або їх спрощених аналогів) переконатися в тому, що поведінка імплементованого до ПЛІС компютера визначена тестовою програмою. Маємо реальну верифікацію.

Обидва способи не гарантують виявлення усіх можливих помилок в результатах проектування. Проте імовірність наявності помилок вони зменшують. Гарантоване виявлення всіх помилок методом верифікації можна досягти лише в спосіб перебору всіх варіантів, що не завжди неможливе. При цьому залишається невідомим метод математичного доведення коректності функціонування машини з програмою, що зберігається в памяті.

Пропонуємо наступну тестову програму для тетрадної машини, що додає дворозрядні гексадецимальні числа, виконуючи операцію поцифрово, в два прийоми.

Таблиця 3 Асемблерна тестова програма і її машинні коди

Адреса Машинний код Асемблер Коментар

000018Load #8

Iніціалізувати регістри числами, що додаються, а саме:

0x29 + 0x48 = 0x71.

Обнулити перенос.

Знайти суму молодших ци?/p>