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

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

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

Рік:
2012
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Комп’ютерні системи

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ „ЛЬВІВСЬКА ПОЛІТЕХНІКА” ІКТАМ Кафедра ЕОМ Звіт з лабораторної роботи № 6 з дисципліни: “Комп’ютерні системи” Львів – 2012 Дослідження програмної моделі блоку Fetch з моделі RISC CPU Мета роботи: Дослідити програмну модель блоку Fetch, яка входить до складу програмної моделі RISK CPU, створеної на мові SystemC. Побудувати структурну схему блоку Fetch. Порядок виконання роботи Дослідити програмну модель блоку FETCH, який входить до складу моделі процесора з архітектурою RISC. На основі моделі, що досліджується, побудувати структурну схему блоку FETCH. Дати пояснення функцій, що виконуються елементами схеми. Хід виконання роботи: Програмна модель блоку Instruction Fetch Unit (Fetch): #include <iostream.h> #include "systemc.h" #include "fetch.h" #include "directive.h" void fetch::entry() { unsigned addr_tmp=0; unsigned datao_tmp=0; unsigned datai_tmp=0; unsigned lock_tmp = 0; addr_tmp = 1; datao_tmp = 0xdeadbeef; // Now booting from default values reset.write(true); ram_cs.write(true); ram_we.write(false); address.write(addr_tmp); wait(memory_latency); // For data to appear wait_until((bios_valid.delayed() == true) || (icache_valid.delayed() == true)); if (stall_fetch.read() == true) { datai_tmp = 0; } else { datai_tmp = ramdata.read(); } cout.setf(ios::hex,ios::basefield); cout << "-----------------------" << endl; cout << "IFU :" << " mem=0x" << datai_tmp << endl; cout << "IFU : pc= " << addr_tmp ; cout.setf(ios::dec,ios::basefield); cout << " at CSIM " << sc_time_stamp() << endl; cout << "-----------------------" << endl; instruction_valid.write(true); instruction.write(datai_tmp); program_counter.write(addr_tmp); ram_cs.write(false); wait(); instruction_valid.write(false); addr_tmp++; wait(); while (true) { if (addr_tmp == 5) { reset.write(false); } if (interrupt.read() == true) { ram_cs.write(true); addr_tmp = int_vectno.read(); ram_we.write(false); wait(memory_latency); datai_tmp = ramdata.read(); printf("IF ALERT: **INTERRUPT**\n"); cout.setf(ios::hex,ios::basefield); cout << "------------------------" << endl; cout << "IFU :" << " mem=0x" << datai_tmp << endl; cout << "IFU : pc= " << addr_tmp ; cout.setf(ios::dec,ios::basefield); cout << " at CSIM " << sc_time_stamp() << endl; cout << "------------------------" << endl; instruction_valid.write(true); instruction.write(datai_tmp); ram_cs.write(false); interrupt_ack.write(true); if (next_pc.read() == true) { addr_tmp++; } wait(); instruction_valid.write(false); interrupt_ack.write(false); wait(); } if (branch_valid.read() == true) { printf("IFU ALERT: **BRANCH**\n"); lock_tmp ++; ram_cs.write(true); addr_tmp = branch_address.read(); ram_we.write(false); wait(memory_latency); wait_until((bios_valid.delayed() == true) || (icache_valid.delayed() == true)); datai_tmp = ramdata.read(); cout.setf(ios::hex,ios::basefield); cout << "------------------------" << endl; cout << "IFU :" << " mem=0x" << datai_tmp << endl; cout << "IFU : pc= " << addr_tmp ; cout.setf(ios::dec,ios::basefield); cout << " at CSIM " << sc_time_stamp() << endl; cout << "------------------------" << endl; instruction_valid.write(true); instruction.write(datai_tmp); ram_cs.write(false); if (next_pc.read() == true) { addr_tmp++; } wait(); instruction_valid.write(false); wait(); } else { lock_tmp = 0; ram_cs.write(true); address.write(addr_tmp); ram_we.write(false); wait(memory_latency); // For data to appear wait_until((bios_valid.delayed() == true) || (icache_valid.delayed() == true)); datai_tmp = ramdata.read(); cout.setf(ios::hex,ios::basefield); cout << "------------------------" << endl; cout << "IFU :" << " mem=0x" << datai_tmp << endl; cout << "IFU : pc= " << addr_tmp ; cout.setf(ios::dec,ios::basefield); cout << " at CSIM " << sc_time_stamp() << endl; cout << "------------------------" << endl; instruction_valid.write(true); instruction.write(datai_tmp); program_counter.write(addr_tmp); branch_clear.write(false); ram_cs.write(false); if (next_pc.read() == true) { addr_tmp++; } wait(); instruction_valid.write(false); wait(); } if (lock_tmp == 1) { branch_clear.write(true); wait(); } /* Unless you wanted to write to your instruction cache. Usually Instruction cache is read only. // Write memory location first chip_select.write(true); write_enable.write(true); address.write(addr); instruction_write.write(datao); printf("fetch: Data Written = %x at address %x\n", datao, addr); wait(memory_latency); // To make all the outputs appear at the interface // some process functionality not shown here during which chip // chip select is deasserted and bus is tristated chip_select.write(false); instruction_write.write(0); wait(); */ } } // end of entry function Блок-схему IF:  Висновок: На цій лабораторній роботі я дослідив програмну модель блоку Fetch, яка входить до складу програмної моделі RISС CPU, створеної на мові SystemC та побудував структурну схему блоку Fetch.
Антиботан аватар за замовчуванням

18.09.2013 16:09-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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