Розробка VHDL моделі комп’ютера

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

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

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

Рік:
2024
Тип роботи:
Курсова робота
Предмет:
Дослідження та проектування комп’ютерних систем і мереж
Група:
КІ 5

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА» Кафедра ЕОМ / КУРСОВА РОБОТА з дисципліни: «Дослідження і проектування комп'ютерних систем та мереж» на тему: «Розробка VHDL моделі комп’ютера» Львів – 2017 АНОТАЦІЯ В курсовій роботі розроблено тестову програму та на її основі реалізовано VHDL модель одноциклового RISC комп’ютера з архітектурою SPIM. Також досліджено середовище розробки САПР Xilinx WebPack, та ознайомлено з основними принципами його роботи. Проведено часову верифікацію комп’ютера та експериментально підтверджено результати, які були прогнозовані на початку проектування. ЗМІСТ ВСТУП 4 1. ВИХІДНІ ДАНІ НА ПРОЕКТУВАННЯ 5 2. РОЗРОБКА АРХІТЕКТУРИ РІВНЯ МАШИННИХ ІНСТРУКЦІЙ 6 3. СИНТЕЗ СТРУКТУРИ SPIM RISC КОМП’ЮТЕРА 9 4. РОЗРОБКА ТЕСТОВОЇ ПРОГРАМИ 11 5. РОЗРОБКА VHDL МОДЕЛІ КОМП’ЮТЕРА 13 5.1. Розробка VHDL моделі процесора 13 5.1.1. Модуль ID 13 5.1.2. Модуль EXE 15 5.1.3. Модуль керування 17 5.2. Розробка VHDL моделі пам’яті програм 18 5.3. Розробка VHDL моделі пам’яті даних 20 5.4. Розробка VHDL моделі комп’ютера 22 6. СИНТЕЗ І ІМПЛЕМЕНТУВАННЯ VHDL МОДЕЛІ КОМП’ЮТЕРА 25 7. ВЕРИФІКАЦІЯ РЕЗУЛЬТАТІВ ПРОЕКТУВАННЯ 26 ВИСНОВКИ 28 СПИСОК ВИКОРИСТАНОЇ ЛІТЕРАТУРИ 29 ВСТУП Одним з перспективних напрямків проектування цифрових пристроїв є їх синтез на основі поведінкового опису, виконаний розробниками на мові програмування класу HDL. Основними складовими частинами процесу проектування є: 1. Етап передпроектних досліджень – вивчення потреб науково-технічних досягнень наявних ресурсів. 2. Технічне завдання, яке включає:  призначення системи;  умови експлуатації, які є виражені якісними або часовими характеристиками;  вимоги до вихідних параметрів, виражені у вигляді умов працездатності. 3. Технічна пропозиція – визначає основні принципи побудови системи, можливість і доцільність проектування. 4. Ескізний проект – перевірка коректності основних принципів і положень, що визначають функціональність майбутнього об’єкта. 5. Технологічний проект – передбачає всебічну розробку частин проекту, конкретних технологічних рішень. 6. Робочий проект – формування всієї необхідної документації для виготовлення системи, створення і випробування дослідного зразка або пробної партії. 7. Випробування і ввід в експлуатацію – за результатами випробування в проектну документацію вносять зміни після чого здійснюється впровадження у виробництво. ВИХІДНІ ДАНІ НА ПРОЕКТУВАННЯ Розробити тестову програму та на її основі VHDL модель одноциклового RISC комп’ютера з архітектурою SPIM (MIPS, DLX). VHDL модель синтезувати і імплементувати. Цільовою є ПЛІС фірми Xilinx, а інструментом проектування – САПР Xilinx WebPack. Верифікувати імплементовану модель часовим симулюванням її поведінки на рівні вентилів. Експериментально підтвердити отримане під час синтезу та імплементування досягнуте значення тактової частоти. Надати оцінки споживаної потужності. Отримати засобами САПР Xilinx WebPack функційні (RTL) схеми імплементації комп'ютера та оформити їх кресленнями. Проаналізувати згенеровані САПР Xilinx WebPack технологічні схеми імплементації проекту. Розглянути основні принципи побудови принципових схем платформ, що містять цільову ПЛІС проекту та вибрати готову апаратну платформу для подальшої емуляції розробленого комп'ютера. В таблиці 1 представлено вихідні дані на проектування. Табл.1 Вихідні дані на проектування № Варіант 1  1 Розрядність даних 8  2 Розрядність інструкцій 32  3 Число регістрів 16  4 Місткість пам’яті інструкцій, КБ 2  5 Місткість пам’яті даних, КБ 2  6 Число реалізованих машинних інструкцій ≥5  7 Цільова ПЛІС Virtex2  8 Системна тактова частота, МГц ≥40  9 Довжина тестової програми, інструкцій ≥8  РОЗРОБКА АРХІТЕКТУРИ РІВНЯ МАШИННИХ ІНСТРУКЦІЙ RISC (англ. Reduced Instruction Set Computing − комп'ютер зі скороченим набором команд) − архітектура процесорів зі скороченим набором команд. Ще відома як "Load/Store" архітектура. Найвідоміші представники: DEC Alpha, ARC, ARM, AVR, MIPS, PA-RISC, Power Architecture (включаючи PowerPC), SuperH, та SPARC. Усі команди працюють з операндами і мають однаковий формат. Звертання до пам'яті виконується за допомогою спеціальних команд завантаження регістра й запису. Простота структури і невеликий набір команд дозволяють повністю реалізувати їхнє апаратне виконання й ефективний конвеєр при невеликому обсязі устаткування. Основними рисами RISC архітектури є: мала кількість інструкцій; однакова довжина всіх інструкцій; мала кількість різних форматів інструкцій; відсутність інструкцій які працюють з операндами в пам'яті (за виключенням інструкцій завантаження та збереження); мала кількість апаратно підтримуваних типів даних; велика кількість ідентичних регістрів загального призначення. Поштовхом для розробки RISC архітектури стало те, що тогочасні (середина 1970-х) компілятори не використовували більшість команд із CISC набору та не могли скористатися перевагами багатьох типів складної адресації. Виконання складних CISC інструкцій вимагало багатьох процесорних тактів, а реалізація різних типів адресування та інструкцій, що реалізовують високорівневі операції, займала більшість площі процесорного кристалу та майже не використовувалась. В принципі, є можливість проектувати процесори на чистій RISC-архітектурі. Але відмовитися від архітектури x86 вже неможливо, оскільки під неї написано більшість поширених у світі програм, включаючи комп'ютерні ігри. Арифметику RISC-процесорів вирізняє високий ступінь дроблення конвеєра. Цей прийом дозволяє збільшити тактову частоту (отже, і продуктивність) комп'ютера. Чим елементарніші дії виконуються в кожній фазі роботи конвеєра - тим вищою є частота його роботи. RISC-процесори із самого початку були орієнтовані на реалізацію всіх можливостей прискорення арифметичних операцій, тому їхні конвеєри мають значно вищу швидкодію, ніж CISC-процесори. Тому RISC-процесори в 2-4 рази швидші, ніж CISC- процесори зі звичайною системою команд, що мають таку ж саму тактову частоту, і більш високопродуктивні, незважаючи на більший розмір програм. RISC- архітектура побудована на 4 основних принципах: 1. Будь-яка операція повинна виконуватися за один такт, незалежно від її типу. 2. Система команд повинна містити мінімальну кількість найчастіше використовуваних найпростіших інструкцій однакової довжини. 3. Операції обробки даних реалізуються тільки у форматі «регістр-регістр» (операнди вибираються з оперативних регістрів процесора, і результат операції записується також у регістр; а обмін між оперативними регістрами й пам'яттю виконується тільки за допомогою команд завантаження/запису). 4. Склад системи команд повинен бути «зручним» для компіляції операторів мов високого рівня. Сьогодні кількість процесорів із RISC- архітектурою істотно зросла і їх виробляють усі провідні фірми США, у тому числі фірми Intel, Motorola – виробники основних сімейств процесорів із CISC-архітектурою. В RISC-архітектурі характерне виконання будь-якої інструкції розкладено на три кроки. FETCH – крок вибирання нової інструкції з пам’яті інструкцій в регістр інструкцій, обчислення адреси наступної інструкції програми за правилом «поточна адреса + і»; DECODE – крок декодування вибраної інструкції за допомогою кодового представлення; EXECUTE – крок виконання поточної інструкції за її алгоритмом. Під час виконання трьох стадій поточної інструкції, обробка наступної не розпочинається. В таблиці 2 наведений перелік функцій машинних інструкцій згідно індивідуального завдання. Табл.2 Перелік функції машинних інструкцій № Мнемокод Символічний запис Функція  1 lw $t, offset($s) $t = MEM[$s + offset] Завантаження числа з пам’яті з адреси [$s + offset]  2 sw $t, offset($s) MEM[$s + offset] = $t Збереження числа в пам’яті за адресою [$s + offset]  3 add $d, $s, $t $d = $s + $t Додавання чисел з адрес $s і $t і збереження їх в адресі $d  4 beq $s, $t, offset if $s == $t advance_pc (offset << 2)); else advance_pc (4); Перехід по мітці, якщо $s == $t  5 xor $d, $s, $t $d = $s ^ $t; Операція «виключного АБО» над $s і $t і запис результату у $d.   СИНТЕЗ СТРУКТУРИ SPIM RISC КОМП’ЮТЕРА Загалом, синтезована структура прототипу наближена до відомої структури SPIM машини. Але в оригінальну архітектуру SPIM машини навмисно внесені зміни для того щоб спростити імплементування в ПЛІС Spartan взірця 1998 року, а саме: Формат даних має довжину 8 бітів, а не 32 біти; Формат інструкцій не змінено, а ось його трактування для інструкцій з безпосереднім операндом змінено проти оригіналу; це дозволило використовувати наявні асемблери і симулятори; Реалізовано не всі інструкції, а лише ті, що містить тестова програма; Пам’ять даних містить дві байтові комірки з адресами 0 і 1 (а не 0 та 4, як має бути); двох комірок достатньо, аби виконувати тестову програму прототипу; Регістри даних мають розрядність 8 бітів, а не 32 біти; їх є лише вісім, а не 32, як в оригіналі. Сучасні ПЛІС фірми Xilinx дозволяють створювати моделі для синтезу в ПЛІС з оригінальною розрядністю даних, з оригінальним числом 32 регістрів загального призначення та з місткістю пам’яті програми і пам'яті даних на декілька кілобайтів кожна. Отже, спрощення (викривлення) MIPS архітектури, допущені в прототипі, що розглядається у реальному проектуванні нескладно виправити. Дані спрощення допустились для того щоб досягнути варіативності вихідних даних на розробку проекта. / Рис.1. Спрощене подання синтезованої структури одноциклової SPIM машини Далі представлено детальну структуру одно циклової RISC машини Паттерсона і Хеннессі. / Рис.2. Детальна структура одноциклової RISC машини Паттерсона і Хеннессі Метою проектування є одноцикловий варіант, тобто такий, у якому нема конвеєра (знову таки заради спрощення), а усі RISC інструкції виконуються за один машинний цикл, який в нас точно дорівнюється одному тактовому інтервалу. РОЗРОБКА ТЕСТОВОЇ ПРОГРАМИ Призначення тестової програми – верифікація розробленого комп’ютера. Для отримання тестової програми необхідно: Виконати часове моделювання функціонування комп’ютера, що керується певною тестовою програмою (віртуальна верифікація). Завантажити отриманий за допомогою САПР, засобами якої ми розробляли проект, бінарний файл конфігурації до ПЛІС емулятора прототипної плати, тобто, до друкованого вузла, що містить цільову ПЛІС і допоміжні елементи, і (можливо, за допомогою осцилографа) переконатися , що поведінка комп’ютера повністю визначена тестовою програмою (реальна верифікація). Обидва способи не гарантують виявлення усіх можливих помилок в результатах проектування. А все це спричинене неможливістю формального математичного доведення коректності функціонування машини з програмою, що зберігається в пам’яті, під дією всіх варіантів прорамі їхніх даних. В таблиці 3 наведена тестова програма згідно індивідуального завдання. Табл.3. Тестова програма Aдреса Директива Мітка Інструкція Код   .text       start:    00   lw $a0,0($zero) 0x8c040000  04   lw $a1,1($zero) 0x8c050001  08   add $a0, $a0, $a1 0x00852020  0c   sw $a0, 0($zero) 0xac040000  10   xor $a1, $a0, $a1 0x00852826  14   sw $a1, 0($zero) 0xac050000  18   beq $a0, $zero, halt 0x10800000    halt:    1c   beq $a0, $a0, lab2 0x1084ffff   Остання інструкція програми виключає подальші зміни програмного лічильника, тобто зупиняє програму. Коли комірка пам’яті з абсолютною адресою 0 містить код числа +2, а комірка 1 – код числа (-2), тоді можна прорахувати наступну послідовність змін вмістимого програмного лічильника при виконанні тестової програми: 00, 04, 08, 0c, 10, 14, 18, 1c, 1c, 1c...  Саме таку послідовність змін вмістимого лічильника інструкцій необхідно отримати часовим симулюванням імплементованої до ПЛІС VHDL моделі комп’ютера. Тесову програму було завантажено до програмного симулятора машинних інструкцій Pcspim з метою отримання її машинних кодів. Ці машинні коди мусить містити розроблювана VHDL модель комп’ютера. На Рис.3 подано вікно програмного симулятора Pcspim, що стосується тестової програми. / Рис.3. Вікно програмного симулятора Pcspim РОЗРОБКА VHDL МОДЕЛІ КОМП’ЮТЕРА 5.1. Розробка VHDL моделі процесора 5.1.1. Модуль ID Модуль ID/OF (декодувати інструкцію/вибрати операнди) містить регістровий файл, інтерфейс якого до АЛП подає комбінаційний пристрій керування SPIM RISC. / Рис.4. Інтерфейс регістрового файла до АЛП На рис.5 представлений модуль ID (модуль декодування інструкції). / Рис.5. Модуль ID Лістинг модуля ID: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity ID_chip is port (clock : in std_logic; reset : in std_logic; RegWrite : in std_logic; RegDst : in std_logic; instruction : in std_logic_vector(31 downto 0); write_data : in std_logic_vector( 7 downto 0); Immediate : out std_logic_vector(7 downto 0); Rs : out std_logic_vector(7 downto 0); Rt : out std_logic_vector(7 downto 0); OpCode : out std_logic_vector(5 downto 0)); end ID_chip; architecture behav of ID_chip is signal reg1,reg2,reg3,reg4, reg5,reg6,reg7 : std_logic_vector(7 downto 0); signal reg1tmp,reg2tmp,reg3tmp,reg4tmp, reg5tmp,reg6tmp,reg7tmp: std_logic_vector(7 downto 0); signal reg1wr,reg2wr,reg3wr,reg4wr,reg5wr,reg6wr,reg7wr : std_logic; signal rd_addr1,rd_addr2 : std_logic_vector(4 downto 0); signal wr_addr_ALUop,wr_addr_LWop, wr_addr : std_logic_vector(4 downto 0); begin OpCode <= Instruction(31 downto 26); rd_addr1 <= Instruction(25 downto 21); rd_addr2 <= Instruction(20 downto 16); wr_addr_ALUop <= Instruction(15 downto 11); wr_addr_LWop <= Instruction(20 downto 16); Immediate <= Instruction(7 downto 0); with rd_addr1(4 downto 0) select Rs <= x"00" when "00000", reg1 when "00001", reg2 when "00010", reg3 when "00011", reg4 when "00100", reg5 when "00101", reg6 when "00110", reg7 when "00111", x"FF" when others; with rd_addr2(4 downto 0) select Rt <= x"00" when "00000", reg1 when "00001", reg2 when "00010", reg3 when "00011", reg4 when "00100", reg5 when "00101", reg6 when "00110", reg7 when "00111", x"FF" when others; wr_addr <= wr_addr_ALUop when RegDst='1' else wr_addr_LWop; reg1wr<='1' when ((wr_addr="00001") and (RegWrite='1')) else '0'; reg2wr<='1' when ((wr_addr="00010") and (RegWrite='1')) else '0'; reg3wr<='1' when ((wr_addr="00011") and (RegWrite='1')) else '0'; reg4wr<='1' when ((wr_addr="00100") and (RegWrite='1')) else '0'; reg5wr<='1' when ((wr_addr="00101") and (RegWrite='1')) else '0'; reg6wr<='1' when ((wr_addr="00110") and (RegWrite='1')) else '0'; reg7wr<='1' when ((wr_addr="00111") and (RegWrite='1')) else '0'; reg1tmp <= write_data when reg1wr='1' else reg1; reg2tmp <= write_data when reg2wr='1' else reg2; reg3tmp <= write_data when reg3wr='1' else reg3; reg4tmp <= write_data when reg4wr='1' else reg4; reg5tmp <= write_data when reg5wr='1' else reg5; reg6tmp <= write_data when reg6wr='1' else reg6; reg7tmp <= write_data when reg7wr='1' else reg7; process begin wait until clock'event and clock='1'; if reset='1' then reg1 <= x"A1"; reg2 <= x"A2"; reg3 <= x"A3"; reg4 <= x"A4"; reg5 <= x"A5"; reg6 <= x"A6"; reg7 <= x"A7"; else reg1 <= reg1tmp; reg2 <= reg2tmp; reg3 <= reg3tmp; reg4 <= reg4tmp; reg5 <= reg5tmp; reg6 <= reg6tmp; reg7 <= reg7tmp; end if; end process; end behav; 5.1.2. Модуль EXE Модуль EXE призначений для виконання поточної інструкції за її алгоритмом. На рис.6 представлений модуль EXE (модуль виконання інструкцій). / Рис.6. Модуль EXE Лістинг модуля EXE: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity ex_chip is port( Branch : in std_logic; ALUSrc : in std_logic; NPC : in std_logic_vector(7 downto 0); Rs : in std_logic_vector(7 downto 0); Rt : in std_logic_vector(7 downto 0); Immediate : in std_logic_vector(7 downto 0); ALUResult : out std_logic_vector(7 downto 0); Branch_Address : out std_logic_vector(7 downto 0); PCsrc : out std_logic); end ex_chip; architecture behav of ex_chip is signal Branch_Address_tmp : std_logic_vector(8 downto 0); signal Zero : std_logic; begin ALUresult <= (Rs + Rt) when (ALUsrc = '0') else (Rs + Immediate); Branch_Address_tmp <= ('0' & NPC)+(Immediate(6 downto 0) &'0'&'0'); Branch_Address <= Branch_Address_tmp(7 downto 0); Zero <= '1' when (Rs = Rt) else '0'; PCsrc <= Branch and Zero; end behav; 5.1.3. Модуль керування Для одноциклової машини достатньо мати комбінаційний пристрій керування. Адже кожна машинна інструкція одноразово вибирається з програмної пам'яті, а її код протягом цього циклу не змінюється. На рис.7 представлений модуль CTL (модуль керування). / Рис.7. Модуль керування Лістинг модуля керування: library IEEE; use IEEE.STD_LOGIC_1164.all; use IEEE.STD_LOGIC_ARITH.all; entity ctl_chip is port( Op : in std_logic_vector(5 downto 0); RegDst : out std_logic; ALUSrc : out std_logic; MemtoReg : out std_logic; RegWrite : out std_logic; MemWrite : out std_logic; Branch : out std_logic); end ctl_chip; architecture behav of ctl_chip is signal R_format, lw, sw, beq : std_logic; begin R_format <= ((not Op(5)) and (not Op(4)) and (not Op(3)) and(not Op(2)) and (not Op(1)) and (not Op(0))); lw <= (Op(5)) and (not Op(4)) and (not Op(3)) and(not Op(2)) and (Op(1)) and (Op(0)); sw <= (Op(5)) and (not Op(4)) and (Op(3)) and(not Op(2)) and (Op(1)) and (Op(0)); beq <= (not Op(5)) and (not Op(4)) and (not Op(3)) and(Op(2)) and (not Op(1)) and (not Op(0)); RegDst <= R_format; ALUSrc <= lw or sw; MemtoReg <= lw; RegWrite <= R_format or lw; MemWrite <= sw; Branch <= beq; end behav; / Рис.8. Структура комбінаційного модуля керування R-format позначає інструкції, що працюють з даними з регістрів, наприклад, add r1, r2, r3; lw – машинна інструкція завантаження 32-х бітового слова з комірки пам'яті до регістра; sw – машинна інструкція збереження вмістимого регістра в комірці пам’яті; beq –машинна інструкція умовного переходу за ознакою рівності; xor r1, r2, r3 – машинна інструкція «виключного АБО» регістрів r2 та r3 та запис результату в регістр r1. 5.2. Розробка VHDL моделі пам’яті програм Призначення модуля полягає у збереженні всіх кодів операцій для їх подальшого виконання. На рис.9 представлений модуль пам’яті програм. / Рис.9. Модуль пам’яті програм Лістинг модуля пам’яті програм: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity IF_chip is port( clock : in std_logic; reset : in std_logic; PCsrc : in std_logic; Branch_Address : in std_logic_vector(7 downto 0); PCview : out std_logic_vector(7 downto 0); Instruction : out std_logic_vector(31 downto 0); NPC : out std_logic_vector(7 downto 0)); end IF_chip; architecture behav of IF_chip is signal PC : std_logic_vector(7 downto 0); signal Input_PC : std_logic_vector(7 downto 0); signal NPC_temp : std_logic_vector(7 downto 0); -- Test Program, Content of instruction Memory constant rom0 : std_logic_vector(31 downto 0) :=x"8c040000"; -- lw $4, 0($0) constant rom1 : std_logic_vector(31 downto 0) := x"8c050001"; -- lw $5, 1($0) constant rom2 : std_logic_vector(31 downto 0) := x"00852020"; -- add $6, $4, $5 constant rom3 : std_logic_vector(31 downto 0) := x"ac040000"; -- sw $6, 0($0) constant rom4 : std_logic_vector(31 downto 0) := x"00852826"; -- xor $7, $4, $5 constant rom5 : std_logic_vector(31 downto 0) := x"ac050000"; -- sw $7, 0($0) constant rom6 : std_logic_vector(31 downto 0) := x"10800000"; -- beq $4, $0, -20 constant rom7 : std_logic_vector(31 downto 0) := x"1084ffff"; -- beq $4, $4, -4 begin PCview <= PC; -- next address calculating in three steps NPC_temp(7 downto 2) <= PC(7 downto 2) + 1; NPC_temp(1 downto 0) <= b"00"; NPC <= NPC_temp; Input_PC <= Branch_Address when PCsrc = '1' else NPC_temp; process begin wait until (clock'event) and (clock='1'); If reset='1' then PC <= x"00"; else PC <= Input_PC; end if; end process; process (PC) begin case PC(7 downto 2) is when "000000" => instruction <= rom0; when "000001" => instruction <= rom1; when "000010" => instruction <= rom2; when "000011" => instruction <= rom3; when "000100" => instruction <= rom4; when "000101" => instruction <= rom5; when "000110" => instruction <= rom6; when "000111" => instruction <= rom7; when others => instruction <= x"00000000"; end case; end process; end behav; 5.3. Розробка VHDL моделі пам’яті даних Призначення модуля полягає у збереженні операндів та результатів виконання операцій.  На рис.10 представлений модуль пам’яті даних. / Рис.10. Модуль пам’яті даних Лістинг модуля пам’яті даних: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity MEM_chip is port (clock : in std_logic; reset : in std_logic; MemWrite : in std_logic; MemToReg : in std_logic; address : in std_logic_vector(7 downto 0); write_data : in std_logic_vector(7 downto 0); writeback_data : out std_logic_vector(7 downto 0)); end MEM_chip; architecture behav of MEM_chip is signal read_data : std_logic_vector(7 downto 0); signal cell0, cell1 : std_logic_vector(7 downto 0); signal tmp0, tmp1 : std_logic_vector(7 downto 0); signal wr0, wr1 : std_logic; begin read_data <= cell0 when address=x"00" else cell1 when address=x"01" else x"FF"; writeback_data <= address when MemtoReg='0' else read_data; wr0 <= '1' when MemWrite = '1' and address(0) = '0' else '0'; wr1 <= '1' when MemWrite = '1' and address(0) = '1' else '0'; tmp0 <= write_data when wr0 ='1' else cell0; tmp1 <= write_data when wr1 ='1' else cell1; process begin wait until clock'event and clock='1'; if (reset = '1') then cell0 <= x"02"; cell1 <= x"FE"; else cell0 <= tmp0; cell1 <= tmp1; end if; end process; end behav; Розробка VHDL моделі комп’ютера На рис.11 представлена модель SPIM комп’ютера. / Рис.11. Модель SPIM комп’ютера Лістинг моделі SPIM комп’ютера: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity SPIM is port ( clock : in std_logic; reset : in std_logic; PC : out std_logic_vector(7 downto 0)); end SPIM; architecture spim_structure of SPIM is component IF_chip port( clock : in std_logic; reset : in std_logic; Branch_Address : in std_logic_vector(7 downto 0); PCsrc : in std_logic; Instruction : out std_logic_vector(31 downto 0); NPC : out std_logic_vector(7 downto 0); PCview : out std_logic_vector(7 downto 0)); end component; component ID_chip port( clock : in std_logic; reset : in std_logic; Instruction : in std_logic_vector(31 downto 0); write_data : in std_logic_vector(7 downto 0); RegWrite : in std_logic; RegDst : in std_logic; Immediate : out std_logic_vector(7 downto 0); Rs : out std_logic_vector(7 downto 0); Rt : out std_logic_vector(7 downto 0); Opcode : out std_logic_vector(5 downto 0)); end component; component EX_chip port( Branch : in std_logic; ALUSrc : in std_logic; NPC : in std_logic_vector(7 downto 0); Rs : in std_logic_vector(7 downto 0); Rt : in std_logic_vector(7 downto 0); Immediate : in std_logic_vector(7 downto 0); ALUResult : out std_logic_vector(7 downto 0); Branch_Address : out std_logic_vector(7 downto 0); PCsrc : out std_logic); end component; component MEM_chip port( clock : in std_logic; reset : in std_logic; Memwrite : in std_logic; MemtoReg : in std_logic; address : in std_logic_vector(7 downto 0); write_data : in std_logic_vector(7 downto 0); writeback_data : out std_logic_vector(7 downto 0)); end component; component CTL_chip port( Op : in std_logic_vector(5 downto 0); RegDst : out std_logic; ALUSrc : out std_logic; MemtoReg : out std_logic; RegWrite : out std_logic; MemWrite : out std_logic; Branch : out std_logic); end component; signal Branch_wire : std_logic; signal PCsrc_wire : std_logic; signal RegWrite_wire : std_logic; signal MemtoReg_wire : std_logic; signal ALUSrc_wire : std_logic; signal MemWrite_wire : std_logic; signal RegDst_wire : std_logic;
Антиботан аватар за замовчуванням

26.12.2017 22:12-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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