// ==============================================================
// RTL generated by Vivado(TM) HLS - High-Level Synthesis from C, C++ and SystemC
// Version: 2016.2
// Copyright (C) 1986-2016 Xilinx, Inc. All Rights Reserved.
// 
// ===========================================================

#ifndef _sharedmem_HH_
#define _sharedmem_HH_

#include "systemc.h"
#include "AESL_pkg.h"

#include "sharedmem_mem.h"

namespace ap_rtl {

struct sharedmem : public sc_module {
    // Port declarations 46
    sc_in_clk ap_clk;
    sc_in< sc_logic > ap_rst;
    sc_in< sc_logic > ap_start;
    sc_out< sc_logic > ap_done;
    sc_out< sc_logic > ap_idle;
    sc_out< sc_logic > ap_ready;
    sc_in< sc_lv<8> > addr0;
    sc_in< sc_lv<8> > din0;
    sc_in< sc_lv<8> > dout0_i;
    sc_out< sc_lv<8> > dout0_o;
    sc_in< sc_lv<1> > r_req0;
    sc_in< sc_lv<1> > r_ack0_i;
    sc_out< sc_lv<1> > r_ack0_o;
    sc_in< sc_lv<1> > w_req0;
    sc_in< sc_lv<1> > w_ack0_i;
    sc_out< sc_lv<1> > w_ack0_o;
    sc_in< sc_lv<8> > addr1;
    sc_in< sc_lv<8> > din1;
    sc_in< sc_lv<8> > dout1_i;
    sc_out< sc_lv<8> > dout1_o;
    sc_in< sc_lv<1> > r_req1;
    sc_in< sc_lv<1> > r_ack1_i;
    sc_out< sc_lv<1> > r_ack1_o;
    sc_in< sc_lv<1> > w_req1;
    sc_in< sc_lv<1> > w_ack1_i;
    sc_out< sc_lv<1> > w_ack1_o;
    sc_in< sc_lv<8> > addr2;
    sc_in< sc_lv<8> > din2;
    sc_in< sc_lv<8> > dout2_i;
    sc_out< sc_lv<8> > dout2_o;
    sc_in< sc_lv<1> > r_req2;
    sc_in< sc_lv<1> > r_ack2_i;
    sc_out< sc_lv<1> > r_ack2_o;
    sc_in< sc_lv<1> > w_req2;
    sc_in< sc_lv<1> > w_ack2_i;
    sc_out< sc_lv<1> > w_ack2_o;
    sc_in< sc_lv<8> > addr3;
    sc_in< sc_lv<8> > din3;
    sc_in< sc_lv<8> > dout3_i;
    sc_out< sc_lv<8> > dout3_o;
    sc_in< sc_lv<1> > r_req3;
    sc_in< sc_lv<1> > r_ack3_i;
    sc_out< sc_lv<1> > r_ack3_o;
    sc_in< sc_lv<1> > w_req3;
    sc_in< sc_lv<1> > w_ack3_i;
    sc_out< sc_lv<1> > w_ack3_o;


    // Module declarations
    sharedmem(sc_module_name name);
    SC_HAS_PROCESS(sharedmem);

    ~sharedmem();

    sc_trace_file* mVcdFile;

    ofstream mHdltvinHandle;
    ofstream mHdltvoutHandle;
    sharedmem_mem* mem_U;
    sc_signal< sc_lv<46> > ap_CS_fsm;
    sc_signal< sc_logic > ap_sig_cseq_ST_st1_fsm_0;
    sc_signal< bool > ap_sig_61;
    sc_signal< sc_lv<8> > addr0_0_data_reg;
    sc_signal< sc_logic > addr0_0_vld_reg;
    sc_signal< sc_logic > addr0_0_ack_out;
    sc_signal< sc_lv<8> > dout0_1_data_reg;
    sc_signal< sc_logic > dout0_1_vld_reg;
    sc_signal< sc_logic > dout0_1_vld_in;
    sc_signal< sc_lv<1> > r_ack0_1_data_reg;
    sc_signal< sc_lv<1> > r_ack0_1_data_in;
    sc_signal< sc_logic > r_ack0_1_vld_reg;
    sc_signal< sc_logic > r_ack0_1_vld_in;
    sc_signal< sc_lv<1> > w_ack0_1_data_reg;
    sc_signal< sc_lv<1> > w_ack0_1_data_in;
    sc_signal< sc_logic > w_ack0_1_vld_reg;
    sc_signal< sc_logic > w_ack0_1_vld_in;
    sc_signal< sc_lv<8> > addr1_0_data_reg;
    sc_signal< sc_logic > addr1_0_vld_reg;
    sc_signal< sc_logic > addr1_0_ack_out;
    sc_signal< sc_lv<8> > dout1_1_data_reg;
    sc_signal< sc_logic > dout1_1_vld_reg;
    sc_signal< sc_logic > dout1_1_vld_in;
    sc_signal< sc_lv<1> > r_ack1_1_data_reg;
    sc_signal< sc_lv<1> > r_ack1_1_data_in;
    sc_signal< sc_logic > r_ack1_1_vld_reg;
    sc_signal< sc_logic > r_ack1_1_vld_in;
    sc_signal< sc_lv<1> > w_ack1_1_data_reg;
    sc_signal< sc_lv<1> > w_ack1_1_data_in;
    sc_signal< sc_logic > w_ack1_1_vld_reg;
    sc_signal< sc_logic > w_ack1_1_vld_in;
    sc_signal< sc_lv<8> > addr2_0_data_reg;
    sc_signal< sc_logic > addr2_0_vld_reg;
    sc_signal< sc_logic > addr2_0_ack_out;
    sc_signal< sc_lv<8> > dout2_1_data_reg;
    sc_signal< sc_logic > dout2_1_vld_reg;
    sc_signal< sc_logic > dout2_1_vld_in;
    sc_signal< sc_lv<1> > r_ack2_1_data_reg;
    sc_signal< sc_lv<1> > r_ack2_1_data_in;
    sc_signal< sc_logic > r_ack2_1_vld_reg;
    sc_signal< sc_logic > r_ack2_1_vld_in;
    sc_signal< sc_lv<1> > w_ack2_1_data_reg;
    sc_signal< sc_lv<1> > w_ack2_1_data_in;
    sc_signal< sc_logic > w_ack2_1_vld_reg;
    sc_signal< sc_logic > w_ack2_1_vld_in;
    sc_signal< sc_lv<8> > addr3_0_data_reg;
    sc_signal< sc_logic > addr3_0_vld_reg;
    sc_signal< sc_logic > addr3_0_ack_out;
    sc_signal< sc_lv<8> > dout3_1_data_reg;
    sc_signal< sc_logic > dout3_1_vld_reg;
    sc_signal< sc_logic > dout3_1_vld_in;
    sc_signal< sc_lv<1> > r_ack3_1_data_reg;
    sc_signal< sc_lv<1> > r_ack3_1_data_in;
    sc_signal< sc_logic > r_ack3_1_vld_reg;
    sc_signal< sc_logic > r_ack3_1_vld_in;
    sc_signal< sc_lv<1> > w_ack3_1_data_reg;
    sc_signal< sc_lv<1> > w_ack3_1_data_in;
    sc_signal< sc_logic > w_ack3_1_vld_reg;
    sc_signal< sc_logic > w_ack3_1_vld_in;
    sc_signal< sc_lv<8> > mem_q0;
    sc_signal< sc_logic > ap_sig_cseq_ST_st11_fsm_10;
    sc_signal< bool > ap_sig_786;
    sc_signal< sc_logic > ap_sig_cseq_ST_st21_fsm_20;
    sc_signal< bool > ap_sig_793;
    sc_signal< sc_logic > ap_sig_cseq_ST_st31_fsm_30;
    sc_signal< bool > ap_sig_801;
    sc_signal< sc_logic > ap_sig_cseq_ST_st41_fsm_40;
    sc_signal< bool > ap_sig_809;
    sc_signal< sc_lv<9> > addr_1_fu_518_p2;
    sc_signal< sc_logic > ap_sig_cseq_ST_st4_fsm_3;
    sc_signal< bool > ap_sig_819;
    sc_signal< sc_lv<1> > grp_read_fu_258_p2;
    sc_signal< sc_logic > ap_sig_cseq_ST_st5_fsm_4;
    sc_signal< bool > ap_sig_828;
    sc_signal< sc_lv<3> > ch_phi_fu_469_p22;
    sc_signal< sc_lv<1> > grp_read_fu_270_p2;
    sc_signal< sc_lv<8> > din3_read_reg_585;
    sc_signal< sc_lv<1> > grp_read_fu_216_p2;
    sc_signal< sc_lv<1> > grp_read_fu_228_p2;
    sc_signal< sc_lv<8> > din2_read_reg_598;
    sc_signal< sc_lv<1> > grp_read_fu_174_p2;
    sc_signal< sc_lv<1> > grp_read_fu_186_p2;
    sc_signal< sc_lv<8> > din1_read_reg_611;
    sc_signal< sc_lv<1> > grp_read_fu_132_p2;
    sc_signal< sc_lv<1> > grp_read_fu_144_p2;
    sc_signal< sc_lv<8> > din0_read_reg_624;
    sc_signal< sc_logic > ap_sig_cseq_ST_st10_fsm_9;
    sc_signal< bool > ap_sig_900;
    sc_signal< sc_logic > ap_sig_cseq_ST_st20_fsm_19;
    sc_signal< bool > ap_sig_909;
    sc_signal< sc_logic > ap_sig_cseq_ST_st30_fsm_29;
    sc_signal< bool > ap_sig_918;
    sc_signal< sc_logic > ap_sig_cseq_ST_st40_fsm_39;
    sc_signal< bool > ap_sig_927;
    sc_signal< sc_lv<8> > mem_address0;
    sc_signal< sc_logic > mem_ce0;
    sc_signal< sc_logic > mem_we0;
    sc_signal< sc_lv<8> > mem_d0;
    sc_signal< sc_lv<9> > addr_reg_454;
    sc_signal< sc_logic > ap_sig_cseq_ST_st3_fsm_2;
    sc_signal< bool > ap_sig_946;
    sc_signal< sc_lv<1> > exitcond_fu_512_p2;
    sc_signal< sc_lv<3> > ch_reg_465;
    sc_signal< sc_logic > ap_sig_cseq_ST_st46_fsm_45;
    sc_signal< bool > ap_sig_958;
    sc_signal< sc_logic > ap_sig_cseq_ST_st15_fsm_14;
    sc_signal< bool > ap_sig_979;
    sc_signal< sc_logic > ap_sig_cseq_ST_st25_fsm_24;
    sc_signal< bool > ap_sig_987;
    sc_signal< sc_logic > ap_sig_cseq_ST_st35_fsm_34;
    sc_signal< bool > ap_sig_995;
    sc_signal< sc_logic > ap_sig_cseq_ST_st45_fsm_44;
    sc_signal< bool > ap_sig_1003;
    sc_signal< sc_lv<64> > tmp_s_fu_524_p1;
    sc_signal< sc_lv<64> > tmp_9_fu_529_p1;
    sc_signal< sc_logic > ap_sig_cseq_ST_st6_fsm_5;
    sc_signal< bool > ap_sig_1041;
    sc_signal< sc_lv<64> > tmp_5_fu_534_p1;
    sc_signal< sc_lv<64> > tmp_8_fu_539_p1;
    sc_signal< sc_logic > ap_sig_cseq_ST_st16_fsm_15;
    sc_signal< bool > ap_sig_1051;
    sc_signal< sc_lv<64> > tmp_4_fu_544_p1;
    sc_signal< sc_lv<64> > tmp_7_fu_549_p1;
    sc_signal< sc_logic > ap_sig_cseq_ST_st26_fsm_25;
    sc_signal< bool > ap_sig_1061;
    sc_signal< sc_lv<64> > tmp_3_fu_554_p1;
    sc_signal< sc_lv<64> > tmp_6_fu_559_p1;
    sc_signal< sc_logic > ap_sig_cseq_ST_st36_fsm_35;
    sc_signal< bool > ap_sig_1071;
    sc_signal< sc_lv<64> > tmp_2_fu_564_p1;
    sc_signal< sc_logic > ap_sig_cseq_ST_st2_fsm_1;
    sc_signal< bool > ap_sig_1080;
    sc_signal< sc_logic > ap_sig_cseq_ST_st43_fsm_42;
    sc_signal< bool > ap_sig_1097;
    sc_signal< sc_logic > ap_sig_cseq_ST_st37_fsm_36;
    sc_signal< bool > ap_sig_1109;
    sc_signal< sc_logic > ap_sig_cseq_ST_st33_fsm_32;
    sc_signal< bool > ap_sig_1126;
    sc_signal< sc_logic > ap_sig_cseq_ST_st27_fsm_26;
    sc_signal< bool > ap_sig_1138;
    sc_signal< sc_logic > ap_sig_cseq_ST_st23_fsm_22;
    sc_signal< bool > ap_sig_1155;
    sc_signal< sc_logic > ap_sig_cseq_ST_st17_fsm_16;
    sc_signal< bool > ap_sig_1167;
    sc_signal< sc_logic > ap_sig_cseq_ST_st13_fsm_12;
    sc_signal< bool > ap_sig_1184;
    sc_signal< sc_logic > ap_sig_cseq_ST_st7_fsm_6;
    sc_signal< bool > ap_sig_1197;
    sc_signal< sc_lv<46> > ap_NS_fsm;
    static const sc_logic ap_const_logic_1;
    static const sc_logic ap_const_logic_0;
    static const sc_lv<46> ap_ST_st1_fsm_0;
    static const sc_lv<46> ap_ST_st2_fsm_1;
    static const sc_lv<46> ap_ST_st3_fsm_2;
    static const sc_lv<46> ap_ST_st4_fsm_3;
    static const sc_lv<46> ap_ST_st5_fsm_4;
    static const sc_lv<46> ap_ST_st6_fsm_5;
    static const sc_lv<46> ap_ST_st7_fsm_6;
    static const sc_lv<46> ap_ST_st8_fsm_7;
    static const sc_lv<46> ap_ST_st9_fsm_8;
    static const sc_lv<46> ap_ST_st10_fsm_9;
    static const sc_lv<46> ap_ST_st11_fsm_10;
    static const sc_lv<46> ap_ST_st12_fsm_11;
    static const sc_lv<46> ap_ST_st13_fsm_12;
    static const sc_lv<46> ap_ST_st14_fsm_13;
    static const sc_lv<46> ap_ST_st15_fsm_14;
    static const sc_lv<46> ap_ST_st16_fsm_15;
    static const sc_lv<46> ap_ST_st17_fsm_16;
    static const sc_lv<46> ap_ST_st18_fsm_17;
    static const sc_lv<46> ap_ST_st19_fsm_18;
    static const sc_lv<46> ap_ST_st20_fsm_19;
    static const sc_lv<46> ap_ST_st21_fsm_20;
    static const sc_lv<46> ap_ST_st22_fsm_21;
    static const sc_lv<46> ap_ST_st23_fsm_22;
    static const sc_lv<46> ap_ST_st24_fsm_23;
    static const sc_lv<46> ap_ST_st25_fsm_24;
    static const sc_lv<46> ap_ST_st26_fsm_25;
    static const sc_lv<46> ap_ST_st27_fsm_26;
    static const sc_lv<46> ap_ST_st28_fsm_27;
    static const sc_lv<46> ap_ST_st29_fsm_28;
    static const sc_lv<46> ap_ST_st30_fsm_29;
    static const sc_lv<46> ap_ST_st31_fsm_30;
    static const sc_lv<46> ap_ST_st32_fsm_31;
    static const sc_lv<46> ap_ST_st33_fsm_32;
    static const sc_lv<46> ap_ST_st34_fsm_33;
    static const sc_lv<46> ap_ST_st35_fsm_34;
    static const sc_lv<46> ap_ST_st36_fsm_35;
    static const sc_lv<46> ap_ST_st37_fsm_36;
    static const sc_lv<46> ap_ST_st38_fsm_37;
    static const sc_lv<46> ap_ST_st39_fsm_38;
    static const sc_lv<46> ap_ST_st40_fsm_39;
    static const sc_lv<46> ap_ST_st41_fsm_40;
    static const sc_lv<46> ap_ST_st42_fsm_41;
    static const sc_lv<46> ap_ST_st43_fsm_42;
    static const sc_lv<46> ap_ST_st44_fsm_43;
    static const sc_lv<46> ap_ST_st45_fsm_44;
    static const sc_lv<46> ap_ST_st46_fsm_45;
    static const sc_lv<32> ap_const_lv32_0;
    static const sc_lv<1> ap_const_lv1_1;
    static const sc_lv<8> ap_const_lv8_0;
    static const sc_lv<1> ap_const_lv1_0;
    static const sc_lv<32> ap_const_lv32_A;
    static const sc_lv<32> ap_const_lv32_14;
    static const sc_lv<32> ap_const_lv32_1E;
    static const sc_lv<32> ap_const_lv32_28;
    static const sc_lv<32> ap_const_lv32_3;
    static const sc_lv<32> ap_const_lv32_4;
    static const sc_lv<3> ap_const_lv3_4;
    static const sc_lv<3> ap_const_lv3_3;
    static const sc_lv<3> ap_const_lv3_2;
    static const sc_lv<3> ap_const_lv3_1;
    static const sc_lv<32> ap_const_lv32_9;
    static const sc_lv<32> ap_const_lv32_13;
    static const sc_lv<32> ap_const_lv32_1D;
    static const sc_lv<32> ap_const_lv32_27;
    static const sc_lv<9> ap_const_lv9_0;
    static const sc_lv<32> ap_const_lv32_2;
    static const sc_lv<3> ap_const_lv3_0;
    static const sc_lv<32> ap_const_lv32_2D;
    static const sc_lv<32> ap_const_lv32_E;
    static const sc_lv<32> ap_const_lv32_18;
    static const sc_lv<32> ap_const_lv32_22;
    static const sc_lv<32> ap_const_lv32_2C;
    static const sc_lv<32> ap_const_lv32_5;
    static const sc_lv<32> ap_const_lv32_F;
    static const sc_lv<32> ap_const_lv32_19;
    static const sc_lv<32> ap_const_lv32_23;
    static const sc_lv<32> ap_const_lv32_1;
    static const sc_lv<32> ap_const_lv32_2A;
    static const sc_lv<32> ap_const_lv32_24;
    static const sc_lv<32> ap_const_lv32_20;
    static const sc_lv<32> ap_const_lv32_1A;
    static const sc_lv<32> ap_const_lv32_16;
    static const sc_lv<32> ap_const_lv32_10;
    static const sc_lv<32> ap_const_lv32_C;
    static const sc_lv<32> ap_const_lv32_6;
    static const sc_lv<9> ap_const_lv9_100;
    static const sc_lv<9> ap_const_lv9_1;
    // Thread declarations
    void thread_ap_clk_no_reset_();
    void thread_addr0_0_ack_out();
    void thread_addr1_0_ack_out();
    void thread_addr2_0_ack_out();
    void thread_addr3_0_ack_out();
    void thread_addr_1_fu_518_p2();
    void thread_ap_done();
    void thread_ap_idle();
    void thread_ap_ready();
    void thread_ap_sig_1003();
    void thread_ap_sig_1041();
    void thread_ap_sig_1051();
    void thread_ap_sig_1061();
    void thread_ap_sig_1071();
    void thread_ap_sig_1080();
    void thread_ap_sig_1097();
    void thread_ap_sig_1109();
    void thread_ap_sig_1126();
    void thread_ap_sig_1138();
    void thread_ap_sig_1155();
    void thread_ap_sig_1167();
    void thread_ap_sig_1184();
    void thread_ap_sig_1197();
    void thread_ap_sig_61();
    void thread_ap_sig_786();
    void thread_ap_sig_793();
    void thread_ap_sig_801();
    void thread_ap_sig_809();
    void thread_ap_sig_819();
    void thread_ap_sig_828();
    void thread_ap_sig_900();
    void thread_ap_sig_909();
    void thread_ap_sig_918();
    void thread_ap_sig_927();
    void thread_ap_sig_946();
    void thread_ap_sig_958();
    void thread_ap_sig_979();
    void thread_ap_sig_987();
    void thread_ap_sig_995();
    void thread_ap_sig_cseq_ST_st10_fsm_9();
    void thread_ap_sig_cseq_ST_st11_fsm_10();
    void thread_ap_sig_cseq_ST_st13_fsm_12();
    void thread_ap_sig_cseq_ST_st15_fsm_14();
    void thread_ap_sig_cseq_ST_st16_fsm_15();
    void thread_ap_sig_cseq_ST_st17_fsm_16();
    void thread_ap_sig_cseq_ST_st1_fsm_0();
    void thread_ap_sig_cseq_ST_st20_fsm_19();
    void thread_ap_sig_cseq_ST_st21_fsm_20();
    void thread_ap_sig_cseq_ST_st23_fsm_22();
    void thread_ap_sig_cseq_ST_st25_fsm_24();
    void thread_ap_sig_cseq_ST_st26_fsm_25();
    void thread_ap_sig_cseq_ST_st27_fsm_26();
    void thread_ap_sig_cseq_ST_st2_fsm_1();
    void thread_ap_sig_cseq_ST_st30_fsm_29();
    void thread_ap_sig_cseq_ST_st31_fsm_30();
    void thread_ap_sig_cseq_ST_st33_fsm_32();
    void thread_ap_sig_cseq_ST_st35_fsm_34();
    void thread_ap_sig_cseq_ST_st36_fsm_35();
    void thread_ap_sig_cseq_ST_st37_fsm_36();
    void thread_ap_sig_cseq_ST_st3_fsm_2();
    void thread_ap_sig_cseq_ST_st40_fsm_39();
    void thread_ap_sig_cseq_ST_st41_fsm_40();
    void thread_ap_sig_cseq_ST_st43_fsm_42();
    void thread_ap_sig_cseq_ST_st45_fsm_44();
    void thread_ap_sig_cseq_ST_st46_fsm_45();
    void thread_ap_sig_cseq_ST_st4_fsm_3();
    void thread_ap_sig_cseq_ST_st5_fsm_4();
    void thread_ap_sig_cseq_ST_st6_fsm_5();
    void thread_ap_sig_cseq_ST_st7_fsm_6();
    void thread_ch_phi_fu_469_p22();
    void thread_dout0_1_vld_in();
    void thread_dout0_o();
    void thread_dout1_1_vld_in();
    void thread_dout1_o();
    void thread_dout2_1_vld_in();
    void thread_dout2_o();
    void thread_dout3_1_vld_in();
    void thread_dout3_o();
    void thread_exitcond_fu_512_p2();
    void thread_grp_read_fu_132_p2();
    void thread_grp_read_fu_144_p2();
    void thread_grp_read_fu_174_p2();
    void thread_grp_read_fu_186_p2();
    void thread_grp_read_fu_216_p2();
    void thread_grp_read_fu_228_p2();
    void thread_grp_read_fu_258_p2();
    void thread_grp_read_fu_270_p2();
    void thread_mem_address0();
    void thread_mem_ce0();
    void thread_mem_d0();
    void thread_mem_we0();
    void thread_r_ack0_1_data_in();
    void thread_r_ack0_1_vld_in();
    void thread_r_ack0_o();
    void thread_r_ack1_1_data_in();
    void thread_r_ack1_1_vld_in();
    void thread_r_ack1_o();
    void thread_r_ack2_1_data_in();
    void thread_r_ack2_1_vld_in();
    void thread_r_ack2_o();
    void thread_r_ack3_1_data_in();
    void thread_r_ack3_1_vld_in();
    void thread_r_ack3_o();
    void thread_tmp_2_fu_564_p1();
    void thread_tmp_3_fu_554_p1();
    void thread_tmp_4_fu_544_p1();
    void thread_tmp_5_fu_534_p1();
    void thread_tmp_6_fu_559_p1();
    void thread_tmp_7_fu_549_p1();
    void thread_tmp_8_fu_539_p1();
    void thread_tmp_9_fu_529_p1();
    void thread_tmp_s_fu_524_p1();
    void thread_w_ack0_1_data_in();
    void thread_w_ack0_1_vld_in();
    void thread_w_ack0_o();
    void thread_w_ack1_1_data_in();
    void thread_w_ack1_1_vld_in();
    void thread_w_ack1_o();
    void thread_w_ack2_1_data_in();
    void thread_w_ack2_1_vld_in();
    void thread_w_ack2_o();
    void thread_w_ack3_1_data_in();
    void thread_w_ack3_1_vld_in();
    void thread_w_ack3_o();
    void thread_ap_NS_fsm();
    void thread_hdltv_gen();
};

}

using namespace ap_rtl;

#endif
