SystemC: моделювання функціонування автомату Мура.

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

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Електронні обчислювальні машини

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

Рік:
2007
Тип роботи:
Лабораторна робота
Предмет:
Проектування комп'ютерних систем та мереж
Група:
СКС-1

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

Міністерство освіти і науки України Національний університет „Львівська політехніка” Кафедра ЕОМ Звіт з лабораторної роботи №6 на тему: „ SystemC: моделювання функціонування автомату Мура.” Підготував: ст. гр. СКС-1 Львів 2007 Мета: Ознайомитись з моделлю автомату Мура у SystemC. Завдання: 1.Заванажити до середовища SystemC проект moore та запустити його на виконання. 2.Ознайомитись з результатами та зробити висновки. Теоретичні відомості: Автомат Мура у SystemC моделюється з використанням одного процесу для логіки наступного стану, регістра стану та вихідної логіки. Це є синхронний процес з умовою переходу, що має виходи, зв’язані з кожним можливим варіантом переходу та входи, які визначають наступний стан. В поданому нижче прикладі сигнал moore_state використовується для моделювання автомату Мура, що має чотири можливі стани:  Рисунок1. Приклад графу автомату Мура. Приклад реалізації автомату Мура у SystemC: / / File: moore.h #include "systemc.hn “ SC-MODULE (moore) { sc-in<bool> a, clk, reset; sc-out<bool> z ; enum state-type {SO, sl, s2, s3) ; sc-signal<state-type> moore-state; void prc-moore ( ) SC-CTOR (moore) { SC-METHOD (prc-moore); sensitivepos << clk; } }; / / File : moore. cpp #include "moore.h" void moore : :prc-moore ( ) { if (reset) / / Synchronous reset. moore-state = so; else switch (moore-state) { case SO: z = 1; moore-state = a ? SO : s2; break; case sl: z = 0; moore-state = a ? SO : s2; break; case s2: z = 0; moore-state = a ? s2 : s3; break; case s3: z = 1; moore-state = a ? sl : s3; break; } }  Рисунок2. Схема реалізації автомату Мура (результат синтезу). Виконання лабораторної роботи: 1.Лістинг проекту: // File moore.h Declaration #include "systemc.h" SC_MODULE(moore) { sc_in<sc_logic> a_in_pin, reset_in_pin; // input ports sc_in_clk clk_in_pin; // clock input sc_out<sc_logic> z_out_pin; // output port sc_out<sc_uint<2> > state_out_pin; // port for monitoring // Internal variable enum state_type {s0, s1, s2, s3}; sc_signal<state_type> moore_state; sc_uint<2> state_int; // FSM processes void state(); // synchro process void output(); // combi process // Constructor SC_CTOR(moore) { SC_METHOD(state); sensitive_pos << clk_in_pin; SC_METHOD(output); sensitive << clk_in_pin; } }; // File moore.cpp Implementation #include "moore.h" void moore::state(){ bool cond1, cond2; if (reset_in_pin->read()== sc_logic_1) cond1 = true; else cond1 = false; if (a_in_pin->read()== sc_logic_1) cond2 = true; else cond2 = false; if (cond1) //->read()) moore_state = s0; else switch(moore_state){ case s0: moore_state = cond2 ? s0:s2; break; case s1: moore_state = cond2 ? s0:s2; break; case s2: moore_state = cond2 ? s2:s3; break; case s3: moore_state = cond2 ? s1:s3; break; } } void moore::output(){ switch(moore_state){ case s3: z_out_pin->write(sc_logic_1); state_int = 3; break; case s0: z_out_pin->write(sc_logic_1); state_int = 0; break; case s1: z_out_pin->write(sc_logic_0); state_int = 1; break; case s2: z_out_pin->write(sc_logic_0); state_int = 2; break; } state_out_pin->write(state_int); } // File mon_stim.h Declaration #include <systemc.h> SC_MODULE(mon_stim) { sc_in_clk clk_in; sc_out<sc_logic> a_out; sc_out<sc_logic> reset_out; sc_in<sc_logic> z_in; sc_in<sc_uint<2> > state_in; bool stimul; bool reset_int; // Stimulus and Monitor processes void monitor(); void stim(); // Constructor SC_CTOR(mon_stim) { SC_METHOD(monitor); sensitive_neg << clk_in; SC_THREAD(stim); sensitive_neg << clk_in; } }; // Implementation File mon_stim.cpp #include <math.h> #include "mon_stim.h" void mon_stim :: monitor () { std::cout << "Time is : " << sc_time_stamp() << ", reset = " << reset_out << ", state = " << state_in << ", z = " << z_in << ", a = " << a_out << std::endl; } int clknum = 0 ; void mon_stim :: stim (){ sc_logic stimul_logic, reset_int_logic; stimul = false; stimul_logic = sc_logic_0; reset_int = true; reset_int_logic = sc_logic_1; a_out -> write(stimul_logic); reset_out->write(reset_int_logic); clknum ++; while (true) { a_out -> write(stimul_logic); reset_out->write(reset_int_logic); if (stimul) {stimul = false; stimul_logic = sc_logic_0;} else {stimul = true; stimul_logic = sc_logic_1;} if (clknum < 5 ) {reset_int = true; reset_int_logic = sc_logic_1;} else {reset_int = false; reset_int_logic = sc_logic_0;} clknum ++; wait(); } } // File main.cpp. Testbench #include "systemc.h" #include "moore.h" #include "mon_stim.h" int sc_main(int argc, char* argv[]) { sc_signal<sc_logic> a_wire; sc_signal<sc_logic> reset_wire; sc_signal<sc_logic> z_wire; sc_signal<sc_uint<2> > state_wire; sc_clock clk("Clock", 10, 0.5, 0); //Initialize input a_wire = sc_logic_0; reset_wire = sc_logic_0; state_wire=0; // Instantiate modules and signals connect moore moore_inst("moore_inst"); moore_inst.clk_in_pin(clk); moore_inst.reset_in_pin(reset_wire); moore_inst.a_in_pin(a_wire); moore_inst.z_out_pin(z_wire); moore_inst.state_out_pin(state_wire); mon_stim mon_stim_inst("mon_stim_inst"); mon_stim_inst.a_out(a_wire); mon_stim_inst.reset_out(reset_wire); mon_stim_inst.clk_in(clk); mon_stim_inst.z_in(z_wire); mon_stim_inst.state_in(state_wire); //tracing sc_trace_file *tf = sc_create_vcd_trace_file ("moore_wave"); sc_trace(tf, clk.signal(), "Clock"); sc_trace(tf, a_wire, "a input"); sc_trace(tf, z_wire, "z output"); sc_trace(tf, reset_wire, "reset"); sc_trace(tf, state_wire, "state"); sc_start(300); return(0); } 2.Результати дослідження роботи проекту: 2.1.Резльтат у вигляді консольної аплікації:  Висновок: На даній лабораторній роботі я ознайомився з поняттям каналів у SystemC на прикладі проекту «Mutex».
Антиботан аватар за замовчуванням

01.01.1970 03:01-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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