JSON файлы
Для генерации комбинационных схем с использованием командной строки необходимо создать JSON файл.
Набор использованных методов описан в следующих статьях:
- V.V. Zunin, A.Y. Romanov, R.A. Solovyev Developing Methods for Combinational Circuit Generation, in: 2022 International Russian Automation Conference (RusAutoCon). IEEE, 2022. P. 842-846. doi
- D.A. Miachin, V.P. Pugach, S.S. Avdeiuk, V.V. Zunin, A.Y. Romanov. The Open System for Storing and Processing of a Dataset of Combinational Circuits // Proceedings of the Institute for System Programming of the RAS. 2023. Vol. 35. No. 5. P. 81-90. doi
JSON файл может содержать несколько наборов генерации:
[ { набор генерации 1 } { набор генерации 2 } ]
Каждый набор генерации состоит из нескольких блоков (для параметров в скобках указывается их тип, дефолтное значение, ялвялется ли параметр обязательным, дефолное значение, если параметр опциональный):
- Набор глобальных параметров
multithread(int, опциональный) - количество потоков, используемых в процессе генерации, дефолтное значение: 1
- Набор параметров генерации - блок
GenerationParametersconvert_to_basis(bool, опциональный, false) - необходимо ли конвертировать итоговые графы в необходимый базис, если да, то базис будет автоматически определен на основании блокаgates_inputs_infogates_inputs_info(опциональный) - блок элементов, которые могут быть использованы при генерации графа, для каждого элемента списком указано возможное количество входов у элемента, на данный момент на генерацию влияет только наличие элемента, но не количество входовmin_in(int, опциональный, 1) - минимальное количество входовmax_in(int, опциональный, 1) - максимальное количество входовmin_out(int, опциональный, 1) - минимальное количество выходовmax_out(int, опциональный, 1) - максимальное количество выходовrepeat_n(int, опциональный, 1) - количество повторений для каждого набораseed(int, опциональный, -1) - сид для генератора случайных чисел, при значении -1 используется случайное значениеtype_of_generation(enum, обязательный) - выбор типа генерации, возможны следующие значения:From Random Truth Table- генерация по случайной таблице истинностиRand Level- генерация со случайной глубиной графаRand Level Experimental- экспериментальная версия генератораRand LevelNum Operation- генерация логических операцийComparison- генерация блока сравненийSummator- генерация сумматораMultiplier- генерация умножителяSubtractor- генерация делителяMultiplexer- генерация мультиплексораDemultiplexer- генерация демультиплексораEncoder- генерация кодироващикаDecoder- генерация декодераGenetic- генерация на основе генетических алгоритмовParityALU- генерация арифметико-логического устройства
- Набор параметров выходных результатов генерации - блок
OutputParameterscreate_id_directories(bool, опциональный, false) - необходимо ли создавать директории для датасетов в сооответствии с ихiddataset_id(string, обязательный) - номер датасета в папке сохранения датасетовdataset_path(string, опциональный, "./dataset") - путь к директории для хранения датасетаid(int, обязательный) - обозначение подкатегории датасетаmake_graphml_classic(bool, опциональный, false) - необходимо ли сохранять классическое graphml представление графаmake_graphml_pseudo_abc_d(bool, опциональный, false) - необходимо ли сохранять pseudo_abc graphml представление графаmake_graphml_open_abc_d(bool, опциональный, false) - необходимо ли сохранять open_abc graphml представление графаmake_dot(bool, опциональный, false) - необходимо ли сохранять dot представление графаsave_circuit_parameters_json(bool, опциональный, true) - приtrueвыполняется обсчет параметров схемы и рядом с Verilog сохраняется файл<имя_схемы>.json; приfalseгенерируются только Verilog и прочие форматы по флагам выше, без JSON с параметрами схемы
- Набор параметров, специфичных для конкретного типа генерации, блоки являются обязательными для конкретных типов генерации, их названия соответствуют значению
type_of_generation:From Random Truth TableCNFF(bool, опциональный, false) - создавать ли схему с помощью СДНФCNFT(bool, опциональный, false) - создавать ли схему с помощью СКНФZhegalkin(bool, опциональный, false) - создавать ли схему с помощью полинома Жегалкина
Rand Levelmin_level(int, опциональный, 1) - минимальное количество уровней в схемеmax_level(int, опциональный, 1) - максимальное количество уровней в схемеmin_elem(int, опциональный, 1) - минимальное количество элементов в схемеmax_elem(int, опциональный, 1) - максимальное количество элементов в схеме
Rand Level Experimentalmin_level(int, опциональный, 1) - минимальное количество уровней в схемеmax_level(int, опциональный, 1) - максимальное количество уровней в схемеmin_elem(int, опциональный, 1) - минимальное количество элементов в схемеmax_elem(int, опциональный, 1) - максимальное количество элементов в схеме
Num Operationleave_empty_out(bool, опциональный, false) - оставлять ли пустые входыnum_and(int, опциональный, 1) - количество элементов типа andnum_nand(int, опциональный, 1) - количество элементов типа nandnum_or(int, опциональный, 1) - количество элементов типа ornum_not(int, опциональный, 1) - количество элементов типа notnum_nor(int, опциональный, 1) - количество элементов типа nornum_buf(int, опциональный, 1) - количество элементов типа bufnum_xor(int, опциональный, 1) - количество элементов типа xornum_xnor(int, опциональный, 1) - количество элементов типа xnor
Comparisonequal(bool, опциональный, false) - генерация операции сравнения "равно"less(bool, опциональный, false) - генерация операции сравнения "меньше"more(bool, опциональный, false) - генерация операции сравнения "больше"
Summatorminus(bool, опциональный, false) - использовать отрицательную суммуoverflowIn(bool, опциональный, false) - необходимо ли создать дополнительный вход для переноса в первый разрядoverflowOut(bool, опциональный, false) - необходимо ли создать дополнительный выход для переноса из последнего разряда
Multiplier- на данный момент нет специфичных параметровSubtractoroverflowIn(bool, опциональный, false) - необходимо ли создать дополнительный вход для переноса в первый разрядoverflowOut(bool, опциональный, false) - необходимо ли создать дополнительный выход для переноса из последнего разрядаsub(bool, опциональный, false) - выбор вычитаемого, при true вычитаемое - второе число
Multiplexer- на данный момент нет специфичных параметровDemultiplexer- на данный момент нет специфичных параметровEncoder- на данный момент нет специфичных параметровDecoder- на данный момент нет специфичных параметровGeneticchromosome_type(string, обязательный) - тип хромосомы, возможные значения:TruthTableEnum
cycles(int, опциональный, 1) - максимальное количество циклов генерацииmask_prob(double, опциональный, 1.0)mut_chance(double, опциональный, 0.5) - шанс мутацииmut_type(string, обязательный) - тип мутации хромосом, возможные значенияBinaryDensityAccessionDelInsertDelExchangeDelete
out_ratio(double, опциональный, 1.0) - значение критерия окончания работы генератораplayback_type(string, обязательный) - тип рекомбинации, возможные значения:CrossingEachExitInTurnManyCrossingUniformCrossingTriadicCrossingReducedReplacementCrossingShuffling
population_size(int, опциональный, 1) - размер начальной популяцииratio_in_table(double, опциональный, 1.0)- распределение 0 и 1 в таблице истинностиrec_num(int, опциональный, 1) - количество рекомбинацийref_points(int, опциональный, 1)selection_type(string, обязательный) - тип отбора после мутации, возможные значения:Base
selection_type_parent(string, обязательный) - тип отбора мутации, возможные значения:PanmixiaInbringingOutbrindingTournamentRoulette
surv_num(int, опциональный, 1) - количество выжившихswap_type(int, опциональный, 1) - возможные значения:012
tour_size(int, опциональный, 1) - размер турнира для Tournament
Parity- на данный момент нет специфичных параметровALUALL(bool, опциональный, false) - выбор всех типов генерации, аналогично выставлению для всех типов trueAND(bool, опциональный, false) - выбор логической операции ИNAND(bool, опциональный, false) - выбор логической операции НЕ-ИOR(bool, опциональный, false) - выбор логической операции ИЛИNOR(bool, опциональный, false) - выбор логической операции НЕ-ИЛИXOR(bool, опциональный, false) - выбор логической операции Исключающее ИЛИXNOR(bool, опциональный, false) - выбор логической операции Исключающее НЕ-ИЛИSUM(bool, опциональный, false) - выбор генерации Summator с положительной суммойNSUM(bool, опциональный, false) - выбор генерации Summator с отрицательной суммойMULT(bool, опциональный, false) - выбор генерации MultiplierSUB(bool, опциональный, false) - выбор генерации Subtractor с выбором вычитаемого B и вычитателя ANSUB(bool, опциональный, false) - выбор генерации Subtractor с выбором вычитаемого A и вычитателя BCOM(bool, опциональный, false) - выбор генерации ComparisonCNF(bool, опциональный, false) - выбор генерации From Random Truth Table (CNFT, CNFF, Zhegalkin)RNL(bool, опциональный, false) - выбор генерации Rand LevelNUM_OP(bool, опциональный, false) - выбор генерации Num Operationmin_level(int, опциональный, 1) - минимальное количество уровней в схемеmax_level(int, опциональный, 1) - максимальное количество уровней в схемеmin_elem(int, опциональный, 1) - минимальное количество элементов в схемеmax_elem(int, опциональный, 1) - максимальное количество элементов в схемеleave_empty_out(bool, опциональный, false) - оставлять ли пустые входы
В примере JSON файла указаны все возможные параметры генерации (кроме сида), что позволяет использовать его для всех параметров генерации с минимальными изменениями. В дополнении в той же папке имются индивидуальные JSON файлы под каждый тип генерации: