Міністерство Освіти і Науки, Молоді та Спорту України
Національний Університет “Львівська Політехніка”
Кафедра СКС
з дисципліни “Проектування спеціалізованих комп’ютерних систем”
на тему: "Розробка VHDL – моделі комп’ютера ”.
Львів 2012
Анотація
Роль і значення комп`ютерів у сучасному житті загальновідомі. Апаратні методи розв`язку задач також важливі і у ряді випадків є незамінними. Багато задач, такі як моделювання динамічних об`єктів, керування рухом (особливо керування рухом сукупності об`єктів), обробка сигналів та зображень у реальному часі, реалістична комп`ютерна графіка і подібні, пов`язані з багатократним виконанням порівняно простих операцій, крім того потребують виконання до декількох мільярдів операцій на секунду.
Послідовне виконання великого числа елементарних кроків при комп`ютерному рішенні задачі займає відносно великий час. Крім того, незалежність апаратних засобів від складності задачі, що розв` язується, має і зворотною сторону – навіть для найпростіших задач необхідні блоки, що утворюють комп`ютер в цілому. Таким чином, прості задачі та задачі, що повинні розв`язуватися в реальному масштабі часу, можуть призвести до застосування апаратних варіантів розв`язку. Поняття «реальний час» означає, що результат повинен бути одержаний за обмежений інтервал часу, інакше він стає марним.
Зміст
Структура мікрокомп`ютера . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Зовнішній інтерфейс мікропроцесора Gnome . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8
Порти мікропроцесора . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8
Інтерфейс із зовнішньою пам`ятю . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Переведення мікропроцесора до початкового стану . . . . . . . . . . . . . . . . . . . . . . 10
Програмна модель мікропроцесора . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Програмно-доступні регістри . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10
Множина інструкцій мікропроцесора . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Внутрішня структура мікропроцесора . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12
Інформаційний тракт мікропроцесора Gnome . . . . . . . . . . . . . . . . . . . . . . . . . . .14
Цикли виконання команд . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16
Керуючий автомат . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Проектування зовнішнього спеціалізованого пристрою . . . . . . . . . . . . . . . . . . . . . .19
Програма тестування для мікропроцесора . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Часова діаграма роботи мікропроцесора . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .22
Додаток 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Висновки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .34
Список літератури . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Вступ
Мета курсового проекту полягає в опануваннi методiв проектування вузлiв комп’ютерних систем на прикладi створення моделi однокристального комп`ютера з використанням мови апаратного опису VHDL, виконаннi симуляцiї з наступним тестуванням роботи мiкропроцесорної системи на функцiональному рiвнi. Розроблюваний унiверсальний однокристальний мікрокомп`ютер є рiзновидом унiверсальних комп`ютерів. Вiн мiстить усi стандартнi пристрої, необхiднi для реалiзацiї цифрової системи мiнiмальної конфiгурацiї, а саме – процесор, пам`ять команд, пам`ять даних, внутрiшнiй тактовий генератор. Основою мікрокомп`ютера, що проектується, є мiкропроцесор Gnome – 4-розрядний гiпотетичний неконвеєрний RISC мiкропроцесор, зi спрощеною системою команд та типiв адресування.
Основну увагу пiд час розробки мiкропроцесора придiлено проектуванню архiтектури з використанням мови апаратного опису VHDL, оскiльки при проектуваннi НВiС (надвеликих iнтегральних схем) з використанням рiвнiв архiтектурного, логiчного, топологiчного проектування успiх розробки найбiльшою мiрою залежить вiд результатiв попереднього, архiтектурного рiвня проектування. Вибраний спосiб побудови моделi пристрою за допомогою мови VHDL та iнструментального засобу Аctive-HDL фiрми Аldес забезпечує можливiсть швидкої модифiкацiї архiтектури, є самоописовим, тобто вiн дозволяс швидко виявляти та усувати хиби проектування. Альтернативою опису моделi за допомогою мов апаратного опису є схемотехнiчний синтез та синтез архiтектури з використанням функцiй алгебри логiки.
Синтез архiтектури з використанням функцiй алгебри логiки вимагає вiд розробника опису схеми в термiнах заданої множини логiчних функцiй. Такий пiдхiд є ефективний при побудовi пристроїв невеликої складностi. Суто теоретично функцiонування можна описати даним способом, але через велику складнiсть вiн є неприйнятним.
Метод схемотехнiчного синтезу базується на синтезi з використанням як окремих логiчних функцiй, так i елементiв, що побудовано на основi логiчних функцiй. Схемотехнiчний дизайн є зручним i наочним для схем невеликої складностi. Вiн дозволяс зручно втiлювати евристичнi схемотехнiчнi рiшення. Проте цей метод є практично неприйнятним для схем великої складностi (вiд 10 тисяч логiчних елементiв), оскiльки складно формулюсться, не дає змоги швидко модифiкувати проект, вчасно виявляти та усувати хиби проектування.
Мова VHDL дозволяє охопити водночас декiлька рiвнiв проектування вiд архiтектурного до логiчного. Ця мова апаратного опису дас змогу описати пристрiй як на поведiнковому, так i на структурному рiвнях та провести симуляцiю. Тут синтез топологiї кристала виконують засобами автоматизованого синтезу на основi поведiнкового та структурного описiв пристрою. У складних проектах застосування мови VHDL та потужного засобу логiчного синтезу дозволяї синтезувати пристрої, якi за ефективнiстю перевищують аналогiчнi, з використанням схемотехнiчного методу синтезу.
Технічне завдання
Розробити VHDLмодель мікрокомп`ютера з використанням пакету Active-HDL. Провести симуляцію на функціональному рівні блоків мікрокомп`ютера. Скласти програму та провести симуляцію виконання програми мікропроцесором.
Проектування мікропроцесорної системи виконати в такій послідовності:
Проектування та тестування компонентів інформаційного тракту мікропроцесора, блока зовнішньої пам`яті та зовнішнього суматора.
Проектування та тестування інформаційного тракту мікропроцесора.
Проектування та тестування керуючого автомату.
Проектування та тестування мікропроцесора.
Складання асемблерної програми та тестування мікрокомп`ютера загалом.
Розробити зовнішній суматор, що виконує функцію додавання двох 4-х розрядних чисел та має таку структуру :
Регістер для запису першого операнду REG1;
Регістер для запису другого операнду REG2;
Регістер для запису результату REZ;
Керування відбувається за допомогою двохрозрядної шини — comand
Таблиця істиності:
comand
Дія яка виконується
00
Заноситься перший операнд в регістр REG1
01
Заноситься другий операнд в регістр REG2
10
Зчитуємо результат операції з регістру REZ і записуємо його в акумулятор.
Опис проекту
1. Структура мікрокомп`ютера
Базова структура мікрокомп’ютера містить мікропроцесор Gnome, блок зовнішньої пам’яті та два зовнішніх спеціалізованих пристрої (рис.1.1). Наведена структура мікрокомп’ютера не є функціонально завершеною, оскільки відсутній інформаційний зв’язок поміж мікрокомп’ютером та зовнішнім оточенням. З погляду учбового функціонального проектування таке обмеження не є критичним.
Рис.1.1. Структура мікрокомп’ютера
Зовні на мікрокоп`ютер надходять два сигнали: clock та reset. Перший є сигналом синхронізації, а другий – загальним скидом.
2 Зовнішній інтерфейс мікропроцесора Gnome
2.1 Порти мікропроцесора
Мікропроцесор Gnome має необхідну кількість інтерфейсних ліній/портів (address, data, csb, web, oeb), які дозволяють легко та з мінімальними витратами організувати взаємозв’язок поміж мікропроцесором Gnome та зовнішньою пам’яттю.
Розглянемо детально призначення портів мікропроцесора:
data – 8-розрядна двонаправлена шина даних;
address – 8-розрядна адресна шина (можливе фізичне звертання до 256 комірок зовнішньої пам'яті);
csb – керуючий сигнал вибору мікросхеми. Якщо csb='1', тоді обирається один із зовнішніх пристроїв, інакше звертання ведеться до пам`яті;
oeb – сигнал дозволу видачі інформації на шину даних; data (oeb='0' – дозвіл);
web – стробовий сигнал запису даних (web=‘0’ – запис);
reset – сигнал початкового скиду, рівень лог. '1' переводить мікропроцесор до початкового стану;
clock – на цей вхід надходять синхронізуючі імпульси з тактового генератора;
data_out — 8-ми розрядний вхід даних із зовнішнього суматора;
ex_add — вхід ознаки результату зовнішнього суматора;
comand_out — вихід команди керування зовнішнім суматором;
Слід зауважити, що сигнал oeb дозволу видачі даних та стробовий сигнал запису даних web водночас активними бути не можуть.
2.2 Інтерфейс з зовнішньою пам'яттю
Обмін інформацією між мікропроцесором та зовнішньою пам’яттю виконують 8-бітними словами. Запис/читання інформаційного слова мікропроцесором між зовнішньою пам’яттю та мікропроцесором виконується за один цикл. Це можливе, оскільки невеликий об’єм пам’яті (256х8) дозволяє інтегрувати на одному кристалі ядро процесора та зовнішню пам’ять. Насправді використовується лише перші 128 комірок пам`яті, оскільки адресний простір поділяють між собою зовнішня пам`ять та два зовнішніх пристрої (див.рис.2.2.1).
Зовнішня пам`ять є пам`ятю типу RAM і використовується для читання програми для мікропроцесора і зберігання даних.
Читання інформаційного слова з пам’яті (рис.2.2.2) виконують у такій послідовності: після надходження зростаючого фронту тактового імпульсу мікропроцесор формує адресу комірки пам’яті на шині address та сигнал дозволу видачі блоком пам'яті інформації на шину даних (oeb=’0’), блок пам’яті розміщує прочитану інформацію з комірки пам’яті за вказаною адресою на шині даних data. При подальшому надходженні зростаючого фронту тактового імпульсу мікропроцесор використовує вже сформовані дані з шини даних, записуючи їх у внутрішній регістр.
Рис.2.2.2. Часова діаграма читання даних із зовнішньої пам’яті
З вищенаведеного зрозуміло, що розглядуваний мікропроцесор фізично може адресувати 128 8-розрядних комірок зовнішньої пам’яті. Проте можливість повноцінного використання всього простору пам’яті обмежується.
Тут під час читання вмісту даних комірок використовують тільки 8-розрядні слова, але процесор має 4-розрядну внутрішню архітектуру і використовує останню тетраду.
2.3 Переведення мікропроцесора до початкового стану
Переведення мікропроцесора до початкового стану виконується асинхронним сигналом reset. При надходженні reset=’1’ встановлюються в нульовий стан всі регістри у регістровому файлі, внутрішні регістри мікропроцесора. Сам мікропроцесор переходить в режим читання даних зовнішньої пам’яті за адресою “00000000” (цикл IF).
На цей сигнал реагують також обидва зовнішні пристрої і «обнулюють» свої внутрішні регістри.
3. Програмна модель мікропроцесора
Програмна модель має певні особливості, на які необхідно звернути увагу. По-перше, мікропроцесор Gnome має класичну Гарвардську архітектуру, по-друге, розглядуваний процесор є RISC процесором, в якому використовується тільки пряма та безпосередня адресація операндів.
3.1 Програмно-доступні регістри
ACC – акумулятор є 4-розрядним регістром, призначеним для запису та збереження даних. Результат виконання арифметико-логічних інструкцій заноситься безпосередньо в акумулятор;
C – регістр ознаки переносу. Програмно доступний регістр стану програми. Значення регістра формується при виконанні арифметичних інструкцій, встановлене в ‘1’ значення вказує на переповнення акумулятора. Регістр може встановлювати користувач за допомогою команд встановлення та скиду ознаки переносу. Значення регістра ознаки переносу використовують арифметичні інструкції та команди умовного переходу;
Z – регістр ознаки нульового значення. Значення регістра формується при виконанні логічних операцій, значення регістра дорівнює ‘1’ при набутті значення “0000” після виконання логічної операції. Регістр не може безпосередньо встановлювати користувач. Значення регістра ознаки нульового значення використовують команди умовного переходу;
PC – лічильник команд. Формує поточну адресу інструкції в пам’яті команд. Регістр містить 7 розрядів. Значення регістра PC збільшується на одиницю при виборі кожного байту команди, значення регістра можна встановити за допомогою інструкції переходу.
PC1 – регістр, що зберігає «старе» значення лічильника команд під час виконання підпрограми обробки переривання.
3.2 Множина інструкцій мікропроцесора
Система команд мікропроцесора Gnome містить 15 інструкцій (табл.3.2.1)
Табл.3.2.1. Множина інструкцій мікропроцесора
Інструкція
Код
Призначення
Дія
CLEAR_C
00000000
Встановити значення регістра ознаки переносу С в ‘0’
C<=’0’
SET_C
00000001
Встановити значення регістра ознаки переносу С в ‘1’
C<=’1’
SKIP_C
00000010
Ігнорувати наступну інструкцію, якщо регістр ознаки переносу є встановленим (С=’1’)
PC<=PC+C
SKIP_Z
00000011
Ігнорувати наступну інструкцію, якщо регістр ознаки нуля є встановленим (Z=’1’)
PC<=PC+Z
LOAD_IMM
0001dddd
Завантажити безпосередньо дані dddd/2/ в акумулятор (ACC).
ACC<=IR[3:0]
ADD_IMM
0010dddd
Додати dddd/2/ до акумулятора, результат помістити в акумулятор. Регістр ознаки переносу встановлюється в ‘1’ у разі переповнення регістра акумулятора.
ACC<=ACC+IR[3:0]
if ACC+IR[3:0] > F then C<=’1’
STORE_DIR
0011rrrr
Зберегти вміст акумулятора в регістрі загального призначення RF за номером rrrr/2/.
RF[IR[3:0]]<=ACC
LOAD_DIR
0100rrrr
Завантажити у акумулятор вміст регістра загального призначення RF за номером rrrr/2/.
ACC<=RF[IR[3:0]]
ADD_DIR
0101rrrr
Додати вміст регістра загального призначення RF за номером rrrr/2/ до акумулятора, результат помістити в акумулятор. Регістр ознаки переносу встановлюється в ‘1’ у разі переповнення регістра акумулятора.
ACC<=ACC+
RF[IR[3:0]]
if ACC+RF[IR[3:0]]>F
then C<=’1’
XOR_DIR
0110rrrr
Виконати логічну операцію XOR над вмістом регістра загального призначення RF за номером rrrr/2/ та акумулятора ACC, результат занести в акумулятор.
ACC<=
ACC xor RF[IR[3:0]]
TEST_DIR
0111rrrr
Виконати логічну операцію AND над вмістом регістра загального призначення RF за номером rrrr/2/ та акумулятора ACC, результат занести в акумулятор.
Формується значення регістру нульового результату.
ACC<=
ACC and RF[IR[3:0]]
NOP
11000000
Збереження попереднього стану, ніяких дій не виконується.
–
ST_REG_A1
1100dddd
Завантажити безпосередньо дані dddd/2/ в регіст (REG1).
REG1<=IR[3:0]
ST_REG_A2
1101dddd
Завантажити безпосередньо дані dddd/2/ в регіст (REG2).
REG2<=IR[3:0]
RD_REG_B
1110dddd
Завантажити безпосередньо дані dddd/2/ в регіст (REZ).
ACC<=IR[3:0]
4. Внутрішня структура мікропроцесора
У пристрої обробки цифрової інформації виділяють інформаційний тракт (операційний блок, Datapath Unit) та керуючий автомат (блок керування, Control Unit).Такий підхід спрощує проектування та полегшує розуміння процесу функціонування пристрою (рис.4.1.1).
Рис.4.1.1. Функціональна схема пристрою обробки цифрової інформації
Інформаційний тракт мікропроцесора Gnome (рис.6) містить РЗП (регістровий файл), службові регістри, АЛП та допоміжні вузли, які забезпечують виконання інструкцій читанням даних з пам‘яті, їх зберігання та перетворення, до того ж інформаційний тракт формує для керуючого автомата сигнали стану з інформацією про стан операндів, окремих вузлів, особливих значень операндів, їх окремих розрядів та результати виконання операцій (наприклад, рівність нулю результату операції і т.п.).
Процес функціонування в часі мікропроцесора складається з послідовності тактових інтервалів, в яких інформаційний тракт виконує елементарні операції — передачу слова з регістра в регістр, зсув і т.п. Виконання даних елементарних операцій ініціюється надходженням в інформаційний тракт відповідних керуючих сигналів (мікродій) з керуючого автомата. Послідовність елементарних операцій керуючий автомат формує на основі коду операції (регістр інструкцій IR) та службових сигналів стану з інформаційного тракту. Сукупність мікродій, які забезпечують виконання інструкції за певну кількість циклів, називають мікропрограмою даної інструкції.
4.1 Інформаційний тракт мікропроцесора Gnome
Інформаційний тракт складається з таких компонентів:
1. Програмно-доступні регістри PC,PC1, Z, C, ACC
Семирозрядний регістр PC призначено для зберігання вмісту лічильника команд. Регістр PC1 дублює значення регістру PC, при необхідності терміново виконати обробку переривання і відповідного переходу до нової адреси. Потім із нього відновлюється природній порядок виконання команд. Регістри Z та C є однорозрядними регістрами- тригерами, які зберігають поточне значення регістра ознаки нульового значення та регістра ознаки переносу. ACC – чотирирозрядний регістр, який виконує роль акумулятора. До кожного з них надходять глобальні сигнали синхронізації та скиду.
2. Регістр інструкцій IR
Призначено для зберігання коду прочитаної інструкції. Керуючий сигнал ld_ir дозволяє завантажувати в регістр IR 8-розрядне слово інструкції з пам‘яті команд. Якщо сигнал ld_ir=’0’, то регістр зберігає своє попереднє значення, інакше з пам`яті команд до нього завантажується 8-розрядне слово команди. Вихід з цього регістра поступає до керуючого автомата, регістрового файлу, АЛП та на мультиплексор формування фізичної адреси.
3. Арифметико-логічний пристрій
АЛП є комбінаційним пристроєм, який виконує певні операції над вхідними операндами. Для випадку розглядуваного мікропроцесора Gnome першим вхідним операндом АЛП (рис.4.1.1) є поточна інформація з акумулятора cur_acc, другим операндом є вихід мультиплексора MUX3, а також поточні значення ознак переносу curr_carry та нуля curr_zero. На виході блок АЛП залежно від коду операції alu_op формує результат: наступне значення акумулятора next_acc, отримане значення ознаки переносу next_carry, отримане значення ознаки нуля next_zero. Блок АЛП виконує невелику кількість операцій над 4-розрядними операндами (табл.4.1.3), що зумовлено простою системою команд мікропроцесора.
Табл.4.1.3 Множина операцій АЛП
4. Допоміжні елементи
В інформаційному тракті мікропроцесора Gnome присутні повторювачі, інвертори та інші логічні елементи, які забезпечують формування керуючих сигналів та інформації на шині даних.
4.2 Цикли виконання команд
Інформаційний тракт мікропроцесора Gnome забезпечує виконання однієї інструкції в поточний момент часу. Кожна інструкція виконується за три цикли. Після виконання поточної інструкції мікропроцесор переходить до виконання наступної (рис.4.2.1), тобто в основу закладено принцип послідовного неконвеєрного опрацювання інструкцій.
Оскільки в даному курсовому проекті проектування мікропроцесора виконується на функціональному рівні, то при синтезі VHDL-моделі увага часовим витратам виконання кожного циклу не приділяється. Вважатимемо, що час виконання кожного з циклів є однаковий і дорівнює тривалості тактового інтервалу clock. Розглянемо детально множини мікродій (елементарних операцій), що виконуються у кожному циклі:
Рис.4.2.1. Послідовність виконання циклів команд в мікропроцесорі Gnome
1. Цикл вибирання інструкцій (Instruction Fetch cycle -IF)
Виконуються наступні мікродії:
IR = ROM[PC];
PC = PC + 1.
Виконання першої мікродії забезпечує завантаження з пам‘яті інструкцій ROM за адресою, яка вказана в регістрі PC, команди з пам’яті програм в регістр інструкцій IR. Друга мікродія виконує інкремент лічильника команд PC на одиницю, що формує адресу комірки пам‘яті, з якої буде завантажуватись наступна планова інструкція. Обчислене значення адреси наступної команди на фазі IF може бути змінене на фазі EX під час виконання інструкцій переходу. Зауважимо, що нумерація мікродій в даному описі є суто умовною, оскільки згадані мікродії виконуються паралельно в часі і можуть розглядатись як одна сукупна мікродія.
2. Цикл декодування інструкції/вибирання операнда з регістрового файлу (Instruction decode/register fetch cycle - ID)
У даному циклі проводиться декодування інструкції для виявлення команд, що працють з зовнішньою пам`ятю або одним з двох спеціалізованих пристроїв. Зокрема, це такі команди: LOAD та STORE в полі операнда яких (молодші 4-ри розряди) вказують адресу джерела або призначення операнда. Для таких команд встановлюються керуючі сигнали read,write,mx3 та sel_addr.
Для решти інструкцій в циклі ID вибір операнда виконується з регістрового файлу або безпосередньо «виймається» з поля команди, сюди також входять інструкції, які не вимагають операнда.
На цьому циклі також встановлюється сигнал pc1_we для запису у регістр PC1 значення, що містить лічильник команд (при надходженні сигналу переривання).
3. Цикл виконання (Execute cycle - EX)
Послідовність виконання елементарних операцій, що виконуються інформаційним трактом на фазі EX, залежить від типу інструкції, які можна умовно об‘єднати в три групи: арифметико-логічні операції, операції збереження результату, операції умовних та безумовних переходів.
У групу арифметико-логічних операцій входять команди: CLEAR_C, SET_C, LOAD_IMM, ADD_IMM, LOAD_DIR, ADD_DIR, XOR_DIR, TEST_DIR. При виконанні вищенаведених інструкцій в фазі EX бере участь арифметико-логічний пристрій, результат заноситься в акумулятор. В дану групу включені команди LOAD_IMM, LOAD_DIR, оскільки запис в акумулятор виконується за участю АЛП. Код операції alu_op для АЛП формує керуючий автомат:
ACC = ACC alu_op IR[3:0] або ACC = ACC alu_op RF[IR[3:0]].
Встановлюється значення mx3 для вибору джерела для АЛП.
В принципі можливим є читання із зовнішньої пам`яті даного з певної комірки, що адресується так: ACC=MEM[R0[3:0]&IR[3:0]].
Окремо стоїть команда NOP, призначення якої не виконувати протягом трьох циклів ніяких змін у стані мікропроцесора.
4.3 Керуючий автомат
Проектування керуючого автомата є складним та багатогранним етапом проектування, оскільки вимагає від розробника розуміння особливостей функціонування пристрою, вміння вибрати та ефективно спроектувати абстрактний автомат. Керуючий автомат — один з найважливіших блоків мікропроцесора. Спільно з генератором тактових імпульсів, який формує сигнал синхронізації clock, керуючий автомат забезпечує проходження подій в мікропроцесорі в правильній послідовності, тобто декодування інструкції та генерацію відповідних керуючих сигналів для реалізації елементарних операцій інформаційним трактом в циклах IF, ID, EX, встановлення в початковий стан вузлів мікропроцесора при надходженні сигналу встановлення в початковий стан reset. Множину керуючих сигналів складають сигнали sel_addr, read, write, ld_ir, inc_pc, jump_pc, alu_op, pc1_we, mx3, we. Розглянемо детально, які значення керуючих сигналів формуються пристроєм керування на кожному циклі виконання інструкції.
1. Цикл вибирання інструкцій (Instruction Fetch cycle -IF)
Завантаження з пам‘яті інструкцій, інкремент значення лічильника команд PC на одиницю:
read <= '1';
ld_ir <= '1';
inc_pc <= '1';
перехід до циклу ID
Для решти інструкцій, які не вимагають завантаження значення з пам`яті:
sel_data_ram=0
read=0
write=0
ld_ir=0
inc_pc=0
alu_op=000 (NOP)
перехід до циклу EX
3. Цикл виконання (Execute cycle - EX)
У даному циклі керуючі сигнали залежать від інструкції, це зумовлено відмінністю в множині мікрооперацій, виконуваних інформаційним трактом, для конкретної інструкції. Інструкції виконуються формуванням сигналів alu_op, inc_pc, jump_pc, sel_addr, write. Розглянемо типові приклади формування керуючих сигналів для інструкції групи:
• ADD_DIR (група арифметико-логічних операцій):
sel_addr=0
read=0
write=0
ld_ir=0
inc_pc=0
jump_pc=0
alu_op=010 (ADD_OP)
перехід до циклу IF
5. Проектування зовнішнього спеціалізованого пристрою
Призначення керуючих сигналів — comand, ex_add:
comand – керує записом першого та другого операндів та вичиткою результату.
ex_add – встановлюється в „1” коли відбулася операція додавання.
Опис зовнішнього суматора на мові Active-HDL:
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.STD_LOGIC_unsigned.all;
entity buf is
port(
A : in std_logic_vector(7 downto 0);
CLK : in std_logic;
comand_in : in std_logic_vector (1 downto 0);
B : out std_logic_vector(7 downto 0);
ex_add : out std_logic
);
end buf;
--}} End of automatically maintained section
architecture buf of buf is
signal REG1, REG2, REZ: std_logic_vector(3 downto 0);
begin
process (CLK)
begin
if CLK'event and CLK='1' then
if comand_in="00" then
REG1<=A (3 downto 0);
elsif comand_in="01" then
REG2<=A(3 downto 0);
end if;
end if;
end process;
process(comand_in, REZ)
begin
if comand_in = "10" then
REZ <= REG1+REG2;
B (7 downto 4) <= "0001";
B (3 downto 0) <= REZ ;
ex_add <= '1';
else
B <="ZZZZZZZZ";
ex_add <= 'Z';
end if;
end process;
end buf;
Часова діаграма роботи зовнішнього суматора:
6. Програма тестування для мікропроцесора
mem_array(0):= CLEAR_C;
mem_array(1):= ST_REG_A1 & "0000";
mem_array(2):= ST_REG_A2 & "1000";
mem_array(3):= RD_REG_B & "0010" ;
mem_array(4):= CLEAR_C;
mem_array(5):= CLEAR_C;
mem_array(6):= ADD_IMM & "0011";
7. Часова діаграма роботи мікрокомп`ютера
Додаток 1:
Лістинг програми яка моделює роботу мікрокомп’ютера на мові Active-HDL:
Структура мікрокомп’ютера
library IEEE;
use IEEE.std_logic_1164.ALL;
use IEEE.std_logic_unsigned.ALL;
entity computer is
port(
clk :in std_logic;
rst :in std_logic
);
end computer;
architecture structure of computer is
-- internal sig. for Gnome and MEM connection
signal address :std_logic_vector (7 downto 0);
signal data :std_logic_vector (7 downto 0);
------------------------------------------------
signal comand_out :std_logic_vector (1 downto 0);
signal data_ALU :std_logic_vector (7 downto 0);
signal ex_add :std_logic;
------------------------------------------------
signal csb :std_logic;
signal oeb :std_logic;
signal web :std_logic;
component gnome is
port(
clk : in std_logic;
rst : in std_logic;
data : inout std_logic_vector(7 downto 0);
data_ALU : in std_logic_vector(7 downto 0);
ex_add : in std_logic;
address : out std_logic_vector(7 downto 0);
csb : out std_logic;
oeb : out std_logic;
web : out std_logic;
-------------------
comand_out : out std_logic_vector(1 downto 0)
-------------------
);
end component;
component mem
port(
address : in std_logic_vector(7 downto 0);
data : inout std_logic_vector(7 downto 0);
csb : in std_logic;
oeb : in std_logic;
web : in std_logic);
end component;
----------------------------------------------
component buf
port(
A : in std_logic_vector(7 downto 0);
B : out std_logic_vector(7 downto 0);
CLK : in std_logic;
ex_add : out std_logic;
comand_in : in std_logic_vector (1 downto 0));
end component;
----------------------------------------------
begin
GNOME_UNIT: gnome
port map(
clk => clk,
rst => rst,
address => address,
data => data,
csb => csb,
oeb => oeb,
web => web,
----------
comand_out => comand_out,
data_ALU => data_ALU,
ex_add => ex_add
----------
);
MEM_UNIT: mem
port map(
address => address,
data => data,
csb =>