Схема, нарисованная один раз
Цифровые схемы повторяются: полусумматор входит в каждый полный сумматор, триггер — в каждый регистр, один и тот же делитель — в каждую ступень счётчика. Рисовать каждую копию вентиль за вентилем долго, а ошибку в одной из копий трудно найти. Блок позволяет нарисовать схему один раз и ставить её сколько нужно.
Как сделать блок
Нарисуйте схему на слое и дайте имена её переключателям и лампам: щёлкните по маленькой метке под INPUT или OUTPUT и введите имя. Эти имена станут выводами блока. Затем откройте вкладку «Блоки» и нажмите «Сделать блок». В окне видны найденные выводы, упорядоченные сверху вниз так, как они стоят на холсте, поэтому порядок на блоке повторяет ваш чертёж.
Блок появится на вкладке «Блоки». Щёлкните по нему или перетащите на холст сколько угодно раз и соединяйте, как любой другой элемент.
- Блоку нужен хотя бы один OUTPUT.
- Внутри не может быть CLOCK: поставьте внутри INPUT и подайте такт в блок снаружи.
- Заметки, рамки, VIA и метки цепей со слоя не попадают в блок.
Как изменить блок
Дважды щёлкните по блоку или нажмите маленький карандаш под его именем, и схема внутри откроется на холсте вместо вашей. Правьте её как любую схему и нажмите «Готово»: все копии блока, на всех четырёх слоях и в библиотеке, получат новое определение. Нажмите «Отменить», и ничего не изменится.
Выводы следуют за своими именами. Переименуйте вывод, и его провод останется на месте; добавьте вывод, и остальные сдвинутся вниз вместе со своими проводами; удалите вывод, и пропадёт только его провод. Пока определение открыто, сохранение файла схемы отключено, чтобы недоправленный блок не попал в файл под видом вашей схемы.
У каждой копии своя память
Поставьте делитель дважды и соедините копии цепочкой, и получится счётчик на четыре, два триггера которого считают независимо. Это не само собой разумеющееся. Симулятор, который помнит каждый триггер под его голым именем, увидел бы в двух блоках один и тот же триггер, подключённый к разным выводам, и в обоих навсегда держались бы одинаковые данные. Boolflow даёт каждому элементу внутри блока собственный путь, например U1/ff и U2/ff, поэтому у каждой копии своё состояние.
Внутри блок перед запуском симуляции разворачивается в схему, которую он обозначает, и каждый внутренний элемент переименовывается по блоку, в котором стоит. Поэтому блоки могут содержать другие блоки: разворачивание просто повторяется.
Что блок значит для остальных инструментов
Для остального редактора блок не чёрный ящик. Осциллограмма рисует триггеры внутри него с именем блока. Тест-кейсы могут подавать сигналы и читать результат через выводы блока. Таблица истинности и экспорт в Verilog, VHDL и C++ работают со схемой, в которой каждый блок развёрнут, поэтому в экспортируемом коде есть логика внутри, а порты — те, что вы назвали снаружи.
Сохранение и обмен
Файл схемы несёт определение каждого блока, который в ней использован, поэтому открывается на любом компьютере без вашей библиотеки блоков. Сама библиотека, список на вкладке «Блоки», хранится в вашем браузере: сделанный блок будет там и в следующий раз, а удаление из библиотеки не трогает копии, уже стоящие в схеме.
Попробуйте сами
Откройте пример с делителем: один блок DIV2, поставленный дважды. Нажмите «Осциллограмма» и следите за обоими выходами Q. Затем нарисуйте свой полусумматор с входами A и B и выходами S и C, сделайте из него блок и соедините два таких блока и вентиль OR в полный сумматор.