Download presentation
Presentation is loading. Please wait.
Published byAda Strickland Modified over 9 years ago
1
HM-ES-th1 Les 8 Hardware/Software Codesign with SystemC
2
39 SystemC RTL sub template SC_MODULE(sub) { sc_in > a, b; sc_out > s; SC_CTOR(sub) { SC_METHOD(on_input_change); sensitive << a << b; } private: void on_input_change() { s.write(a.read() – b.read()); } };
3
40 SystemC RTL mux template SC_MODULE(mux) { sc_in sel; sc_in > i1, i0; sc_out > o; SC_CTOR(mux) { SC_METHOD(on_input_change); sensitive << i1 << i0 << sel; } private: void on_input_change() { if (sel.read()) o.write(i1.read()); else o.write(i0.read()); } };
4
41 SystemC RTL isne template SC_MODULE(is_ne) { sc_in > a, b; sc_out ne; SC_CTOR(is_ne) { SC_METHOD(on_input_change); sensitive << a << b; } private: void on_input_change() { ne.write(a.read() != b.read()); } };
5
42 SystemC RTL ishi template SC_MODULE(is_hi) { sc_in > a, b; sc_out hi; SC_CTOR(is_hi) { SC_METHOD(on_input_change); sensitive << a << b; } private: void on_input_change() { hi.write(a.read() > b.read()); } };
6
43 SystemC RTL reg template SC_MODULE(reg) { sc_in_clk clk; sc_in reset, ld; sc_in > i; sc_out > q; SC_CTOR(reg) { SC_METHOD(on_clk_pos_or_reset_pos); sensitive << clk.pos() << reset.pos(); } private: void on_clk_pos_or_reset_pos() { if (reset.read()) q.write(0); else if (ld.read()) q.write(i.read()); } };
7
44 SystemC RTL gcd_ datapath template SC_MODULE(gcd_datapath) { sc_in_clk clk; sc_in reset, xy_sel, x_ld, y_ld, r_ld; sc_in > x_i, y_i; sc_out > r_o; sc_out x_ne_y, x_hi_y; private: mux x_mux, y_mux; reg x_reg, y_reg, r_reg; is_ne x_is_ne_y; is_hi x_is_hi_y; sub x_sub, y_sub; sc_signal > x_mux_o, y_mux_o, x_reg_o, y_reg_o, x_sub_o, y_sub_o; public: SC_CTOR(gcd_datapath): x_mux("x_mux"), y_mux("y_mux"), x_reg("x_reg"), y_reg("y_reg"), r_reg("r_reg"), x_is_ne_y("x_is_ne_y"), x_is_hi_y("x_is_hi_y"), x_sub("x_sub"), y_sub("y_sub") {
8
45 SystemC RTL gcd_ datapath x_mux.i0(x_i); x_mux.i1(x_sub_o); x_mux.sel(xy_sel); x_mux.o(x_mux_o); y_mux.i0(y_i); y_mux.i1(y_sub_o); y_mux.sel(xy_sel); y_mux.o(y_mux_o); x_reg.clk(clk); x_reg.reset(reset); x_reg.ld(x_ld); x_reg.i(x_mux_o); x_reg.q(x_reg_o); y_reg.clk(clk); y_reg.reset(reset); y_reg.ld(y_ld); y_reg.i(y_mux_o); y_reg.q(y_reg_o); x_is_ne_y.a(x_reg_o); x_is_ne_y.b(y_reg_o); x_is_ne_y.ne(x_ne_y); x_is_hi_y.a(x_reg_o); x_is_hi_y.b(y_reg_o); x_is_hi_y.hi(x_hi_y); x_sub.a(x_reg_o); x_sub.b(y_reg_o); x_sub.s(x_sub_o); y_sub.a(y_reg_o); y_sub.b(x_reg_o); y_sub.s(y_sub_o); r_reg.clk(clk); r_reg.reset(reset); r_reg.ld(r_ld); r_reg.i(x_reg_o); r_reg.q(r_o); } };
9
46 SystemC RTL gcd_ control SC_MODULE(gcd_control){ sc_in_clk clk; sc_in reset, go_i, x_ne_y, x_hi_y; sc_out done_o, xy_sel, x_ld, y_ld, r_ld; SC_CTOR(gcd_control) { SC_METHOD(on_clk_pos_or_reset_pos); sensitive << clk.pos() << reset.pos(); SC_METHOD(on_control_input); sensitive << go_i << x_ne_y << x_hi_y << state; } private: sc_signal > state; sc_uint nextstate; void on_clk_pos_or_reset_pos() { state.write(reset.read() ? 0 : nextstate); }
10
47 SystemC RTL gcd_ control void on_control_input() { xy_sel.write(false); x_ld.write(false); y_ld.write(false); r_ld.write(false); done_o.write(false); switch (state.read()) { case 0: if (go_i.read()) { x_ld.write(true); y_ld.write(true); nextstate = 1; } else { nextstate = 0; } break; case 1: if (x_ne_y.read()) { if (x_hi_y.read()) { x_ld.write(true); }
11
48 SystemC RTL gcd_ control else { y_ld.write(true); } xy_sel.write(true); nextstate = go_i.read() ? 1 : 0; } else { r_ld.write(true); nextstate = go_i.read() ? 2 : 0; } break; case 2: done_o.write(true); nextstate = go_i.read() ? 2 : 0; break; case 3: // should not happen nextstate = 0; break; } };
12
49 SystemC RTL gcd template SC_MODULE(gcd) { sc_in_clk clk; sc_in reset, go_i; sc_in > x_i, y_i; sc_out done_o; sc_out > r_o; private: gcd_datapath datapath; gcd_control control; sc_signal xy_sel, x_ld, y_ld, r_ld, x_ne_y, x_hi_y; public: SC_CTOR(gcd): datapath("datapath"), control("control") { datapath.clk(clk); datapath.reset(reset); datapath.x_i(x_i); datapath.y_i(y_i); datapath.r_o(r_o); datapath.xy_sel(xy_sel); datapath.x_ld(x_ld); datapath.y_ld(y_ld); datapath.r_ld(r_ld); datapath.x_ne_y(x_ne_y); datapath.x_hi_y(x_hi_y); control.clk(clk); control.reset(reset); control.done_o(done_o); control.go_i(go_i); control.xy_sel(xy_sel); control.x_ld(x_ld); control.y_ld(y_ld); control.r_ld(r_ld); control.x_ne_y(x_ne_y); control.x_hi_y(x_hi_y); } };
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.