flammmable 4 4 апреля Опубликовано 4 апреля · Жалоба Добрый день! Восполняя пробелы своего образования иногда натыкаюсь на тематические пробелы комьюнити - на темы, которые не принято обсуждать в приличном обществе. Например, некоторое время назад я задавал ряд вопросов про работу конвейера STM32F1xx (Cortex-M3). Глобально, меня интересовало, как детерминированно определить время исполнения любой команды в Cortex-M3. Если формулировать вопрос более узко, то сейчас я пожалуй спросил бы, отражено ли где-нибудь в документации, как именно Cortex-M3 производит предварительную выборку команды в конвейер в случае ветвления. То есть каким правилом он руководствуется. Крайне маловероятно, чтобы это правило у микроконтроллеров в корпусах LQFP-48 предусматривало какую-то сложную эвристику. Ответы оказалось возможным сгруппировать в три категории: 1) А зачем вам это всё знать? 2) Используйте регистр DWT для статистической оценки времени выполнения команд. 3) В XXI веке в приличном обществе не принято считать такты. Вот раньше Жигули заводились с крюка, а теперь вы ищите этот крюк в Мерседесе. Вы всё делаете не так, а надо делать так. - По поводу комментариев, подобных первому, я изложил суть здесь. - Использование статистических методов для определения результатов детерминированного процесса у меня вызывает ассоциации с бегом в мешке - можно, но зачем? - По поводу крюка, Мерседеса и приличий я совсем недавно открыл для себя микроконтроллеры Sitara AM437x 2014 года от Texas Instruments. По сути эти микроконтроллеры являются Мерседесом с двумя крюками. В них помимо ядра Cortex-A присутствует пара сопроцессоров PRU0/PRU1. Сопроцессоры представляют из себя неконвейризированные(!) вычислительные ядра, работающие на частоте 200МГц и имеющие гарантированное и фиксированное время выполнения инструкций в 5 нс. А ещё есть статья Ensuring real-time predictability, рассказывающая об этой серии микроконтроллеров и намекающая, что подсчёт тактов в XXI веке вполне актуален. Но теперь у меня появился новый неприличный вопрос. Возможен ли конвейер без триггеров? Точнее так, конечно он возможен. Но есть ли такой класс задач, где подобное нетипичное решение имело бы какие-либо преимущества? И если да, то каковы особенности конструирования подобного устройства? Гуглинг по словам trigger-free pipeline и triggerless pipeline не выявил никаких процессоро-подобных изделий. Но возможно кто-нибудь сталкивался с подобным. Или сможет объяснить, почему подобная структура принципиально не применима ни в одной практической задаче. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MegaVolt 29 4 апреля Опубликовано 4 апреля · Жалоба 2 минуты назад, flammmable сказал: Возможен ли конвейер без триггеров. Точнее так, конечно он возможен. Но есть ли такой класс задач, где подобное нетипичное решение имело бы какие-либо преимущества? Гуглинг по словам trigger-free pipeline и triggerless pipeline не выявил никаких процессоро-подобных изделий. Но возможно кто-нибудь сталкивался с подобным. Или сможет объяснить, почему применение подобной структуры принципиально неприменимо. Тут какая то путаница... Слово конвейер как раз и задаёт схему где между логикой вставляются триггеры. Если от туда выкинуть триггеры то останется обычная логика. Но исчезнет конвейер. Её применяли испокон веков и нет проблемы её использовать сейчас. Любой длины и сложности. Главное результат забирать вовремя 🙂 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
flammmable 4 4 апреля Опубликовано 4 апреля · Жалоба On 4/4/2024 at 5:11 PM, MegaVolt said: Тут какая то путаница... Слово конвейер как раз и задаёт схему где между логикой вставляются триггеры. Если от туда выкинуть триггеры то останется обычная логика. Но исчезнет конвейер. Её применяли испокон веков и нет проблемы её использовать сейчас. Любой длины и сложности. Главное результат забирать вовремя 🙂 Переформулирую. Возможно ли такое неконвейризированное процессорное ядро, в котором время выполнения инструкции (точнее, время прохождения очередной инструкции от её выборки до исполнения) было бы больше периода тактового сигнала? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Yuri124 4 4 апреля Опубликовано 4 апреля · Жалоба On 4/4/2024 at 5:14 PM, flammmable said: Возможно ли такое неконвейризированное процессорное ядро, в котором время выполнения инструкции (точнее, время прохождения очередной инструкции от её выборки до исполнения) было бы больше периода тактового сигнала? несколько тактовых сигналов. Если я правильно понял вопрос - то в первых процессорах так оно и выполнялось - такт на выборку инструкции из ROM, затем - выборка (загрузка) операндов, такт (или больше) - на выполнение команды. А то и микропрограммы... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Plain 223 4 апреля Опубликовано 4 апреля · Жалоба 48 минут назад, flammmable сказал: Возможен ли конвейер без триггеров? Точнее так, конечно он возможен. Невозможен, поскольку простые логические элементы линейные схемы — требуется как минимум один нелинейный элемент Шмитта, на входе или на выходе, и увы, он триггер. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MegaVolt 29 4 апреля Опубликовано 4 апреля · Жалоба 1 час назад, flammmable сказал: Переформулирую. Возможно ли такое неконвейризированное процессорное ядро, в котором время выполнения инструкции (точнее, время прохождения очередной инструкции от её выборки до исполнения) было бы больше периода тактового сигнала? Да без проблем. В чём сложность? Какое ни будь умножение будет явно длиннее одного такта. И результат будет готов сильно позже. Нет проблемы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MegaVolt 29 5 апреля Опубликовано 5 апреля · Жалоба Но проблем нету в ПЛИС. Если мы приходим к асикам и используем динамическую логику то может оказаться что она не будет работать на медленных частотах и придётся ставить триггеры чтобы каждый этап работал побыстрее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
flammmable 4 8 апреля Опубликовано 8 апреля · Жалоба On 4/4/2024 at 7:04 PM, MegaVolt said: Да без проблем. В чём сложность? Какое ни будь умножение будет явно длиннее одного такта. И результат будет готов сильно позже. Нет проблемы. Смотрите, на текущий момент основой любого оперативного запоминающего устройства, её элементарной ячейкой, является или транзистор+конденсатор (для динамических памятей), или 6-транзисторная ячейка статической памяти, или триггер. Но так было не всегда. Когда-то в качестве оперативной памяти применялись линии задержки. В рассматриваемом случае динамическая и статическая памяти нам не интересны. В конвейризированном процессороподобном устройстве между стадиями конвейера будут стоять триггеры. Но. Что если длинная и безтриггерная структура, реализующая операции fetch-decode-execute-save будет, так скажем, "запоминать" промежуточные результаты подобно тому, как это делали линии задержки? То есть триггеров нет, но полное исполнение инструкции занимает больше одного такта и в структуре идёт одновременная обработка разных стадий инструкции. И в той части, что функционально соответствует стадии execute есть вывод, заходящий в стадию fetch для сброса этого псевдоконвейера в случае не-угадывания направления ветвления. Понимаю, что описываемая конструкция выглядит дико. Но, в теории, у неё будет чуть меньшая латентность по сравнению с классическим конвейером, у которого есть триггеры между стадиями. Хочу проговорить, я не пытаюсь тут изобрести вечный двигатель. Но, как мне кажется, технически, такую структуру вполне возможно построить. А раз возможно построить, то в рамках борьбы с зашоренностью, мне хотелось бы узнать: - делает ли так кто-нибудь? - если да, то зачем? Какие преимущества и на каких задачах будет иметь подобное устройство? - если нет, то есть ли какие-нибудь доводы против, кроме сложности работы с задержками? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yes 7 8 апреля Опубликовано 8 апреля · Жалоба Существует целая наука, которая развивалась как в СССР, так и у вероятных противников (самосинхронные схемы / asynchronous circuit (clockless or self-timed circuit)), как делать такие цепи. Там разные подходы, есть академические книжки, есть чтото в сети https://en.wikipedia.org/wiki/C-element В 90е было много проектов делать простенькие АРМы тех лет на этих схемах. Но, похоже, коммерческой пользы не вышло. Я в своей деятельности применял только один раз, для космоса сделали плату, в которой надо было чтото загрузить в тактовый генератор, чтобы пошел такт. Ну и такой самосинхронный spi сделал, заменил ff на латчи, ну и путь управления g входом сделал длиннее, чем логика на d, повезло, что была отстойная актеловская плис, где такие манипуляции были возможны. Да, частота этого spi сильно зависила от питания (наверно и от температуры - сам не смотрел, но надеюсь, что тестировали в термокамере). Mожно было какой то тактовый генератор на задержках сделать и обычный rtl, но руки чесались сделать чтото асинхронное upd: https://www.semanticscholar.org/paper/AMULET1%3A-a-micropipelined-ARM-Furber-Day/f2d688d32f0b812d3a3aec97f8a4cef8cc92a9b9 upd2: https://workcraft.org/ - раньше не видел, но гугль рекомендует Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
flammmable 4 8 апреля Опубликовано 8 апреля · Жалоба On 4/8/2024 at 11:17 AM, yes said: Существует целая наука, которая развивалась как в СССР, так и у вероятных противников (самосинхронные схемы / asynchronous circuit (clockless or self-timed circuit)), как делать такие цепи. Там разные подходы, есть академические книжки, есть чтото в сети https://en.wikipedia.org/wiki/C-element В 90е было много проектов делать простенькие АРМы тех лет на этих схемах. Но, похоже, коммерческой пользы не вышло. Я в своей деятельности применял только один раз, для космоса сделали плату, в которой надо было чтото загрузить в тактовый генератор, чтобы пошел такт. Ну и такой самосинхронный spi сделал, заменил ff на латчи, ну и путь управления g входом сделал длиннее, чем логика на d, повезло, что была отстойная актеловская плис, где такие манипуляции были возможны. Да, частота этого spi сильно зависила от питания (наверно и от температуры - сам не смотрел, но надеюсь, что тестировали в термокамере). Mожно было какой то тактовый генератор на задержках сделать и обычный rtl, но руки чесались сделать чтото асинхронное upd: https://www.semanticscholar.org/paper/AMULET1%3A-a-micropipelined-ARM-Furber-Day/f2d688d32f0b812d3a3aec97f8a4cef8cc92a9b9 upd2: https://workcraft.org/ - раньше не видел, но гугль рекомендует Оо! Вот за этот ответ и ссылки большое спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fguy 5 12 апреля Опубликовано 12 апреля · Жалоба Цифровая электроника и в частности ПЛИС работает по тактам что само собой подразумевает "защелку" данных по фронту такта (упс - триггер). Даже варианты ядер которые могут работать за такт все равно требуют "защелку" данных, не говоря уже про сигнал "валид" (он то же по тактам) где в промежутках на шине данных может твориться любой треш. Уход от тактов и триггеров ведет в глубокую старину аналоговых вычислительных машин - стальной сундук с триодами-пентодами прекрасно обходился без триггеров и решал диф уравнения 20-х и более порядков в реальном времени. Хотя и в АВМ исследуется реакция RLC-цепочек на импульс... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться