agentee

Моделирование

Логическое моделирование

Моделирование цифровых частей схемы прямо из её списка соединений: модели серии 74, стимулы, ассерции, проверки setup и hold и вывод VCD.

Логическая симуляция запускает цифровые части схемы напрямую из её списка соединений. Топология платы не нужна, поэтому она подходит на ранней стадии проектирования: проверьте, что счётчик считает, дешифратор дешифрирует и шина с открытым стоком подтверждает, до того как что-либо размещено.

Начните с одного

agentee new sim counter --kind logic

Стартовый набор содержит тактовый сигнал, сброс и тактированное утверждение, которые нужно переименовать в ваши цепи. В примере логики два готовых. Это counter, 74HC161, считающий тактовый сигнал 10 МГц в 74HC138:

name = "counter"
kind = "logic"
schematic = "counter"
duration = "2us"
ignore = ["J1", "J2"]
record = ["CLK", "RST_N", "Q3", "Q2", "Q1", "Q0", "TC"]

[[stimulus]]
net = "CLK"
clock = { period = "100ns", duty = 0.5, phase = "50ns" }

[[stimulus]]
net = "RST_N"
steps = [["0ns", 0], ["120ns", 1]]

[[expect]]
nets = ["Q3", "Q2", "Q1", "Q0"]
clock = "CLK"
edge = "rising"
sequence = [0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 2]

[[expect]]
nets = ["Y7_N", "Y6_N", "Y5_N", "Y4_N", "Y3_N", "Y2_N", "Y1_N", "Y0_N"]
at = "600ns"
value = "11011111"

[[expect]]
net = "TC"
at = "1600ns"
value = 1
agentee sim counter
agentee show sim:counter
agentee render sim:counter -o counter.png
assertions passed   6 of 6
assertions failed   0
contention          0   strong drivers disagreeing
timing violations   0   setup, hold, recovery, removal
cells               5   18 nets
events              130 to 2us

Запуск пишет результат и осциллограмму VCD рядом со спецификацией, которую открывает любой просмотрщик осциллограмм.

Осциллограммы симуляции счётчика

Стимулы

  • clock низкий до phase, затем высокий в течение duty каждого period.
  • steps это пары [time, level] в порядке времени, с уровнями 0, 1, "x" и "z".
  • constant удерживает цепь на одном уровне.

Стимул управляет своей цепью как сильный источник; на цепи питания он заменяет шину.

Утверждения

  • at читает цепь или шину один раз, когда всё в это время установилось.
  • sequence читает цепи сразу перед каждым чистым фронтом тактового сигнала, так что зарегистрированный выход виден таким, каким он был, когда пришёл фронт. from пропускает фронты до него.
  • Значение шины это число или строка из 0, 1, x, z и - для любого, старший бит первым.

Проверка перечисляет каждое упавшее утверждение, конфликт или нарушение тайминга как ошибку симуляции, пока результат актуален.

Что становится ячейкой

  • Цепи питания и символы питания это постоянные источники: имена GND, VSS, VEE и 0V это 0, любое другое это 1.
  • Резисторы 0 Ом, перемычки и соединения цепей объединяют свои цепи. Резистор от шины к цепи это подтяжка вверх или вниз, слабый источник.
  • Конденсаторы, дроссели, диоды, светодиоды, тестовые точки, кварцевые резонаторы и тому подобное не учитываются.
  • Компоненты, у которых значение или имя УГО содержит номер серии 74, получают встроенную модель по номеру вывода: 74HC00, SN74LVC1G08DBVR и CD74HCT04E все подходят. Библиотека покрывает типовые логические вентили, триггеры, защелки, буферы, дешифратор 138, счетчики 161 и 163, сдвиговые регистры 164 и 595, а также одно- и двухвентильные LVC-компоненты. Компоненты с открытым стоком тянут линию вниз или отпускают её.
  • Компонент, у которого значение или УГО называется примитивом (NAND, DFF, MUX2, ...), сопоставляет свои выводы по именам.
  • Любой другой компонент вызывает ошибку с указанием его имени, если он не указан в ignore и не имеет модели [[parts]].

Буквы семейства задают временные характеристики: HC, задержка 10 нс и время установки 15 нс; LVC, 4 нс и 3 нс; LS, 15 нс и 20 нс. Время восстановления и удаления взято из даташитов TI и Nexperia. Полная таблица и её источники приведены в справочнике по логике.

Свои модели

[[parts]]
ref = "U7"
primitive = "nand"
pins = { A = "1", B = "2", Y = "3" }
delay = "3ns"

[[parts]]
ref = "U9"
inputs = ["1", "2", "3"]
outputs = ["4"]
truth = ["000 1", "1-- 0", "01- z"]

Компоненту можно назначить примитив с сопоставлением выводов, схему выводов из библиотеки через primitive = "74HC244" или таблицу истинности, где побеждает первая подходящая строка.

Нарушения временных характеристик

Триггеры, счетчики и сдвиговые регистры проверяют время установки и удержания на тактированных входах, а время восстановления и удаления на асинхронных сбросах. При нарушении ячейка переходит в состояние x, как в моделях Verilog, пока её снова не тактируют или не сбросят чисто. on_violation = "keep" сообщает о нарушении и сохраняет значение, полученное при тактировании.

Движок поддерживает четыре уровня: 0, 1, x и z. Сильные драйверы, которые не согласны, дают x и конфликт. Подтяжки учитываются только тогда, когда нет включенного сильного драйвера. Вентиль переходит в x только тогда, когда неизвестный вход имеет значение, поэтому 0 на входе И остается 0.

В интерфейсе

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

[[interfaces.measure]]
sim = "i2c-bus"

Улучшить это руководство · Markdown для агентов