Как смоделировать цифровую схему с C ++ (только ввод / вывод, без графики) - PullRequest
1 голос
/ 03 февраля 2012

Мне нужно создать симуляцию цифровой схемы в C ++ на основе ввода / вывода.

Вход задается в виде последовательности элементов (или, и, nand и т. Д.) И в виде списка соединений между выводами этих элементов (т.е. входной вывод 1 элемента 1 соединен с выходным выводомэлемента 2).

Источником считается элемент с выходным контактом, а в конце входного файла описывается источник, например, периодический, или пользовательский 1 или 0 в случайные моменты.

Датчик находится в конце цепи, и он рассматривается как элемент только с входным контактом, и, естественно, проверяет, является ли значение сигнала 0 или 1 в любой момент времени.

Итак, мой вопрос: как мне создать структуру данных, которая представляет схему?Может ли это быть как связанный список элементов, или каждый элемент должен иметь указатели на другие элементы?А как мне передать сигнал по всей модели схемы?

Ответы [ 4 ]

2 голосов
/ 29 ноября 2012

То, что вы описали, - это парадигма программирования под названием " Потоковое программирование ".

Если вам интересно, я разработал библиотеку объектно-ориентированного программирования на C ++ под названием DSPatch (или "dispatch"). Универсальный объектно-ориентированный API позволяет создавать и маршрутизировать практически любые типы цепочек процессов, которые только можно вообразить, от базовых логических схем до полномасштабного электронного моделирования. Он быстрый, очень простой в использовании и бесплатный для личного / частного использования.

1 голос
/ 03 февраля 2012
  1. Начните с базового класса для ваших компонентов:

    class Component
    {
        Component** inputs;
        Component** outputs;
        int numOfInputs;
        int numOfOutputs;
        virtual PropagateLogic() = 0;
    }
    
  2. Подкласс базового компонента для определенных логических имплементаций.

  3. Добавьте код, чтобы сообщить компоненту, сколько входов / выходов ожидать.
  4. Подключите свою цепь, назначив указатели
  5. ... и, наконец, когда вы хотите выполнить свою схему, начните со входов и идите вниз по цепочке, вызывая распространение.
1 голос
/ 03 февраля 2012

Я бы сказал, что вы должны искать структуру, похожую на график.Вы можете добавить поле, указывающее, активно ли оно / включено или нет, и ретранслировать все входящие данные на активные соседние узлы.Но это может пойти немного дальше в направлении AN.

0 голосов
/ 03 февраля 2012

Определенно сохраните его в графике.

Для простого моделирования достаточно сохранения соединения с моделированием потока данных.

Если вы делаете что-то более сложное, например, хотите бытьВ состоянии обнаружить опасности , вы должны хранить задержки основных строительных блоков и длины проводов.Затем вы можете построить основанную на времени систему, в которой каждое изменение проводов срабатывает в определенное (возможно, не полностью детерминированное) время выходных проводов устройств.

...