English

2026-10-21 · LSSK · Упражнение со светофором Тимофея Никифорова

Обзор breadboard: Claude и Codex

У Claude лучше иллюстрации сборки и богаче учебная подача. У Codex шире штатные тесты, явно сформулирован стиль и лучше подготовлен автономный комплект. Оба варианта правильно реализуют требуемую последовательность светофора в проверенных условиях.

Что проверено

Основной источник конкурента — /home/verilog/lssk_claude/breadboard, а не старый архив сессии. Для сравнения взят текущий /home/verilog/lssk_codex/breadboard. Копии 20261019_exercise.md совпадают. Сохранены снимки обоих каталогов; манифест SHA-256 фиксирует проверенные файлы.

Проверены оба языка, весь HDL, скрипты симуляторов, цоколёвки, три схемы, графы и временные диаграммы, таблицы компонентов и соединений, примеры BGM/Tiny Tapeout, локальные ссылки, JavaScript и структура генераторов. Также изучены связанные генераторы вне каталога breadboard Claude. Исходные файлы конкурента не изменялись.

Стиль сравнивается с вашими текущими правилами, включая yuri_rules_3.txt. Видимый файл Claude yuri_rules_4.txt содержит только правила задержек и отрицательных фронтов; обзор не предполагает, что конкурент получил все последующие указания Codex. Несоответствия стилю отделены от функциональных ошибок.

Ограничения: физическая макетка, программирование ПЛИС и изготовление ASIC не проверялись. Изображения просмотрены. HTML и JavaScript проверены статически и с имитацией DOM; полноценный браузер, разрешения буфера обмена и печать не проверены. Icarus 13 отсутствует; использованы версии 12 и 14.

Полнота требуемого урока

ОбластьClaudeCodex
Структура урока15 разделов на английском и русском; одно упражнение в каждом оглавлении.То же; дополнительно две страницы правил стиля.
HDL и рисунки9 файлов HDL, 1 штатный тестбенч, 16 пар SVG/PNG. Явная схема Johnson из пяти триггеров.11 файлов HDL, 3 штатных тестбенча, 14 пар SVG/PNG. Обобщённый блок на десять состояний и отдельный граф с унитарным кодом.
Компоненты и соединенияТри микросхемы, модуль светофора, 24 M–M и 10 M–F. Цены помечены как поштучные или упаковочные. Подробный сохраняемый список соединений.Те же функции микросхем; три отдельных индикатора на 5 В, 39 M–M с проводами питания и 6 M–F. Экспорт CSV и ссылки на строки таблицы.
ИнтеграцияВсе три оболочки присутствуют. Сегменты индикатора BGM и изображение светофора на LCD.Все три оболочки; выбор обоих вариантов ядра параметрами. Огни на LED BGM, цвет всего экрана, два режима индикатора TT.
Распространение и сопровождениеПолные читаемые страницы; четыре ссылки и средства сборки вне breadboard/. В каталоге нет ZIP упражнения или README.Автономный ZIP, двуязычный README, генераторы, хеши исходников и протоколы проверок.

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

Реально воспроизведённые результаты

ПроверкаРезультатДоказательство и предел
Штатный тест ClaudePASS: 82 проверки в Icarus 12, Icarus 14 и Verilator 5.053.Icarus 12 · Icarus 14 · Verilator
Ядра Claude с расширенной эталонной проверкойPASS: 285 наблюдений, 12 циклов, 48/24/48 интервалов цветов, сброс при обоих уровнях и замыкание цикла. В тесте адаптировано только имя порта state → q.log · review bench
Отдельная проверка моделей микросхем ClaudePASS: все 256 входных комбинаций ИЛИ, 30 обычных фронтов счёта, перенос, inhibit и асинхронный сброс.log · review bench
Оболочки ClaudeКомпилируются в Icarus и Questa. Тест обзора проходит 30 состояний, обе схемы сегментов, 8 LED состояния, 120 выбранных пикселей LCD и двунаправленные выводы TT в режиме входов.протокол · тест обзора. Это не проверка всего видеокадра или платы ПЛИС.
Штатный комплект CodexВсе три теста проходят Icarus 12/14 и Verilator. Проверяются ядро, отдельные микросхемы и оба варианта интеграций.validation.json
Соединения и сгенерированные данныеПроверка выводов и проводов Claude проходит, генерируемый RTL совпадает с опубликованным. Все 9 встроенных HDL совпадают с файлами; в исходных рабочих каталогах у обоих сайтов нет битых локальных ссылок.wiring · generator · HTML audit
JavaScript списка соединенийPASS: начальный счётчик, отметка строки, восстановление, очистка, повреждённое хранилище и работа без localStorage.DOM-stub evidence · check source

Questa

Оба набора исходников компилируются Questa 2025.2 без ошибок и предупреждений в проверенных командах. После обнаружения установленной лицензии выполнена попытка симуляции. Host ID лицензии соответствует физическому адаптеру, но FlexNet возвращает пустой host ID в этой ограниченной среде. Консольный режим также не может создать сокет; пакетный режим доходит до проверки лицензии и сообщает Invalid host. Обзор не заявляет PASS симуляции Questa ни для одного проекта. Страница Claude сообщает о прежней проверке Questa; здесь её независимо воспроизвести не удалось.

Компиляция Claude · диагностика среды · протокол запуска. Скрипт Codex теперь сам находит установку и существующую лицензию и использует пакетный режим. Для обычного терминала с доступной лицензией:

cd /home/verilog/lssk_codex/breadboard/traffic_light
./scripts/run_questa.sh

Скрипт требует PASS от каждого теста и возвращает ошибку, если модель не загрузилась. Файл лицензии и его содержимое не включены в распространяемые материалы.

Конкретные проблемы и исправления

Замечания разделяют доказанные ошибки, пробелы покрытия, проблемы переносимости и неоднозначности представления. Ошибки штатной последовательности «сброс / 4 красных / 2 жёлтых / 4 зелёных» не обнаружены ни в одном представленном варианте.

F01 · средняя

Неявные единицы времени мешают переносимости трасс

Подтверждённая проблема переносимости. Ни один из девяти HDL-модулей Claude не объявляет timeunit/timeprecision. В штатном запуске Icarus завершение происходит в 445 секунд, Verilator — в 445 пикосекунд. Логический PASS одинаков, поэтому последовательность 4/2/4 не нарушена. Но физическая интерпретация времени симуляции различается в 10¹² раз. Оболочка BGM lab дополнительно наследует устаревшую timescale через config.svh.

Исправление: Добавить локальные timeunit 1ns; timeprecision 1ps; и пересоздать диаграмму с явной шкалой времени. Сохранить порядок тактовых событий.

Icarus log · Verilator log · tb.sv:11–61

F02 · средняя

Штатный тест пропускает ошибку сброса при низком такте

Подтверждённый пробел покрытия, а не ошибка исходного RTL. Мутант, принимающий сброс только при высоком clk, получает PASS: 82 checks в штатном тесте Claude. Адаптированный расширенный тест его отвергает. При этом обычный мутант с синхронным сбросом штатный тест обнаруживает: FAIL с двумя ошибками. Утверждать, что Claude совсем не проверяет асинхронный сброс, было бы неверно.

Исправление: Сохранить проверку значений перед обновлением по фронту и добавить целевые проверки сброса при обоих уровнях такта из каждого состояния. Обоснованное событие в низкой фазе разрешено правилами пользователя.

undetected mutant · extended test failure · synchronous-reset mutant

F03 · средняя

Нет сторожевого тайм-аута; сам симулятор возвращает успех при FAIL

В tb.sv Claude нет тайм-аута в тактах. Блок final печатает FAIL без $fatal: мутанты с неверным красным и синхронным сбросом возвращают код завершения симулятора 0. Штатные shell-скрипты обнаруживают это, требуя PASS, поэтому обычный запуск через них правильно завершается ошибкой. При прямом запуске или другом CI нельзя полагаться только на код процесса.

Исправление: Добавить отдельный сторожевой блок repeat (timeout_cycles) @ (posedge clk) и $fatal для ошибок. Сохранить дополнительную проверку PASS в скрипте.

tb.sv:142–198 · process exit codes

F04 · средняя

Каталог breadboard не является полным автономным пособием

Все локальные ссылки работают в полном рабочем каталоге Claude. Но оба оглавления ссылаются на ../exercises.html, а урок — на ../../getting_started_en.html или ../../getting_started_ru.html. Эти четыре ссылки выходят за breadboard/. Генераторы и исходные шаблоны тоже расположены снаружи. При копировании только требуемого каталога теряются вводная инструкция и средства пересборки.

Исправление: Включить вводные страницы и зависимости генераторов в комплект либо явно описать требуемую структуру репозитория. Codex уже распространяет автономный ZIP сайта и локальные средства пересборки.

local-link audit · site generator

F05 · средняя

Проверка соединений предполагает непрерывные шины питания

Функция node_of() Claude объединяет все положительные шины в один узел, а все земляные — в другой. Это соответствует изображённому модулю питания и плате без разрывов, но не доказывает питание удалённой 4072 на плате с разрезанными шинами. Отдельная вводная инструкция упоминает разрывы, однако список M11 и число 24 M–M не включают вариант с мостами. Codex явно добавляет мосты, но его нумерация LP/LM/RP/RM и место разрыва тоже описывают выбранную модель платы, а не универсальный стандарт.

Исправление: Перед сборкой определить реальную связность шин; дать вариант списка для разрезанных шин и скорректировать количество проводов. Это условная аппаратная проблема, а не утверждение, что показанная схема всегда неработоспособна.

bb_m11.py:178–186 · checked wire list · Codex rail bridges

F06 · средняя

Неверное утверждение о проводах SystemVerilog

Раздел 9 говорит, что провод SystemVerilog имеет только значение 0 или 1. Обычный wire с логическим типом данных четырёхзначен: 0, 1, X и Z. В этом же уроке правильно показано неизвестное состояние до сброса, поэтому фраза дополнительно запутывает. Отсутствие выводов питания означает, что модель не воспроизводит электрическое питание, а не двухзначность сигналов.

Исправление: Разделить объяснения четырёхзначной логической симуляции и электрических напряжений, токов и питания.

lesson template:240–242

F07 · средняя

Совет о тактировании ASIC сформулирован слишком категорично

Заголовок «No clock divider on a chip» и утверждение о неконтролируемой задержке делённого такта превращают полезный совет начинающим в слишком общее правило. Clock enable здесь уместен, но ASIC могут использовать специально спроектированные производные такты с заданными ограничениями. Связанные тактовые домены не становятся автоматически асинхронными. OpenSTA явно поддерживает делители через create_generated_clock.

Исправление: Сформулировать так: в этом упражнении предпочтительны один такт и enable; производные такты требуют осознанного проектирования дерева тактирования и временных ограничений.

lesson template:351–358 · OpenSTA generated-clock documentation

F08 · средняя

Сокращённые формулы Johnson верны только в достижимых состояниях

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

Исправление: Подать это как последовательностную оптимизацию с предпосылкой сброса, доказать эквивалентность в достижимых состояниях и сравнить реальные результаты синтеза. Это хорошее дополнительное упражнение.

lesson template:384–389 · 32-pattern check and synthesis counts

F09 · средняя

В упражнении с коротким циклом необоснованно указана длительность импульса

В задании Q8 → RESET сказано, что S8 существует «несколько наносекунд». Модели RTL без задержек такую длительность не устанавливают. Для TI при 5 В задана минимальная длительность внешнего сброса 260 нс; импульс обратной связи нужно оценивать по реальным задержкам и нагрузке микросхемы. Это не доказывает неработоспособность обычного сброса по дешифрированному выходу; но нельзя обещать произвольную длительность или считать идеальный RTL её временной проверкой.

Исправление: Написать «короткий переходный импульс, определяемый задержками распространения» и добавить работу с datasheet или измерение.

lesson template:367–368 · TI CD4017B, page 1

F10 · низкая

Отдельно скачанные граф и временная диаграмма требуют уточнения подписей

Граф говорит «every clock edge», хотя схема считает по положительным фронтам CLOCK при низком inhibit. Соседний текст верен. Выходы огней в вершинах показаны только цветом, а у временной диаграммы нет числовой шкалы и единицы времени. Это неоднозначности представления, а не ошибки реализованной последовательности.

Исправление: Подписать переходы clk ↑, добавить R/Y/G или текст в вершины и шкалу времени либо тактов на диаграмму. Сохранить удобную круговую компоновку.

state diagram · waveform

Схема, модели микросхем и компоненты

Назначения выводов 4017 и обоих типов ИЛИ в проверенных файлах и рисунках верны. Оба проекта используют требуемые группы ИЛИ; выбор другого свободного элемента 4071 электрически эквивалентен. У Claude жёлтый формирует K, вывод 4; у Codex — J, вывод 3. Неиспользуемые входы имеют определённые уровни, выходы не закорочены друг с другом. Подключение свободных входов CMOS к единице у Claude допустимо и не становится ошибкой из-за выбора нуля у Codex.

Пятибитный Johnson у Claude непосредственно объясняет внутреннюю идею микросхемы. Codex намеренно использует десятибитное унитарное обобщённое ядро и четырёхбитную двоичную функциональную модель микросхемы. Это разные внутренние кодирования одной проверенной внешней последовательности. Ни одна модель полностью не воспроизводит физический выход из включения питания и электрические задержки; обе требуют сброса в симуляции.

Одинаковый синтез: Yosys 0.69 + SlangТриггерыДругие отображённые ячейки
Claude · traffic_light518
Claude · traffic_light_chips518
Codex · traffic_light107
Codex · traffic_light_chips426

Все четыре ядра синтезируются и проходят check -assert. Это число обобщённых отображённых ячеек при сохранённых внешних выходах состояния/дешифратора, а не измерения площади, мощности, ресурсов ПЛИС или быстродействия. Меньшее число регистров само по себе не определяет лучший вариант. Числа и протоколы.

Общая незавершённая работа — физическая проверка

Первичные источники выводов и электрических параметров: TI CD4017B и TI CD4071B / CD4072B.

Стиль SystemVerilog и организация тестбенчей

RTL Claude в целом читаем: содержательные имена, комментарии о выводах, явные именованные подключения, always_ff для состояния и выровненные выходные формулы. Проверка по posedge намеренно читает предыдущее устойчивое состояние; это корректный подход. Неблокирующее изменение сброса избегает обычной гонки входа в active region. Произвольных задержек стимулов нет. Это достоинства.

Текущее требованиеClaudeCodex
timeunit / timeprecisionОтсутствуют во всех девяти модулях. См. F01.Есть во всех одиннадцати модулях.
wire только с непрерывным присваиванием в объявленииОбъявления wire без присваивания в тесте, соединениях микросхем и TT. Допустимый SV, но вне заданного соглашения.Выполнено последовательно.
Обычные порты-цепи и выравнивание имёнБольшинство портов использует input/output logic; TT сохраняет восемь input/output wire из шаблона. Имена в основном выровнены.Применено заданное оформление input/output и output logic.
Отступ блока четыре пробела; выравнивание присваиванийВ основном хорошо. В lab_top блок assign имеет отступ семь пробелов; часть ожидаемых значений выровнена неровно. Выравнивание продолжений и комментариев не считается функциональной ошибкой.Проверяется автоматически во всём написанном HDL.
Отдельный always-генератор тактаТакт правильно выделен в отдельный initial/forever. Точная требуемая форма с инициализацией logic и always не использована.Использует logic clk = 1'b0; always # (period / 2) clk = ~ clk;.
Задержки и negedgeТолько задержка генератора такта; нет стимулов по спаду. Соответствует видимым правилам yuri_rules_4.txt.Использует объяснённые # 1 и два обоснованных места ожидания спада для проверки низкого такта.
Тела задач / тайм-аутНет задач, которые могли бы нарушать правило; нет тайм-аута в тактах.Нет избыточного внешнего begin/end задач; во всех тестах тайм-ауты в тактах.

Подавления предупреждений конкурента называют конкретные причины (PROCASSINIT и SYNCASYNCNET), а его штатное ядро проходит здесь Verilator -Wall без выданных предупреждений. Это лучше произвольного отключения предупреждений. Три оболочки штатный скрипт не проверяет; проверки выше добавлены для обзора.

Строгое правило современных единиц времени у Codex имеет реальную цену совместимости: старый встроенный парсер локального Yosys 0.43 их отвергает. Описанный путь Slang работает, но копирование файлов в старый процесс BGM или Tiny Tapeout без смены фронтенда может закончиться ошибкой. Это ограничение интеграции, а не основание молча убрать требуемые объявления.

Схемы, обучение и представление

Claude: компактная расстановка, понятные разъёмы модулей и скруглённые трассы проводов.
Claude: компактная расстановка, понятные разъёмы модулей и скруглённые трассы проводов.
Codex: явные мосты шин и точки подключения, но длинные трассы и плотные подписи. Изображения открываются в полном разрешении.
Codex: явные мосты шин и точки подключения, но длинные трассы и плотные подписи. Изображения открываются в полном разрешении.

Сравнение рисунков основано на просмотре PNG/SVG и структуре исходников, а не на заявленной проверке браузерных скриншотов. Соответствие формальному стандарту доступности здесь не доказано ни для одного сайта.

BGM, Tiny Tapeout и воспроизводимость сборки

ПунктОценка
BGM labClaude выводит на сегменты понятный рисунок положения огня и показывает состояния на LED. При восьми LED состояния 8 и 9 не видны; усечение ожидаемо, но текст lab должен об этом сказать. Codex отображает три цвета на LED и оставляет семисегментный выход пустым. Claude лучше использует учебный индикатор.
BGM hackathonТри круглых огня Claude на LCD лучше подходят упражнению, чем заливка всего экрана Codex. Формулы окружностей содержат умножения; утверждения об их стоимости на плате требуют целевого синтеза и временного анализа. Проверенные пиксели верны; полный кадр и аппаратные ограничения не проверялись. В исходнике явно названа конфигурация Tang Nano 9K.
Tiny TapeoutОба используют правильное соответствие верхнего/среднего/нижнего сегментов и внешний такт 1 Гц. Claude намеренно оставляет двунаправленные выводы входами и не использует ena внутри оболочки; мультиплексор проекта — отдельный уровень. Само по себе это не дефект. Codex дополнительно гасит выходы при отключении, выдаёт три бита огней при разрешении и предлагает десятичный номер состояния. Это дополнительные функции, а не невыполненные требования к Claude.
Выбор ядраУ Claude для смены варианта нужно изменить имя экземпляра и добавить файлы. У Codex есть параметры CHIP_MODEL / USE_CHIP_MODEL и тесты обоих значений. Для повторяемого учебного процесса переключение Codex удобнее.
СкриптыClaude находит локальные Questa и Verilator и существующую лицензию FlexNet, проверяет наличие программ и даёт скрипт очистки. Codex первоначально не нашёл путь лицензии; теперь скрипт перенял этот подход и использует пакетный режим. Codex хранит результаты в отдельном build; Claude пишет логи/work/VCD рядом с исходниками.
Генераторы и сопровождениеОба используют общие данные соединений для рисунков и структурного HDL — это правильная организация. Claude дополнительно отвергает повторное использование отверстий и перекрытия горизонтальных трасс, строит диаграмму из VCD Icarus. Codex включает генераторы в пособие и проверяет ссылки, вставки кода и содержимое архива. Общая генерация предотвращает часть рассогласований, но общая ошибочная таблица выводов может дать согласованно неверные файлы; генератор не является независимым электрическим доказательством.

Оба набора остаются учебными примерами интеграции, а не завершёнными проектами ПЛИС или Tiny Tapeout. В обзоре компиляция выполнена с реальными общими include BGM и конфигурацией Tang Nano. Первоначально отсутствующий путь include в команде проверяющего не засчитан как ошибка конкурента. Размещение, выполнение временных ограничений, программирование платы и полный manifest Tiny Tapeout не проверены.

Что следует улучшить у Codex

Что перенять и в каком порядке

ПриоритетДействиеКритерий готовности
1Сохранить оба корректных ядра; принять расширенные тесты и явные правила Codex за общую основу. Исправить единицы времени Claude и добавить сторожевой тайм-аут.Одинаковая эталонная последовательность в Icarus/Verilator; внесённые ошибки низкофазного сброса и огней обнаруживаются; статус завершения однозначен.
2Перенять физическую компоновку и иерархию схем Claude, сохранив явные варианты шин и независимую проверку выводов.У каждого провода уникальные точки; нет плавающих входов и замыканий выходов; связность реальной платы соответствует выбранному варианту.
3Перенять временные диаграммы из VCD, сохраняемый список и копирование подсвеченного кода. Сохранить анимацию Codex.На диаграмме есть единицы и контекст сброса; прогресс одинаков в обоих языках; клавиатура, мобильный вид и печать проверены браузером.
4Добавить сегменты положения огней и LCD-рисунок Claude как вариант BGM. Сохранить простые варианты с малыми ресурсами.Оба ядра проходят тесты оболочек; выбранная плата синтезируется и выполняет временные ограничения.
5Опубликовать полный двуязычный архив с вводными материалами, исходниками, генераторами, происхождением компонентов и актуальными проверками.После распаковки нет битых локальных ссылок, код и рисунки согласованы, команды пересборки и запуска описаны.

Уже выполнено в ходе обзора: поиск локальных Questa/лицензии, пакетный запуск и исправление неверного статуса лицензии в материалах Codex. Остальные пункты — рекомендации; схемы и страницы конкурента не переписывались.

Доказательства, воспроизводимость и границы источников

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