JSON файлы

Для генерации комбинационных схем с использованием командной строки необходимо создать JSON файл.

Набор использованных методов описан в следующих статьях:

  1. 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
  2. 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
    }
]

Каждый набор генерации состоит из нескольких блоков (для параметров в скобках указывается их тип, дефолтное значение, ялвялется ли параметр обязательным, дефолное значение, если параметр опциональный):

  1. Набор глобальных параметров
    1. multithread (int, опциональный) - количество потоков, используемых в процессе генерации, дефолтное значение: 1
  2. Набор параметров генерации - блок GenerationParameters
    1. convert_to_basis (bool, опциональный, false) - необходимо ли конвертировать итоговые графы в необходимый базис, если да, то базис будет автоматически определен на основании блока gates_inputs_info
    2. gates_inputs_info (опциональный) - блок элементов, которые могут быть использованы при генерации графа, для каждого элемента списком указано возможное количество входов у элемента, на данный момент на генерацию влияет только наличие элемента, но не количество входов
    3. min_in (int, опциональный, 1) - минимальное количество входов
    4. max_in (int, опциональный, 1) - максимальное количество входов
    5. min_out (int, опциональный, 1) - минимальное количество выходов
    6. max_out (int, опциональный, 1) - максимальное количество выходов
    7. repeat_n (int, опциональный, 1) - количество повторений для каждого набора
    8. seed (int, опциональный, -1) - сид для генератора случайных чисел, при значении -1 используется случайное значение
    9. type_of_generation (enum, обязательный) - выбор типа генерации, возможны следующие значения:
      1. From Random Truth Table - генерация по случайной таблице истинности
      2. Rand Level - генерация со случайной глубиной графа
      3. Rand Level Experimental - экспериментальная версия генератора Rand Level
      4. Num Operation - генерация логических операций
      5. Comparison - генерация блока сравнений
      6. Summator - генерация сумматора
      7. Multiplier - генерация умножителя
      8. Subtractor - генерация делителя
      9. Multiplexer - генерация мультиплексора
      10. Demultiplexer - генерация демультиплексора
      11. Encoder - генерация кодироващика
      12. Decoder - генерация декодера
      13. Genetic - генерация на основе генетических алгоритмов
      14. Parity
      15. ALU - генерация арифметико-логического устройства
  3. Набор параметров выходных результатов генерации - блок OutputParameters
    1. create_id_directories (bool, опциональный, false) - необходимо ли создавать директории для датасетов в сооответствии с их id
    2. dataset_id (string, обязательный) - номер датасета в папке сохранения датасетов
    3. dataset_path (string, опциональный, "./dataset") - путь к директории для хранения датасета
    4. id (int, обязательный) - обозначение подкатегории датасета
    5. make_graphml_classic (bool, опциональный, false) - необходимо ли сохранять классическое graphml представление графа
    6. make_graphml_pseudo_abc_d (bool, опциональный, false) - необходимо ли сохранять pseudo_abc graphml представление графа
    7. make_graphml_open_abc_d (bool, опциональный, false) - необходимо ли сохранять open_abc graphml представление графа
    8. make_dot (bool, опциональный, false) - необходимо ли сохранять dot представление графа
    9. save_circuit_parameters_json (bool, опциональный, true) - при true выполняется обсчет параметров схемы и рядом с Verilog сохраняется файл <имя_схемы>.json; при false генерируются только Verilog и прочие форматы по флагам выше, без JSON с параметрами схемы
  4. Набор параметров, специфичных для конкретного типа генерации, блоки являются обязательными для конкретных типов генерации, их названия соответствуют значению type_of_generation:
    1. From Random Truth Table
      1. CNFF (bool, опциональный, false) - создавать ли схему с помощью СДНФ
      2. CNFT (bool, опциональный, false) - создавать ли схему с помощью СКНФ
      3. Zhegalkin (bool, опциональный, false) - создавать ли схему с помощью полинома Жегалкина
    2. Rand Level
      1. min_level (int, опциональный, 1) - минимальное количество уровней в схеме
      2. max_level (int, опциональный, 1) - максимальное количество уровней в схеме
      3. min_elem (int, опциональный, 1) - минимальное количество элементов в схеме
      4. max_elem (int, опциональный, 1) - максимальное количество элементов в схеме
    3. Rand Level Experimental
      1. min_level (int, опциональный, 1) - минимальное количество уровней в схеме
      2. max_level (int, опциональный, 1) - максимальное количество уровней в схеме
      3. min_elem (int, опциональный, 1) - минимальное количество элементов в схеме
      4. max_elem (int, опциональный, 1) - максимальное количество элементов в схеме
    4. Num Operation
      1. leave_empty_out (bool, опциональный, false) - оставлять ли пустые входы
      2. num_and (int, опциональный, 1) - количество элементов типа and
      3. num_nand (int, опциональный, 1) - количество элементов типа nand
      4. num_or (int, опциональный, 1) - количество элементов типа or
      5. num_not (int, опциональный, 1) - количество элементов типа not
      6. num_nor (int, опциональный, 1) - количество элементов типа nor
      7. num_buf (int, опциональный, 1) - количество элементов типа buf
      8. num_xor (int, опциональный, 1) - количество элементов типа xor
      9. num_xnor (int, опциональный, 1) - количество элементов типа xnor
    5. Comparison
      1. equal (bool, опциональный, false) - генерация операции сравнения "равно"
      2. less (bool, опциональный, false) - генерация операции сравнения "меньше"
      3. more (bool, опциональный, false) - генерация операции сравнения "больше"
    6. Summator
      1. minus (bool, опциональный, false) - использовать отрицательную сумму
      2. overflowIn (bool, опциональный, false) - необходимо ли создать дополнительный вход для переноса в первый разряд
      3. overflowOut (bool, опциональный, false) - необходимо ли создать дополнительный выход для переноса из последнего разряда
    7. Multiplier - на данный момент нет специфичных параметров
    8. Subtractor
      1. overflowIn (bool, опциональный, false) - необходимо ли создать дополнительный вход для переноса в первый разряд
      2. overflowOut (bool, опциональный, false) - необходимо ли создать дополнительный выход для переноса из последнего разряда
      3. sub (bool, опциональный, false) - выбор вычитаемого, при true вычитаемое - второе число
    9. Multiplexer - на данный момент нет специфичных параметров
    10. Demultiplexer - на данный момент нет специфичных параметров
    11. Encoder - на данный момент нет специфичных параметров
    12. Decoder - на данный момент нет специфичных параметров
    13. Genetic
      1. chromosome_type (string, обязательный) - тип хромосомы, возможные значения:
        1. TruthTableEnum
      2. cycles (int, опциональный, 1) - максимальное количество циклов генерации
      3. mask_prob (double, опциональный, 1.0)
      4. mut_chance (double, опциональный, 0.5) - шанс мутации
      5. mut_type (string, обязательный) - тип мутации хромосом, возможные значения
        1. Binary
        2. Density
        3. AccessionDel
        4. InsertDel
        5. Exchange
        6. Delete
      6. out_ratio (double, опциональный, 1.0) - значение критерия окончания работы генератора
      7. playback_type (string, обязательный) - тип рекомбинации, возможные значения:
        1. CrossingEachExitInTurnMany
        2. CrossingUniform
        3. CrossingTriadic
        4. CrossingReducedReplacement
        5. CrossingShuffling
      8. population_size (int, опциональный, 1) - размер начальной популяции
      9. ratio_in_table (double, опциональный, 1.0)- распределение 0 и 1 в таблице истинности
      10. rec_num (int, опциональный, 1) - количество рекомбинаций
      11. ref_points (int, опциональный, 1)
      12. selection_type (string, обязательный) - тип отбора после мутации, возможные значения:
        1. Base
      13. selection_type_parent (string, обязательный) - тип отбора мутации, возможные значения:
        1. Panmixia
        2. Inbringing
        3. Outbrinding
        4. Tournament
        5. Roulette
      14. surv_num (int, опциональный, 1) - количество выживших
      15. swap_type (int, опциональный, 1) - возможные значения:
        1. 0
        2. 1
        3. 2
      16. tour_size (int, опциональный, 1) - размер турнира для Tournament
    14. Parity - на данный момент нет специфичных параметров
    15. ALU
      1. ALL (bool, опциональный, false) - выбор всех типов генерации, аналогично выставлению для всех типов true
      2. AND (bool, опциональный, false) - выбор логической операции И
      3. NAND (bool, опциональный, false) - выбор логической операции НЕ-И
      4. OR (bool, опциональный, false) - выбор логической операции ИЛИ
      5. NOR (bool, опциональный, false) - выбор логической операции НЕ-ИЛИ
      6. XOR (bool, опциональный, false) - выбор логической операции Исключающее ИЛИ
      7. XNOR (bool, опциональный, false) - выбор логической операции Исключающее НЕ-ИЛИ
      8. SUM (bool, опциональный, false) - выбор генерации Summator с положительной суммой
      9. NSUM (bool, опциональный, false) - выбор генерации Summator с отрицательной суммой
      10. MULT (bool, опциональный, false) - выбор генерации Multiplier
      11. SUB (bool, опциональный, false) - выбор генерации Subtractor с выбором вычитаемого B и вычитателя A
      12. NSUB (bool, опциональный, false) - выбор генерации Subtractor с выбором вычитаемого A и вычитателя B
      13. COM (bool, опциональный, false) - выбор генерации Comparison
      14. CNF (bool, опциональный, false) - выбор генерации From Random Truth Table (CNFT, CNFF, Zhegalkin)
      15. RNL (bool, опциональный, false) - выбор генерации Rand Level
      16. NUM_OP (bool, опциональный, false) - выбор генерации Num Operation
      17. min_level (int, опциональный, 1) - минимальное количество уровней в схеме
      18. max_level (int, опциональный, 1) - максимальное количество уровней в схеме
      19. min_elem (int, опциональный, 1) - минимальное количество элементов в схеме
      20. max_elem (int, опциональный, 1) - максимальное количество элементов в схеме
      21. leave_empty_out (bool, опциональный, false) - оставлять ли пустые входы

В примере JSON файла указаны все возможные параметры генерации (кроме сида), что позволяет использовать его для всех параметров генерации с минимальными изменениями. В дополнении в той же папке имются индивидуальные JSON файлы под каждый тип генерации:

  1. From Random Truth Table
  2. Rand Level
  3. Rand Level Experimental
  4. Num Operation
  5. Comparison
  6. Summator
  7. Multiplier
  8. Subtractor
  9. Multiplexer
  10. Demultiplexer
  11. Encoder
  12. Decoder
  13. Genetic
  14. Parity
  15. ALU