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

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

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

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

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

Рік:
2013
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Інші
Група:
СКС

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

Міністерство освіти і науки України Національний університет „Львівська політехніка” Кафедра ЕОМ Звіт з лабораторної роботи №6 на тему: „ SystemC: моделювання функціонування автомату Мура.” Підготував: ст. гр. СКС-12 Цигилик Л. О. Прийняв: Власенко С. О. Львів 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».
Антиботан аватар за замовчуванням

31.03.2013 15:00

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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