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

Розробка архітектури рівня машинних інструкцій. Синтез структури SPIM RISC комп’ютера. Реалізація VHDL моделі одноциклового RISC комп’ютера з архітектурою SPIM. Дослідження середовища розробки САПР Xilinx webpack та основні принципи його роботи.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык украинский
Дата добавления 31.10.2019
Размер файла 1,3 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

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

Національний університет «Львівська політехніка»

Кафедра ЕОМ

Курсова робота

з дисципліни: «Дослідження і проектування комп'ютерних систем та мереж»

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

Виконав: ст. гр. КІКБ-11

Кіцила В.З.

Прийняв: старший викладач

Кицун Г.В.

Львів - 2019

Анотація

комп'ютер архітектура одноцикловий

В курсовій роботі розроблено тестову програму та на її основі реалізовано VHDL модель одноциклового RISC комп'ютера з архітектурою SPIM.

Також досліджено середовище розробки САПР Xilinx WebPack, та ознайомлено з основними принципами його роботи.

Проведено часову верифікацію комп'ютера та експериментально підтверджено результати, які були прогнозовані на початку проектування.

Зміст

Вступ

1. Вихідні дані на проектування

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

3. Синтез структури SPIM RISC комп'ютера

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

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

5.1 Розробка VHDL моделі процесора

5.1.1 Модуль ID

5.1.2 Модуль EXE

5.1.3 Модуль керування

5.2 Розробка VHDL моделі пам'яті програм

5.3 Розробка VHDL моделі пам'яті даних

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

6. Синтез і імплементування VHDL моделі комп'ютера

7. Верифікація результатів проектування

Висновки

Список використаної літератури

Вступ

Одним з перспективних напрямків проектування цифрових пристроїв є їх синтез на основі поведінкового опису, виконаний розробниками на мові програмування класу HDL.

Основними складовими частинами процесу проектування є:

1. Етап передпроектних досліджень - вивчення потреб науково-технічних досягнень наявних ресурсів.

2. Технічне завдання, яке включає:

? призначення системи;

? умови експлуатації, які є виражені якісними або часовими характеристиками;

? вимоги до вихідних параметрів, виражені у вигляді умов працездатності.

3. Технічна пропозиція - визначає основні принципи побудови системи, можливість і доцільність проектування.

4. Ескізний проект - перевірка коректності основних принципів і положень, що визначають функціональність майбутнього об'єкта.

5. Технологічний проект - передбачає всебічну розробку частин проекту, конкретних технологічних рішень.

6. Робочий проект - формування всієї необхідної документації для виготовлення системи, створення і випробування дослідного зразка або пробної партії.

7. Випробування і ввід в експлуатацію - за результатами випробування в проектну документацію вносять зміни після чого здійснюється впровадження у виробництво.

1. Вихідні дані на проектування

Розробити тестову програму та на її основі 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

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

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.

3. Синтез структури SPIM RISC комп'ютера

Загалом, синтезована структура прототипу наближена до відомої структури SPIM машини. Але в оригінальну архітектуру SPIM машини навмисно внесені зміни для того щоб спростити імплементування в ПЛІС Spartan взірця 1998 року, а саме:

Формат даних має довжину 8 бітів, а не 32 біти;

Формат інструкцій не змінено, а ось його трактування для інструкцій з безпосереднім операндом змінено проти оригіналу; це дозволило використовувати наявні асемблери і симулятори;

Реалізовано не всі інструкції, а лише ті, що містить тестова програма;

Пам'ять даних містить дві байтові комірки з адресами 0 і 1 (а не 0 та 4, як має бути); двох комірок достатньо, аби виконувати тестову програму прототипу;

Регістри даних мають розрядність 8 бітів, а не 32 біти; їх є лише вісім, а не 32, як в оригіналі.

Сучасні ПЛІС фірми Xilinx дозволяють створювати моделі для синтезу в ПЛІС з оригінальною розрядністю даних, з оригінальним числом 32 регістрів загального призначення та з місткістю пам'яті програми і пам'яті даних на декілька кілобайтів кожна. Отже, спрощення (викривлення) MIPS архітектури, допущені в прототипі, що розглядається у реальному проектуванні нескладно виправити. Дані спрощення допустились для того щоб досягнути варіативності вихідних даних на розробку проекта.

Рис. 1. Спрощене подання синтезованої структури одноциклової SPIM машини

Далі представлено детальну структуру одно циклової RISC машини Паттерсона і Хеннессі.

Рис. 2. Детальна структура одноциклової RISC машини Паттерсона і Хеннессі

Метою проектування є одноцикловий варіант, тобто такий, у якому нема конвеєра (знову таки заради спрощення), а усі RISC інструкції виконуються за один машинний цикл, який в нас точно дорівнюється одному тактовому інтервалу.

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

Призначення тестової програми - верифікація розробленого комп'ютера.

Для отримання тестової програми необхідно:

Виконати часове моделювання функціонування комп'ютера, що керується певною тестовою програмою (віртуальна верифікація).

Завантажити отриманий за допомогою САПР, засобами якої ми розробляли проект, бінарний файл конфігурації до ПЛІС емулятора прототипної плати, тобто, до друкованого вузла, що містить цільову ПЛІС і допоміжні елементи, і (можливо, за допомогою осцилографа) переконатися , що поведінка комп'ютера повністю визначена тестовою програмою (реальна верифікація). Обидва способи не гарантують виявлення усіх можливих помилок в результатах проектування. А все це спричинене неможливістю формального математичного доведення коректності функціонування машини з програмою, що зберігається в пам'яті, під дією всіх варіантів прорамі їхніх даних. В таблиці 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

5. Розробка 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;

5.4 Розробка 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;

signal NPC_bus : std_logic_vector(7 downto 0);

signal Rs_bus : std_logic_vector(7 downto 0);

signal Rt_bus : std_logic_vector(7 downto 0);

signal OpCode_bus : std_logic_vector(5 downto 0);

signal Imm_bus : std_logic_vector(7 downto 0);

signal BrAddress_bus : std_logic_vector(7 downto 0);

signal ALUresult_bus : std_logic_vector(7 downto 0);

signal write_back_bus : std_logic_vector(7 downto 0);

signal Instruction_bus : std_logic_vector(31 downto 0);

begin

U_IF : IF_chip port map(

clock => clock,

reset => reset,

Branch_Address => BrAddress_bus,

PCsrc => PCsrc_wire,

Instruction => Instruction_bus,

NPC => NPC_bus,

PCview => PC);

U_ID : ID_chip port map(

clock => clock,

reset => reset,

instruction => Instruction_bus,

write_data => write_back_bus,

RegWrite => RegWrite_wire,

RegDst => RegDst_wire,

Rs => Rs_bus,

Rt => Rt_bus,

OpCode => OpCode_bus,

Immediate => Imm_bus);

U_EX: EX_chip port map (

Branch => Branch_wire,

ALUSrc => ALUSrc_wire,

NPC => NPC_bus,

Rs => Rs_bus,

Rt => Rt_bus,

Immediate => Imm_bus,

PCsrc => PCsrc_wire,

Branch_Address => BrAddress_bus,

ALUResult => ALUResult_bus);

U_MEM: MEM_chip port map (

clock => clock,

reset => reset,

MemWrite => MemWrite_wire,

MemtoReg => MemtoReg_wire,

writeback_data => write_back_bus,

address => ALUResult_bus,

write_data => Rt_bus);

U_CTL: CTL_chip port map(

Op => OpCode_bus,

RegDst => RegDst_wire,

ALUSrc => ALUSrc_wire,

MemtoReg => MemtoReg_wire,

RegWrite => RegWrite_wire,

MemWrite => MemWrite_wire,

Branch => Branch_wire);

end spim_structure;

6. Синтез і імплементування VHDL моделі комп'ютера

На рис. 12 показано результати синтезу та імплементування VHDL моделі комп'ютера.

Рис. 12. Результати синтезу та імплементування VHDL моделі комп'ютера.

На рис. 13 показано RTL-схему SPIM комп'ютера.

Рис. 13. RTL-схема SPIM комп'ютера

7. Верифікація результатів проектування

Після імплементації моделі SPIM комп'ютера її необхідно перевірити часовим симулюванням на рівні вентилів.

На рис. 14 представлено результати часового симулювання моделі SPIM комп'ютера.

Рис. 14. Результати часового симулювання моделі SPIM комп'ютера

Вміст програмного лічильника змінюється відповідно до тестової програми.

Лістинг тестового стенду:

LIBRARY ieee;

USE ieee.std_logic_1164.ALL;

ENTITY moskovych_tb IS

END moskovych_tb;

ARCHITECTURE behavior OF moskovych_tb IS

COMPONENT SPIM

PORT(

clock : IN std_logic;

reset : IN std_logic;

PC : OUT std_logic_vector(7 downto 0)

);

END COMPONENT;

--Inputs

signal clock : std_logic := '0';

signal reset : std_logic := '1';

--Outputs

signal PC : std_logic_vector(7 downto 0);

-- Clock period definitions

constant clock_period : time := 10 ns;

BEGIN

-- Instantiate the Unit Under Test (UUT)

uut: SPIM PORT MAP (

clock => clock,

reset => reset,

PC => PC

);

-- Clock process definitions

clock_process :process

begin

clock <= '0';

wait for clock_period/2;

clock <= '1';

wait for clock_period/2;

end process;

-- Stimulus process

stim_proc: process

begin

-- hold reset state for 100 ns.

wait for 100 ns;

reset <= '0';

wait for clock_period*10;

-- insert stimulus here

wait;

end process;

END;

Висновки

В курсовій роботі було розроблено тестову програму та на її основі реалізовано VHDL модель одноциклового RISC комп'ютера з архітектурою SPIM. Також було досліджено середовище розробки САПР Xilinx WebPack, та ознайомлено з основними принципами його роботи.

Провівши часову верифікацію комп'ютера було експериментально підтверджено результати, які були прогнозовані на початку проектування. Таким чином, можна стверджувати, що SPIM комп'ютер реалізовано коректно і у повному обсязі.

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

Список використаної літератури

1. D. Patterson, J. Hennessy. Computer Organisation and Design. The hardware/software Interface. - Elsevier. 2005. 3rd Edition. 684 р.

2. Клайв Максфилд. Проектирование на ПЛИС. Архитектура, средства и методи. - М.: Издательский дом «Додека-ХХІ», 2007. - 408 с.

3. Ian Grout. Digital Systems Design with FPGAs and CPLDs. - Elsevier Ltd. 2008. 763 р.

4. Сергиенко А.М. VHDL для проектирования вичислительних устройств. - К. ЧП «Корнейчук», 2003, 208 с.

5. MIPS Instruction Reference. [Електронний ресурс]. - Режим доступу: http://www.mrc.uidaho.edu/mrc/people/jff/digital/MIPSir.html.

6. Мікропроцесорна техніка: Підручник/ Ю.І. Якименко та інш. - К.: ІВЦ Політехніка; Кондор, 2004. с. 379-395.

7. Схемотехніка електронних систем: У з кн. Кн. 3. Мікропроцесори та мікро контролери: Підручник/ В.І. Бойко, А.М. Гуржій, В.Я. Жуйков та ін. - 2-е вид. - К: Вища шк., 2004. с. 338 - 356 с.

8. Веб-сторінка компанії Aldec®, Inc [Електронний ресурс]. - Режим доступу: http://www.aldec.com.

Размещено на Allbest.ru


Подобные документы

  • Синтез на основі поведінкового опису, виконаний розробниками на мові програмування класу HDL, як перспективний напрямок проектування цифрових пристроїв. Опис RISC-архітектури комп'ютерів. VHDL-модель прототипу RISC-комп'ютера. Основні модулі моделей.

    курсовая работа [1,1 M], добавлен 23.01.2014

  • Складання, імлементація і верифікація VHDL моделі чотирибітового комп’ютера, що вбудовується до ПЛІС, містить процесор, пам'яті даних і машинних кодів. Перелік і функції машинних інструкцій процесора "Гном". Асемблерна тестова програма і її машинні коди.

    курсовая работа [24,3 K], добавлен 10.01.2010

  • Основні блоки персонального комп'ютера та їх значення. Варіанти організації внутрішньомашиного інтерфейсу. Функціональна схема мікропроцесору. Види запам'ятовуючих пристроїв. Послідовність роботи блоків комп'ютера. Основні зовнішні та внутрішні пристрої.

    курсовая работа [346,8 K], добавлен 05.01.2014

  • Основні принципи дії та архітектура прототипних варіантів CISC-комп'ютера. Інструкції асемблерної мови і принцип трансляції асемблерної програми у машинний код. Розробка тестової програми. Перевірка правильності роботи реалізованих команд у прикладах.

    курсовая работа [446,1 K], добавлен 03.02.2011

  • Програми, які виводять на екран характеристики комп'ютера. Розробка програми "Монітор використання ресурсів комп’ютера" на мові програмування ASM-86. Алгоритм програми та її реалізація. Системні вимоги, інструкція для користувача, лістинг програми.

    курсовая работа [22,2 K], добавлен 08.08.2009

  • "Критичні" комплектуючі комп'ютера. Процесор та оперативна пам'ять. Швидкість роботи комп'ютера. Порівняння швидкодії комплектуючих з роботою еталонних моделей. Стратегія і варіанти модернізації. Функціональні особливості побудови материнської плати.

    курсовая работа [4,6 M], добавлен 24.06.2013

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

    реферат [24,4 K], добавлен 27.12.2011

  • Загальні відомості про мову VHDL, яка використовуються для проектування цифрових електронних систем та створення програмного продукту, її елементи. Способи структуризації програми, принципи об’єктно-орієнтованого програмування, засоби налагоджування.

    курсовая работа [34,9 K], добавлен 09.06.2010

  • Огляд та класифікація комп'ютерних ігор. Алгоритм розташування кораблів на ігровому полі. Виконання алгоритму гри комп'ютера з використанням методу випадкових чисел. Стратегія гри комп'ютера. Обґрунтування вибору середовища програмної реалізації.

    курсовая работа [616,5 K], добавлен 26.01.2023

  • Системний блок як корпус, який містить основні компоненти персонального комп’ютера. Коротка характеристика головних зовнішніх та внутрішніх пристроїв персонального комп’ютера. Послідовність операцій при обтиску та обробленні роз'єму "витої пари".

    лабораторная работа [1,7 M], добавлен 02.06.2011

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.