Сравнение двух уроков про светофор
Вы дали Codex и мне одно и то же задание: файл 20261019_exercise.md, побайтно одинаковый в
обоих каталогах. В нём нужен сайт breadboard/, первый урок которого — светофор на 4017 и элементах ИЛИ,
в 15 разделах, на английском и русском. Здесь разобрано всё, что лежит в
lssk_codex/breadboard, и сравнено с моим уроком
breadboard/m11_traffic_light.
- скрипты Codex я запускал сам, на копиях: Icarus 12, Icarus 14, Verilator 5.053, Questa 2025.2 с лицензией и Yosys 0.69;
- в обе схемы я внёс одни и те же 12 ошибок;
- свои слабые места я привожу рядом со слабыми местами Codex.
Codex продолжал править файлы, пока я работал. README, страницы и заметки о Questa изменились в 13:21–13:22, а HDL не
менялся с 07:30. Разбирается снимок, сделанный 21 октября в 13:27 PDT. В lssk_codex я ничего не менял.
Правила у нас были разные. Codex получил yuri_rules_3.txt с восемью правилами. Я получил
yuri_rules_4.txt: в нём два из этих правил и фраза «Asynchronous reset is also OK». В разделе
о стиле оба сайта проверены по всем правилам.
timeunit в каждом RTL-файле: Yosys 0.69 read_verilog -sv падает на строке 15. Мой код синтезируется.# 1, 2 × negedgeВ тестбенчах Codex. У меня нет ни того, ни другого: задержка есть только в генераторе такта.Итог
- Оба сайта полные и работают. В каждом есть все 15 разделов на английском и русском, три схемы, две эквивалентные реализации, модели микросхем, скрипты для трёх симуляторов и обёртки для BGM и Tiny Tapeout. Сайт Codex аккуратно оформлен, тщательно перепроверен и честно говорит о том, что не тестировалось.
- Проверка у Codex шире, и это главное, что стоит у него взять. У него есть модульный тест моделей микросхем (все 256 комбинаций входов микросхем ИЛИ, а также CARRY и CLOCK INHIBIT у 4017) и тестбенч, который моделирует все три обёртки с обеими реализациями. Эти тестбенчи ловят три ошибки, которые мой пропускает.
- Самая серьёзная техническая проблема —
timeunit 1ns; timeprecision 1ps;в каждом синтезируемом файле. Стандартный парсер Yosys отвергает эти объявления и в самой новой версии на этой машине (0.69), а не только в «локальном Yosys 0.43», на который ссылается Codex. Маршрут синтеза BGM на Yosys и сборка Tiny Tapeout не пройдут без перехода на Slang. В самом BGMtimeunitвстречается только в тестбенчах (16 файлов, все —tb.sv). - Тестбенчи соблюдают букву rules_3, но не следуют примерам BGM. Они считывают сигналы через
# 1после фронта и подают входы блокирующими присваиваниями в середине такта. Из-за этого понадобились 19 задержек# 1и два ожидания спада (negedge).- Ожидания спада не нужны. Без них основной тестбенч Codex перестаёт ловить схему, которая считает по спаду такта, а проверка по положительному фронту в стиле BGM ловит её без всякого negedge.
- Codex написал, что отступать от стиля не требуется, и не создал
need_to_deviate_from_style.html.
- Схема 1 не показывает того, что требовало задание. В задании нужны триггеры и логические элементы, а Codex рисует регистр состояния чёрным ящиком.
- На страницы для учеников попали рабочие заметки. Примеры: замечание об опечатке в задании, сбой лицензии в песочнице Codex, загрузка страницы, завершившаяся тайм-аутом. Кроме того, Тимофей упоминается слишком часто, а в подвалах страниц написано «Идея светофора: Тимофей Никифоров».
- Мои собственные пробелы — всё это у Codex есть:
- нет модульного теста моделей микросхем;
- обёртки ни разу не моделировались;
- нет скрипта проверки синтеза;
- в
tb.svне задана единица времени; - голые объявления
wire; - нет файлов CSV и ZIP для скачивания.
Что говорят инструменты
| Проверка | Codex | Мой урок |
|---|---|---|
| Icarus 12.0 | PASS: все три тестбенча, 285 проверок в основном | PASS: 82 проверки |
| Icarus 14.0 devel | PASS: все три | PASS |
| Verilator 5.053 так, как его запускает скрипт | PASS: все три, с --timing и без -Wall; скрипт отключает PINCONNECTEMPTY и DECLFILENAME | PASS с -Wall |
Verilator -Wall в режиме lint |
|
0 предупреждений. Неиспользуемые выходы подключены к именованным цепям, а у двух строк lint_off есть комментарий. |
| Questa 2025.2 с лицензией | PASS: все три тестбенча, 0 ошибок и 0 предупреждений.
Я запустил из своей оболочки run_questa.sh Codex в версии 13:21. На странице ученикам по-прежнему сказано,
что запуск здесь невозможен. |
PASS: 0 ошибок, 0 предупреждений |
Yosys 0.69 read_verilog -sv, как в маршруте синтеза BGM | Ошибка разбора:
rtl/traffic_light.sv:15: ERROR: syntax error, unexpected TOK_TIME_SCALE. Yosys 0.43 выдаёт ту же ошибку. |
OK:
|
| Yosys 0.69 + Slang | OK: обе реализации; верхний модуль TT — 81 ячейка | Не нужен |
| Проверка проводки | Статические проверки:
|
Статические проверки:
RRRRYYGGGG. |
| Проверка ссылок | 178 локальных ссылок проверены его validate.py; я битых не нашёл | Ссылки и якоря в порядке |
Ошибки и неверные утверждения на сайте Codex
Упорядочены по тому, насколько они помешали бы ученику или учителю. В столбце «Доказательство» — то, что я сегодня запускал или читал. Цитаты со страниц Codex взяты из его русской версии.
| № | Важность | Что | Доказательство | Как исправить |
|---|---|---|---|---|
| 1 | высокая | timeunit/timeprecision во всех 11 HDL-файлах, включая синтезируемые. Стандартный
парсер Yosys не может разобрать project.v для TT, обе реализации, модели микросхем и обе обёртки BGM.
Codex пишет: «Встроенный парсер локального Yosys 0.43 не принимает объявления timeunit». Самая новая версия Yosys на
этой машине падает точно так же. |
|
Оставить timeunit только в тестбенчах, как в BGM. Пример в самом правиле был тестбенчем. |
| 2 | средняя | На схеме 1 нет ни триггеров, ни логических элементов для состояния. На ней блок «Циклический автомат» с десятью состояниями, который питает три элемента ИЛИ. Задание требует «gates, flip-flop and other elements in generic fashion». Общая схема на RTL — кольцо из десяти триггеров, но ни на одном рисунке этого кольца нет. | images/logic_ru.svg, подпись: «блок задаёт поведение, а не кодирование памяти» |
Нарисовать регистр: либо десять триггеров в кольце, либо, как у меня, пятиразрядный счётчик Джонсона из самой 4017 с дешифратором из десяти элементов. |
| 3 | средняя | Два ожидания спада названы необходимыми, хотя они не нужны. В руководстве по стилю сказано: «Проверка сброса
только по posedge не доказывала бы это поведение».
need_to_deviate_from_style.html не создан. В validation.json записано
"style_deviation_required": false. |
Охота за ошибками: если удалить блок с negedge, основной тестбенч Codex пропускает «счёт по спаду». Моя проверка по положительному фронту эту ошибку ловит. | Проверять в always @ (posedge clk), как в BGM. Такая проверка видит значения только что закончившегося такта. |
| 4 | средняя | Тимофей упоминается слишком часто и как автор идеи.
|
Видимый текст: заголовок вкладки, h1, оглавление, заголовок раздела 1, текст раздела 1, подвал. На странице со списком ещё 2 упоминания. | Убрать упоминание в подвале и имя в названиях модулей и путях. Оставить одно фактическое упоминание того, где описана схема. |
| 5 | ниже средней | Статус Questa на странице неверен для этой машины. В разделе 11 сказано: «Здесь FlexNet не видит host ID, и Questa сообщает Invalid host». Это верно только внутри песочницы Codex. В README написано то же самое. | Обновлённый run_questa.sh самого Codex, запущенный из обычной оболочки, проходит все три тестбенча |
Сообщить реальный результат или не писать о песочнице на страницах для учеников. |
| 6 | ниже средней | Урок расходится с собственным списком упражнений и наборами Codex. В exercises.html упражнение
называется P11 и использует модуль светофора на 5 В (строка 64 листа LSSK). В уроке оно называется
BB-FSM-01, и в нём три отдельных светодиода на 5 В (строки 46–48). В самой таблице про эти три светодиода
сказано «not really needed». |
lssk_codex/exercises.html, запись P11 |
Взять номер из списка и его модуль светофора. Один провод GND модуля заменяет три перемычки катодов. |
| 7 | низкая | Модуль питания нарисован вне платы, с «двумя проводами питания» к LP01 и LM01. Деталь из строки 56 — модуль питания для макетной платы, который вставляется прямо в шины. Значит, два провода лишние, и картинка не совпадает с руководством «Как начать». | Таблица деталей Codex, текст под схемой 3 и строка 56 в сохранённых им строках таблицы | Вставить модуль в шины на краю платы. |
| 8 | низкая | Координаты на шинах вроде LP25 и RM08 выдуманы. На настоящих платах у шин нет номеров отверстий. Разрыв между отверстиями 25 и 26 — допущение, и текст это признаёт. | Раздел 7 и jumpers.csv |
Указывать места на шинах по напечатанным номерам столбиков, как в моём списке проверки: «верхняя шина +, столбик 12». |
| 9 | низкая | Неверная причина отказа от `default_nettype none. В руководстве сказано: «Questa отвергает их
неявные типы цепей». Порты без типа цепи обязан отвергать любой инструмент — для этого директива и нужна.
Кроме того, project.v теряет `default_nettype none и заголовок с input wire из
шаблона TT, который цитировался в задании. |
Руководство по стилю, §16, и integration/tinytapeout/project.v |
Сохранить заголовок шаблона TT в исходном виде. |
| 10 | низкая | Проверка в Verilator слабее, чем кажется. Скрипт запускает его без -Wall и отключает два
предупреждения, а на странице написано только «Все три тестбенча проходят». |
См. «Что говорят инструменты» выше | Подключать неиспользуемые выходы к именованным цепям и запускать с -Wall. |
Спорные проектные решения
- Общая схема — кольцо из десяти триггеров с унитарным кодом (one-hot). Кольцо — законная идиома RTL. Но внутри 4017 пять триггеров, счётчик Джонсона, и урок упускает случай показать, что внутри микросхемы. Кроме того, кольцо не восстанавливается само из неверного состояния. Модель 4017 у Codex — двоичный счётчик, так что все три кодирования в уроке разные: унитарное в RTL, двоичное в модели и код Джонсона в микросхеме.
- Тестбенчи останавливаются на первом расхождении через
$fatal, не печатают трассу по тактам и не подводят итог вfinal. Ученик видит либо одну строку PASS, либо одно сообщение об ошибке. Примеры BGM считают ошибки и подводят итог вfinal; мой тестбенч ещё и печатает таблицу, по строке на такт. - Много оговорок в тексте для учеников. Примеры: «Физическая схема пока не проверялась», «это не HDL-симулятор и не электрическая модель», «Модели не проверяют ток LED, качество питания, метастабильность или электрические ограничения импульсов». Они честные, но им место в README, а не в уроке для пятнадцатилетних.
- В ZIP-архив (2,2 МБ) попал каталог
research/: 33 журнала, записи в JSON и копия вашего файла правил. - Выходы TT стробируются сигналом
ena. Вреда нет, но и смысла тоже: в документации Tiny Tapeout сказано, чтоenaможно игнорировать. - Два параметра обёрток,
CHIP_MODELиUSE_CHIP_MODEL, выбирают реализацию черезgenerate if. Это нормально, но в двух обёртках параметр называется по-разному.
Стиль тестбенчей и HDL по вашим правилам
Правила с пометкой только rules_3 получил Codex, а я — нет. Я всё равно проверяю по ним и свой код, потому что вы, возможно, захотите применять их к обоим сайтам.
| Правило | Codex | Мой урок |
|---|---|---|
Никаких задержек # без необходимости оба |
19 мест с # 1: 9 в tb_cmos, 6 в tb_integrations, 4 в
tb_traffic_light. Некоторые стоят в задачах, которые выполняются сотни раз. |
Только # 5 в генераторе такта |
| Никакого negedge без крайней нужды оба | 2 места, оба можно убрать (пункт 3) | Нет |
| Следовать примерам BGM оба | Нет проверки в always @ (posedge clk), нет was_reset, нет final.
Входы подаются блокирующими присваиваниями в середине такта; <= нет нигде. |
Проверка по положительному фронту, was_reset, итог в final. Входы подаются через
<= после @ (posedge clk). |
Отступления описывать в need_to_deviate_from_style.html оба |
Не создан. Исключения объяснены вместо этого в руководстве по стилю. | Отступлений нет |
Новый синтаксис времени SystemVerilog вместо `timescale только rules_3 |
Сделано, но в каждом файле, и это ломает синтез (пункт 1) | Единица времени не задана вовсе, так что она зависит от симулятора: Verilator сообщает
$finish at 445ps, а Icarus использует свою единицу по умолчанию. Исправляется добавлением
timeunit только в tb.sv. |
wire только в виде wire a = …; только rules_3 |
Соблюдено | Не соблюдено в трёх местах:
|
Выравнивать = только rules_3 | В основном | Да |
Такт в отдельном always # (period / 2) только rules_3 |
Да. Verilator -Wall выдаёт на это PROCASSINIT. |
У такта свой блок initial … forever, как в примерах BGM, но не в этой точной форме. |
Задачи без begin/end в духе Verilog-95 только rules_3 | Да | Задач нет |
| Тайм-ауты в тактах только rules_3 | 500, 500 и 200 тактов | Сторожевого таймера нет. Длина прогона фиксирована, поэтому он не зависнет, но счётчик тактов обошёлся бы в три строки. |
Руководство по стилю у Codex (22 правила, на
английском и русском, с копиями в Markdown) — хорошая идея, и в нём записаны коммиты исходных репозиториев, на которые
оно ссылается. Три его правила противоречат сказанному выше: §17 требует timeunit везде, §16 даёт неверную
причину для default_nettype, а раздел «Почему остаются отдельные # 1 и negedge» называет ожидания спада
необходимыми.
Охота за ошибками: одни и те же 12 ошибок в обоих проектах
Каждая ошибка вносилась в свежую копию, и копия запускалась в Icarus 12. «Поймана» значит, что тестбенч
не напечатал PASS. Для Codex «основной без negedge» — это tb_traffic_light.sv с удалённым блоком проверки
при низком уровне такта.
| Ошибка | Codex tb_cmos | Codex основной | Codex integrations | Codex основной без negedge | Мой |
|---|---|---|---|---|---|
| Без ошибки (контроль) | pass | pass | pass | pass | pass |
| Общая схема считает по спаду такта | пропущена | поймана | пропущена | пропущена | поймана |
| Общая схема: синхронный сброс | пропущена | поймана | поймана | поймана | поймана |
| Общая схема: сброс в состояние 1 | пропущена | поймана | поймана | поймана | поймана |
| Общая схема: зелёный не горит в состоянии 6 | пропущена | поймана | поймана | поймана | поймана |
| Микросхемы: вход ИЛИ красного на Q4 вместо Q3 | пропущена | поймана | поймана | поймана | поймана |
| Микросхемы: вход ИЛИ зелёного оставлен на GND | пропущена | поймана | поймана | поймана | поймана |
| Модель 4017: синхронный сброс | поймана | поймана | поймана | поймана | поймана |
| Модель 4017 считает по спаду | поймана | поймана | пропущена | пропущена | поймана |
| Модель 4017 игнорирует CLOCK INHIBIT | поймана | пропущена | пропущена | пропущена | пропущена |
| Модель 4017: CARRY равен 1 при счёте 0–5 | поймана | пропущена | пропущена | пропущена | пропущена |
| Элемент J в 4071 работает как И (жёлтый у Codex; у меня не используется) | поймана | поймана | поймана | поймана | пропущена |
| Элемент K в 4071 работает как И (жёлтый у меня; у Codex не используется) | поймана | пропущена | пропущена | пропущена | поймана |
- Codex: 12 из 12 тремя тестбенчами в 514 строк. Мой: 9 из 12 одним тестбенчем в 198 строк. Три пропущенные мной ошибки находятся в тех частях микросхем, которые моя схема не использует. Поймать их может только модульный тест каждой модели микросхемы, а у Codex он есть.
- Вопрос о negedge. Без блока с negedge основной тестбенч Codex пропускает «счёт по спаду» и в общей схеме, и в
модели 4017. Мой тестбенч не использует ни negedge, ни
# 1и ловит обе ошибки. Он считывает сигналы по положительному фронту и поэтому, как и триггер, видит только что закончившийся такт.
Оформление и язык
Что удалось на сайте Codex
- Чистая вёрстка: тёмная шапка с тремя числами (4/2/4, 3 микросхемы, 10 состояний), закреплённое оглавление и каждый раздел в своей карточке. Есть стили для печати.
- Каждый рисунок — файл SVG со ссылками на SVG и PNG и с альтернативным текстом.
- Обе страницы задают
langиhreflang, и языковые версии ссылаются друг на друга. - Семь аккуратных рисунков. На графе состояний выходы автомата Мура вписаны в вершины, а второй граф показывает унитарные коды. Цоколёвки понятны.
- Таблица деталей ведёт на точную строку таблицы LSSK, например
range=LSSK!A37:Q37, и к ней приложены файлы CSV с деталями и перемычками. - Небольшой пошаговый просмотр на JavaScript (пуск на 1 Гц, шаг, сброс) показывает десять состояний и огни. Он работает без сети.
- Таблица неисправностей и задания «что попробовать дальше». Одно полезное замечание: в источнике «выходы 1–4, 5–6, 7–10» нумеруются с единицы, а в техническом описании — Q0–Q9.
Что не удалось
- На страницах для учеников оказались заметки, предназначенные вам:
- «в „hackaton_top“ из задания пропущена h» — это ещё и комментарий внутри
hackathon_top.sv; - «Во время обновления Google-таблица не открывалась»;
- «Требуемая цель совместимости — Icarus 13; именно эта версия здесь не установлена»;
- история про host ID и FlexNet;
- «загрузка завершилась тайм-аутом; технические выводы на неё не опираются»;
- «использованы цитата из задания и сохранённый текст».
- «в „hackaton_top“ из задания пропущена h» — это ещё и комментарий внутри
- Рисунок макетной платы трудно читать. Десять сигнальных проводов выходят за плату и огибают её слева. Подписи закрывают номера строк и выводов, а модули такта и сброса не нарисованы. Чтобы собрать схему, ученику нужна таблица по отверстиям, а она свёрнута.
- Временная диаграмма нарисована вручную, а не взята из моделирования. На ней нет сигнала сброса. Такт в момент t = 0 начинается с единицы, поэтому непонятно, какой фронт первым продвигает счёт.
- У кода нет подсветки синтаксиса, и он свёрнут. Тёмной темы нет.
- Называть статью на Habr «курсом Юрия Панчула» и помещать её под заголовком «Курс и упражнение со светофором» — расплывчато. Читателю помог бы номер урока, 1.7.
Русская страница
Перевод полный и раздел за разделом совпадает с английским. Проблемы — в терминологии и нескольких кальках:
- Везде «микросхемы CMOS»; слово «КМОП» на странице не встречается ни разу.
- «Сброс асинхронный, активный высокий» — калька с «active high». Несколькими строками ниже сказано «активен единицей», так что формулировка ещё и непоследовательна.
- В «Двухвходовый ИЛИ даёт 1» не хватает существительного: «двухвходовый элемент ИЛИ».
- «Даташит» — жаргон для школьного текста. Лучше «техническое описание (datasheet)».
- «Сброс выбирает S0» — калька. Лучше «сброс переводит автомат в S0».
- «Выемкой вверх» понятно, но для выемки на корпусе DIP обычно говорят «ключом вверх».
Что перенять
Из урока Codex в мой
Я пока ничего не менял. Скажите, что из этого сделать.
- Модульный тестбенч для моделей микросхем в стиле posedge: все комбинации входов ИЛИ на всех выводах, а также CARRY и CLOCK INHIBIT у 4017. CLOCK INHIBIT можно проверить, подавая CLOCK как данные по такту тестбенча. Это закрывает три ошибки, которые я пропускаю.
- Моделирование обёрток (
lab_top,hackathon_top,project.v) с обеими реализациями. Свои я ни разу не моделировал. - Скрипт проверки синтеза: Yosys
read_verilog -sv; synth; check -assertна стандартном парсере. - Ссылки с деталей на строки таблицы LSSK, с сохранением моих цен.
- Файлы CSV с деталями и проводами и ZIP-архив упражнения без журналов сборки.
- Замечание о нумерации с единицы («выходы 1–4» — это Q0–Q3).
- Таблица неисправностей: для каждого признака — что проверить.
- Пункты rules_3, если вы хотите применить их и к моему коду:
timeunit 1ns; timeprecision 1ps;только вtb.sv;logicдля выходов проверяемых модулей и неиспользуемых цепей;- сторожевой таймер, считающий такты.
- По желанию: небольшой пошаговый просмотр состояний.
Из моего урока в урок Codex
- Схема 1 с настоящими триггерами и логическими элементами. Счётчик Джонсона с дешифратором — это и есть содержимое 4017.
- Рисунок макетной платы, похожий на настоящую плату, с модулями на ней, и список проверки с флажками.
- Временная диаграмма из VCD-файла моделирования, чтобы рисунок и тестбенч не могли разойтись.
- Проверка по положительному фронту с
was_resetиfinal, которая убирает все задержки# 1и ожидания спада. - RTL, который принимает стандартный парсер Yosys, чтобы маршрут синтеза BGM и Tiny Tapeout работали без Slang.
- Модуль светофора из набора и цены из таблицы LSSK.
- Чистый прогон с
-Wall, подсветка синтаксиса, кнопки копирования и тёмная тема.
Задание по пунктам
| Пункт задания | Codex | Мой урок |
|---|---|---|
| 1 · Номер, название, зачем это нужно | BB-FSM-01 — новый номер, а не P11 из его собственного списка. Хорошая мотивация и предварительные требования. | M11, номер из exercises.html |
| 2 · Главный элемент, обозначения, таблица истинности, временная диаграмма | Граф автомата, таблицы истинности ИЛИ, временная диаграмма от руки, пошаговый просмотр | Объяснение 4017 и временная диаграмма из моделирования |
| 3 · Детали | Строки таблицы LSSK с прямыми ссылками и CSV; без цен; три отдельных светодиода; 37 + 2 + 6 проводов | Цены и поставщики; модуль светофора; 24 + 10 проводов; без CSV |
| 4 · Микросхемы, выводы, полярность | Три таблицы выводов и рисунок цоколёвок. Подробность про CLOCK INHIBIT со ссылкой на Nexperia. | Цоколёвка и таблица для каждой микросхемы |
| 5 · Схема 1: триггеры и логические элементы | Чёрный ящик и три ИЛИ | 5 триггеров, 10 элементов И и 3 ИЛИ |
| 6 · Схема 2: соединения микросхем | Аккуратная блок-схема на уровне выводов | Схема на уровне микросхем |
| 7 · Схема 3: макетная плата | Карта отверстий со всеми 37 перемычками; плотная и абстрактная; CSV и таблица точные | Рисунок платы с модулями, шаги сборки и список проверки с флажками |
| 8 · Общая схема на SystemVerilog | Кольцо из десяти триггеров с унитарным кодом | Счётчик Джонсона с дешифратором, как на схеме 1 и в 4017 |
| 9 · Модели микросхем | Порты названы по выводам (p14_clock); помечены как синтезируемые | Имена из технического описания, номер вывода в комментарии; помечены как синтезируемые |
| 10 · SystemVerilog: схема из микросхем | Сгенерирована из базы выводов и цепей | Сгенерирована из проверенного списка проводов |
| 11 · Тестбенч для Icarus, Questa и Verilator | Три тестбенча; скрипты берут пути к инструментам из переменных окружения. На странице сказано, что Questa не запускается, хотя она запускается. | Один тестбенч, три скрипта запуска и скрипт очистки; все три симулятора работают |
12 · lab_top в BGM | Полный интерфейс, светодиоды и цвет на LCD, сброс на key[0], скрипт размещения в BGM | Светодиоды показывают бегущее состояние, семисегментный индикатор — огонь |
13 · hackathon_top в BGM | Заливает LCD текущим цветом | Рисует светофор на LCD |
14 · project.v для Tiny Tapeout | Использует clock_hz: 1 без делителя. DIP-переключатель выбирает полоски или цифру состояния, огни выведены ещё и на uio. Для синтеза нужен Slang. | Использует clock_hz: 1 без делителя. Полоски на индикаторе; работает со стандартным Yosys; в комментарии сказано переименовать модуль. |
| 15 · Прочее | Шаги первого запуска, таблица неисправностей, задания «что попробовать дальше» и источники | Задания, включая разрешение такта, и родственные схемы |
| Сайт: страница со списком, английская и русская версии со ссылками друг на друга | Да, плюс руководство по стилю | Да |
Как проверялось
- Снимок.
lssk_codex/breadboardскопирован в 13:27 PDT. Я сравнил HDL с копией, на которой запускал тесты раньше: все девять файлов совпали. Все запуски шли на копиях в моём временном каталоге; вlssk_codexничего не записывалось. - Моделирование. Я запускал
scripts/run.shCodex:- с Icarus 12.0 из
/usr/bin, а также с Icarus 14.0 devel и Verilator 5.053 из~/oss-cad-suite; - с Questa Altera Starter FPGA Edition 2025.2 и
SALT_LICENSE_SERVER=~/flexlm/license.dat; - и отдельно
run_questa.shCodex в версии 13:21.
verilator --lint-only -Wallна тех же наборах файлов. - с Icarus 12.0 из
- Синтез. Yosys 0.69+24 с
read_verilog -sv … ; synth -top … -flatten; check -assert; stat, затем то же самое с-m slangиread_slang. Я также пробовал Yosys 0.43 из/usr/bin. - Ошибки. Скрипт вносил каждую из 12 ошибок выше в свежие копии обоих проектов и запускал все тестбенчи в Icarus 12. Для столбца «без negedge» блок проверки при низком такте удалялся из основного тестбенча Codex регулярным выражением.
- Факты о BGM взяты из локального клона на коммите
3b18fdba:- все 63 экземпляра
slow_clk_genиспользуютslow_clk_hz (1); timeunitвстречается только в тестбенчах;- маршрут синтеза на Yosys использует
read_verilog -sv; - тестбенч pow_5 и
fifo_monitor.svиз FIFO используютwas_reset; - тестбенч pow_5 и
testbench.svиз microarchitecture challenge заканчиваются блокомfinal.
- все 63 экземпляра
- Текст, проводка и подсчёты. Я прочитал обе страницы урока Codex, обе страницы со списком, руководство по стилю,
README, инструменты и записи в
research/. Каждый вывод в трёх таблицах выводов и все 37 перемычек я сверил с цоколёвками CD4017B, CD4071B и CD4072B. Упоминания Тимофея подсчитаны по HTML, отдельно в тексте и в блоках<pre>.