Ejemplo n.º 1
0
            //#define ENTRYY(n, m, s)    case (n * 100 + m): \
            //    { using xtype = netlist_factory_truthtable_t<n, m>; \
            //        ret = plib::palloc<xtype>(desc.name, desc.classname, desc.def_param, s); } break

            //#define ENTRY(n, s) ENTRYY(n, 1, s); ENTRYY(n, 2, s); ENTRYY(n, 3, s); \
            //                    ENTRYY(n, 4, s); ENTRYY(n, 5, s); ENTRYY(n, 6, s); \
            //                    ENTRYY(n, 7, s); ENTRYY(n, 8, s)

            public static void tt_factory_create(setup_t setup, tt_desc desc, string sourcefile)
            {
                netlist_base_factory_truthtable_t ret;

                //switch (desc.ni * 100 + desc.no)
                //{
                //    ENTRY(1, sourcefile);
                //    ENTRY(2, sourcefile);
                //    ENTRY(3, sourcefile);
                //    ENTRY(4, sourcefile);
                //    ENTRY(5, sourcefile);
                //    ENTRY(6, sourcefile);
                //    ENTRY(7, sourcefile);
                //    ENTRY(8, sourcefile);
                //    ENTRY(9, sourcefile);
                //    ENTRY(10, sourcefile);
                //    ENTRY(11, sourcefile);
                //    ENTRY(12, sourcefile);
                //    default:
                //        pstring msg = plib::pfmt("unable to create truthtable<{1},{2}>")(desc.ni)(desc.no);
                //        nl_assert_always(false, msg);
                //}

                // re-write of the above case statement
                if (desc.ni >= 1 && desc.ni <= 12 &&
                    desc.no >= 1 && desc.no <= 8)
                {
                    ret = new netlist_factory_truthtable_t(desc.ni, desc.no, desc.name, desc.classname, desc.def_param, sourcefile);
                }
                else
                {
                    string msg = new plib.pfmt("unable to create truthtable<{0},{1}>").op(desc.ni, desc.no);
                    nl_base_global.nl_assert_always(false, msg);
                    ret = new netlist_factory_truthtable_t(0, 0, null, null, null, null);
                }


                ret.desc = desc.desc;
                if (desc.family != "")
                {
                    ret.family = setup.family_from_model(desc.family);
                }

                setup.factory().register_device(ret);  //std::unique_ptr<netlist_base_factory_truthtable_t>(ret));
            }
Ejemplo n.º 2
0
        //#define ENTRYY(n, m, s)    case (n * 100 + m): \
        //    { using xtype = devices::netlist_factory_truthtable_t<n, m>; \
        //        auto cs=s; \
        //        ret = plib::make_unique<xtype, host_arena>(desc.name, std::move(cs)); } \
        //        break

        //#define ENTRY(n, s) ENTRYY(n, 1, s); ENTRYY(n, 2, s); ENTRYY(n, 3, s); \
        //                    ENTRYY(n, 4, s); ENTRYY(n, 5, s); ENTRYY(n, 6, s); \
        //                    ENTRYY(n, 7, s); ENTRYY(n, 8, s); ENTRYY(n, 9, s); \
        //                    ENTRYY(n, 10, s)


        public static truthtable_base_element_t truthtable_create(tt_desc desc, properties props)
        {
            truthtable_base_element_t ret = null;

            switch (desc.ni * 100 + desc.no)
            {
            //ENTRY(1, props);
            case (1 * 100 + 1): ret = new devices.netlist_factory_truthtable_t <u32_const_1, u32_const_1>(desc.name, props); break;

            case (1 * 100 + 2): ret = new devices.netlist_factory_truthtable_t <u32_const_1, u32_const_2>(desc.name, props); break;

            case (1 * 100 + 3): ret = new devices.netlist_factory_truthtable_t <u32_const_1, u32_const_3>(desc.name, props); break;

            case (1 * 100 + 4): ret = new devices.netlist_factory_truthtable_t <u32_const_1, u32_const_4>(desc.name, props); break;

            case (1 * 100 + 5): ret = new devices.netlist_factory_truthtable_t <u32_const_1, u32_const_5>(desc.name, props); break;

            case (1 * 100 + 6): ret = new devices.netlist_factory_truthtable_t <u32_const_1, u32_const_6>(desc.name, props); break;

            case (1 * 100 + 7): ret = new devices.netlist_factory_truthtable_t <u32_const_1, u32_const_7>(desc.name, props); break;

            case (1 * 100 + 8): ret = new devices.netlist_factory_truthtable_t <u32_const_1, u32_const_8>(desc.name, props); break;

            case (1 * 100 + 9): ret = new devices.netlist_factory_truthtable_t <u32_const_1, u32_const_9>(desc.name, props); break;

            case (1 * 100 + 10): ret = new devices.netlist_factory_truthtable_t <u32_const_1, u32_const_10>(desc.name, props); break;

            //ENTRY(2, props);
            case (2 * 100 + 1): ret = new devices.netlist_factory_truthtable_t <u32_const_2, u32_const_1>(desc.name, props); break;

            case (2 * 100 + 2): ret = new devices.netlist_factory_truthtable_t <u32_const_2, u32_const_2>(desc.name, props); break;

            case (2 * 100 + 3): ret = new devices.netlist_factory_truthtable_t <u32_const_2, u32_const_3>(desc.name, props); break;

            case (2 * 100 + 4): ret = new devices.netlist_factory_truthtable_t <u32_const_2, u32_const_4>(desc.name, props); break;

            case (2 * 100 + 5): ret = new devices.netlist_factory_truthtable_t <u32_const_2, u32_const_5>(desc.name, props); break;

            case (2 * 100 + 6): ret = new devices.netlist_factory_truthtable_t <u32_const_2, u32_const_6>(desc.name, props); break;

            case (2 * 100 + 7): ret = new devices.netlist_factory_truthtable_t <u32_const_2, u32_const_7>(desc.name, props); break;

            case (2 * 100 + 8): ret = new devices.netlist_factory_truthtable_t <u32_const_2, u32_const_8>(desc.name, props); break;

            case (2 * 100 + 9): ret = new devices.netlist_factory_truthtable_t <u32_const_2, u32_const_9>(desc.name, props); break;

            case (2 * 100 + 10): ret = new devices.netlist_factory_truthtable_t <u32_const_2, u32_const_10>(desc.name, props); break;

            //ENTRY(3, props);
            case (3 * 100 + 1): ret = new devices.netlist_factory_truthtable_t <u32_const_3, u32_const_1>(desc.name, props); break;

            case (3 * 100 + 2): ret = new devices.netlist_factory_truthtable_t <u32_const_3, u32_const_2>(desc.name, props); break;

            case (3 * 100 + 3): ret = new devices.netlist_factory_truthtable_t <u32_const_3, u32_const_3>(desc.name, props); break;

            case (3 * 100 + 4): ret = new devices.netlist_factory_truthtable_t <u32_const_3, u32_const_4>(desc.name, props); break;

            case (3 * 100 + 5): ret = new devices.netlist_factory_truthtable_t <u32_const_3, u32_const_5>(desc.name, props); break;

            case (3 * 100 + 6): ret = new devices.netlist_factory_truthtable_t <u32_const_3, u32_const_6>(desc.name, props); break;

            case (3 * 100 + 7): ret = new devices.netlist_factory_truthtable_t <u32_const_3, u32_const_7>(desc.name, props); break;

            case (3 * 100 + 8): ret = new devices.netlist_factory_truthtable_t <u32_const_3, u32_const_8>(desc.name, props); break;

            case (3 * 100 + 9): ret = new devices.netlist_factory_truthtable_t <u32_const_3, u32_const_9>(desc.name, props); break;

            case (3 * 100 + 10): ret = new devices.netlist_factory_truthtable_t <u32_const_3, u32_const_10>(desc.name, props); break;

            //ENTRY(4, props);
            case (4 * 100 + 1): ret = new devices.netlist_factory_truthtable_t <u32_const_4, u32_const_1>(desc.name, props); break;

            case (4 * 100 + 2): ret = new devices.netlist_factory_truthtable_t <u32_const_4, u32_const_2>(desc.name, props); break;

            case (4 * 100 + 3): ret = new devices.netlist_factory_truthtable_t <u32_const_4, u32_const_3>(desc.name, props); break;

            case (4 * 100 + 4): ret = new devices.netlist_factory_truthtable_t <u32_const_4, u32_const_4>(desc.name, props); break;

            case (4 * 100 + 5): ret = new devices.netlist_factory_truthtable_t <u32_const_4, u32_const_5>(desc.name, props); break;

            case (4 * 100 + 6): ret = new devices.netlist_factory_truthtable_t <u32_const_4, u32_const_6>(desc.name, props); break;

            case (4 * 100 + 7): ret = new devices.netlist_factory_truthtable_t <u32_const_4, u32_const_7>(desc.name, props); break;

            case (4 * 100 + 8): ret = new devices.netlist_factory_truthtable_t <u32_const_4, u32_const_8>(desc.name, props); break;

            case (4 * 100 + 9): ret = new devices.netlist_factory_truthtable_t <u32_const_4, u32_const_9>(desc.name, props); break;

            case (4 * 100 + 10): ret = new devices.netlist_factory_truthtable_t <u32_const_4, u32_const_10>(desc.name, props); break;

            //ENTRY(5, props);
            case (5 * 100 + 1): ret = new devices.netlist_factory_truthtable_t <u32_const_5, u32_const_1>(desc.name, props); break;

            case (5 * 100 + 2): ret = new devices.netlist_factory_truthtable_t <u32_const_5, u32_const_2>(desc.name, props); break;

            case (5 * 100 + 3): ret = new devices.netlist_factory_truthtable_t <u32_const_5, u32_const_3>(desc.name, props); break;

            case (5 * 100 + 4): ret = new devices.netlist_factory_truthtable_t <u32_const_5, u32_const_4>(desc.name, props); break;

            case (5 * 100 + 5): ret = new devices.netlist_factory_truthtable_t <u32_const_5, u32_const_5>(desc.name, props); break;

            case (5 * 100 + 6): ret = new devices.netlist_factory_truthtable_t <u32_const_5, u32_const_6>(desc.name, props); break;

            case (5 * 100 + 7): ret = new devices.netlist_factory_truthtable_t <u32_const_5, u32_const_7>(desc.name, props); break;

            case (5 * 100 + 8): ret = new devices.netlist_factory_truthtable_t <u32_const_5, u32_const_8>(desc.name, props); break;

            case (5 * 100 + 9): ret = new devices.netlist_factory_truthtable_t <u32_const_5, u32_const_9>(desc.name, props); break;

            case (5 * 100 + 10): ret = new devices.netlist_factory_truthtable_t <u32_const_5, u32_const_10>(desc.name, props); break;

            //ENTRY(6, props);
            case (6 * 100 + 1): ret = new devices.netlist_factory_truthtable_t <u32_const_6, u32_const_1>(desc.name, props); break;

            case (6 * 100 + 2): ret = new devices.netlist_factory_truthtable_t <u32_const_6, u32_const_2>(desc.name, props); break;

            case (6 * 100 + 3): ret = new devices.netlist_factory_truthtable_t <u32_const_6, u32_const_3>(desc.name, props); break;

            case (6 * 100 + 4): ret = new devices.netlist_factory_truthtable_t <u32_const_6, u32_const_4>(desc.name, props); break;

            case (6 * 100 + 5): ret = new devices.netlist_factory_truthtable_t <u32_const_6, u32_const_5>(desc.name, props); break;

            case (6 * 100 + 6): ret = new devices.netlist_factory_truthtable_t <u32_const_6, u32_const_6>(desc.name, props); break;

            case (6 * 100 + 7): ret = new devices.netlist_factory_truthtable_t <u32_const_6, u32_const_7>(desc.name, props); break;

            case (6 * 100 + 8): ret = new devices.netlist_factory_truthtable_t <u32_const_6, u32_const_8>(desc.name, props); break;

            case (6 * 100 + 9): ret = new devices.netlist_factory_truthtable_t <u32_const_6, u32_const_9>(desc.name, props); break;

            case (6 * 100 + 10): ret = new devices.netlist_factory_truthtable_t <u32_const_6, u32_const_10>(desc.name, props); break;

            //ENTRY(7, props);
            case (7 * 100 + 1): ret = new devices.netlist_factory_truthtable_t <u32_const_7, u32_const_1>(desc.name, props); break;

            case (7 * 100 + 2): ret = new devices.netlist_factory_truthtable_t <u32_const_7, u32_const_2>(desc.name, props); break;

            case (7 * 100 + 3): ret = new devices.netlist_factory_truthtable_t <u32_const_7, u32_const_3>(desc.name, props); break;

            case (7 * 100 + 4): ret = new devices.netlist_factory_truthtable_t <u32_const_7, u32_const_4>(desc.name, props); break;

            case (7 * 100 + 5): ret = new devices.netlist_factory_truthtable_t <u32_const_7, u32_const_5>(desc.name, props); break;

            case (7 * 100 + 6): ret = new devices.netlist_factory_truthtable_t <u32_const_7, u32_const_6>(desc.name, props); break;

            case (7 * 100 + 7): ret = new devices.netlist_factory_truthtable_t <u32_const_7, u32_const_7>(desc.name, props); break;

            case (7 * 100 + 8): ret = new devices.netlist_factory_truthtable_t <u32_const_7, u32_const_8>(desc.name, props); break;

            case (7 * 100 + 9): ret = new devices.netlist_factory_truthtable_t <u32_const_7, u32_const_9>(desc.name, props); break;

            case (7 * 100 + 10): ret = new devices.netlist_factory_truthtable_t <u32_const_7, u32_const_10>(desc.name, props); break;

            //ENTRY(8, props);
            case (8 * 100 + 1): ret = new devices.netlist_factory_truthtable_t <u32_const_8, u32_const_1>(desc.name, props); break;

            case (8 * 100 + 2): ret = new devices.netlist_factory_truthtable_t <u32_const_8, u32_const_2>(desc.name, props); break;

            case (8 * 100 + 3): ret = new devices.netlist_factory_truthtable_t <u32_const_8, u32_const_3>(desc.name, props); break;

            case (8 * 100 + 4): ret = new devices.netlist_factory_truthtable_t <u32_const_8, u32_const_4>(desc.name, props); break;

            case (8 * 100 + 5): ret = new devices.netlist_factory_truthtable_t <u32_const_8, u32_const_5>(desc.name, props); break;

            case (8 * 100 + 6): ret = new devices.netlist_factory_truthtable_t <u32_const_8, u32_const_6>(desc.name, props); break;

            case (8 * 100 + 7): ret = new devices.netlist_factory_truthtable_t <u32_const_8, u32_const_7>(desc.name, props); break;

            case (8 * 100 + 8): ret = new devices.netlist_factory_truthtable_t <u32_const_8, u32_const_8>(desc.name, props); break;

            case (8 * 100 + 9): ret = new devices.netlist_factory_truthtable_t <u32_const_8, u32_const_9>(desc.name, props); break;

            case (8 * 100 + 10): ret = new devices.netlist_factory_truthtable_t <u32_const_8, u32_const_10>(desc.name, props); break;

            //ENTRY(9, props);
            case (9 * 100 + 1): ret = new devices.netlist_factory_truthtable_t <u32_const_9, u32_const_1>(desc.name, props); break;

            case (9 * 100 + 2): ret = new devices.netlist_factory_truthtable_t <u32_const_9, u32_const_2>(desc.name, props); break;

            case (9 * 100 + 3): ret = new devices.netlist_factory_truthtable_t <u32_const_9, u32_const_3>(desc.name, props); break;

            case (9 * 100 + 4): ret = new devices.netlist_factory_truthtable_t <u32_const_9, u32_const_4>(desc.name, props); break;

            case (9 * 100 + 5): ret = new devices.netlist_factory_truthtable_t <u32_const_9, u32_const_5>(desc.name, props); break;

            case (9 * 100 + 6): ret = new devices.netlist_factory_truthtable_t <u32_const_9, u32_const_6>(desc.name, props); break;

            case (9 * 100 + 7): ret = new devices.netlist_factory_truthtable_t <u32_const_9, u32_const_7>(desc.name, props); break;

            case (9 * 100 + 8): ret = new devices.netlist_factory_truthtable_t <u32_const_9, u32_const_8>(desc.name, props); break;

            case (9 * 100 + 9): ret = new devices.netlist_factory_truthtable_t <u32_const_9, u32_const_9>(desc.name, props); break;

            case (9 * 100 + 10): ret = new devices.netlist_factory_truthtable_t <u32_const_9, u32_const_10>(desc.name, props); break;

            //ENTRY(10, props);
            case (10 * 100 + 1): ret = new devices.netlist_factory_truthtable_t <u32_const_10, u32_const_1>(desc.name, props); break;

            case (10 * 100 + 2): ret = new devices.netlist_factory_truthtable_t <u32_const_10, u32_const_2>(desc.name, props); break;

            case (10 * 100 + 3): ret = new devices.netlist_factory_truthtable_t <u32_const_10, u32_const_3>(desc.name, props); break;

            case (10 * 100 + 4): ret = new devices.netlist_factory_truthtable_t <u32_const_10, u32_const_4>(desc.name, props); break;

            case (10 * 100 + 5): ret = new devices.netlist_factory_truthtable_t <u32_const_10, u32_const_5>(desc.name, props); break;

            case (10 * 100 + 6): ret = new devices.netlist_factory_truthtable_t <u32_const_10, u32_const_6>(desc.name, props); break;

            case (10 * 100 + 7): ret = new devices.netlist_factory_truthtable_t <u32_const_10, u32_const_7>(desc.name, props); break;

            case (10 * 100 + 8): ret = new devices.netlist_factory_truthtable_t <u32_const_10, u32_const_8>(desc.name, props); break;

            case (10 * 100 + 9): ret = new devices.netlist_factory_truthtable_t <u32_const_10, u32_const_9>(desc.name, props); break;

            case (10 * 100 + 10): ret = new devices.netlist_factory_truthtable_t <u32_const_10, u32_const_10>(desc.name, props); break;

            //ENTRY(11, props);
            case (11 * 100 + 1): ret = new devices.netlist_factory_truthtable_t <u32_const_11, u32_const_1>(desc.name, props); break;

            case (11 * 100 + 2): ret = new devices.netlist_factory_truthtable_t <u32_const_11, u32_const_2>(desc.name, props); break;

            case (11 * 100 + 3): ret = new devices.netlist_factory_truthtable_t <u32_const_11, u32_const_3>(desc.name, props); break;

            case (11 * 100 + 4): ret = new devices.netlist_factory_truthtable_t <u32_const_11, u32_const_4>(desc.name, props); break;

            case (11 * 100 + 5): ret = new devices.netlist_factory_truthtable_t <u32_const_11, u32_const_5>(desc.name, props); break;

            case (11 * 100 + 6): ret = new devices.netlist_factory_truthtable_t <u32_const_11, u32_const_6>(desc.name, props); break;

            case (11 * 100 + 7): ret = new devices.netlist_factory_truthtable_t <u32_const_11, u32_const_7>(desc.name, props); break;

            case (11 * 100 + 8): ret = new devices.netlist_factory_truthtable_t <u32_const_11, u32_const_8>(desc.name, props); break;

            case (11 * 100 + 9): ret = new devices.netlist_factory_truthtable_t <u32_const_11, u32_const_9>(desc.name, props); break;

            case (11 * 100 + 10): ret = new devices.netlist_factory_truthtable_t <u32_const_11, u32_const_10>(desc.name, props); break;

            //ENTRY(12, props);
            case (12 * 100 + 1): ret = new devices.netlist_factory_truthtable_t <u32_const_12, u32_const_1>(desc.name, props); break;

            case (12 * 100 + 2): ret = new devices.netlist_factory_truthtable_t <u32_const_12, u32_const_2>(desc.name, props); break;

            case (12 * 100 + 3): ret = new devices.netlist_factory_truthtable_t <u32_const_12, u32_const_3>(desc.name, props); break;

            case (12 * 100 + 4): ret = new devices.netlist_factory_truthtable_t <u32_const_12, u32_const_4>(desc.name, props); break;

            case (12 * 100 + 5): ret = new devices.netlist_factory_truthtable_t <u32_const_12, u32_const_5>(desc.name, props); break;

            case (12 * 100 + 6): ret = new devices.netlist_factory_truthtable_t <u32_const_12, u32_const_6>(desc.name, props); break;

            case (12 * 100 + 7): ret = new devices.netlist_factory_truthtable_t <u32_const_12, u32_const_7>(desc.name, props); break;

            case (12 * 100 + 8): ret = new devices.netlist_factory_truthtable_t <u32_const_12, u32_const_8>(desc.name, props); break;

            case (12 * 100 + 9): ret = new devices.netlist_factory_truthtable_t <u32_const_12, u32_const_9>(desc.name, props); break;

            case (12 * 100 + 10): ret = new devices.netlist_factory_truthtable_t <u32_const_12, u32_const_10>(desc.name, props); break;

            default:
                string msg = new plib.pfmt("unable to create truthtable<{0},{2}>").op(desc.ni, desc.no);
                nl_assert_always(false, msg);
                break;
            }

            ret.m_desc        = desc.desc;
            ret.m_family_name = !desc.family.empty() ? desc.family : config.DEFAULT_LOGIC_FAMILY();

            return(ret);
        }