2013-10-27 4 views
3

Я пишу циклическое логическое моделирование в C#. Я хочу имитировать как комбинационные, так и последовательные схемы. Комбинационные схемы - это простые, но последовательные схемы дают мне проблемы.Как обнаружить колебания в логических симуляторах ворот?

Я хочу обнаружить колебания и отобразить соответствующее предупреждающее сообщение. Есть ли простой способ проверить, сколько раз один затвор может изменить свое состояние и все же оставить контур стабильным?

Я думал о «минимальном алгоритме настройки дуги обратной связи», но это кажется излишним. Многие настольные приложения делают это быстро, поэтому я сомневаюсь, что они его используют.

Я также нашел документ, в котором говорится об использовании тройной логики (0, 1, неизвестно) и алгоритме расщепления в двух частях: один инициализирует схему и выполняет фактические вычисления, но он говорил что-то вроде «если алгоритм А не прерывать цепь, имеет колебания ", которая ничего мне не дает, поскольку нет возможности остановить тактовый цикл и предупредить пользователя.

Любые идеи о том, как такие приложения, как «Logisim» или «digital works», обнаруживают колебания?

+0

Я могу представить простой алгоритм: вычислить все логические уровни по всей сети * дважды *. Если (по крайней мере) одно из значений изменяется, то у вас есть колебания. –

+0

Затвор в простом флип-флопе RS может изменить свое состояние дважды и оставить контур стабильным (третья оценка может определить, есть ли колебание) - если вычислено в правильном порядке. Правильным порядком я имею в виду порядок использования человеком для решения схемы вручную. Если я использую простой алгоритм DFS, то тот же самый затвор может изменить свое состояние МНОГО раз. http://tinyurl.com/py4z7ol Я не совсем уверен, но я подозреваю, что если в воротах больше циклов обратной связи, их нужно вычислить три, четыре, пять раз - я буду очень благодарен, если кто-нибудь сможет подтвердить это. – Morfidon

+0

Правильно, я об этом не думал. Да, третий раунд поможет. Что касается правильного порядка: разве это не так просто, как начать с входов? –

ответ

1

Verilator - это логический симулятор, который работает путем компиляции синтезируемого Verilog в C-код.

Он пытается построить логический порядок, который будет гарантированно стабильным, но если он не работает, он выдает некоторые предупреждения UNOPT и UNOPTFLAT и просто повторяет симуляцию несколько раз, пока ничего не изменится.

По умолчанию используется 100 раундов, прежде чем он сообщает об ошибке слияния, но это может быть изменено с использованием аргумента converge-limit.

+0

Это удобно при проверке стабильности контура. Но в настольном приложении я хочу, чтобы пользователь мог создать как флеш-флоп, так и простой cpu, который вычисляет sin (x). Боюсь, я не могу проверить целую цепь 100 раз за каждый такт. – Morfidon

Смежные вопросы