Что проверено
Основной источник конкурента — /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.
Реально воспроизведённые результаты
| Проверка | Результат | Доказательство и предел |
| Штатный тест Claude | PASS: 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 |
| Отдельная проверка моделей микросхем Claude | PASS: все 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_light | 5 | 18 |
| Claude · traffic_light_chips | 5 | 18 |
| Codex · traffic_light | 10 | 7 |
| Codex · traffic_light_chips | 4 | 26 |
Все четыре ядра синтезируются и проходят check -assert. Это число обобщённых отображённых ячеек при сохранённых внешних выходах состояния/дешифратора, а не измерения площади, мощности, ресурсов ПЛИС или быстродействия. Меньшее число регистров само по себе не определяет лучший вариант. Числа и протоколы.
Общая незавершённая работа — физическая проверка
- Выбранные индикаторы имеют ограничение тока, но здесь не измерены ток нагрузки, выходное напряжение и яркость. Совместимость с 5 В сама по себе не задаёт допустимую нагрузку выхода 4000B. Codex оговаривает это яснее; Claude увереннее описывает прямое подключение.
- Ориентироваться на надписи реального модуля и проверить ноль при отпущенной кнопке и единицу при нажатой. Голая кнопка или обычный LED не заменяют автоматически указанный модуль или индикатор с ограничением тока.
- Ни одна проверка не моделирует переходные процессы питания, дребезг, аналоговые задержки и recovery/removal сброса. Из этих пробелов не выводится обязательность новых конденсаторов или буферов. При нестабильной работе собранной схемы сначала установить измеряемую причину, затем менять комплект.
- Цены — исторический снимок 14 октября 2026 года, а не действующее предложение покупки. Claude яснее показывает цены упаковок и включает входной кабель 9 В. Codex лучше связывает позиции со строками LSSK и экспортирует CSV, но оставляет совместимый входной кабель/источник вне показанного количества проводов.
Первичные источники выводов и электрических параметров: TI CD4017B и TI CD4071B / CD4072B.
Стиль SystemVerilog и организация тестбенчей
RTL Claude в целом читаем: содержательные имена, комментарии о выводах, явные именованные подключения, always_ff для состояния и выровненные выходные формулы. Проверка по posedge намеренно читает предыдущее устойчивое состояние; это корректный подход. Неблокирующее изменение сброса избегает обычной гонки входа в active region. Произвольных задержек стимулов нет. Это достоинства.
| Текущее требование | Claude | Codex |
| 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 без смены фронтенда может закончиться ошибкой. Это ограничение интеграции, а не основание молча убрать требуемые объявления.