Само ядро весит примерно 700 LE, регистры ещё около 1000. Можно сделать, например, 4 копии ядра, но доступ к памяти предоставить через 2 шины, потому что всё равно сильно не нагрузят. Каким ядрам надо, те и обращаются, остальные ждут освобождения места при необходимости.
Конвейер - вставка регистров в длинные цепочки комбинаторики, чтобы не терять время на протекание заряда, и растягивание получения результата на несколько тактов. А применительно к процессору это запрос инструкции в регистр, потом на следующем такте , декодирование, вычисление результата операции, ожидание ответа памяти, и на следующем такте запись результата. Конечно, речь о простом конвейере.
Сначала в персоналках был повальный x86, и он был слабенький. Потом прошло некоторое время, и его вычислительная мощность выросла на порядки. Даже на смартфоны начали его ставить. Среди микроконтроллеров были PIC, AVR, пользователям надо было страдать и напрягаться, чтобы случайно не прожечь неправильные фьюзы. Потом году так в 2010 на рынок ворвался ARM с помощью ST Microelectronics. Они завалили прилавки дешёвыми мощными микроконтроллерами, которые можно было легко сконфигурировать программно. ARM стал модным, привычным, его начали использовать в смартфонах. Потом его мощность выросла так, что начала обгонять x86, и Apple решила не терять время, переведя свои десктопы на ARM.
"Род приходит и род проходит, и нет ничего нового под небом". ARM микроконтроллеры стали дорогими, китайцы начали заваливать рынок дешёвой альтернативой STM в виде аналогов на RISC-V ядре. Пошла разработка видеокарт с RISC-V ядрами. В это же время у Intel проблемы с новыми процессорами и соответственно, с направлением развития. Новые ядра - довольно очевидный выход.
Оно и не одобрило, поэтому пришлось добавлять конвейер. Но когда при выносе регистров в отдельный модуль неодобрение продолжилось, пришлось искать, как это исправить. Флаг AUTO_RAM_RECOGNITION в Quartus отключает автозамену регистровой памяти на встроенную.
Есть в следующих коммитах, в конце статьи упоминал. Эта статья называется "ч.1". Ну и поскольку я не специалист, то могу неправильно понимать значение терминов. Проблема была с тем, что регистр, который записывается на следующем этапе, может читаться следующей командой на предыдущем этапе. И ещё внезапным было то, что компилятор генерирует код, который пишет данные в стек и сразу читает с того же места.
Когда добавлял конвейер, пришлось и сигнал паузы добавить, так что не проблема прокинуть. Но пока кэша и внеочередного исполнения инструкций нет, и так сойдёт.
На микроконтроллере код килобайт 20 занимает, так что может и встроенной памятью удастся обойтись, а остальная периферия - генераторы шагов и uart. Когда первый раз пытался переводить, генераторы уже написал, так что не всё так страшно.
Если под вторым АЛУ имеются в виду вычисления в branch_fired, то там жалкое вычитание и сравнение, остальное вроде флагами на конце сумматора разруливается. А на конвейер я уже перешёл, вот там действительно пришлось следить, какие данные какому этапу соответствуют. Теперь флаги блокировки конвейера есть, регистры в модуль вынесены, осталось шину многоканальную с кэшем сделать и можно out-of-order выполнение инструкций прикручивать. Оно вроде не сложно выглядит, если предыдущие ядра регистр не пишут, значит можно его читать.
Может быть, сам то я в C++ привык писать. Пробовал в Quartus смотреть графический вид, там регистры взорвались в кучу мультиплексоров на несколько экранов, пришлось выносить их в отдельный модуль просто чтобы было видно остальные элементы. Но вообще картинка для привлечения внимания не совсем КДПВ, тут же логика максимально простая, прочитали, сложили по всякому, записали. lui так вообще проводки со входного регистра в выходной перекидывает.
О, супер, есть тест в железе.
Если уменьшить ток светодиода, то фронты растягиваются, так что для 3.3 В надо пересчитывать номиналы. Ещё в процессе моделирования обнаружил, что одно зеркало можно выкинуть, то есть вся доработка обычной схемы сводится к добавлению одного лишнего корпуса SC-70. Фронты будут не такие крутые, но отставание всё равно минимальное, и можно передавать аналоговые сигналы.
Выше давали ссылку на ЖЖ, там схема реального устройства с каскодным включением оптрона и осциллограммы работы. Насчёт температурной зависимости правильный вопрос, токовое зеркало при касании пальцем одного транзистора сразу реагирует, так что нужны хотя бы парные транзисторы в одном корпусе.
Теоретически должно сработать, но не факт. Пробовал моделировать подключение диода Шоттки от базы транзистора к коллектору, там особого ускорения не было видно.
Цвета графиков каждый раз при выделении меняются, поэтому в тексте подписано, какой график смотреть. Когда ток течёт через сопротивление, напряжение получается пропорциональным, поэтому с точки зрения исследования не важно, что именно мерить. Зато важно совмещать графики, которые хотелось бы сравнить, поэтому в некоторых местах вместо напряжения измерялся ток. Были ещё некоторые допущения, которые не влияют на результат. Чистый меандр — это вход, напряжение на диоде вообще не мерил. А ещё графики сверху подписаны.
Само ядро весит примерно 700 LE, регистры ещё около 1000. Можно сделать, например, 4 копии ядра, но доступ к памяти предоставить через 2 шины, потому что всё равно сильно не нагрузят. Каким ядрам надо, те и обращаются, остальные ждут освобождения места при необходимости.
Конвейер - вставка регистров в длинные цепочки комбинаторики, чтобы не терять время на протекание заряда, и растягивание получения результата на несколько тактов. А применительно к процессору это запрос инструкции в регистр, потом на следующем такте , декодирование, вычисление результата операции, ожидание ответа памяти, и на следующем такте запись результата. Конечно, речь о простом конвейере.
Сначала в персоналках был повальный x86, и он был слабенький. Потом прошло некоторое время, и его вычислительная мощность выросла на порядки. Даже на смартфоны начали его ставить. Среди микроконтроллеров были PIC, AVR, пользователям надо было страдать и напрягаться, чтобы случайно не прожечь неправильные фьюзы. Потом году так в 2010 на рынок ворвался ARM с помощью ST Microelectronics. Они завалили прилавки дешёвыми мощными микроконтроллерами, которые можно было легко сконфигурировать программно. ARM стал модным, привычным, его начали использовать в смартфонах. Потом его мощность выросла так, что начала обгонять x86, и Apple решила не терять время, переведя свои десктопы на ARM.
"Род приходит и род проходит, и нет ничего нового под небом". ARM микроконтроллеры стали дорогими, китайцы начали заваливать рынок дешёвой альтернативой STM в виде аналогов на RISC-V ядре. Пошла разработка видеокарт с RISC-V ядрами. В это же время у Intel проблемы с новыми процессорами и соответственно, с направлением развития. Новые ядра - довольно очевидный выход.
Оно и не одобрило, поэтому пришлось добавлять конвейер. Но когда при выносе регистров в отдельный модуль неодобрение продолжилось, пришлось искать, как это исправить. Флаг AUTO_RAM_RECOGNITION в Quartus отключает автозамену регистровой памяти на встроенную.
Это надо для развития опенсорса.
Есть в следующих коммитах, в конце статьи упоминал. Эта статья называется "ч.1". Ну и поскольку я не специалист, то могу неправильно понимать значение терминов. Проблема была с тем, что регистр, который записывается на следующем этапе, может читаться следующей командой на предыдущем этапе. И ещё внезапным было то, что компилятор генерирует код, который пишет данные в стек и сразу читает с того же места.
Когда добавлял конвейер, пришлось и сигнал паузы добавить, так что не проблема прокинуть. Но пока кэша и внеочередного исполнения инструкций нет, и так сойдёт.
На микроконтроллере код килобайт 20 занимает, так что может и встроенной памятью удастся обойтись, а остальная периферия - генераторы шагов и uart. Когда первый раз пытался переводить, генераторы уже написал, так что не всё так страшно.
Ничего себе скорость добавления обвязки. О_о
Но это уже для следующей статьи.
Нужны подробности. Речь про моё ядро или какое-то другое?
Если под вторым АЛУ имеются в виду вычисления в branch_fired, то там жалкое вычитание и сравнение, остальное вроде флагами на конце сумматора разруливается. А на конвейер я уже перешёл, вот там действительно пришлось следить, какие данные какому этапу соответствуют. Теперь флаги блокировки конвейера есть, регистры в модуль вынесены, осталось шину многоканальную с кэшем сделать и можно out-of-order выполнение инструкций прикручивать. Оно вроде не сложно выглядит, если предыдущие ядра регистр не пишут, значит можно его читать.
В принципе на его лавры не претендую, просто хотел сказать, что не такая это страшная вещь - процессор ) .
Может быть, сам то я в C++ привык писать. Пробовал в Quartus смотреть графический вид, там регистры взорвались в кучу мультиплексоров на несколько экранов, пришлось выносить их в отдельный модуль просто чтобы было видно остальные элементы. Но вообще картинка для привлечения внимания не совсем КДПВ, тут же логика максимально простая, прочитали, сложили по всякому, записали. lui так вообще проводки со входного регистра в выходной перекидывает.
Наконец начали правильные вопросы задавать. Небось про этот документик уже все забыли https://www.nato.int/nato_static_fl2014/assets/pdf/2022/2/pdf/220215-eadrcc-ukraine-request.pdf
Если уменьшить ток светодиода, то фронты растягиваются, так что для 3.3 В надо пересчитывать номиналы. Ещё в процессе моделирования обнаружил, что одно зеркало можно выкинуть, то есть вся доработка обычной схемы сводится к добавлению одного лишнего корпуса SC-70. Фронты будут не такие крутые, но отставание всё равно минимальное, и можно передавать аналоговые сигналы.