Сейчас выходит русский перевод японской манги 2013 года про цифровые схемы, созданной Амано Хидэхару и Мэгуро Кодзи. Несмотря на несерьезную форму изложения, суть этой книжки очень здравая. Например, она начинает от древних микросхем малой степени интеграции и быстро привязывает их к современному языку описания аппаратуры Verilog и программируемым логическим интегральным схемам (ПЛИС). Также манга четко определяет зачем нужны комбинационные и последовательностные схемы, и дает представление о методах оптимизации.
Манга избегает ошибок многих своих предшественников. Одну из таких ошибок совершил Чарльз Петцольд в книге «Код», которая вводила последовательностную логику не на D-триггерах, управляемых фронтом тактового сигнала (edge-triggered D-flip-flop), а на D-триггерах с работой по уровню (защелках, level-sensitive D-latch), хотя потом переключалась на правильные триггеры. Вероятно, ошибка была связана с тем, что Чарльз Петзольд, который прославился как автор учебников по программированию GUI в Microsoft Windows, не был практикующим разработчиком электроники, и для него защелки были «проще», чем триггеры с фронтом. Проблема в том, что защелки плохо совместимы со статическим анализом задержек при логическом синтезе, главной технологии проектирования цифровых схем последних 30 лет. Системы на кристалле внутри гаджетов типа айфона в качестве элементов состояния в 99% случаях используют D-триггеры переключаемые по фронту, а защелки используют только в очень специальных случаях. Давать новичкам строить схемы на защелках — это значит вводить их в заблуждение.
В этом смысле манга лучше чем Петзольд. Вот как элегантно манга объясняет работу двухступенчатого master slave D-триггера, управляемого фронтом тактового сигнала. Это делается с помощью феи «Хи-хи-хи» и феи «Ха-ха-ха»:
Далее я выделяю свои комментарии синим цветом, чтобы они не сливались с цитатами из манги:
Но начнем по порядку. Манга про цифровые схемы начинает с микросхем, причем она сразу упоминает как про старые микросхемы малой степени интеграции, с несколькими логическими элементами, так и современные, с миллионами и миллиардами транзисторов:
Манга обьясняет работу логических элементов с помощью простых и приятных для тинэйджеров аналогий:
Зачем вообще упоминать микросхемы малой степени интеграции, которые устарели 50 лет назад? Дело в том, что несмотря на почтенный возраст, упражнения на макетной плате с такими микросхемами — это самый интуитивный способ показать школьникам, как работает логический элемент. Для этого не нужно устанавливать софтвер для моделирования или синтеза для ПЛИС. Все, что нужно — это макетная плата, батарейка на 9 вольт, микросхема, провода, светодиоды и кнопки:
Некоторые преподаватели школьных кружков считают, что все такие упражнения нужно заменить на Ардуино. Такое мнение возникло еще в 1970-1980-е годы, когда в образование пришли микроконтроллеры и встроенные процессоры. Типичный школьник 1988 года не мог потратить сотни тысяч долларов для производства на фабрике своей микросхемы, а старые микросхемы малой степени интеграции в реальных промышленных изделия применялись все реже и реже. Поэтому на цифровую логику для школьников в то время махнули рукой и бросили все силы на обучение программированию. Вот комментарий на фейсбуке с описанием такого мнения в наши дни:
Однако 30 лет спустя все снова изменилось:
1. Сначала в том же 1988 году появилась технология проектирования микросхем с помощью логического синтеза, из кода на языках описания аппаратуры — Verilog и VHDL.
2. Одновременно в 1980-е возникли программируемые логические интегральные схемы (ПЛИС) — матрицы реконфигурируемых логических элементов, с помощью которых можно стоить цифровые схемы, просто меняя содержимое конфигурационной памяти внутри ПЛИС.
3. В 1990-е годы преподавание HDL, логического синтеза и ПЛИС вошло в программы всех кафедр электроники западных университетов, хотя в России и Украине, из-за пост-перестроечного хаоса, этот процесс был медленнее.
4. В 2000-х годах скорость традиционных процессоров перестала рости, и маркетологи стали предсказывать фрагментацию рынка встроенных процессоров (что и произошло — cloud, IoT), а также появление комбинаций из процессоров и специализированных вычислителей для разнообразных задач (что и произошло — сначала быстрая мобильная графика, потом специализированные чипы для майнинга криптовалют, компьютерного зрения и ускорителей нейронных сетей).
5. Теперь, в 2010 годах, цены на платы ПЛИС снизились до уровня, когда они стали доступны для школьников. Одновременно индустрия требует большого количества новых инженеров для создания огромных микросхем с нейросетями. Даже если вы собираетесь работать всю жизнь в программировании, для понимания новых систем вам нужно знать принципы работы аппаратуры: комбинационных и последовательностных схем, конечных автоматов, тайминга, конвейерной обработки и т.д. Тогда вы сможете понять, стоит ли обрабатывать данные обычной программой или аппаратным блоком.
Так вот микросхемы малой степени интеграции позволяют «потрогать» хардверные примитивы непосредственно. Причем сразу после объяснения про схемы малой степени интеграции манга вводит и языки описания аппаратуры, и ПЛИС:
После описания логических элементов манга показывает, как построить полезную комбинаторную схему мажориторного голосования:
Потом эта схема оптимизируется. На мой взгляд, манга уделяет слишком много времени комбинаторной оптимизации. Но стоит помнить, что мангу написали японцы, а у них в культуре есть принцип 切磋琢磨 (сесса такума) — полирования чего-то (например меча), пока он не станет идеальным. Поэтому в манге есть как оптимизация на основе здравого смысла, так и оптимизация на основе диаграмм Карно. Логический синтез языков описания аппаратуры делает такие оптимизации автоматически:
В манге есть и романтическая схема то бишь сцена:
Схему мажориторного голосования можно легко собрать на микросхемах малой степени интеграции. При этом можно поспорить, что наблюдать комбинаторные элементы И-ИЛИ-НЕ / AND-OR-NOT на макетной плате не очень интересно, так как булеву алгебру объясняют и на обычном уроке программирования. На это можно возразить, что хотя И-ИЛИ-НЕ могут понять и 7-летние дети, но при попытке понять D-триггеры некоторые школьники натыкаются на ментальный барьер. В этом случае наглядная демонстрация становится более ценной.
К сожалению, D-триггеры внутри ПЛИС школьник не может «пощупать» руками непосредственно. В ПЛИС их десятки тысяч штук. На Ардуино такой обьект вообще не возникает. А на плате с микросхемой малой степени интеграции D-триггер можно пощупать вот так:
А вот как объясняет последовательностные схемы и D-триггер манга. Заметим что переводчик с японского использовал слово «последовательные» для перевода «sequential», хотя в русской литературе по цифровой схемотехнике устоялся термин «последовательностные»:
Тут можно было бы написать более конкретно, что последовательностные схемы, в отличие от комбинационных, позволяют повторять действия и ожидать события. Иными словами, они делают компьютер «умным». Без них с помощью компьютера можно было бы только вычислять значения простых арифметических выражений:
Очень жаль, что манга ничего не рассказывает про временные задержки в комбмнационных схемах и вычисление максимальной тактовой частоты. Это можно было бы вставить вот в этом месте:
Я надеюсь, что у этой манги в России найдутся продолжатели, которые сделают какой-нибудь мультфильм с Иваном Царевичем и Василисой Прекрасной, который бы ввел задержки распостранения и критический путь, например на основе информации из учебника Харрис & Харрис. Вот соотвествующие слайды из дополнительных материалов к учебнику:
Вот слайд в прямой форме говорит, что сейчас практически для всех элементов состояния используется D-триггер [кроме случаев, с которыми начинающие вообще не сталкиваются, например защелка для получения стробируемого тактового сигнала без импульсной помехи в схемах для экономии энергопотребления — level-sensitive D-latch for glitch-free gated clock используемые в low-power designs].
Вспомним, что Петзольд для своего введения использовал D-защелки, что неправильно. Но в этом месте делает ошибки не только Петзольд. Я однажды сделал пост в Живом Журнале вот с такой картинкой счетчика ниже из сумматора и D-триггера, там мне после этого один русский программист из штата Колорадо двое суток доказывал, что счетчики проще строить на T-триггерах. Я ему говорил, что он правильно запомнил из своего детства 1970-х про T-триггеры, но сейчас в XXI веке разработчики айфонов строят счетчики из D-триггеров, потому что ситуация счетчика на T-триггерах, при которой сигнал данных используется как тактовый сигнал, плохо стыкуется с анализом тайминга в чипах на миллиарды транзисторов (если вы со мной не согласны, просьба разбить мое мнение со ссылками на ASIC libraries от TSMC, Synopsys Design Compiler и т.д.):
Теперь вот уже знакомая нам серия картинок про работу двухступенчатого (ведущий-ведомый) D-триггера с феями:
С легко понятной временной диаграммой — данные записываются только в момент положительного фронта D-триггера, все остальное время они игнорируются:
Теперь манга переходит к примеру использования D-триггера для построения простейшего конечного автомата — устройства для бросания электронной кости. Честно говоря, от этой части книжки я не совсем в восторге. Это скажем так, вырожденный конечный автомат, в котором состояния ходят по кругу, останавливаемые одним битом — кнопкой «стоп». Если бы в книге примеров автоматов было бы несколько, то все бы было OK, но ставить это как единственный пример — это неправильно. Он не показывает весь класс задач, который можно решать с помощью конечных автоматов. Ниже я покажу, как бы я это дополнил.
Диаграмма состояний 0-1-2-3-4-5:
Состояния в двоичном представлении, которые записываются в три D-триггера:
Комбинаторная схема, которая получает новое состояние из старого:
И наконец, манга показывает как спроектировать эту же схему не с помощью рисования мышкой на экрана, а с помощью синтеза из языка описания аппаратуры Verilog. Хотя этот код внешне похож на код языка программирования типа Паскаль или Джавы, но этот код имеет принципиально другую природу. Цель кода на верилоге — превратиться в схему, с проводами и транзисторами. А код на языка программирования компилируется в цепочку инструкций, нулей и единиц, которые хранятся в памяти [понятно, что и Verilog, и Java могут интерпретироваться + код на Verilog может превратиться в нули и единицы для конфигурации ПЛИС + Java может быть странслирована в Verilog и тоже стать схемой, но это детали, не способствующие начальному пониманию]:
Теперь как бы дополнил пример про конечный автомат я. Я бы сделал более интерактивный пример конечного автомата, например используя аналогию с так называемой «Китайской комнатой». Вот мое описание китайской комнаты, удаленное редактором из моей статьи десятилетней давности в журнале The New Times (этот журнал не только про политику, в нем бывает и популярная технология):
В 1980-м году один из критиков искуственного интеллекта Джон Сирл (John Searle) выдвинул элегантный аргумент, получивший название «китайская комната». Предположим, что в будущем появилась версия программы «Элиза», говорящая на китайском языке настолько хорошо, что китайцы не смогли бы отличить компьютер от человека. Теперь предположим, что некто переписал бы эту программу в толстенную книгу с механическими инструкциями для человека – если видишь иероглиф A и до этого видел иероглиф B, то вытащи из ящика иероглиф C. Теперь посадим некоего человека, не знающего китайский язык, в закрытую комнату с этой книгой и будет просовывать ему под дверью таблички с иероглифами, содержащими вопросы на китайском. Следуя механическим инструкциям из книги, человек будет находить в ящике и просовывать обратно другие таблички с иероглифами. С точки зрения внешнего наблюдателя, комната будет «понимать» и «разговаривать» на китайском. Но кто же является носителем этого разума? Ведь исполнитель не понимает китайский?
Джон МакКарти и другие ветераны искуственного интеллекта тут же заявили, что разум и даже сознание проявится в «виртуальной личности» или в «процессе», осуществляемой в этой комнате. Одним из элегантных аргументов против Джона Сирла выдвинули философы Пол и Патриция Чёрчлэнд (Paul and Patricia Churchland). Как мы знаем из физики, утверждали Чйрчлэнды, свет – это электромагнитная волна. Предположим, что некий скептик начнет двигать рукой магнит, не увидит света и начанет утверждать, что свет невозможен. На самом деле, чтобы получить свет, необходимо махать магнитом со скоростью 450 миллиардов взмахов в секунду. Так и разумное сознание, утверждали Чёрчлэнды, возникнет в «китайской комнате», если исполнитель будет достаточно проворен.
Интересно, что украинский фантаст Анатолий Днепров описал аналог “Китайской комнаты” еще в 1950-е годы в рассказе «Игра».
Так вот. Я для своих собственных лекций и материалов придумал пример, в котором finite state machine (FSM) в ответ на последовательность из любого количества иероглифов «медведь» и «дерево», с завершающим иероглифом «наука» — выдает последовательность иероглифов «Сибирь». Это простейшая «китайская комната»:
Вот ее диаграмма состояний:
Из этой диаграммы пожно построить схему и реализовать ее на плате с ПЛИС.
На днях я использовал выдержки из этой манги Амано Хидэхару и Мэгуро Кодзи, когда читал лекцию по скайпу из Калифорнии 150 студентам казанского Иннополиса. Студенты начинают изучать компьютерную архитектуру, и им нужно пробить барьер первоначального непонимания цифровой логики. Для этого манга очень хороша, особенно если использовать её в комбинации с учебниками типа Харрис & Харрис «Цифровая схемотехника и архитектура компьютера».
Вот видео с этой лекции:
Слайды для этой и следущей лекций можно скачать здесь:
http://bit.ly/2018-01-25-verilog-1-innopolis-yuri-panchul
http://bit.ly/2018-02-01-verilog-2-innopolis-yuri-panchul
Теперь у многих читателей постов про ПЛИСы часто возникает вопрос: «А зачем это надо, ведь на Джаве работ больше?»
На это можно ответить: согласно сайту glassdoor, в Сан-Хосе, Калифорния, разработчики цифровых схем ценятся дороже, чем разработчики на Джаве:
А если читатель скажет «А что мне Сан-Хосе? Я в России и мне в Сан-Хосе поехать не грозит», то можно привезти свежий пример, что молодожены из Санкт-Петербурга взяли первое место на интеловском конкурсе InnovateFPGA в Европе, после чего взяли второе место на мировом финале в Сан-Хосе. Вот они сидят в офисе Интела в Сан-Хосе несколько дней назад. За то, что сделали проект на ПЛИС. Может и за проект на Джаве Интел кого-то привез в Сан-Хосе с вручением награды, но я лично таких примеров не знаю.
Автор: Юрий Панчул