Пример #1
0
def create_output_transducer(scheme_1, scheme_2, k):
    # Функция генерации входного преобразователя и добавления его в СФК на основе кодирования в трехбитном пространстве
    # Хэмминга
    # scheme_1 - основная комбинационная схема
    # scheme_2 - СФК на основе кодирования в трехбитном пространстве Хэмминга без выходных преобразователей

    # Создание словаря соединений
    con = dict()

    # Создание пустой подсхемы выходного преобразователя out_transducer
    out_transducer = sch.scheme_alt()

    # Генерация входов выходного преобразователя out_transducer
    out_transducer.__inputs__ = [
        '_{}_'.format(k), '_{}_'.format(k + 1), '_{}_'.format(k + 2)
    ]

    # Генерация выхода выходного преобразователя out_transducer
    out_transducer.__outputs__ = ['y']

    # Генерация элементов выходного преобразователя out_transducer
    out_transducer.__elements__ = {
        '_{}_'.format(k + 4): ('OR', ['_{}_'.format(k), '_{}_'.format(k + 1)]),
        '_{}_'.format(k + 5):
        ('NAND', ['_{}_'.format(k), '_{}_'.format(k + 1)]),
        '_{}_'.format(k + 6):
        ('NAND', ['_{}_'.format(k + 4), '_{}_'.format(k + 2)]),
        'y': ('NAND', ['_{}_'.format(k + 5), '_{}_'.format(k + 6)])
    }

    # Копирование выходных преобразователей out_transducer по числу выходов основной схемы
    out_transducer = sch.merge_schemes([out_transducer] *
                                       int(scheme_2.outputs() / 3))

    # Генерация словаря соединений
    for i in range(scheme_1.outputs()):
        con[(0, scheme_2.__outputs__[i])] = ([
            (1, out_transducer.__inputs__[3 * i])
        ])
        con[(0, scheme_2.__outputs__[scheme_1.outputs() + i])] = ([
            (1, out_transducer.__inputs__[3 * i + 1])
        ])
        con[(0, scheme_2.__outputs__[2 * scheme_1.outputs() + i])] = ([
            (1, out_transducer.__inputs__[3 * i + 2])
        ])

    # Генерация выходов объединенной схемы
    out = [(1, i) for i in out_transducer.__outputs__]

    # Объединение СФК и выходного преобразователя out_transducer
    scheme_2 = sch.merge_schemes([scheme_2, out_transducer], con, out)

    # Приведение выхода результирующей схемы к общему виду
    del scheme_2.__elements__['y']
    scheme_2.__elements__['y_0'] = ('NAND', [
        '_{}_'.format(k + 5), '_{}_'.format(k + 6)
    ])
    scheme_2.__outputs__[0] = 'y_0'

    return scheme_2
Пример #2
0
def patch_merger(patches):
    patchlist = []
    for target in patches:
        patchlist.append(patches[target][0])
    all_inps = []
    all_outs = []
    for patch in patchlist:
        all_inps += patch.__inputs__
        all_outs += patch.__outputs__
    all_inps = list(set(all_inps))
    all_outs = list(set(all_outs))
    final_patch = sc.merge_schemes(patchlist, [], [])
    final_patch.__inputs__ = all_inps
    final_patch.__outputs__ = all_outs
    return final_patch
Пример #3
0
def create_ced_for_group(scheme, group, num):

    k = scheme.outputs()
    m = k
    p = submatrix_p(k, m)

    coder = sch.replicate(scheme, 1)
    coder = create_coder(coder, p, k + m, num)

    renamed = {i: '{}_out'.format(i) for i in scheme.__outputs__}
    coder.rename_labels(renamed)
    coder.__outputs__ = ['{}_out'.format(i) for i in scheme.__outputs__] + coder.__outputs__

    hx = hx_with_elements(coder.__outputs__, np.hstack([p, np.eye(k, k, dtype=int)]), 2 * k, k)

    d1 = {i: [] for i in scheme.__outputs__}

    for i in range(k):
        for hx_str in hx:
            if coder.__outputs__[i] in hx_str:   d1[scheme.__outputs__[i]] += hx_str

    for i in scheme.__outputs__:
        check_eq = d1[i]
        ind_0 = scheme.__outputs__.index(i)
        for j in range(2):
            index = check_eq.index(coder.__outputs__[ind_0])
            check_eq.remove(check_eq[index])

    inputs = [d1[i] for i in d1]
    for i in range(k):  inputs[i] = [scheme.__outputs__[i]] + inputs[i]

    decoder = sch.scheme_alt()
    decoder.__outputs__ = ['out_ced_{}'.format(i) for i in group]
    decoder.__inputs__ = list(sorted(set([n3 for n2 in range(k) for n3 in inputs[n2]])))

    n = 1
    for i in range(k):  decoder, n = create_decoder(decoder, inputs[i], decoder.__outputs__[i], num, n)

    decoder.__inputs__ = scheme.__outputs__ + coder.__outputs__

    conn = {(0, i): [(1, i)] for i in coder.__outputs__}
    out = [(1, i) for i in decoder.__outputs__] + [(0, '{}_out'.format(i)) for i in scheme.__outputs__]

    ced = sch.merge_schemes([coder, decoder], conn, out)

    return ced, coder, decoder
Пример #4
0
def create_ced(scheme, groups):

    n_groups = len(groups)  # число разложений (групп)

    schemes = list()
    coders = list()
    decoders = list()

    d1 = {(0, i): [] for i in scheme.__inputs__}
    d2 = {}
    out = []

    for num in range(n_groups):

        outputs = [scheme.__outputs__[groups[num][i] - 1] for i in range(len(groups[num]))]
        scheme_1 = scheme.subscheme_by_outputs(outputs)
        scheme_2, coder, decoder = create_ced_for_group(scheme_1, groups[num], num)
        schemes.append(scheme_2)

        coders.append(coder)
        decoders.append(decoder)

        for i in scheme_1.__inputs__:   d1[(0, i)].append((num + 1, scheme_2.__inputs__[scheme_1.__inputs__.index(i)]))
        d2.update({(0, i): [(num + 1, i)] for i in scheme_1.__outputs__})
        out += [(num + 1, i) for i in scheme_2.__outputs__]

    conn = {}
    conn.update(d1)
    conn.update(d2)

    renamed = {}
    n = 1

    for i in scheme.__elements__.keys():
        if i not in scheme.__outputs__:
            renamed[i] = 'wire_{}'.format(n)
            n += 1

    scheme.rename_labels(renamed)

    ldpc_ced = sch.merge_schemes([scheme] + schemes, conn, out)

    ldpc_ced.__outputs__ = ['out_ced_{}'.format(i + 1) for i in range(scheme.outputs())]
    ldpc_ced.__outputs__ += scheme.__outputs__ + ['{}_out'.format(i) for i in scheme.__outputs__]

    return ldpc_ced, coders, decoders
Пример #5
0
def create_input_transducer(scheme_1, scheme_2):
    # Функция генерации вх. преобразователя и добавления его в СФК на основе кодирования в 3битном пространстве Хэмминга
    # scheme_1 - основная комбинационная схема
    # scheme_2 - схема, в которой ЛЭ были заменены на сбоеустойчивые аналоги в 3битном пространстве Хэмминга

    # Создание словаря соединений
    con = dict()

    # Создание списка выходов объединенной схемы scheme_2
    out = list()

    # Создание пустой подсхемы входного преобразователя inp_transducer
    inp_transducer = sch.scheme_alt()

    # Добавление входов для подсхемы входного преобразователя inp_transducer
    inp_transducer.__inputs__ = ['x_0']

    for i in range(scheme_1.inputs() - 1):
        inp_transducer.__inputs__.append('x_{}'.format(i + 1))

    # Добавление выходов для подсхемы входного преобразователя inp_transducer
    inp_transducer.__outputs__ = inp_transducer.__inputs__

    # Генерация словаря соединений
    # Например:
    # {(1,'x_1'): [(0, 'a'), (0, 'a_1'), (0, 'a_2')]}, где 'x_1' - вход преобразователя,
    # 'a','a_1','a_2' - входы схемы
    for i in range(scheme_1.inputs()):
        con[(1, 'x_{}'.format(i))] = [(0, scheme_1.__inputs__[i]),
                                      (0, scheme_1.__inputs__[i] + '_1'),
                                      (0, scheme_1.__inputs__[i] + '_2')]

    # Генерация выходов объединенной схемы
    for i in range(scheme_2.outputs()):
        out.append((0, scheme_2.__outputs__[i]))

    # Объединение схемы hemming_scheme и подсхемы входного преобразователя inp_transducer
    scheme_2 = sch.merge_schemes([scheme_2, inp_transducer], con, out)

    return scheme_2
Пример #6
0
def create_ced_for_group(scheme, group, cone=None, n=0):
    if cone is None:    cone = []
    spectral_ced = sch.scheme_alt()

    if scheme.outputs() != 1:
        # Вычисление основных параметров спектрального R-кода
        k = scheme.outputs()

        m = int(np.ceil(np.log2(k)))+1

        gx = matrix_gx(k, m-1)
        gx_elements = gx_with_elements(scheme, gx, k, m)
        gx_count_one = gx_with_count_one(gx)

        outputs = []

        for i in range(scheme.outputs()): outputs.append(scheme.__outputs__[i])

        # Создание копии основной схемы для кодера
        scheme_1 = sch.replicate(scheme, 1)

        # Генерирование подсхемы кодера для СФК на основе спектрального R-кода
        coder, n = create_coder(scheme_1, gx_elements, gx_count_one, m, n)

        # Минимизирование подсхемы кодера для СФК на основе спектрального R-кода с помощью Yosys
        # coder_min = create_circuit_external_yosys(coder)

        # Генерирование подсхемы декодера для СФК на основе спектрального R-кода
        decoder, n = create_decoder(scheme, gx_elements, outputs, gx_count_one, m, k, n)

        # Минимизирование подсхемы декодера для СФК на основе спектрального R-кода с помощью Yosys
        # decoder_min = create_circuit_external_yosys(decoder)

        # n_decoder_out = len(decoder_min.__outputs__)
        n_decoder_out = len(decoder.__outputs__)

        # Генерирование подсхемы мультиплексора для СФК на основе спектрального R-кода
        # mux_inputs = decoder_min.__outputs__[:(n_decoder_out-1)]
        mux_inputs = decoder.__outputs__[:(n_decoder_out - 1)]

        mux, n = create_mux(mux_inputs, scheme.__outputs__, k, n, group)

        # cone += mux.__elements__

        # Объединение подсхем декодера и мультиплексора
        conn = dict()
        out = list()

        # for n1 in range(k): conn[(0, decoder_min.__outputs__[n1])] = [(1, decoder_min.__outputs__[n1])]
        for n1 in range(k): conn[(0, decoder.__outputs__[n1])] = [(1, decoder.__outputs__[n1])]
        for n2 in range(k): conn[(0, scheme.__outputs__[n2])] = [(1, scheme.__outputs__[n2])]

        conn[(0, '_s0')] = [(1, '_s0')]
        conn[(0, 'n_s0')] = [(1, 'n_s0')]

        for n3 in range(k):     out.append((1, mux.__outputs__[n3]))

        out.append((0, '_s0'))
        out.append((0, 'flag'))

        # scheme_2 = sch.merge_schemes([decoder_min, mux], conn, out)
        scheme_2 = sch.merge_schemes([decoder, mux], conn, out)

        # Объединение подсхем кодера и scheme_2
        conn = dict()
        out = list()

        # for n4 in range(m):   conn[(0, coder_min.__outputs__[n4])] = [(1, scheme_2.__inputs__[k+n4])]
        # for n5 in range(scheme_2.outputs()):    out.append((1, scheme_2.__outputs__[n5]))
        # spectral_ced = sch.merge_schemes([coder_min, scheme_2], conn, out)

        for n4 in range(m):                     conn[(0, coder.__outputs__[n4])] = [(1, scheme_2.__inputs__[k+n4])]
        for n5 in range(scheme_2.outputs()):    out.append((1, scheme_2.__outputs__[n5]))
        spectral_ced = sch.merge_schemes([coder, scheme_2], conn, out)

    return spectral_ced, cone, n, coder, decoder
Пример #7
0
def create_spec_circuit(scheme, n_pass):
    # Функция генерации СФК на основе спектрального R кода с учетом применения алгоритма кластеризации

    if n_pass == 0:
        groups = [[i+1 for i in range(scheme.outputs())]]
        # Q = 0
    else:
        clusters, groups = clusterization(scheme, n_pass)

    scheme_3 = list()
    coders = list()
    decoders = list()
    cone = list()
    l3 = list()

    n = 1

    for i in range(len(groups)):
        outputs = []

        for j in range(len(groups[i])): outputs.append(scheme.__outputs__[groups[i][j] - 1])

        scheme_1 = scheme.subscheme_by_outputs(outputs)
        scheme_2, cone, n, coder, decoder = create_ced_for_group(scheme_1, groups[i], cone, n)
        scheme_3.append(scheme_2)

        coders.append(coder)
        decoders.append(decoder)

    conn = dict()
    out = list()

    for n0 in range(scheme.inputs()):
        l1 = list()
        l2 = list()

        for n1 in range(len(groups)):
            if scheme_3[n1].__inputs__.count(scheme.__inputs__[n0]) != 0:   l1.append(n1)

        for n2 in range(len(l1)):   l2.append((l1[n2] + 1, scheme.__inputs__[n0]))

        conn[(0, scheme.__inputs__[n0])] = l2

    for n3 in range(len(groups)):
        n_out = scheme_3[n3].outputs() - 2
        inp_1 = scheme_3[n3].__inputs__[(-n_out):]

        for n4 in range(len(inp_1)):    conn[(0, scheme.__outputs__[groups[n3][n4] - 1])] = [(n3 + 1, inp_1[n4])]
    cir = [scheme]

    for n5 in range(len(groups)):   cir.append(scheme_3[n5])

    for n6 in range(len(scheme_3)):
        for n7 in range(scheme_3[n6].outputs()): out.append((n6 + 1, scheme_3[n6].__outputs__[n7]))

    result = sch.merge_schemes(cir, conn, out)
    t_cone = result.subscheme_by_outputs(['_s0'])

    for n8 in range(scheme.elements()):
        if list(t_cone.__elements__).count(list(scheme.__elements__)[n8]) > 0:
            del t_cone.__elements__[list(scheme.__elements__)[n8]]

    l3 += list(t_cone.__elements__.keys())

    for n7 in range(len(groups) - 1):
        t_cone = result.subscheme_by_outputs(['_s0_{}'.format(n7 + 1)])

        for n8 in range(scheme.elements()):
            if list(t_cone.__elements__).count(list(scheme.__elements__)[n8]) > 0:
                del t_cone.__elements__[list(scheme.__elements__)[n8]]

        l3 += list(t_cone.__elements__.keys())

    cone += l3

    if n_pass != 0:

        old_out = sorted(result.__outputs__)

        n_or = len(groups) - 1

        for i in range(n_or):    result.__elements__['bit_{}'.format(i + 1)] = ('OR', [old_out[i], old_out[i + 1]])

        bit = 'bit_{}'.format(n_or)

        old_out = old_out[len(groups):]

        for i in range(n_or):    result.__elements__['flag_error_{}'.format(i + 1)] = ('OR', [old_out[i], old_out[i + 1]])

        flag = 'flag_error_{}'.format(n_or)

        old_out = old_out[len(groups):]

        result.__outputs__ = ['out_{}'.format(i + 1) for i in range(len(old_out))]

        result.__outputs__ += [bit, flag]

    return result, cone, coders, decoders
Пример #8
0
def create_hemming_circuit(scheme):
    # Функция переименования узлов схемы
    renamed_scheme = sch.replicate(scheme, 1)
    n = renamed_elements_in_scheme(renamed_scheme, 'inp_', 'wire_', 0)

    # "Утроение" основной схемы
    scheme_2 = sch.merge_schemes([renamed_scheme] * 3)
    scheme_3 = sch.scheme_alt()
    inputs = list()

    # Вычисление числа ЛЭ основной схемы
    k = scheme.elements()

    # Для каждого ЛЭ основной схемы создается сбоеустойчивый аналог данного ЛЭ в базисе 3битоного пространства Хэмминга
    # Определение выходов сбоеустойчивого аналога ЛЭ
    for element in sorted(renamed_scheme.__elements__.keys()):
        outputs = [element, element + '_1', element + '_2']

        # Определение входов аналога, если ЛЭ основной схемы является двувходовым
        if len(renamed_scheme.__elements__[element][1]) == 2:
            inputs = [
                renamed_scheme.__elements__[element][1][0],
                renamed_scheme.__elements__[element][1][0] + '_1',
                renamed_scheme.__elements__[element][1][0] + '_2',
                renamed_scheme.__elements__[element][1][1],
                renamed_scheme.__elements__[element][1][1] + '_1',
                renamed_scheme.__elements__[element][1][1] + '_2'
            ]

        # Если ЛЭ основной схемы - одновходовой
        elif len(renamed_scheme.__elements__[element][1]) == 1:
            inputs = [
                renamed_scheme.__elements__[element][1][0],
                renamed_scheme.__elements__[element][1][0] + '_1',
                renamed_scheme.__elements__[element][1][0] + '_2'
            ]

        # Определение типа (выполняемой функции) ЛЭ основной схемы
        node_type = renamed_scheme.__elements__[element][0]

        # Генерация подсхемы subscheme сбоеустойчивого аналога ЛЭ основной схемы
        if node_type == 'INV':
            subscheme, k = create_ft_analog_inv(
                inputs, outputs, k)  # Сбоеустойчивый аналог ЛЭ INV
        elif node_type == 'BUF':
            subscheme, k = create_ft_analog_buf(
                inputs, outputs, k)  # Сбоеустойчивый аналог ЛЭ BUF
        elif node_type == 'AND':
            subscheme, k = create_ft_analog_and2(
                inputs, outputs, k)  # Сбоеустойчивый аналог ЛЭ AND2
        elif node_type == 'OR':
            subscheme, k = create_ft_analog_or2(
                inputs, outputs, k)  # Сбоеустойчивый аналог ЛЭ OR2
        elif node_type == 'XOR':
            subscheme, k = create_ft_analog_xor2(
                inputs, outputs, k)  # Сбоеустойчивый аналог ЛЭ XOR2
        elif node_type == 'NAND':
            subscheme, k = create_ft_analog_nand2(
                inputs, outputs, k)  # Сбоеустойчивый аналог ЛЭ NAND2
        elif node_type == 'NOR':
            subscheme, k = create_ft_analog_nor2(
                inputs, outputs, k)  # Сбоеустойчивый аналог ЛЭ NOR2
        elif node_type == 'XNOR':
            subscheme, k = create_ft_analog_xnor2(
                inputs, outputs, k)  # Сбоеустойчивый аналог ЛЭ XNOR2
        elif node_type == 'GND':
            subscheme = {element: renamed_scheme.__elements__[element]}  # GND
        else:
            subscheme = 0

        if node_type == 'GND': scheme_3.__elements__.update(subscheme)
        else: scheme_3.__elements__.update(subscheme.__elements__)

    scheme_3.__inputs__ = scheme_2.__inputs__
    scheme_3.__outputs__ = scheme_2.__outputs__

    # Добавление подсхемы входного преобразователя
    scheme_4 = create_input_transducer(renamed_scheme, scheme_3)

    # Добавление подсхемы выходного преобразователя
    hem_ced = create_output_transducer(renamed_scheme, scheme_4, k)

    return hem_ced
def create_ced(scheme, count):
    #ОСНОВНАЯ ФУНКЦИЯ ГЕНЕРАЦИИ СФК НА ОСНОВЕ МОДИФИЦИРОВАННОГО КОДА ХЭММИНГА

    SWC_ced = sch.scheme_alt()
    # ВЫЧИСЛЕНИЕ ОСНОВНЫХ ПАРАМЕТРОВ СХЕМЫ
    k = scheme.outputs()  # КОЛ-ВО ИНФОРМАЦИОННЫХ РАЗРЯДОВ/ВЫХОДОВ СХЕМЫ
    n = int(np.ceil(np.log2(k + 1)))  # КОЛ-ВО ПРОВЕРОЧНЫХ РАЗРЯДОВ
    gx = matrix_gx(n, k)  # ГЕНЕРАЦИЯ ПОРОЖДАЮЩЕЙ МАТРИЦЫ
    gx_elements = gx_with_elements(
        scheme, gx, k, n)  # СПИСОК ЭЛ-ОВ, ДЛЯ ВЫЧИСЛЕНИЯ ПРОВЕРОЧНЫХ РАЗРЯДОВ
    gx_one_line = np.sum(
        gx, 1)  # КОЛ-ВО ЭЛ-ОВ, ДЛЯ ВЫЧИСЛЕНИЯ ПРОВЕРОЧНЫХ РАЗРЯДОВ
    scheme_1 = sch.replicate(scheme, 1)  # КОПИЯ О.С. ДЛЯ ФОРМИРОВАНИЯ КОДЕРА
    coder, count = create_coder(scheme_1, gx_elements, gx_one_line, n,
                                count)  # ФОРМИРОВАНИЕ ПОДСХЕМЫ КОДЕРА
    #coder_min = create_circuit_external_yosys(coder)                                # МИНИМИЗАЦИЯ КОДЕРА С ПОМОЩЬЮ YOSYS
    decoder, count = create_decoder(scheme, gx_elements, gx_one_line, n, k,
                                    count)  # ФОРМИРОВАНИЕ ПОДСХЕМЫ ДЕКОДЕРА
    #decoder_min = create_circuit_external_yosys(decoder)                            # МИНИМИЗАЦИЯ ДЭКОДЕРА С ПОМОЩЬЮ YOSYS

    # ОБЪЕДИНЕНИЕ ОСНОВНОЙ СХЕМЫ И ПОДСХЕМЫ КОДЕРА
    conn = dict()  # СОЕДИНЕНИЯ ОС И КОДЕРА
    conn_min = dict()  # СОЕДИНЕНИЯ ОС И МИНИМИЗИРОВАННОГО КОДЕРА
    out = list()  # ВЫХОДЫ ОС И КОДЕРА
    out_min = list()  # ВЫХОДЫ ОС И МИН. КОДЕРА

    for i in range(scheme.inputs()):  # ЗАПОЛНЕНИЕ СЛОВОРЕЙ СОЕДИНЕНИЙ
        conn[(0, scheme.__inputs__[i])] = [(1, coder.__inputs__[i])]
        #conn_min[(0, scheme.__inputs__[i])] = [(1, coder_min.__inputs__[i])]

    for j in range(scheme.outputs()):  # ЗАПОЛНЕНИЕ СПИСКА ВЫХОДОВ
        out.append((0, scheme.__outputs__[j]))
        out_min.append((0, scheme.__outputs__[j]))

    for i in range(coder.outputs()):
        out.append((1, coder.__outputs__[i]))
    # for i in range(coder_min.outputs()):
    #     out_min.append((1, coder_min.__outputs__[i]))

    scheme_2 = sch.merge_schemes([scheme, coder], conn,
                                 out)  # ОБЪЕДИНЕНИЕ ОС И КОДЕРА
    #scheme_3 = sch.merge_schemes([scheme, coder_min], conn_min, out_min)        # ОБЪЕДИНЕНИЕ ОС И МИН. КОДЕРА

    # ОБЪЕДИНЕНИЕ scheme_3/scheme_3 И ДЕКОДЕРА
    conn = dict()  # СОЕДИНЕНИЯ scheme_3/scheme_3 И ДЕКОДЕРА
    conn_min = dict()  # СОЕДИНЕНИЯ scheme_3/scheme_3 И МИН. ДЕКОДЕРА
    out = list()  # ВЫХОДЫ scheme_3/scheme_3 И ДЕКОДЕРА
    out_min = list()  # ВЫХОДЫ scheme_3/scheme_3 И МИН. ДЕКОДЕРА

    for i in range(decoder.inputs()):  # ЗАПОЛНЕНИЕ СЛОВОРЕЙ СОЕДИНЕНИЙ
        conn[(0, scheme_2.__outputs__[i])] = [(1, decoder.__inputs__[i])]
    # for i in range(decoder_min.inputs()):
    #     conn_min[(0, scheme_2.__outputs__[i])] = [(1, decoder_min.__inputs__[i])]

    for j in range(scheme.outputs()):  # ЗАПОЛНЕНИЕ СПИСКА ВЫХОДОВ
        out.append((0, scheme_2.__outputs__[j]))
        out_min.append((0, scheme_2.__outputs__[j]))

    for i in range(decoder.outputs()):
        out.append((1, decoder.__outputs__[i]))
    # for i in range(decoder_min.outputs()):
    #     out_min.append((1, decoder_min.__outputs__[i]))

    SWC_ced = sch.merge_schemes([scheme_2, decoder], conn,
                                out)  # ФОРМИРОВАНИЕ СФК
    #SWC_ced = sch.merge_schemes([scheme_2, decoder_min], conn, out)             # ФОРМИРОВАНИЕ СФК С МИН. ДЕКОДЕРОМ
    #SWC_ced = sch.merge_schemes([scheme_3, decoder], conn, out)                # ФОРМИРОВАНИЕ СФК С МИН. КОДЕРОМ
    #SWC_ced = sch.merge_schemes([scheme_3, decoder_min], conn_min, out_min)    # ФОРМИР СФК С МИН. КОДЕРОМ И МИН. ДЕКОДЕРОМ

    return SWC_ced