Обновить
72
Иван Савватеев@SIISII

Микроконтроллеры, цифровая электроника, ОС…

1,3
Рейтинг
52
Подписчики
Отправить сообщение

Вот только без них далеко не всё получится сделать. "Сферической в вакууме" цифры нет, ей приходится иметь дело с грубым материальным миром.

Я знаю, что AXI -- синхронная, и с назначением сигналов тоже знаком, хотя полностью в голове это не держу: всё ж мне это нужно эпизодически, когда я в очередной раз лезу что-то ковырять на плисине.

Ну и ни с какими шинами я AXI напрямую не сравниваю, я лишь говорю, что опыт с другими шинами, в т.ч. древними, помогает и здесь. Вы вот, например, написали, что

данные возвращаемые не в порядке запросов (out-of-order read с тэгами)

и это создаёт у молодёжи проблемы. Ну а я сразу вспомнил допотопный, ещё из первой половины 1960-х, интерфейс ввода-вывода Системы 360: на мультиплексном канале висит много устройств, и все они могут работать параллельно, а канал по их запросам переключается между ними, используя "тэг" в виде адреса устройства, который устройство, запросившее обслуживание, ему выдаёт. И ход, и завершение операций ввода-вывода там могут быть в произвольном порядке; "рукопожатия" тоже есть -- только они асинхронные, без всякого клока (канал выдал некий управляющий сигнал -- устройство должно ответить одним из своих сигналов, ну и наоборот). Ну а поскольку я со всем этим в своё время познакомился, то, увидев про сию возможность у AXI, я ничуть не удивился, и никаких сложностей типа "а как это можно сделать?" у меня не возникает, хотя ведь очевидно, что AXI и тот интерфейс -- вещи абсолютно разные. (А, ещё его можно считать "двухканальным": как и в современных шинах, там нет двунаправленных линий, типичных для шин 70-80-х годов).

Естественно, это не значит, что современным студентам стоит изучать тот интерфейс или, скажем, ISA, но вот считать подобные древние знания бесполезными в наши дни тоже было бы опрометчиво.

И по нагрузочной способности могут быть проблемы (в статике-то потребление у входов близко к нулю, а вот в момент переключения... хотя столь жёстких ограничений, как в ТТЛ, у КМОП, конечно, нет), и ёмкость кучи входов может привести к слишком медленному изменению сигнала.

Ну, с этим-то я согласен :) Но мне тут ещё одна мысль в голову пришла.

Если бы Вы вели, скажем, некий спецкурс в университете, а Вашими слушателями были бы студенты, условно говоря, 3-го курса, Вы были бы полностью вправе полагаться на то, что элементарную физику (на уровне достаточно грамотного использования реальных цифровых микросхем, хотя и не проектирования их из транзисторов) они знают, про подтяжки или там токоограничители тоже в курсе, с цифровой электроникой знакомы, ну и т.д. Более того, если студент пришёл на Ваш спецкурс по современному процессорному микроархитектурному вериложеству, то Вы точно знаете, что именно эта тема его и интересует: это уже взрослый человек, более-менее знающий, чем он хочет в будущем заниматься.

Однако со школьниками ситуация совсем другая. У них ещё нет более-менее сформировавшихся интересов, а начальный уровень знаний может быть крайне невелик. Они, вполне может быть, крайне смутно представляют, что такое этот ваш процессор вообще. Поэтому Вам в любом случае надо давать им сначала базовую цифровую электронику на рассыпухе -- что Вы, собственно говоря, и делаете. Но, с одной стороны, это реальные микросхемы, накладывающие реальные физические ограничения -- это не HDL, где все такие подробности скрыты от разработчика; соответственно, некоторые элементарные сведения сообщить было бы, по меньшей мере, разумно (типа того, что нельзя на один выход цеплять 100500 входов или что логические уровни 1 и 0 могут иметь разные физические напряжения, поэтому не всегда можно напрямую соединить железку А с железкой Б); сюда входят и пресловутые резисторы, и даже генератор на 555 -- причём всё это "на пальцах" можно за одно занятие объяснить, если не пытаться лезть в дебри с дифурами (вот, глядите: ставим конденсатор ёмкости N -- светодиод мигает часто, ёмкости 2*N -- примерно в два раза медленнее; это из-за того, что для переключения конденсатор должен зарядиться/разрядиться, а скорость сего процесса зависит, внезапно, от ёмкости конденсатора и от тока, который пропускает резистор -- представьте себе бочку, в которую наливают воду или откачивают через трубу определённого диаметра; но глубже мы с вами это разбирать не будем, потому что это так называемая аналоговая электроника, а наш предмет -- цифровая, и от аналоговой нам нужны лишь самые базовые вещи типа вот этого "магического" генератора сигналов на 555, ну а кто хочет поподробней именно про это -- почитайте для начала книжку такую-то).

С другой стороны, нельзя сказать: вот элемент И, он работает так-то, вот элемент ИЛИ, он работает сяк-то, вот Д-триггер -- а теперь сделайте мне из них ФИФО. Нужна куча промежуточных ступеней с достаточно простыми задачами, которые реально решить в пределах одного занятия (особенно если школьники ещё достаточно мелкие -- это у великовозрастных мотивации может оказаться достаточно для нескольких занятий без получения ощутимого и очевидного результата, "малышам" же для поддержания интереса результаты нужны быстро; в общем, между 16 и 12 годами разница в подобном весьма велика, хотя в интеллекте как таковом её уже практически нет -- в отличие от 12 и 8). Соответственно, могут возникать задачи вроде "а сделайте-ка из логики и триггеров счётчик", "а теперь сделайте реверсивный счётчик" и т.д. -- а, как Вы наверняка знаете, "в древности" подобное нередко делалось на тех самых JK-триггерах, т.е. и они не являются бесполезными на уровне освоения "физической схемотехники" (а не HDL), хотя вполне можно решить те же задачи и на Д-триггерах.

Ну и, наконец, любые подобные занятия для ребёнка -- это пока ещё "общее развитие", а не узкопрофессиональное обучение (в отличие от студента-старшекурсника), а соответственно, здесь нужна не столько глубина, сколько ширина. Тут больше цель -- заинтересовать техникой вообще, показать возможные направления развития (а не сидения в зомбочатиках), а не сделать из ребёнка супер-пупер-профессионального разработчика суперскалярных процов.

Тут я больше к тому, что профессиональные программисты тоже вынуждены иногда идиотизмом заниматься -- пусть и из-за идиотизма платформы, которую должны по той или иной причине использовать. Но, с другой стороны, и на МК опрос иногда проще и лучше. Скажем, был у меня другой прибор, где всё крутилось в главном цикле (задача простая, лепить туда какую-нить недоОСРВ смысла никакого). Оказалось, что мне проще проверять факт нажатия кнопок именно обычным опросом в рамках главного цикла, не делать прерывания по их нажатию (а вот обмен данными по UART и SPI был уже с использованием прерываний).

Подтяжки объясняются за 5 минут. Настоящий UART требует, конечно, куда больше времени, но оно отнюдь не впустую уйдёт, в том числе и для HDLщика. Вы вот заранее знаете, чем ребёнку в будущем заниматься придётся? Может, он будет не процессорное ядро проектировать, а периферию для SoC?

С другой стороны, я, ни разу не являясь электронщиком как таковым (HDL для меня вообще хобби), с этой самой AXI по спецификации разобрался за полдня, хотя до неё из более-менее современных шин знакомился только с AHB (зато, естественно, знаю всякую древнюю асинхронщину -- хоть DECовский Unibus, хоть вообще классический интерфейс ввода-вывода Системы 360, и уж тем более всякие там ISA). И мне кажется, что столь быстро я в это вник как раз потому, что знаком с большой кучей всякого старья. Кстати говоря, эти самые "рукопожатия" valid/ready вполне имеют место и во многих древних асинхронных шинах (но не во всех).

А, кстати, ещё такой вопрос. Если Вы полностью игнорируете "презренный металл" в виде реальных схем на уровне транзисторов, то как Вы собираетесь объяснять сопряжение блоков, работающих в разных доменах синхронизации? Объяснять метастабильность злым колдунством, которое искореняется, и то не со 100% гарантией, магическими цепочками триггеров?

Или как, не упоминая "физику", объяснить, для чего иногда регистры дублируются (из-за ограниченной нагрузочной способности и/или слишком большой ёмкости подключённых к ним входов)?

Мы это уже обсуждали. Лично я только частично с Вами согласен. То, что требует длительного разбора -- да, наверное, лучше пропустить. То, что много времени не потребует -- скорей, лучше посмотреть. Ну а уж фундаментальные вещи для электроники типа тока, напряжения и сопротивления -- они попросту обязательны, и особенно для детей, чтоб они пускай поверхностно, но изучали мир во всех его проявлениях. Если на то пошло, знание элементарной не электроники даже, а электротехники в 100500 раз важней всех этих конвейеров с кредитными счётчиками -- потому что последними занимается 0,0000000001% населения Земли, а починить розетку или кинуть провод на даче может потребоваться каждому.

Но на том же Линухе по "прерываниям" зачастую невозможно: их просто нет на уровне задач (процессов) пользователя. Вот мне буквально сейчас нужно связать две платы: Распберри 5, которая работает мордой (дисплей с сенсорным экраном, Ethernet для связи с чем-то более высокого уровня и всё такое), и микроконтроллерной платкой, которая реализует собственно прибор (производит замеры с помощью своего АЦП, управляет всякими там клапанами и прочая). Обмен между ними вполне себе асинхронный, объёмы передачи небольшие, так что логично использовать UART. Но в Линухе я не могу запустить операцию ввода с UART и не ждать её окончания, как я сделал бы это в Винде, в VAX/VMS, RSX-11 или даже в древней и ни разу не реального времени OS/360 -- поскольку асинхронного ввода-вывода там нет, в отличие от всех перечисленных ОС. По сути, единственный способ -- спамить опрос UARTа с помощью select/poll и выполнять чтение, когда опрос сообщит, что есть что читать. Ну или запускать второй процесс, который будет запрашивать в чтение и останавливаться, пока оно не будет выполнено, в то время как другой процесс общается с пользователем (рисует картинки, обрабатывает сенсорный экран и т.п.).

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

Отказываться от обычных светодиодов для уменьшения возни при сборке на макетке -- нормально. Не упоминать вообще о том, что настоящим светодиодам (и не только им) требуется резистор -- это уже идиотизм. Тем более это можно объяснить не только ученику средних классов (да, ему уже есть смысл с законом Ома, даже если в школе до него они ещё не дошли), но и какому-нибудь 8-летнему ребёнку -- только последнему таки без формул, а с понятной на пальцах "гидравлической" аналогией (резистор "тормозит" ток, не давая пройти ему в опасном для жизни светодиода количестве -- как узкая труба ограничивает поток воды). Для этого не требуется курс высшей математики, для этого не требуется отвлекаться от столь любимых автором конвейеров с FIFO на 3 месяца -- всё необходимое можно объяснить буквально за час, максимум за два.

Всегда использовал и его, и 7zip, и другие архиваторы только и исключительно в командной строке, а для комстроки, насколько знаю, он официально полностью бесплатен.

Человеку, например, может потребоваться генератор на другую частоту. Так что показать, как 555 использовать и как изменение номиналов резисторов-конденсаторов влияет на частоту, вполне можно и нужно -- дифуры для этого не требуются. Зато полезно сказать, почему в глубины функционирования 555 погружаться не будем (это аналоговая электроника, а наш курс посвящён "цифре", поэтому аналоговыми вещами занимаемся лишь в минимально необходимом объёме; в данном случае, нам нужен генератор сигналов, а как именно он работает внутри, нам без разницы), а заодно указать, где и что могут почитать те, кому интересно узнать об этих вещах более подробно.

Ну, собственно, автор именно это и предлагает. Причём даже логику в минимальной степени, ведь HDL скрывает подробности реализации (скажем, чтобы описать на Верилоге регистр, не требуется понимать, как устроен триггер -- надо знать, как написать текст на языке).

Тоже крайность. Изучение ошибок зачастую полезнее изучения "лучших практик" без указания на возможные ошибки и почему именно это является ошибкой.

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

Я не считаю, что можно получить действительно грамотного специалиста, если он не знает ничего вокруг своей узкой специальности. Ну а все ваши "конвейерные микроархитектуры" существуют не в сферическом вакууме и не ради самих себя. Ну а лично Вы являетесь действительно грамотным специалистом как раз во многом благодаря тому, что Ваши знания и умения выходят далеко за тот уровень, которым Вы хотите ограничивать учеников (ага, в том числе потому, что Вы знаете, что такое JK-триггер :) ).

Вы кидаетесь из крайности в крайность. ЗАЧЕМ нужны какие-то дифуры, чтобы просто собрать работающий генератор на 555? ЗАЧЕМ нужно подробно изучать его внутреннее устройство, чтобы просто его использовать в качестве генератора?

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

А я вот не согласен с такой категоричностью. Ученик должен понимать, что такое напряжение и ток, для чего нужны резисторы и как используются в тех или иных случаях. Никаких 3 курсов вуза для усвоения этого не требуется, и изучению цифровой электроники ни разу не мешает -- а вот помочь может. Скажем, начнёт ученик что-то делать самостоятельно, захочет прицепить микруху по I2C -- а у него нифига не работает, поскольку нет подтягивающих резисторов, о которых он и слыхом не слыхивал.

То же самое относится и к генераторам: нет никаких проблем показать и 555, и вообще мультивибратор на транзисторах, а заодно намекнуть, что там, где раньше требовались эти два транзистора, сейчас ставят 4-ядерный проц с 100500 млрд транзисторов -- лишь бы мозги не включать.

Ну а FIFO -- вещь продвинутая, явно не для первых занятий.

Научный потенциал -- да, был. А вот с воплощением "в металле" всё было, увы, сильно хуже.

Так защёлки и позднее использовали постоянно. Если посмотреть на ЕСки, а это 1970-е, то почти все регистры выполнены именно на защёлках, а тактирование -- многофазное (только, естественно, не от барабана :) ).

Замечу, что у "уралов" (а это несколько типов машин, хотя и не совместимых на двоичном уровне друг с другом -- до этого ещё не дошли, -- но разделяющих многие общие принципы и идеи и совместимые на уровне, так сказать, исходных текстов на ассемблере) главным тормозом была именно реализация ОЗУ на магнитном барабане. При его замене на ферритовую память быстродействие возрастало примерно в 10 раз, но такой замене препятствовала крайне высокая в тот момент цена такого ОЗУ. По мере отработки технологии и решения прочих вопросов цена снижалась и именно ферритовая память стала в итогде использоваться в качестве ОЗУ почти во всех вычислительных машинах вплоть до появления микросхем достаточно высокой ёмкости, но это произошло уже позже, когда ламповые ЭВМ ещё работали, но уже начали уходить, уступая место полупроводниковым.

Информация

В рейтинге
2 070-й
Откуда
Солнечногорск, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность

Специализация

Embedded Software Engineer
Lead