Обновить

Школьники рассказывают на видео чему они научились за три сеанса работы с микросхемами малой степени интеграции

Время на прочтение5 мин
Охват и читатели14K
Всего голосов 19: ↑17 и ↓2+25
Комментарии50

Комментарии 50

Много лет я пытаться освоить FPGA с полного нуля. Изучал онлайн-уроки, покупал литературу. Результатов ноль. Да, я не самый умный и быстро схватывающий человек, но причина здесь не в моей тупости. А в том, что НИКТО не смог нормально составить план обучения. Например, тот же Фрэнк Бруно первую треть книги втирает читателю, что такое FPGA и ASIC, их историю и другую фигню. Далее, «выполняем наш первый пример». «… добавляем constraints…”… что? Какие нахрен “constraints”?!!! o_O Я в душе не знаю, что такое «constraints”, зачем я должен их добавлять? И так далее. Ругаются какими-то непонятными констрейтами, слайсами и лутами. Мы же только что историю изучили, нет? ИМХО, это трэш полный. В итоге, вырвав все волосы на заду, я хоть немного въехал в тему и могу поделиться тем, как я вижу план обучения FPGA для новичка с полного нуля. Не знаю, поможет ли это Вам в вашей практике, но все равно поделюсь:

  1. Логические элементы. Теория. Таблицы истинности.

  2. Триггеры и защелки

  3. Логика в железе, серия 74 и тому подобное. Соединение элементов между собой проводами на макетной плате.

  4. Язык Verilog или VHDL. Описание принципа соединений элементов между собой. Сопоставление описания схемы на макетке из предыдущей главы на языке Verilog или VHDL.

До этого этапа вообще не должно быть ни одного упоминания матершинного слова “FPGA”.

5. FPGA как термин. FPGA как замена этой самой макетки. История FPGA, если нужно.

6. Характеристики FPGA. Основные термины (слайс, LUT) и подобное.

7. IDE-среды для работы с FPGA. Здесь должны быть ОБЯЗАТЕЛЬНО подробно описаны все термины, которых нет в словаре Даля. Особенно всякие «constraints”.

8. Verilog или HDL как язык описания схемы для FPGA.

Далее, идёт все остальное, что Вы считаете нужным.

К сожалению, слишком много мусора я перечитал и только забили голову. Видите незнакомый термин без описания что это такое - сразу бросайте читать и ищите другой источник. Прояснять ситуацию начали только уроки по Verilog с сайта Марсоход. Но самое хорошее, благодаря чему я начал понимать что к чему, это канал на ютубе с названием «плисоводство». Вот там реально можно именно понять, а не тупо скопировать. Модераторам, которые захотят удалить мой комментарий, якобы, за рекламу, могу сказать, что никакого отношения ни к какому каналу я не имею. Я всего лишь поделился опытом. Подумайте дважды, если вам не пофигу на развитие отрасли в нашей стране - с обучением FPGA реально очень туго. С уважением.

А в том, что НИКТО не смог нормально составить план обучения.

Мы с сотоварищами сделали более-менее работающий план на Школе Синтеза Цифровых Схем:

https://engineer.yadro.com/chip-design-school/

Далее, «выполняем наш первый пример». «… добавляем constraints…”… что? Какие нахрен “constraints”?!!! o_O Я в душе не знаю, что такое «constraints”, зачем я должен их добавлять?

Constraints нужны когда вы понимаете что такое static timing analysis. Для начинающего нужен только 1 (один) constraint в его первый год обучения - это период 1 (одного) тактового сигнала на его плате. Несколько clock-ов и всякие PLL-ли можно вводить только если рука хорошо набита на дизайне с одним clock-ом.

Constrains на пины вообще не должны появляться в рамках учебного курса по HDL/RTL, потому что это vendor-specific шаманство с бубном, которое не имеет отношение к цели - обучить человека методологии проектирования на уровне регистровых передач, применимой и к FPGA, и к ASIC.

В примерах для Школы Синтеза мы это все изолировали от пользователя для поддержки разных тулчейнов (Xilinx, Altera, Gowin, Lattice).

Франку Бруно за его книжку скорее всего просто Xilinx заплатил, вот он туда и сует Vivado-specific фигню чтобы приковать преподавателей к Xilinx. Это называется "vendor lock". Так как я знаю менеджеров образовательных программ лично, то я не удивлен от слова "совсем".

  1. Триггеры и защелки

Я против введения защелок в первый год обучения. Я считаю, что нужно начинать с D-триггера как черного ящика и вводить D-защелки только когда человек уже набил руку на базовом проектировании (включая конвейеры, FIFO итд). Потому что D-защелка нужно в трех ипостясях:

  1. Clock gaters для экономии динамического энергопотребления.

  2. Latch array (экономит несколько процентов энергопотребления по сравнению с регистровым файлом на D-триггерах).

  3. Time borrowing (продвинутый материал для старших инженеров NVidia с 10-летним опытом).

SR-защелка не появляется в жизни ASIC и FPGA дизайнера никогда, а JK-триггер и T-триггер - практически никогда, хотя я знаю два исключения, подтверждающие правило. Это все хлам, который тянут в вводные курсы люди, которые копируют методички 1990-х годов, написанные людьми, которые обучались в 1970-е годы.

Человек который знает разные виды защелок и констрейны на пины, но не может написать обычный модуль на верилоге с D-триггерами типа как задачи по ссылке ниже - для электронной компании бесполезен.

https://github.com/chipdesignschool/systemverilog-homework/tree/main/04_more_sequential

Судя по всему, Вы идёте по правильному пути. Желаю Вам успехов! Послежу за Вашим каналом

Кстати, посмотрел у Бруно в оглавлении, там просто сразу в первой главе есть про DSP48. Это вне всяких сомнений пришло из слайдов менеджера образовательных программ Xilinx с которым я проводил вместе семинар в Лос-Анжелесе в 2015 году. Нет вообще никаких причин рассказывать это человеку, который видит FPGA впервые в жизни, но Xilinx настаивают со всеми партнерами чтобы показать вначале эти слайды с DSP48 и ASMBL по маркетинговым соображениям, в том числе если аудитория начинающие в университетах. Потом они говорят "если делать FPGA синтез обычно, то с тяжелыми арифметическими вычислениями будет низкая тактовая частота, но если сказать синтезу вставить DSP48, то будет высокая". Это был их конкурентное преимущество против Альтеры. Оттуда же пришли и страницы 31-35 в книжке Бруно.

Если бы лишняя информация была единственной проблемой этой книги, ещё бы куда ни шло… но там, как минимум, жестко нарушена последовательность повествования. Буквально, после истории ASIC, он сразу предлагает не самый простой проект на Vivado. Раздел «знакомство с FPGA”… 2 страницы. Собственно, чуть дальше него я и дочитал, когда он начал материться всякими констрейтсами. На этом изучение книги закончил. Пожалел, что деньги на нее потратил. Ты бы хоть объяснил, чем Vivado от Vitis отличается, для начала…

С другой стороны, в проде ты все равно будешь использовать специфичные примитивы под конкретный чип, абстрактный ртл не всегда вывозит

Совершенно верно, но что важнее для обучения начинающего студента:

  1. Вывалить на него нюансы Quartus .qsf / Xilinx .xdc / Gowin .cst файлов со всякими банками напряжений итд - при том что у разных вендоров это разное и никакой особой мысли там нет, чисто запоминание?

  2. Или изолировать всю эту хрень во врапперы (как мы сделали в https://github.com/chipdesignschool/basics-graphics-music ) и сделать упор на общие навыки проектирования последовательностной логики на уровне регистровых передач?

На интервью в электронные компании на позиции по RTL (Register Transfer Level) front-end design про (1) можно честно сказать "никогда не разбирался / использовал темплейт / этим занималась специальная группа в компании", но вот плохое владение (2) - это провал интервью.

Что касается DSP48 то разобраться в нем человеку, который владеет общими навыками RTL и здравым смыслом - это довольно банально. Его конечно стоит упомянуть (наряду с Altera-specific и Gowin-specific примитивами), но не в первой главе, а где-то в пятой-шестой.

То же самое про vendor-specific блоки памяти, PLL итд.

Constraints нужны когда вы понимаете что такое static timing analysis. Для начинающего нужен только 1 (один) constraint в его первый год обучения - это период 1 (одного) тактового сигнала на его плате.

Ну, строго говоря, ноги ПЛИСины задаются тоже в виде ограничений -- чтоб синтезатор знал, куда вести те или иные внешние сигналы.

Это в следущих двух абзацах комментария:

Constrains на пины вообще не должны появляться в рамках учебного курса по HDL/RTL, потому что это vendor-specific шаманство с бубном, которое не имеет отношение к цели - обучить человека методологии проектирования на уровне регистровых передач, применимой и к FPGA, и к ASIC.

В примерах для Школы Синтеза мы это все изолировали от пользователя для поддержки разных тулчейнов (Xilinx, Altera, Gowin, Lattice).

FPGA как термин. FPGA как замена этой самой макетки. История FPGA, если нужно.

Рассказывать как были PLA, PAL, GAL, PLD - это научпоп, даже инфотейнмент. Его можно упомянуть если есть время, но им нельзя замещать критические вещи, с которыми плохо даже у американских студентов после вузов: 1) набивание руки на реализации последовательностной логики и 2) микроархитектурные конструкции (конвейеры и FIFO).

IDE-среды для работы с FPGA

В профессиональной разработке, особенно ASIC design, инженеры мало используют IDE. Чаще все делается на скриптах в терминале и любимом редакторе инженера. В примерах для Школы Синтеза мы сделали режим когда студенты используют VS Code в комбинации с запуском скрипта синтеза в терминале.

Проблема IDE - они кривые и у каждого вендора разные. Разумеется Xilinx и Altera проталкивают свои IDE в вузы, чтобы получить vendor lock - то есть чтобы преподаватель сидел на нем 20-30 лет.

Прояснять ситуацию начали только уроки по Verilog с сайта Марсоход.

Создателя Марсохода я уважаю, это да. Кстати поддержка марсоходовских плат есть и в репозитории примеров ддля Школы Синтеза:

https://github.com/chipdesignschool/basics-graphics-music/tree/main/boards

А вот насчёт IDE я с Вами не согласен! Да, кривые, да, вендор лок… но если бы мне на этапе «какие нахрен constraints?” еще и консоль со скриптами подсунули, я бы вообще себе мозг вывихнул и бросил это навсегда. Open Source человек должен выбирать осознанно, сам к нему придти. Но начинать надо с чего-то простого, не отвлекаясь на что-то побочное (настройка того же Linux и всех этих консолей). Именно IDE дает возможность максимально сконцентрироваться на процессе понимания логики работы, не отвлекаясь вообще ни на что.

P.S. Microchip, горите в аду со своим MPLab X :)))

Так ничего настраивать не надо, только в дополнение от пакета от вендора установить git и скачать репозиторий. В примерах репозитории уже стоят все скрипты и они работают под Windows, Linux и MacOS. Нужно просто открыть один подтерминал и запускать там один скрипты двумя клавишами "вверх-ввод":

вот https://docs.google.com/presentation/d/e/2PACX-1vSvtu1KA49aFnO7PfP4XxA8-Sd4laUrkQy1SxCZjSBLivTEtCV_YS9H-eh4FULqZ3xakYBNKHM7YGyB/pub?start=false&loop=false&delayms=60000

.

.

Хотя если нравится IDE - можно и так, просто он мешает, если зоопарк плат от четырех вендоров.

P.S. Microchip, горите в аду со своим MPLab X :)))

Да, MPIDE и MPLab X у меня в жизни были :-)

Базовые вещи по работе с IDE и constraints можно просто посмотреть в примерчиках типа такого.

Вместо того чтобы заставлять студентов утомительно возить мышкой по гуи по вашей ссылке:

- вместо этого ему можно просто дать вот такой файл:

https://github.com/yuri-panchul/basics-graphics-music/blob/main/boards/tang_nano_9k_lcd_480_272_no_tm1638/board_specific.cst

и дело с концом.

Порог входа в плисы реально конский, там весь инструментарий делали инопланетяне для инопланетян....

Пока только делаю первые шаги (и то ленюсь), но на первый взгляд на "учебной" Tang Nano 9k и в родном софте от Gowin, и в open source (вот пример) всё достаточно разумно.

Я без особых проблем освоил ISE (для Spartan-3E -- моей первой ПЛИСины). Правда, я хорошо знал, что такое цифровая схемотехника (включая пресловутые JK-триггеры :) ), и для меня основной сложностью было понять, как правильно объяснить синтезатору на VHDL (начинал с него) мою задумку (интерфейс с клавиатурой PS/2): я отлично знал, как сей интерфейс слепить на рассыпухе (сдвиговые регистры и логика), но не сразу "проникся" текстовым описанием. Когда, наконец, в это въехал -- проблем никаких не стало (ну, кроме чисто технических -- типа глюков в IDE и т.п.).

К сожалению, есть куча вузовских курсов, которые идут от гейта до конечного автомата, с объяснением попутно как сделать интерфейс для PS/2 или там SPI или I2C - но они не доходят до конвейерной обработки данных. А потом еще говорят "о, студенты конвейернось в компьютерной архитектуре изучат", там классический пятистадийный конвейер MIPS 1980-х годов (ныне RISC-V).

А потом студенты идут в DSP, GPU и сетевые компании и не знают как решать задачки про конвейеры на интервью (см. напр слайды 19-32):
https://docs.google.com/presentation/d/e/2PACX-1vRQ03Qby3fnyxL2lsknfGCQXI1x7_TGYBd2CPoNVkirBkuRbG92yNoOEh-0yMabLFrL55gVvbtZtdnA/pub?start=false&loop=false&delayms=3000

Просто вендоры (что Xilinx, что Altera) через свои группы образовательных программ пытаются впарить (по маркетинговым причинам) профессорам вузов ненужные детали своего софта вместо того, чтобы сделать внятные объяснения базовой основы технологии:

  1. Сначала как кодировать комбинационные облака логических элементов и состояние в виде D-триггеров;

  2. А потом как строить из (1) микроархитектурные объекты - конечные автоматы, конвейеры, очереди, арбитры итд.

Частично это связано с тем, что опыт у application engineers образовательных программ не соотвествует опыту R&D инженеров. Они часто просто переписывают старые методички 1990-х годов (составленные людьми, которые получили образование в 1970-х) с новым софтом.

меня учили программированию начиная с этих пунктов в конце 80-х:

  1. Логические элементы. Теория. Таблицы истинности.

  2. Триггеры и защелки

и еще мы рисовали схемы на примитивных логических элементах для элементарных арифметических операций заданной разрядности, это не логика в железе это логика-арифметика на реальных, то есть физически реализуемых, элементах.

Как по мне это обязательная база для профессионального программирования хоть ПЛИС, хоть микроконтроллеров хоть серверного софта. У меня не было проблем с пониманием программирования ПЛИС/ФПГА, при наличии полной информации по конкретной микросхеме.

static timing analysis также необходим и при программировании низкоуровневых функций в микроконтроллерах, так же как и динамический анализ во времени, также как и понимание цифровых схем переферийных узлов микроконтроллеров (процессоров) иногда и с вкраплениями аналоговой схемотехники.

Перефразируя классика - вопросы времени самые сложные вопросы в программировании чего угодно.

static timing analysis также необходим и при программировании низкоуровневых функций в микроконтроллерах

Тут у нас с вами нестыковка в терминологии. Я говорю про static timing analysis внутри такта - критический путь в пикосекундных задержках от D-триггера к D-триггеру. Скажем на мультиплексор столько-то пикосекунд, на комбинационный сумматор столько-то.

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

Конечно в микроконтроллерах может быть несколько источников тактового сигнала, PLL и разные частоты, но критический путь внутри микроконтроллера от D-триггера к D-триггеру, или даже от внешнего сигнала к D-триггеру - это не забота программиста. Или я вас как-то неправильно понимаю?

  1. Триггеры и защелки

Как по мне это обязательная база для профессионального программирования хоть ПЛИС, хоть микроконтроллеров хоть серверного софта.

Где вы столкнулись с SR-защелкой, D-защелкой, JK-триггером и T-триггером при работе с ПЛИС, микроконтроллером или серверным софтом? Можете перечислить каждый случай?

но критический путь внутри микроконтроллера от D-триггера к D-триггеру, или даже от внешнего сигнала к D-триггеру - это не забота программиста.

это не забота программиста до тех пор пока программисту не нужно управлять (компенсировать) эти задержки в коде. Вообще-то программисту DSP алгоритмов, например, нужно знать свойства преобразования Фурье со всеми вытекающими, а не просто учитывать задержки от D-триггера к D-триггеру, это гораздо круче, согласитесь?

D-защелкой насколько я помню является просто любая ячейка памяти (любой бит грубо говоря) , без памяти не возможно программирование, это еще Тьюринг понимал.

SR-защелкой это set/reset защелка (если это можно назвать защелкой), правильно понимаю? Другие два я действительно уже не помню, уже несколько лет не в теме. Но мне хватит 15 минут чтобы прочитать описание функциональности и вспомнить. Это не сложнее реализации примитивной операции сложения на физически реализуемых элементах, которое мне вбито гвоздями. Хотя да!, там есть всякие хитрости связанные с синхронизацией с тактовым сигналом. Вопросы времени никогда не бывают простыми (еще раз). Низкоуровневое программирование требует анализа и понимания цифровой схемотехники реализованной в разных периферийных устройствах (я же написал выше!) мне приходят на ум схемы таймеров-счетчиков со всеми прерываниями, регистрами захвата и как раз с этими тригерами и логическими элементами и муксерами сигналов и фиг знает еще с чем, которые мне приходилось использовать, если вам действительно интересно. Каждый случай перечислить конечно не могу, только вот так в общем.

Я учился на радиотехнике в начале 90-х, а радиотехника фундаментально начинается с аналоговой схемотехники, аналоговая схемотехника это фундаментальная основа всего. Цифровая схемотехника это абстракция над более общей аналоговой схемотехникой, я бы сказал. Нам эту теорию (в частности свойства преобразования Фурье, теорию оптимальной фильтрации/пеленга/обнаружения сигнала, слежения/подстройки к сигналу, ... и их отображение и применение в теории сигналов) вдалбливали и проверяли со 2-го по 5-й курсы в начале 90-х. Я даже знаю что такое токовое зеркало примерно, но если надо разберусь конкретно, хотя аналоговая схемотехника меня не особо увлекает, это все таки отдельная вселенная я бы сказал, но все таки это фундаментальные основы и относиться к ним надо соответствующе, я бы настаивал, если мое мнение кому то интересно.

это не забота программиста до тех пор пока программисту не нужно управлять (компенсировать) эти задержки в коде. Вообще-то программисту DSP алгоритмов, например, нужно знать свойства преобразования Фурье со всеми вытекающими, а не просто учитывать задержки от D-триггера к D-триггеру, это гораздо круче, согласитесь?

Все, мне теперь понятно, что вы путаете задержки внутри такта и задержки в виде количества тактов (латентность). Это принципиально разные вещи. Первые меряются в пикосекундах и невидимы программисту. Вторые меряются в тактах и такт имеет период тактового сигнала (скажем 1 наносекунда для схемы с частотой 1 гигагерц). Их программист может наблюдать косвенно, например при разной латентности доступа к памяти.

При программировании Фурье-преобразования на DSP процессоре все задержки в тактах (латентности инструкций), они не имеют никакого отношения к статическому анализу тайминга который использовался при проектировании самого DSP).

D-защелкой насколько я помню является просто любая ячейка памяти (любой бит грубо говоря) , без памяти не возможно программирование, это еще Тьюринг понимал.

Нет. D-защелка (D-latch) - это элемент состояния, но в современных процессорах главным элементом состояния является D-триггер (D-flip-flop) - он составляет более 99.99% элементогв состояния в типичной цифровой схеме. Хотя массивы D-триггеров иногда называют формой памяти (регистровый файл), нов память входит и SRAM (статическая память), и DRAM (динамическая) которые строятся не на D-защелках.

Как я написал выше D-защелка нужно в трех ипостясях:

  1. Clock gaters для экономии динамического энергопотребления - это ничтожная доля элементов состояния.

  2. Latch array (экономит несколько процентов энергопотребления по сравнению с регистровым файлом на D-триггерах).

  3. Time borrowing (продвинутый материал для старших инженеров NVidia с 10-летним опытом).

Видите, вы это все изучали, но у вас каша в голове и, что хуже, 90% это каши - это просто неверная информация. Лучше бы если бы вы выучили только четыре концепции (логический элемент, D-триггер, задержки внутри такта, задержки в тактах (латентность)), но знали бы их твердо.

Этой каши я и пытаюсь избежать со школьниками. Вот мои слайды на тему:

https://docs.google.com/presentation/d/e/2PACX-1vSvtu1KA49aFnO7PfP4XxA8-Sd4laUrkQy1SxCZjSBLivTEtCV_YS9H-eh4FULqZ3xakYBNKHM7YGyB/pub?start=false&loop=false&delayms=3000

Нет. D-защелка (D-latch) - это элемент состояния, но в современных процессорах главным элементом состояния является D-триггер (D-flip-flop) - он составляет более 99.99% элементогв состояния в типичной цифровой схеме.

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

Видите, вы это все изучали, но у вас каша в голове и, что хуже, 90% это каши - это просто неверная информация.

Если человек делает суждения на основании пары (четверки) не угаданных определений, которые он придумал, это тоже выглядит несколько наивно для меня. Ну и ладно.

Clock is used to make computation deterministic

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

Я бы сказал что клок делает работу любого реального вычислителя возможной, то есть он вносит вклад во все и в любые аспекты работы реального вычислителя! Съужать свой взгляд только до нюансов детермениованности вычислений, на мой взгляд, несколько ограниченное понимание цифровой схемотехники, на мой взгляд.

Как я написал ниже я редактор одного учебника и редактор перевода другого, то есть я согласовывал все термины в том числе с преподавателями российких вузов (МГУ, МФТИ, МИФИ, ВШЭ МИЭМ, ИТМО итд)

https://www.dmkpress.com/author/7697/?srsltid=AfmBOoqNLn7TimLiR147S40kF1IEJXHKYqqZEyPVQMJTCcOpCplpXmPe

В частности мы провели кучу совещаний по зуму для устаканивания правильных формулировок для всего. Вы можете скачать книгу отсюда

https://silicon-russia.com/public_materials/2016_11_04_one_day_mipsfpga_connected_mcu_materials_public_for_the_website/03_present_the_book_ddca_by_harris_and_harris/digital-design-and-computer-architecture-russian-translation_July16_2016.pdf

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

Я привел не все слайды. Вот про взаимодействие clock-а и вычислений: комбинационная логика - вычисляет, D-триггеры (для которых clock) хранят состояние:

Вы можете скачать книгу отсюда

я тоже могу написать книгу. Только не очень понятно что доказывает наличие написанной книги.

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

внутренности ФПГА тоже можно рассматривать как схему только с очень большими возможностями ее конфигурации , конфигурации ее ячеек и соединений между ними. Конфигурация программируется и проектируется и верифицируется, так же как и любая другая конфигурация, и конфигурация периферийных модулей микроконтроллера в том числе. Если микроконтроллер работает на частоте 1.5 Гига Герца как у меня сейчас, времена там измеряются в нано секундах и доходит до их долей, но надо стараться чтобы не доходило, это само собой не получается, надо стараться.

Микропроцессорное ядро в микроконтроллере - это схема, которая выбирает из памяти цепочку инструкций которая является программой. Выглядит это так:

Цифровая часть периферийных блоко в микроконтроллере это тоже схемы, которые реализованы на верилоге и общаются с программой работающей в микроконтроллере через "регистры ввода вывода" (memory mapped I/O), просто адреса на шине которые воспринимаются программой как адреса в памяти.

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

Само по себе процессорное ядро, написанное на верилоге с использованием тактового сигнала clock, превращается в схему - граф из логических элементов и D-триггеров. Вычисления в ALU, FPU итд (например вычисления следующего адреса перехода) выполняются с помощью комбинационной логики (графа из логических элементов), в сложных случаях (например в FPU) - с помощью комбинирования логических элементов и D-триггеров в конечные автоматы и конвейеры обработки данных.

Вот как выглядит процесс превращения верилога в кристалл:

FPGA - это альтернативный маршрут испольвания верилога, при котором мы получаем не маску из транзисторов и соединений для производства на фабрике, а файл конфигурации, который загружается в FPGA и биты которого через мультиплексоры контролируют логические функции и соединения ячеек:

Так как статический анализ тайминга (static timing analysis - STA) - это термин применяющийся только для задержек внутри такта (clock cycle) схемы, и так как тактовый сигнал есть для ASIC и для FPGA схемы и нет для программы (цепочки инструкций), то статического анализа тайминга в рамках программы нет и быть не может.

В рамках програмы может быть только анализ производительности на уровне подсчета выполненных инструкций и прошедших тактов. Но ничего внутри такта.

Замечу что FPGA может работать как двухслойная коннструкция : реализовывать схему процессора (в рамках этой реализации STA есть), который выполняет программу (для которой STA нет).

Вот как выглядит анимация простейшего вычисления - счетчика: комбинационный сумматор - вычисляет, а регистр из двух D-триггеров по положительному фронту тактового сигнала сохраняет каждый такт результат:

Мультфильм конечно красивый, только с точки зрения электроники это как раз какая-то каша. Как это у вас значение на входе сумматора переключается в Х? Как это на одной стороне провода (шины) значение, а с другой стороны Х, этот провод это наверно тоже какой-то тригер?

Потом как это одна линия передает фронты, а другая линия значения, то есть это шина, не надо их различать?

И что-то не понятно сумматор на чистой логике вы тоже называете D-тригер? Если вы решили тригером называть какую-то конструкцию из тригеров, я действительно этого угадать не мог, я к таким вольностям отношусь с большим скепсисом, уж извините.

В общем для меня это не схема, а какая-то несуразица, как и принято в мультипликации, по мультипликации это определенно оценка "отлично"!

Х в данном контектсе означает, что внутри такта, когда начинают меняться входы комбинационного сумматора, то выходы меняются не сразу. Сначала, через contamination delay, они меняться начинают (X означает неопределенное значение), причем там могут появиться даже значения которые не 0 и не 1, а с промежуточными уровнями напряжения. Затем (через propagation delay) изменения устаканиваются.

Нет, комбинационный сумматор на чистой логике - это не D-триггер, откуда вы взяли что я его так называю?

Вы это все поймете если прочитаете мои слайды по ссылке, или один и двух учебников - один который мы перевели (Харрис & Харрис), а другой который составили (Цифровой Синтез). А так мне приходится выдергивать слайды без контекста из разных моих материалов.

Х в данном контектсе означает, что внутри такта, когда начинают меняться входы комбинационного сумматора, то выходы меняются не сразу.

Честно вам сказать? Вы считаете это инженерная формулировка: "то выходы меняются не сразу"? Вы считаете это допустимый аргумент-обоснование чего-то? Если вы десятилетиями преподаете свою дисциплину, книги пишете, мне кажется вам не позволительно допускать такие вольности типа "не сразу", то есть как рак на горе свистнет! Если это не важно то это не надо упоминать, если это важно, то это должно быть четко сформулировано.

Х ничего в данном контексте не обозначает, а только путает, так как на линиях (или концах линий) подписанных Х стоят точно известные значения в каждый момент времени и это надо четко понимать.

Вы это все поймете если прочитаете мои слайды

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

Х ничего в данном контексте не обозначает

Я привожу анимацию в слайдах с введением в SystemVerilog. В этом языке есть константа 'x которая моделирует неопределенное значение на проводе.

мне кажется вам не позволительно допускать такие вольности типа "не сразу", то есть как рак на горе свистнет!

Это я говорю в следующем предложении - про contamination delay и propagation delay. Если интересуют абсолютные числа, то на современных техпроцессах речь идет о пикосекундах или десятках пикосекунд.

на линиях (или концах линий) подписанных Х стоят точно известные значения в каждый момент времени и это надо четко понимать.

Вы хотите сказать что там в каждый момент или 0 или 1? Но это не так. Внутри такта, пока значение не устаканилось, в реальном устройстве там могут быть даже значения из запретной зоны напряжений (то есть больше максимума для цифрового нуля и меньше минимума для цифровой единицы).

Clock то бишь тактовый сигнал как раз и нужен, чтобы гарантировать что когда придет его следущий положительный фронт , все сигналы уже устаканились.

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

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

ну вы блин даете! Можно подумать что на схеме нужно искать стакан, хотя я точно знаю что вы имели ввиду переходный процесс связанный с не нулевой емкостью физических дискретных элементов на которых строится аналоговая схемотехника цифровых схем. Но конденсаторы на этой схеме тоже отсутствуют, опять получается какая-то виртуальная ерунда, вроде:

" - Видишь суслика?

= Нет.

= А он есть!"

В каждой электронной компании есть разделение обязанностей между разными типами инженеров. Для проектировщика логики на уровне регистровых передач (RTL designer , Register Transfer Level) емкостей и сопротивлений нет, он просто получает отчеты по задержкам и критическим путям от EDA tools, которые присылает група по физическому проектированию.

При программировании Фурье-преобразования на DSP процессоре все задержки в тактах (латентности инструкций), они не имеют никакого отношения к статическому анализу тайминга (задержки внутри такта) который использовался при проектировании самого DSP).

Выше я имел в виду программирование Фурье-преобразования на DSP процессоре. Если вы делаете реализацию преобразования Фурье на FPGA, то там да, нужно учитывать и статический анализ тайминга (задержки внутри такта), и латентность (задержки в тактах) для максимизации пропускной способности. Но это не программирование, это FPGA проектирование.

Но это не программирование, это FPGA проектирование.

Это же субъективный вопрос, вам не кажется? Это вопрос можно ли относить FPGA проектирование к программированию, или нет, правильно? Я так понимаю что по вашему это надо запретить, правильно?

Но программирование на некотором уровне это тоже в том числе управление тригерами, использование сосредоточенных логических элементов и в том числе управление задержками нужного разрешения вплоть до наносекундных или даже пикосекундных. Если вы этим не занимались с точки зрения программирования, вы же не можете утверждать что этого не существует? А тем более убеждать того кто этим занимался что этого направления деятельности не существует? Это, опять же, тоже выглядит нескольно наивно, мне кажется.

FPGA проектирование - это уровень абстракции который называется проектирование на уровне регистровых передач (register transfer level - RTL), а также уровень микроархитектуры (стадий конвейера итд).

Программирование DSP процессоров - уровень абстракции компьютерной архитектуры, системы команд процессора.

Процессор проектируется на уровне RTL/микроархитектуры и реализует для программиста уровень архитектуры.

Это общее место для всех процессорных компаний (я работал в MIPS Technologies) и учебников типа Паттерсон-Хеннессии.

Я редактор одного учебника и редактор перевода другого, то есть я согласовывал все термины в том числе с преподавателями российких вузов (МГУ, МФТИ, МИФИ, ВШЭ МИЭМ, ИТМО итд)

https://www.dmkpress.com/author/7697/?srsltid=AfmBOoqNLn7TimLiR147S40kF1IEJXHKYqqZEyPVQMJTCcOpCplpXmPe

Это же субъективный вопрос, вам не кажется? Это вопрос можно ли относить FPGA проектирование к программированию, или нет, правильно?

А в чём субъективность? При программировании создаётся программа, набор инструкций, которая будет выполняться на какой-то вычислительной машине. При FPGA проектировании создаётся вычислительная машина.

Предыдущая статья была ровно таким же мусором как и эта. Для того чтобы это понять, нет необходимости проводит аналог с помощью ИИ. Для этого достаточно иметь базовые знания по электронке.

П.с. пожалуйста рекламу своих "курсов" публикуйте в стране проживания. Для США это будет самое то.

А чем вы собственно недовольны? Что у меня нет подтягивающих резисторов? Зато есть FIFO, ALU, регистровый файл и конечные автоматы. А в вашем курсе для детей с микросхемами малой степени интеграции они есть?

У нас в универе так же начинали с к555, только половина чипов была горелая и мы полпары искали рабочий элемент И-НЕ

Жаль что мне не 13 лет.

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

Как что? К155ИЕ1, аналогов, насколько помню, нет :)

ну да, об ней и речь

О господи! Это что, какая-то рабоче-крестьянская технология для Time Division Multiplexing (TDM)? Если мое смутное предположение верно, то вот

https://ru.wikipedia.org/wiki/Мультиплексирование_с_разделением_по_времени

entity K155IE1 is
    generic (
        INIT : STD_LOGIC_VECTOR(0 to 3) := "0000");
    port (
        R0   : in  STD_LOGIC;
        R1   : in  STD_LOGIC;
        C0   : in  STD_LOGIC;
        C1   : in  STD_LOGIC;
        \~Y\ : out STD_LOGIC);
end K155IE1;


architecture Logical of K155IE1 is
    signal R   : STD_LOGIC;
    signal C   : STD_LOGIC;
    signal CNT : STD_LOGIC_VECTOR(0 to 3) := INIT;
begin

    R <= R0 and R1;
    C <= C0 and C1;

    process (R, C) is
    begin
        if  R = '1'  then
            CNT <= "0000";
        elsif  rising_edge(C)  then
            if  CNT = "1001"  then
                CNT <= "0000";
            else
                CNT <= CNT + "0001";
            end if;
        end if;
    end process;

    \~Y\ <= '0'  when  CNT = "1001" and C = '0'  else
            '1';

end architecture Logical;

Хм, если так, то это красиво звучащее название для в общем-то банальной вещи.

Именно так :) Сей быдлокод я написал лет 15 назад -- делал (и, в целом, сделал) свою библиотеку, чтоб симулировать поведение цифровых схем, нарисованных в САПР печатных плат, способной экспортировать нетлист на VHDL или Verilog (в моём конкретном случае -- Expedition от Mentor, ныне Siemens). В не особо понятных случаях (в частности, и для этой микросхемы, и для К589ХЛ4) пришлось делать тесты реальных микросхем, в роли генератора тестовых воздействий выступала Ардуина :)

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации