| главнаяреклама на сайтевакансииуслуги | Коллекция рефератов Otherreferats |
|
|
|||||||||||||||||||||||||||||||||
VHDL модель комп’ютераВикористання інструментального засобу Active-VHDL, розробка моделі універсального однокристального комп`ютера на основі гіпотетично неконвеєрного мікропроцесора. Виконання симуляції з тестуванням роботи мікропроцесорної системи на функціональному рівні.
Отправить свою хорошую работу на сайт просто. Используйте форму, расположенную ниже.
Подобные работы1. Загальні відомості про мову VHDL, яка використовуються для проектування цифрових електронних систем та створення програмного продукту, її елементи. Способи структуризації програми, принципи об’єктно-орієнтованого програмування, засоби налагоджування. курсовая работа [34,9 K], добавлена 09.06.2010 2. Програми, які виводять на екран характеристики комп'ютера. Розробка програми "Монітор використання ресурсів комп’ютера" на мові програмування ASM-86. Алгоритм програми та її реалізація. Системні вимоги, інструкція для користувача, лістинг програми. курсовая работа [22,2 K], добавлена 08.08.2009 3. Історія появи перших обчислювальних машин. Пам'ять як один із основних елементів комп'ютера, що дозволяє йому нормально функціонувати. Значення внутрішньої пам'яті комп'ютера з позиції зберігання інформації. Аналіз зовнішньої пам’яті та її модернізація. реферат [24,4 K], добавлена 27.12.2011 4. Основні принципи дії та архітектура прототипних варіантів CISC-комп'ютера. Інструкції асемблерної мови і принцип трансляції асемблерної програми у машинний код. Розробка тестової програми. Перевірка правильності роботи реалізованих команд у прикладах. курсовая работа [446,1 K], добавлена 03.02.2011 5. Загальні дані та основні поняття мікропроцесорної техніки. Архітектура центрального персонального комп’ютера, її види та властивості. Головні відомості про технології SMM, SSE. Сторінковий режим роботи DRAM. Характеристика та елементи жорстких дисків. контрольная работа [820,7 K], добавлена 04.10.2009 6. Інсталяція системи віртуальних машин, установка ліцензії на використання VMware. Особливості роботи з віртуальним комп'ютером: копіювання і вставка, призупинення, виділення оперативної пам'яті. Підключення фізичних дисків до віртуального комп'ютера. курсовая работа [1,1 M], добавлена 05.06.2010 7. Системний блок як корпус, який містить основні компоненти персонального комп’ютера. Коротка характеристика головних зовнішніх та внутрішніх пристроїв персонального комп’ютера. Послідовність операцій при обтиску та обробленні роз'єму "витої пари". лабораторная работа [1,7 M], добавлена 02.06.2011 8. Експонентний розвиток комп'ютерної техніки. Будова сучасного комп'ютера, призначення основних елементів. Будова центрального процесора. Оперативная пам'ять та материнська плата. Будова звукової карти. Характеристика жорсткого диска. Склад чипсету. презентация [1,4 M], добавлена 25.02.2010 9. Мова асемблер для кожного типу комп'ютера своя. Асемблер орієнтований саме на специфіку комп'ютера або на специфіку процесора. Мікропроцесори, що належать до різних сімейств, мають свої системи команд. Система команд МП ІA 32 - режими адресації. лекция [36,2 K], добавлена 13.04.2008 10. Складання, імлементація і верифікація VHDL моделі чотирибітового комп’ютера, що вбудовується до ПЛІС, містить процесор, пам'яті даних і машинних кодів. Перелік і функції машинних інструкцій процесора "Гном". Асемблерна тестова програма і її машинні коди. курсовая работа [24,3 K], добавлена 10.01.2010 11. Мова VHDL. Створення проекту для моделювання цифрових і аналогових схем. Синтез і моделювання комбінаційних пристроїв, заданих в табличній формі, за допомогою системи Active-HDL 6.1. Створення ієрархічних структур при проектуванні складних пристроїв. реферат [287,3 K], добавлена 14.02.2009 12. Структура персонального комп'ютера. Центральний мікропроцесор, внутрішня і зовнішня пам'ять. Клавіатура, ручні маніпулятори та дисплей. Види накопичувачів, призначення жорсткого диску. Периферійні пристрої: принтери, сканери, модеми та факс-модеми. дипломная работа [44,9 K], добавлена 24.06.2009 13. Алгоритм побудови лінії та використання графічної бібліотеки DirectX. Способи побудови довільної кількості довільного розміру точок на поверхні форми. Можливості комп'ютера виконувати мультимедійні програми під управлінням операційної системи Windows. контрольная работа [416,9 K], добавлена 22.10.2009 14. Розвиток комп’ютерної техніки. Основи інформатики. Класифікація персональних комп’ютерів. Складові частини інформатики. Інформація, її види та властивості. Кодування інформації. Структурна схема комп’ютера. Системи числення. Позиційна система числення. реферат [36,0 K], добавлена 27.10.2003 15. Особливості удосконалення програми регулювання системного таймера комп'ютера. Специфіка розробки такої програми для роботи з мишею в текстовому й графічному режимах, що містить функції, пов'язані з її обслуговуванням. Робота з керуванням програмами. курсовая работа [356,2 K], добавлена 05.03.2012 16. Порядок використання комп'ютера для автоматичного перекладу текстів, умови доцільності використання спеціального програмного забезпечення. Характеристика програми PROMT, її можливості та опис інтерфейсу, принцип та правила роботи. Переклад Web-сторінок. реферат [14,9 K], добавлена 21.09.2009 17. Вивчення загальних положень функціонування ЕОМ. Сутність оперативної та кеш-пам’яті. Особливості зовнішніх носіїв інформації, які призначені для накопичення інформації, створення резервних копій i для подальшого її використання незалежно від комп’ютера. курсовая работа [155,5 K], добавлена 13.06.2010 18. Оцінка ролі кожного окремого комп'ютера в загальній мережі. Стандартні правила роботи мережевого устаткування різних виробників. Рівні і пристрої доступу і розподілу. Структура та принцип дії локальної мережі. Стандарти бездротових локальних мереж. дипломная работа [3,1 M], добавлена 09.04.2010 19. Режими роботи з таблицями в Microsoft Access. Основні способи створення таблиць. Вимоги до технічних характеристик комп'ютера. Створення бази даних. Техніка безпеки та основні правила при виконанні робіт на комп'ютері. Порядок архівування роботи. реферат [1,5 M], добавлена 23.12.2010 20. Способи виявлення й видалення невідомого вірусу. Спроби протидії комп’ютерним вірусам. Способи захисту комп’ютера від зараження вірусами та зберігання інформації на дисках. Класифікація комп'ютерних вірусів та основні типи антивірусних програм. реферат [17,1 K], добавлена 16.06.2010 Другие подобные документы
1 Міністерство освіти та науки України Інститут підприємництва і перспективних техологій при Національному університеті ,,Львівська політехніка” Курсовий проект з дисципліни: ,,Проектування комп'ютерних систем та мереж” на тему: "VHDL модель комп'ютера" Львів - 2007р. Анотація У даному курсовому проекті, з використанням інструментального засобу Active-VHDL фірми ALDEC, розроблено модель універсального однокристального комп`ютера на основі 4-розрядного гіпотетично неконвеєрного RISC-мікропроцесора GNOME. Також виконано симуляцію з наступним тестуванням роботи мікропроцесорної системи на функціональному рівні. В останній час набуває поширення розробка обчислювальних систем з програмованою архітектурою (Configurable Computer). Поява програмованих логічних інтегральних схем (ПЛІС) з об'ємом до 1 млн. вентилів і більше, таких як Xilinx Virtex, дала потужний поштовх для розвитку цього напрямку. Мова VHDL була розроблена в Міністерстві оборони США на початку вісімдесятих років як мова для опису моделей апаратних засобів обчислювальної техніки (Hardware Description Language). В середині вісімдесятих років виробився особливий стиль написання програм, так званий стиль синтезу. Алгоритм, описаний стилем синтезу може бути відображений в конкретну логічну схему за допомогою компілятора-синтезатора логічних схем. Такі компілятори-синтезатори набули широкого розповсюдження в наш час як невід'ємна складова САПР для ПЛІС та НВІС. Найбільш відомими компіляторами - синтезаторами є Synopsys фірми Synopsys, Synplify фірми Synplicity, Leonardo фірми Exemplar, Metamor фірми Metalogic. Відображення алгоритму на VHDL в логічну схему є взаємно однозначним та ін'єктивним, причому досягається найбільш високий ступінь розпаралелювання обчислень. Крім того, алгоритм на VHDL може відображати всі тонкі властивості обчислювального алгоритму, такі, як точно задана розрядність вхідних в проміжних даних, пряма логічна обробка бітів операндів, які неможливо безпосередньо відобразити засобами інших алгоритмічних мов. Це означає, що структура, одержана в результаті синтезу, відображає всі особливості початкового паралельного алгоритму. Особливістю алгоритму, описаному на VHDL стилем для синтезу, є те, що він, як правило, може бути без змін відображений в декількох різних програмованих обчислювальних середовищах, таких як ПЛІС, що мають різну технологію і архітектуру. Таким чином, алгоритм на VHDL є мобільним між різними обчислювальними середовищами. Зміст 1. Вхідні дані на проектування 2. Внутрішня структура байту 3. Програмна модель комп'ютера 4. Розробка архітектури рівня машинних інструкцій 5. Розробка тестової програми 6. Розробка VHDL моделі процесора 7. Розробка VHDL моделі пам'яті програм 8. Розробка VHDL моделі пам'яті даних 9. Розробка VHDL моделі обчислювального пристроя 10. Розробка VHDL моделі комп'ютера 11. Структурна схема комп'ютера 12. Синтез та імплементування VHDL моделі комп'ютера 13. Топологія проекту на робочій поверхні ПЛІС 14. Верифікація результатів проектування 15. Основні результати роботи Література Вхідні дані на проектування Скласти, імплементувати та верифікувати VHDL модель чотирибітового вбудованого до ПЛІС комп'ютера, що містить процессор, пам'ять даних та пам'ть інструкцй. Цільові ПЛІС - від фірми Xilinx, родини Вір текс чи Спартан. САПР розробки - Xilinx WebPack, стимулятор ModelSim - Model Technologies. За основу процесора рівня машинних інструкцій прийнято архітектуру процесора Gnome фірми Xess. Завдання щодо апаратури : 1.Додати до набору інструкцій інструкціюумовного переходу при умові, що акумулятор рівний нулю; 2.Розробити спеціалізований обчислювальний пристрій для обрахунку виразу: y=x1 + x2 + x3 + x4, значення змінних прийняти наступними: х1=11 , х2=25 , х3=60 , х4=17 . Завдання щодо програмного забезпечення: 1.Скласти тестову програмку із наявних інструкцій. Внутрішня структура байту Комп'ютер, який проектується має чотирибітові дані та восьмибітові інструкції. Сусідні чотири біти формату, що утворюють поле певного призначення називають нібл. Один байт містить два нібли: - найбільш значний нібл (MSN); - найменш значний нібл (LSN). Приймаємо, що нумерація бітів у байті відбувається зправа на ліво при цьому найбільш значним є сьомий лівий біт, а найменш значний перший правий. Нумерація бітів у байті-інструкції: 9 8 7 6 5 4 3 2 1 0 MSN LSN Нумерація бітів у байті-даних: 3 2 1 0 LSN Програмна модель комп'ютера Програмну модель нашого комп'ютера можна зобразити наступним рисунком: Комп'ютер містить наступні важливі програмнокеровані вузли: 1.ALU -чотирирозрядний арифметико-логічний пристрій. 2.АСС - чотирирозрядний регістр-акумулятор. 3.Регістр прапорців C - прапорець переносу, Z - прапорець нульового результату. 4.РМ - програмна пам'ять з комірками в 10 біт та адресами 0х00-0хFF, може вміщувати 128 інструкцій. 5.DM - пам'ять даних з нібловими комірками та адресами 0х0-0хF. Розробка архітектури рівня машинних інструкцій Інформацію про інструкції, що виконує процесор подамо двома наступними табличками: 1.Перелік та функції машинних інструкцій процесора: Мнемокод Символічний запис Функція load #d ACC <= Rd Завантажити в акумулятор комірку Rd пам'яті даних за адресою d в межах [0..15] load d ACC <= d Завантажити в акумулятор безпосередній операнд d в межах [0..15] store #d Rd <= ACC Завантажити дані з акумулятора до комірки Rd пам'яті даних за адресою d в межах [0..15] add d ACC <=ACC+d+C C<=carry out Додати до акумулятора безпосередній операнд d межах [0..15] та прапорець переносу С; в результаті прапорець набуває нового значення add #d ACC <=ACC+Rd+C C<=carry out Додати до акумулятора вмістиме комірки Rd пам'яті даних за адресою d в межах [0..15] та прапорець переносу С; в результаті прапорець набуває нового значення xor #d ACC <=ACC xor Rd Додати за модулем 2 до акумулятора вмістиме комірки Rd пам'яті даних за адресою d в межах [0..15] test #d ACC<=ACC and Rd Z<=1 when ACC=0 else Z<=0 Якщо в результаті логічного І вмістимого акумулятора та комірки Rd пам'яті даних за адресою d в межах [0..15] отримали 0, то встановити прапорець нульового результату Z в 1, інакше в 0 clear C C <= 0 Скинути прапорець переносу С set C C <= 1 Встановити прапорець переносу в 1 skip C PC <= PC+1+C Якщо С=0 виконати наступну інструкцію інакше пропустити виконання наступної інструкції skip Z PC <= PC+1+Z Якщо Z=0 виконати наступну інструкцію інакше пропустити виконання наступної інструкції jump #a PC <= А Перейти до інструкції А пам'яті программ за адресою а в межах [0..127] jaz #а PC<=А Перейти до інструкції А пам'яті программ за адресою а в межах [0..127] , якщо АСС=0 int Переривання спеціалізованого обчислювального пристрою 2.Кодування та виконання в часі машинних інструкцій: Інстр. Кодування Fetch Decode Execute load #d 000100 d3d2d1d0 IR<=(PC), PC<=PC+1 [IR3..IR0] <= ([IR3..IR0]) ACC <= [IR3..IR0] load d 000001 d3d2d1d0 IR<=(PC), PC<=PC+1 ACC <= [IR3..IR0] store #d 000011 d3d2d1d0 IR<=(PC), PC<=PC+1 ([IR3..IR0]) <= ACC add d 000010 d3d2d1d0 IR<=(PC), PC<=PC+1 ACC <= ACC + [IR3..IR0] + C add #d 000101 d3d2d1d0 IR<=(PC), PC<=PC+1 [IR3..IR0] <= ([IR3..IR0]) ACC <= ACC + [IR3..IR0] + C xor #d 000110 d3d2d1d0 IR<=(PC), PC<=PC+1 [IR3..IR0] <= ([IR3..IR0]) ACC <= ACC xor [IR3..IR0] test #d 000111 d3d2d1d0 IR<=(PC), PC<=PC+1 [IR3..IR0] <= ([IR3..IR0]) ACC <= ACC and [IR3..IR0] clear C 000000 0000 IR<=(PC), PC<=PC+1 C<=0 set C 000000 0001 IR<=(PC), PC<=PC+1 C<=1 skip C 000000 0010 IR<=(PC), PC<=PC+1 PC <= PC + C skip Z 000000 0011 IR<=(PC), PC<=PC+1 PC <= PC + Z jump #a 001a6a5a4 a3a2a1a0 IR<=(PC), PC<=PC+1 PC <= [IR6..IR0] jaz #а 011a6a5a4 a3a2a1a0 IR<=(PC), PC<=PC+1 PC <= [IR6..IR0] int 1111111111 1.IR - регістр інструкцій [IR7..IR0]. 2.([IR3..IR0]) - комірка пам'яті, адресу якої містить молодший нібл [IR3..IR0] регістра IR. 3.d3d2d1d0 , a6a5a4a3a2a1a0 - окремі біти з формату машинної інструкції. 4.Виконання інструкції розділено на три послідовні дії: - Fetch - вибирання інструкції з пам'яті інструкцій в регістр IR, обчислення адреси наступної інструкції за правилом: поточна адреса + 1; - Decode - декодування поточної інструкції (читання операнда з пам'яті даних за адресою молодшого нібла IR; - Execute - виконання поточної інструкції за її алгоритмом. Розробка тестової програми Адреса Машинний код Асемблер Коментар 0000 Load #1 Iніціалізувати регістри числами, що додаються, а саме: 0x11 + 0x25 + 0х60 + 0х17 = AD. 0001 Store R0 0002 Load #1 0003 Store R1 0004 Load #5 0005 Store R2 0006 Load #2 0007 Store R3 0008 Load #0 0009 Store R4 000a Load #6 000b Store R5 000c Load #7 000d Store R6 000e Load #1 000f Store R7 0010 Clear C 0011 Load R0 Add R2 Store R8 Load R1 Add R3 Store R9 Load R4 Add R6 Store R10 Load R5 Add R7 Store R11 Load R8 Add R10 Store R12 Load R9 Add R11 Store R13 Loop: Load R12 Load R13 Jump #loop Адреса Машинний код Асемблер Коментар 0000 18 Load #1 Iніціалізувати регістри числами, що додаються, а саме: 0x29 + 0x48 = 0x71. Обнулити перенос. Знайти суму молодших цифр і зберігти в R4. Додати старші цифри + перенос. Зберігти суму старших цифр в R5. 0001 30 Store R0 0002 14 Load #1 0003 31 Store R1 0004 19 Load #5 0005 32 Store R2 0006 12 Load #2 0007 33 Store R3 0008 00 Clear C 0009 40 Load R0 000a 52 Add R2 000b 34 Store R4 000c 41 Load R1 000d 53 Add R3 000e 35 Store R5 Loop: 000f 44 Load R4 Показати мол. цифру. Показати старшу цифру. Показувати безперервно. 0010 45 Load R5 0011 8f Jump #loop Адреса в ROM Мнемокод Машинний код 00 LOAD 1 000001 0001 01 STORE #A 000011 1010 02 LOAD 2 000001 0010 03 JAZ #0E 011 0001110 04 STORE #B 000011 1011 05 LOAD 6 000001 0110 06 STORE #C 000011 1100 07 LOAD 7 000001 0111 08 STORE #D 000011 1101 09 LOAD 3 000001 0011 0A STORE #E 000011 1110 0B LOAD 0 000001 0000 0C JAR #0E 011 0001110 0D CLEAR C 0000000000 0E INT 1111111111 0F LOAD #F 000100 1111 10 JUMP #0F 001 0001111 Розробка VHDL моделі процесора --Підєднані бібліотеки LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; --Інтерфейси процесора ENTITY CPU IS PORT( clk : IN STD_LOGIC; -- тактові імпульси reset : IN STD_LOGIC; -- скид процесора address : OUT STD_LOGIC_VECTOR (6 DOWNTO 0); -- шина адрес data : INOUT STD_LOGIC_VECTOR (9 DOWNTO 0); -- шина даних web : OUT STD_LOGIC; -- високий рівень - дозвіл читання RAM -- низький рівень -дозвіл читання ROM oeb : OUT STD_LOGIC; -- високий рівень - дозвіл видачі даних з RAM sel_ram : OUT std_logic; -- вибір RAM int_inq : OUT STD_LOGIC; -- запит на переривання int_ans : IN STD_LOGIC; -- підтвердження переривання -- допоміжні сигнали carry_out : OUT STD_LOGIC; -- вивід вмістимого прапорця переносу CARRY pc_out : OUT STD_LOGIC_VECTOR (6 DOWNTO 0); -- вивід вмістимого лічильника команд PC ir_out : OUT STD_LOGIC_VECTOR (9 DOWNTO 0); -- вивід вмістимого регістра інструкці IR acc_out : OUT STD_LOGIC_VECTOR (3 DOWNTO 0) -- вивід вмістимого акумулятора ACC ); END CPU; -- Архітектура процесора ARCHITECTURE CPU OF CPU IS SIGNAL curr_st, next_st: STD_LOGIC_VECTOR (1 DOWNTO 0); -- поточне та наступне значення лічильника команд SIGNAL curr_pc, next_pc: STD_LOGIC_VECTOR (6 DOWNTO 0); -- поточне та наступне значення акумулятора SIGNAL curr_acc, next_acc: STD_LOGIC_VECTOR (3 DOWNTO 0); -- поточне та наступне значення прапорця переносу SIGNAL curr_carry, next_carry: STD_LOGIC; -- поточне та наступне значення прапорця нульового результату SIGNAL curr_zero, next_zero: STD_LOGIC; -- проміжне значення сигналів переривання SIGNAL inquire,answer: STD_LOGIC; -- поточний та наступний регістри інструкцій SIGNAL curr_ir, next_ir: STD_LOGIC_VECTOR(9 DOWNTO 0); -- код операції АЛП SIGNAL alu_op: STD_LOGIC_VECTOR (2 DOWNTO 0); -- стани процесора CONSTANT FETCH: STD_LOGIC_VECTOR (1 DOWNTO 0) := "00"; -- вибирання інструкції з пам'яті CONSTANT DECODE: STD_LOGIC_VECTOR (1 DOWNTO 0) := "01"; -- декодування інструкції CONSTANT EXECUTE: STD_LOGIC_VECTOR (1 DOWNTO 0) := "11"; -- виконання інструкції -- тимчасовий результат суматора SIGNAL sum : STD_LOGIC_VECTOR (4 DOWNTO 0); SIGNAL read : STD_LOGIC; -- 1 при читанні RAM SIGNAL write : STD_LOGIC; -- 1 при запису в RAM SIGNAL sel_data_ram: STD_LOGIC; -- 1 при вводі адреси [R0-R15] SIGNAL jump_pc : STD_LOGIC; -- 1 при перезаписі PC SIGNAL inc_pc : STD_LOGIC; -- 1 при інкременті PC SIGNAL ld_ir : STD_LOGIC; -- 1 при завантаженні IR SIGNAL ld_ir_lsn : STD_LOGIC; -- 1 при завантаженні LSN з IR -- можливі коди операцій АЛП CONSTANT PASS_OP : STD_LOGIC_VECTOR (2 DOWNTO 0) := "001"; -- pass input to output CONSTANT ADD_OP : STD_LOGIC_VECTOR (2 DOWNTO 0) := "010"; -- додавання CONSTANT XOR_OP : STD_LOGIC_VECTOR (2 DOWNTO 0) := "011"; -- виключне АБО CONSTANT AND_OP : STD_LOGIC_VECTOR (2 DOWNTO 0) := "100"; -- логічне І CONSTANT SET_CARRY_OP: STD_LOGIC_VECTOR (2 DOWNTO 0) := "101"; -- встановлення прапорця переносу CONSTANT CLR_CARRY_OP: STD_LOGIC_VECTOR (2 DOWNTO 0) := "110"; -- скид прапорця прерносу -- присвоєння константам значень коду операцій CONSTANT CLEAR_C : STD_LOGIC_VECTOR (9 DOWNTO 0) := "0000000000"; CONSTANT SET_C : STD_LOGIC_VECTOR (9 DOWNTO 0) := "0000000001"; CONSTANT SKIP_C : STD_LOGIC_VECTOR (9 DOWNTO 0) := "0000000010"; CONSTANT SKIP_Z : STD_LOGIC_VECTOR (9 DOWNTO 0) := "0000000011"; CONSTANT LOAD_IMM : STD_LOGIC_VECTOR (5 DOWNTO 0) := "000001"; CONSTANT ADD_IMM : STD_LOGIC_VECTOR (5 DOWNTO 0) := "000010"; CONSTANT STORE_DIR: STD_LOGIC_VECTOR (5 DOWNTO 0) := "000011"; CONSTANT LOAD_DIR : STD_LOGIC_VECTOR (5 DOWNTO 0) := "000100"; CONSTANT ADD_DIR : STD_LOGIC_VECTOR (5 DOWNTO 0) := "000101"; CONSTANT XOR_DIR : STD_LOGIC_VECTOR (5 DOWNTO 0) := "000110"; CONSTANT TEST_DIR : STD_LOGIC_VECTOR (5 DOWNTO 0) := "000111"; CONSTANT INT : STD_LOGIC_VECTOR (9 DOWNTO 0) := "1111111111"; CONSTANT JUMP : STD_LOGIC_VECTOR (2 DOWNTO 0) := "001"; CONSTANT JAZ : STD_LOGIC_VECTOR (2 DOWNTO 0) := "011"; BEGIN int_inq <= inquire; answer <= int_ans; carry_out <= curr_carry; pc_out <= curr_pc; acc_out <= curr_acc; ir_out <= curr_ir; -- зовнішні сигнали керуваня пам'ттю sel_ram <= 'Z' WHEN answer = '1' ELSE sel_data_ram; oeb <= 'Z' WHEN answer = '1' ELSE NOT(read); web <= 'Z' WHEN answer = '1' ELSE NOT(write); -- встановлення адреси зовнішньої пам'яті даних чи програм address <= "ZZZZZZZ" WHEN answer = '1' ELSE "000" & curr_ir(3 DOWNTO 0) WHEN sel_data_ram='1' ELSE curr_pc; data <= "000000" & curr_acc WHEN write='1' ELSE "ZZZZZZZZZZ"; -- завантаження регістра інструкцій новим кодом операції next_ir <= data WHEN ld_ir='1' ELSE -- чи завантажити молодший нібл регістра інструкцій з пам'яті даних curr_ir(9 DOWNTO 4) & data(3 DOWNTO 0) WHEN ld_ir_lsn='1' ELSE -- чи регістр інструкцій не змінюється curr_ir; -- завантаження лічильника команд next_pc <= -- адресою переходу з регістра інструкцій curr_ir(6 DOWNTO 0) WHEN jump_pc='1' ELSE -- чи збільшення лічильника команд на 1 curr_pc+1 WHEN inc_pc='1' ELSE -- чи лічильник команд залишається без змін curr_pc; -- ОПЕРАЦІЙНИЙ АВТОМАТ ПРОЦЕСОРА PROCESS (alu_op,curr_zero,curr_carry,curr_acc,curr_ir,sum) BEGIN -- встановлення початкових значень sum <= "00000"; next_acc <= "0000"; next_carry <= '0'; next_zero <= '0'; CASE alu_op IS WHEN ADD_OP => -- додавання до акумулятора молодшого нібла регістра інструкцій -- та прапорця переносу sum <= ('0' & curr_acc) + ('0' & curr_ir(3 DOWNTO 0)) + ("0000" & curr_carry); next_acc <= sum(3 DOWNTO 0); -- молодший нібл акумулятора містить суму next_carry <= sum(4); -- прапорця переносу змінюється в залежності -- від результату next_zero <= curr_zero; -- прапорець нульвого результату не змінюється WHEN XOR_OP => -- додавання за модулем 2 до акумулятора молдшого нібла регістра інструкцій next_acc <= curr_acc XOR curr_ir(3 DOWNTO 0); next_carry <= curr_carry; -- прапорця переносу не змінюється next_zero <= curr_zero; -- прапорець нульвого результату не -- змінюється WHEN PASS_OP => -- завантаження в акумулятор молодшого нібла регістра інструкцій next_acc <= curr_ir(3 DOWNTO 0); next_carry <= curr_carry; -- прапорця переносу не змінюється next_zero <= curr_zero; -- прапорець нульвого результату не -- змінюється WHEN AND_OP => -- логічне І акумулятора та молодшго нібла регістра інструкцій next_acc <= curr_acc; -- акумулятор незмінюється next_carry <= curr_carry; -- прапорця переносу не змінюється -- прапорець нульвого результату змінюється -- в залежності від операції логічного І next_zero <= NOT ((curr_acc(3) AND curr_ir(3)) OR (curr_acc(2) AND curr_ir(2)) OR (curr_acc(1) AND curr_ir(1)) OR (curr_acc(0) AND curr_ir(0))); WHEN SET_CARRY_OP => -- встановлення прапорця переносу next_acc <= curr_acc; -- акумулятор незмінюється next_carry <= '1'; next_zero <= curr_zero; -- прапорець нульвого результату не -- змінюється WHEN CLR_CARRY_OP => -- скид прапорця переносу next_acc <= curr_acc; -- акумулятор незмінюється next_carry <= '0'; next_zero <= curr_zero; -- прапорець нульвого результату не -- змінюється WHEN OTHERS => -- невизначений код операції стану процесора не змінює next_acc <= curr_acc; next_carry <= curr_carry; next_zero <= curr_zero; END CASE; END PROCESS; -- ПРИСТРІЙ КЕРУВАННЯ PROCESS (curr_st,curr_carry,curr_zero,curr_ir) BEGIN sel_data_ram <= '0'; read <= '0'; write <= '0'; ld_ir <= '0'; ld_ir_lsn <= '0'; inc_pc <= '0'; jump_pc <= '0'; inquire <= '0'; alu_op <= "000"; CASE curr_st IS WHEN FETCH => -- стан вибирання інструкції з пам'яті інструкцій sel_data_ram <= '0';-- вибір пам'ті інструкцій read <= '1'; -- встановлення сигналу дозволу читання пам'яті -- інструкцій ld_ir <= '1'; -- завантаження інструкції до регістра інструкцій inc_pc <= '1'; -- збільшення лічильника команд на одиницю next_st <= DECODE; -- перехід до наступного стану WHEN DECODE => -- стан декодування інструкції -- завантаження операнда з пам'яті даних за -- адресою в молодшому ніблі регістра інструкцій IF curr_ir(9 DOWNTO 0)=INT THEN inquire <='1'; END IF; IF curr_ir(9 DOWNTO 4)=LOAD_DIR THEN sel_data_ram <= '1'; read <= '1'; ld_ir_lsn <= '1'; END IF; IF curr_ir(9 DOWNTO 4)=ADD_DIR THEN sel_data_ram <= '1'; read <= '1'; ld_ir_lsn <= '1'; END IF; IF curr_ir(9 DOWNTO 4)=XOR_DIR THEN sel_data_ram <= '1'; read <= '1'; ld_ir_lsn <= '1'; END IF; IF curr_ir(9 DOWNTO 4)=TEST_DIR THEN sel_data_ram <= '1'; read <= '1'; ld_ir_lsn <= '1'; END IF; IF (answer = '0') THEN -- перехід до наступного стану next_st <= EXECUTE; ELSE next_st <= DECODE; END IF; WHEN EXECUTE => -- стан виконаня інструкції IF curr_ir=CLEAR_C THEN alu_op <= CLR_CARRY_OP;-- скид прапорця переносу END IF; IF curr_ir=SET_C THEN alu_op <= SET_CARRY_OP;-- встановлення прапорця переносу END IF; IF curr_ir=SKIP_C THEN -- перехід до наступної інструкції -- якщо прапорець переносу встановлений inc_pc <= curr_carry; END IF; IF curr_ir=SKIP_Z THEN -- перехід до наступної інструкції -- якщо прапорець нульвого результату встановлений inc_pc <= curr_zero; END IF; IF curr_ir(9 DOWNTO 4)=LOAD_IMM THEN -- завантажити в акумулятор безпосередній -- операнд, який знаходиться в молодшому ніблі регістра інструкцій alu_op <= PASS_OP; END IF; IF curr_ir(9 DOWNTO 4)=ADD_IMM THEN -- додати до акумулятора молодший нібл регістра інструкцій alu_op <= ADD_OP; END IF; IF curr_ir(9 DOWNTO 7)=JUMP THEN -- перейти до команди за адресою, яка знаходиться -- в семи молодших бітах регістра інструкцій jump_pc <= '1'; END IF; IF curr_ir(9 DOWNTO 7)= JAZ THEN -- перейти до команди за адресою, яка знаходиться -- в семи молодших бітах регістра інструкцій -- якщо акумулятор рівний нулю IF (curr_acc = "0000")THEN jump_pc <= '1'; END IF; END IF; IF curr_ir(9 DOWNTO 4)=STORE_DIR THEN -- зберегти акумулятор в пам'яті даних sel_data_ram <= '1'; write <= '1'; END IF; IF curr_ir(9 DOWNTO 4)=LOAD_DIR THEN -- завантажити прочитані дані на стані -- декодування до акумулятора alu_op <= PASS_OP; END IF; IF curr_ir(9 DOWNTO 4)=ADD_DIR THEN -- додати прочитані дані на стані декодування до акумулятора alu_op <= ADD_OP; END IF; IF curr_ir(9 DOWNTO 4)=XOR_DIR THEN -- додати за модулем 2 прочитані дані -- на стані декодування до акумулятора alu_op <= XOR_OP; END IF; IF curr_ir(9 DOWNTO 4)=TEST_DIR THEN -- якщо результат логічного І прочитаних даних на стані -- декодування та акумулятора рівний 0 встановити прапорець --нульвого результату в 1 інакше - в 0 alu_op <= AND_OP; END IF; next_st <= FETCH; -- стан виконання інструкції закінчився -- перехід до нового стану процесора WHEN OTHERS => END CASE; END PROCESS; PROCESS (clk,reset) BEGIN -- асинхронний скид процесора IF reset='1' THEN curr_st <= FETCH; -- перехід процесора в стан вибирання інструкцї curr_pc <= "0000000"; -- скид лічилиника команд curr_ir <= "0000000000"; -- скид регістра інструкцій curr_acc <= "0000"; -- скид акумулятора curr_carry <= '0'; -- скид прапорця переповнення curr_zero <= '0'; -- скид прапорця нульвого результату -- обновлення процесора синхронно високому рівню тактового імпульсу ELSIF (clk'event AND clk='1') THEN curr_st <= next_st; -- перехід на новий стан процесора curr_pc <= next_pc; -- обновлення лічильника команд curr_ir <= next_ir; -- обновлення регістра інструкцій curr_acc <= next_acc; -- обновлення акумулятора curr_carry <= next_carry; -- обновлення прапорця переповнення curr_zero <= next_zero; -- обновлення прапорця нульвого результату END IF; END PROCESS; END CPU; Розробка VHDL моделі пам'яті даних library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity RAM is port ( clk : in std_logic; oe : in std_logic; we : in std_logic; sel_ram : in std_logic; address : in std_logic_vector (6 downto 0); data : inout std_logic_vector(9 downto 0)); end RAM; architecture RAM of RAM is type ram_type is array (15 downto 0)of std_logic_vector (3 downto 0); signal RAM : ram_type; begin process (clk) begin if (clk'event and clk = '1') then if ((sel_ram = '1')and (oe='1')and (we='0')) then RAM(conv_integer(address(3 downto 0))) <= data (3 downto 0); end if; end if; end process; data <= "000000"& RAM(conv_integer(address(3 downto 0))) when ((sel_ram='1') and (oe='0') and (we='1')) else "ZZZZZZZZZZ"; end RAM; Розробка VHDL моделі пам'яті програм library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity ROM is port ( sel_ram : in std_logic; oe : in std_logic; address : in std_logic_vector (6 downto 0); data : inout std_logic_vector (9 downto 0)); end ROM; architecture ROM of ROM is subtype ROM_WORD is std_logic_vector (9 downto 0); type ROM_TABLE is array (0 to 19) of ROM_WORD; constant ROM: ROM_TABLE := ROM_TABLE '( ROM_WORD '("0000010001"), ROM_WORD '("0000111010"), ROM_WORD '("0000010010"), ROM_WORD '("0110001110"), ROM_WORD '("0000111011"), ROM_WORD '("0000010110"), ROM_WORD '("0000111100"), ROM_WORD '("0000010111"), ROM_WORD '("0000111101"), ROM_WORD '("0000010011"), ROM_WORD '("0000111110"), ROM_WORD '("0000010000"), ROM_WORD '("0110001110"), ROM_WORD '("0000000000"), ROM_WORD '("1111111111"), ROM_WORD '("0001001111"), ROM_WORD '("0010001111"), ROM_WORD '("0000000000"), ROM_WORD '("0000000000"), ROM_WORD '("0000000000")); begin data <= ROM(conv_integer (address(5 downto 0))) when (oe='0' and sel_ram='0') else "ZZZZZZZZZZ"; end ROM; Розробка VHDL моделі спеціалізованого обчислювача LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY PU IS PORT( clk : in std_logic; oeb : out std_logic; web : out std_logic; sel_ram : out std_logic; int_inq : in std_logic; -- запит переривання int_ans : out std_logic; -- підтвердження переривання address : out std_logic_vector (6 downto 0); data : inout std_logic_vector (3 downto 0)); END PU; ARCHITECTURE Behavioral OF PU IS SIGNAL operandX1 : STD_LOGIC_VECTOR (3 DOWNTO 0); SIGNAL operandX2 : STD_LOGIC_VECTOR (3 DOWNTO 0); SIGNAL operandX3 : STD_LOGIC_VECTOR (3 DOWNTO 0); SIGNAL operandX4 : STD_LOGIC_VECTOR (3 DOWNTO 0); SIGNAL operandX5 : STD_LOGIC_VECTOR (3 DOWNTO 0); SIGNAL functionY : STD_LOGIC_VECTOR (3 DOWNTO 0); SIGNAL read : STD_LOGIC; SIGNAL write : STD_LOGIC; SIGNAL select_ram : STD_LOGIC; SIGNAL answer : STD_LOGIC; begin web <= write; oeb <= read; sel_ram <= select_ram; int_ans <= answer; data <= functionY(3 downto 0) when (write='1') else "ZZZZ"; process (clk,int_inq) begin answer <= '0'; select_ram <= 'Z'; write <= 'Z'; read <= 'Z'; address <="ZZZZZZZ"; if (int_inq = '1') then answer <= `1'; select_ram <= '1'; write <= '0'; read <= '1'; -- вибирання операндів з пям'яті даних address <="0001010"; -- І операнд if (clk'event and clk='1') then operandX1 <= data; end if; address <="0001011"; -- ІІ операнд if (clk'event and clk='1') then operandX2 <= not(data(3))&not(data(2))&not(data(1))&not(data(0)); end if; address <="0001100"; -- ІІІ операнд if (clk'event and clk='1') then operandX3 <= data; end if; address <="0001101"; -- ІV операнд if (clk'event and clk='1') then operandX4 <= not(data(3))&not(data(2))&not(data(1))&not(data(0)); end if; address <="0001110"; -- V операнд if (clk'event and clk='1') then operandX5 <= not(data(3))&not(data(2))&not(data(1))&not(data(0)); end if; -- обчислення функції functionY <= (operandX1) + (operandX2) + (operandX3) + (operandX4) + (operandX5) + ("0011") ; -- запис результату в пам'ять даних address <="0001111"; write <='1'; read <='0'; end if; end process; END Behavioral; Розробка VHDL моделі комп'ютера library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity TOP is port ( clk : in std_logic; reset : in std_logic; we_view : out std_logic; oe_view : out std_logic; sel_ram_view: out std_logic; int_inq_view: out std_logic; int_ans_view: out std_logic; carry_view : out std_logic; pc_view : out std_logic_vector (6 downto 0); acc_view : out std_logic_vector (3 downto 0); data_view : out std_logic_vector (9 downto 0); addr_view : out std_logic_vector (6 downto 0); ir_view : out std_logic_vector (9 downto 0)); end TOP; architecture Behavioral of TOP is component cpu port( -- компонент-процесор clk : in std_logic; reset : in std_logic; address : out std_logic_vector (6 downto 0); data : inout std_logic_vector (9 downto 0); web : out std_logic; oeb : out std_logic; sel_ram : out std_logic; carry_out : out std_logic; int_inq : out std_logic; int_ans : in std_logic; pc_out : out std_logic_vector (6 downto 0); ir_out : out std_logic_vector (9 downto 0); acc_out : out std_logic_vector (3 downto 0)); end component; component rom port( -- компонент пам'ять інструкцій sel_ram : in std_logic; oe : in std_logic; address : in std_logic_vector (6 downto 0); data : inout std_logic_vector (9 downto 0)); end component; component ram port( -- компонент пам'ять даних clk : in std_logic; sel_ram : in std_logic; oe : in std_logic; we : in std_logic; address : in std_logic_vector (6 downto 0); data : inout std_logic_vector(9 downto 0)); end component; component pu port( -- компонент-обчислювальний пристрій clk : in std_logic; address : out std_logic_vector (6 downto 0); data : inout std_logic_vector (3 downto 0); web : out std_logic; oeb : out std_logic; sel_ram : out std_logic; int_inq : in std_logic; int_ans : out std_logic); end component; signal w_clk : std_logic; signal w_reset : std_logic; signal b_address: std_logic_vector (6 DOWNTO 0); signal b_data : std_logic_vector (9 DOWNTO 0); signal w_web : std_logic; signal w_oeb : std_logic; signal w_sel_ram: std_logic; signal w_int_inq: std_logic; signal w_int_ans: std_logic; begin oe_view <= w_oeb; sel_ram_view <= w_sel_ram; w_clk <= clk; w_reset <= reset; data_view <= b_data; addr_view <= b_address; we_view <= w_web; int_inq_view <= w_int_inq; int_ans_view <= w_int_ans; U1: cpu port map( clk => w_clk, reset => w_reset, address => b_address, data => b_data, web => w_web, oeb => w_oeb, int_inq => w_int_inq, int_ans => w_int_ans, sel_ram => w_sel_ram, carry_out => carry_view, pc_out => pc_view, ir_out => ir_view, acc_out => acc_view); U2: rom port map( sel_ram => w_sel_ram, oe => w_oeb, address => b_address, data => b_data); U3: ram port map( clk => w_clk, sel_ram => w_sel_ram, oe => w_oeb, we => w_web, address => b_address, data => b_data); U4: pu port map( clk => w_clk, address => b_address, data => b_data(3 downto 0), web => w_web, oeb => w_oeb, sel_ram => w_sel_ram, int_inq => w_int_inq, int_ans => w_int_ans); end Behavioral; Схемне позначення комп'ютера Синтез та імплементування VHDL моделі комп'ютера Витяги із звітів про результати синтезу та імплементування: 1.Виявлені в проекті апаратні вузли: HDL Synthesis Report Macro Statistics # RAMs : 1 16x4-bit single-port distributed RAM : 1 # ROMs : 3 20x10-bit ROM : 1 4x1-bit ROM : 2 # Adders/Subtractors : 7 4-bit adder : 5 5-bit adder : 2 # Counters : 1 7-bit up counter : 1 # Registers : 7 1-bit register : 2 10-bit register : 1 3-bit register : 1 4-bit register : 3 # Latches : 1 4-bit latch : 1 # Multiplexers : 4 1-bit 4-to-1 multiplexer : 2 7-bit 4-to-1 multiplexer : 1 7-bit 8-to-1 multiplexer : 1 # Tristates : 12 1-bit tristate buffer : 6 10-bit tristate buffer : 3 4-bit tristate buffer : 1 7-bit tristate buffer : 2 # Xors : 1 4-bit xor2 : 1 * Advanced HDL Synthesis * Loading device for application Rf_Device from file 'v50.nph' in environment C:\Xilinx. Advanced HDL Synthesis Report Macro Statistics # RAMs : 1 16x4-bit single-port distributed RAM : 1 # ROMs : 3 20x10-bit ROM : 1 4x1-bit ROM : 2 # Adders/Subtractors : 7 4-bit adder : 5 5-bit adder : 2 # Counters : 1 7-bit up counter : 1 # Registers : 27 Flip-Flops : 27 # Latches : 1 4-bit latch : 1 # Multiplexers : 4 1-bit 4-to-1 multiplexer : 2 7-bit 4-to-1 multiplexer : 1 7-bit 8-to-1 multiplexer : 1 # Xors : 1 4-bit xor2 : 1 2.Апаратні витрати: Device utilization summary: Number of External IOBs 46 out of 88 52% Number of LOCed External IOBs 0 out of 46 0% Number of SLICEs 64 out of 256 25% Number of BUFGMUXs 1 out of 16 6% Number of TBUFs 64 out of 128 50% 3.Показники швидкодії комп'ютера: Timing Summary: Speed Grade: -6 Minimum period: 8.519ns (Maximum Frequency: 117.388MHz) Minimum input arrival time before clock: No path found Maximum output required time after clock: 10.636ns Maximum combinational path delay: No path found Споживана потужність робочого проекту: Верифікація результатів проектування Основні результати роботи Висновок: В данному курсовому проекті я розроби VHDL модель комп'ютера, який складається із наступних вузлів: CPU - основний процесор; RAM - пам'ять даних; ROM - пам'ять інструкцій; PU - спеціалізований обчислювальний пристрій. Усі основні вузли я використав із запропонованих в методичних вказівках крім спеціалізованого обчислювального пристрою, який я розробив. Також для вводу додаткової інструкції виникла необхідність розширити слова інструкцій з 8біт до 10біт, що викликало зміну розрядності пам'яті інструкцій та шини даних. Введені додаткові інструкції: умовного переходу за умови, що акумулятор рівний нулю та обробки переривання спеціалізованим пристроєм. Використана література 1.Троценко В.В. - VHDL модель комп'ютера ; методичні вказівки до курсового проекту 21с. 2.www.xilinx.com 3.www.xess.com 4.www.model.com
Рекомендуем!
|
|||||||||||||||||||||||||||||||||
© ООО "Олбест" 2009 – 2011 Все права на базы данных защищены. |
база знаний |