МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
національний університет “Львівська політехніКА”
КАФЕДРА ЕЛЕКТРОННИХ ОБЧИСЛЮВАЛЬНИХ МАШИН
Лабораторна робота №2
з курсу “Комп’ютерні системи”
на тему: “Дослідження моделі RISC-CPU”.
Виконав:
ст. гр. КІ-3
Львів-2004
Мета роботи: ознайомитись з основними засобами моделювання SystemC, вивчити принципи роботи конвеєра.
Короткі теоретичні відомості: SystemC 1.0 надає набір конструкцій моделювання, які схожі на ті, що використовуються для RTL і динамічного моделювання в HDL, наприклад Verilog або VHDL. Подібно до HDL, користувачі можуть створювати структурні проекти на SystemC 1.0, використовуючи модулі, порти і сигнали. Модулі можуть визначатися за допомогою інших модулів, що дозволяє будувати ієрархії структурних проектів. Порти та сигнали дають можливість передавати дані між модулями, і всі вони оголошуються користувачем для певного типу даних. Загально вживаними типами даних є прості біти, бітові вектори, символи, цілі числа, числа з плаваючою комою, вектори цілих чисел, і т.п. SystemC 1.0 також забезпечує підтримку чотирьох станів логічних сигналів (тобто сигналів, які моделюють 0, 1, X, і Z). У VHDL, конкуруючі режими моделюється, використовуючи процеси. У Verilog збіжні режими моделюються, з використанням блоків "завжди" і безперервних призначень. У SystemC 1.0, конкуруючі режими також моделюється з використанням процесів. Процес може бути задуманий як незалежна нитка контролю, яка поновлює виконання, коли відбувається деякий набір подій або деяка зміна сигналів, а потім тимчасово припиняє виконання після здійснення деякої дії. У SystemC 1.0 здатність точно визначити умову, за якої виконання процесу поновиться, є обмеженою: процес може бути чутливий тільки до змін значень специфічних сигналів і тому набір сигналів, до яких процес є чутливий, повинен бути перевизначений перед тим, як розпочнеться симуляція. Оскільки процеси виконуються паралельно і можливе тимчасове призупинення та відновлення виконання у вказаних користувачем точках, окремі зразки процесу SystemC загалом вимагають свого власного незалежного стеку виконання. (Рівноцінна ситуація в світі програмного забезпечення виникає в багатопотокових програмах - кожний потік вимагає свого власного стеку виконання.) Певні процеси в SystemC, які тимчасово призупинені в обмежених точках свого виконання, фактично не вимагають незалежного стеку виконання - ці типи процесів називаються "SC_METHODs". Оптимізація проектів SystemC з метою скористатися перевагами процесів типу SC_METHODs не забезпечує покращення роботи у випадку великої кількості зразків процесу в проекті. Апаратні сигнали мають декілька властивостей, які роблять їхнє моделювання в програмному забезпеченні нетривіальним. Користувачі часто хочуть симулювати апаратні сигнали і регістри такими, що ініціалізуються як "X" на початку симуляції. Це корисно для виявлення встановлених проблем при проектуванні через X- метод розповсюдження техніки в симуляції. У SystemC 1.0, ця особливість забезпечена використанням типів даних sc_logic і sc_lv. Подібно VHDL і Verilog, SystemC 1.0 підтримує концепцію затримки перевизначення сигналу і дельта циклів для того, щоб належним чином моделювати апаратні сигнали. Дельта цикл може передбачатися як дуже малий проміжок часу в межах симуляції, що не збільшує видимий для користувача час. Багаторазові дельта цикли можуть зустрічатися в наданому проміжку часу. Коли відбувається сигнальне перевизначення, інші процеси не бачать недавно визначеного значення до наступного дельта циклу. Процеси, які чутливі до зміни сигналу, продовжують виконуватися, якщо значення сигналу не змінюється різко стосовно його попереднього значення.
Завдання на роботу: Дослідити модель RISC – CPU
Виконання роботи: Структурна схема
SHAPE \* MERGEFORMAT
datain
cs
we
addr
ld_data
ICACHE
ld_valid
CLK
icache_valid
dataout
stall_fetch
BIOS
CLK
addr
we
cs
dataout
datain
bios_valid
stall_fetch
PAGING
paging_wein
paging_din
paging_csin
logical_address
icache_din
icache_validin
icache_stall
paging_dout
paging_csout
paging_weout
CLK
physical_address
dataout
data_valid
stall_ifu
ram_datain
ram_we
addr
ram_cs
icache_validin
icache_stall
icache_din
ram_dataout
bios_valid
stall_fetch
paging_dout
icache_valid
paging_csout
pid_valid
physical_address
paging_weout
pid_data
PIC
cs
ireq0
ireq3
ireq1
ireq2
rd_wr
intack_cpu
intreq
intreq
intack
vectno
ireq1
ireq2
ireq3
ireq0
intack_cpu
rd_wr
vectno
intack
FETCH
ramdata
branch_valid
next_pc
branch_address
int_vectno
interrupt
stall_fetch
pred_fetch
icache_valid
bios_valid
ram_cs
pred_branch_valid
pred_branch_address
CLK
address
ram_we
reset
program_counter
instruction_valid
instruction
smc_instruction
pred_fetch_valid
branch_clear
interrupt_ack
pred_fetch
pred_branch_address
pred_branch_valid
instruction
instruction_valid
program_counter
branch_clear
pred_fetch_valid
reset
branch_address
next_pc
SHAPE \* MERGEFORMAT
DECODE
resetin
instruction
pred_instruction
pred_inst_valid
instruction_valid
dram_dataout
alu_dataout
destreg_write_src
destreg_write
display_done
clear_branch
fpu_destout
fpu_valid
fpu_dout
dram_write_src
dram_rd_valid
br_instruction_address
next_pc
branch_valid
pred_on
pc
CLK
reg_write
alu_src
mem_write
alu_op
mem_address
mem_access
branch_target_address
float_valid
decode_valid
stall_fetch
forward_B
forward_A
src_B
src_A
pid_data
pid_valid
mmx_valid
DCACHE
dest
addr
we
cs
statein
datain
CLK
stateout
out_valid
dataout
destout
FLOATING
dest
floatb
floata
opcode
in_valid
CLK
fout_valid
fdestout
fdout
EXEC
add1
negate
opcode
in_valid
reset
forward_A
dinb
dina
shift_sel
dest
forward_B
CLK
out_valid
dout
Z
V
C
destout
MMXU
mmxa
opcode
mmx_valid
CLK
dest
mmxb
mmxdestout
mmxout_valid
mmxdout
reset
instruction
instruction_valid
out_valid
destout
dout
dram_dataout
dram_rd_valid
fdout
fout_valid
fdestout
branch_clear
dsp_data_valid
program_counter
pred_on
pid_data
pid_valid
mmx_valid
CLK
alu_op
src_A
src_B
float_valid
alu_src
decode_valid
forward_B
C
V
Z
negate
add1
shift_sel
stall_fetch
reg_write
mem_write
next_pc
br_instruction_address
branch_valid
branch_target_address
mem_access
mem_address
pred_instruction
pred_inst_valid
mmic_stateout
mmic_out_valid
mmic_dataout
mmic_destout
Висновок: На цій лабораторній роботі я провів дослідження моделі RISC CPU що була змодельована засобами мови System C. Я розглянув дану модель. Визначив структуру і призначення блоків процесора та проаналізував функціональні зв’язки між блоками.