DevioLab CRYPTO TRADING AUTOMATION
LIVE
AUTOMATED CRYPTO TRADING • BINANCE
Автоматизуйте свій криптопортфель
Торгові боти DevioLab аналізують крипторинок, автоматично відкривають і закривають позиції та керують вашим портфелем на Binance 24/7.
CRYPTO 80 Bots
BINANCE Spot Trading
TRADING 24 / 7
Спробувати DevioLab
deviolab.com

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

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

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

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

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ „ЛЬВІВСЬКА ПОЛІТЕХНІКА” ІКТАМ Кафедра ЕОМ Звіт з лабораторної роботи № 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:45

Коментарі

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

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

Нічого не вибрано
0%

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

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

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

Admin

26.02.2023 12:38

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