Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти, науки, молоді та спорту України
Національний університет “Львівська політехніка”
Кафедра ЕОМ
ЗВІТ
до лабораторної роботи №6
на тему: «Побудова функціональної схеми RISC CPU згідно програмної моделі»
з предмету: «Комп’ютерні системи»
Підготував: ст.гр. КІ-41
Глова Ю.І.
Прийняв:
Муляревич О.В.
Львів 2017
Мета роботи: Дослідити програмну модель блоків ,які входять до складу програмної моделі RISC CPU, створеної на мові SystemC. Побудувати структурну схему блоків
Програмна модель блоку PAGING
*************************************** paging.cpp -- Instruction Paging Unit
********************************
#include <iostream>
#include "systemc.h"
#include "paging.h"
#include "directive.h"
using namespace std;
void paging::entry()
{
int address=0;
int address_conversion_factor = 0;
int dataout_tmp =0;
while (true) {
wait_until(paging_csin.delayed() == true);
address = logical_address.read();
address_conversion_factor = paging_din.read();
if (address >= 5) {
if (paging_wein.read() == true) { // Write operation
paging_dout.write(paging_din.read());
paging_csout.write(true);
paging_weout.write(true);
physical_address.write(logical_address.read());
wait();
paging_csout.write(false);
paging_weout.write(false);
}
else { // Read operation
paging_csout.write(true);
paging_weout.write(false);
physical_address.write(logical_address.read());
wait();
wait_until(icache_validin.delayed() == true);
dataout_tmp = icache_din.read();
if (PRINT_PU){
cout << "-----------------------" << endl;
printf( "PAGE : mem=%x\n",dataout_tmp);
cout << "PAGE : " ;
cout << "at CSIM " << sc_time_stamp() << endl;
cout << "----" << endl;
}
dataout.write(icache_din.read());
data_valid.write(true);
paging_csout.write(false);
wait();
data_valid.write(false);
wait();
}
}
}
} // end of entry function
******************************************
paging.h -- Instruction Paging Unit
struct paging : sc_module {
sc_in<unsigned > paging_din; // input data
sc_in<bool> paging_csin; // chip select
sc_in<bool> paging_wein; // write enable
sc_in<unsigned > logical_address; // logical address
sc_in<unsigned > icache_din; // data from BIOS/icache
sc_in<bool> icache_validin; // data valid bit
sc_in<bool> icache_stall; // stall IFU if busy
sc_out<unsigned > paging_dout; // output data
sc_out<bool> paging_csout; // output cs to cache/BIOS
sc_out<bool> paging_weout; // write enable to cache/BIOS
sc_out<unsigned > physical_address; // physical address
sc_out<unsigned > dataout; // dataout from memory
sc_out<bool> data_valid; // data valid
sc_out<bool> stall_ifu; // stall IFU if busy
sc_in_clk CLK;
signed int pid_reg; //CPU process ID register
SC_CTOR(paging) {
SC_CTHREAD(entry, CLK.pos());
pid_reg = 0;
}
void entry();
};.
Структурна схема блоку PAGING
Висновок: у цій лабораторній роботі я дослідив програмну модель блоку PAGING, який входять до складу програмної моделі RISC CPU, створеної на мові SystemC, та побудував структурну схему блоків PAGING.