Jump to content

    

Свои процессоры

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

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

 

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

Ну и еще фундаментальные общие определения архитектуры - гарвардская, фон-неймановская, теговая. Это относится к взаимодействию ЦП и памяти.

Share this post


Link to post
Share on other sites

http://multiclet.com/ - будущее российских систем на кристалле.

 

Сколько не читал так и не понял, что тут за архитектура и на каких частотах работает. Такое ощущение, что это несколько ALU с шедулером и КП.

 

Share this post


Link to post
Share on other sites

Изучаю verilog, делаю свой процессор.

Чувствую что застрял. Какие есть архитектуры процессоров и что по ним можно прочитать?

Share this post


Link to post
Share on other sites
Изучаю verilog, делаю свой процессор.

Чувствую что застрял. Какие есть архитектуры процессоров и что по ним можно прочитать?

 

Computer Architecture A Quantitative Approach

осторожно трафик -> http://eecs.oregonstate.edu/research/vlsi/...ve_approach.pdf

 

http://electronix.ru/forum/index.php?showtopic=88548

Share this post


Link to post
Share on other sites

Позвольте и мне показать "микропроцессор". Это 32-х битное ядро, которое выглядит так:

 

0_9a811_a80997_L.png

 

Ядро использует собственную систему команд, нескромно названную "Эверест":

  • 16 регистров общего назначения
  • позиционно независимый код
  • большой запас для расширения системы команд

Частичное описание системы команд: http://everest.l4os.ru/core/

 

Несколько слов об ассемблере: http://everest.l4os.ru/assembler/

 

Пример пошаговой отладки ядра: http://everest.l4os.ru/test_of_strlen/

 

Выполнение команд занимает 2-3 клока, не считая тактов ожидания внешних устройств. Ядро проверено на плате "Марсоход2" и показало возможность работы на 100МГц. В перспективе возможна реалиазция конвейерного исполнения команд. В более далёкой перспективе - одновременное выполнение нескольких команд за такт. Причём, параллельное выполнение некоторых команд можно достичь с небольшими издержками за счёт коротких команд и 40-битной входной шины. Т.е. в перспективе ожидается параллельное выполнение нескольких команд, если они не взаимозависимы и целиком поместились на входную 40-битную шину. Впрочем, это отдалённые перспективы, потому что...

 

Процессор создаётся с надеждой на то, что в скором будущем он обзаведётся аппаратным планировщиком и расширенным MMU с поддержкой универсальных страниц виртуальной памяти. В результате процессор станет первым в мире микропроцессором с аппаратно реализованным микроядром L4. Если успеет... :)

 

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

Edited by alman

Share this post


Link to post
Share on other sites

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

 

Подробности по клику:

 

0_9a9f8_aa8b49fc_L.png

 

 

 

 

 

Share this post


Link to post
Share on other sites

Такое живое обсуждение процессоров в этой теме :)

 

Между тем, процессор "Everest" научился читать из последовательного порта. И кое-чему ещё, о чём можно узнать перейдя по ссылке. Для этого достаточно кликнуть на картинку.

 

0_9acbd_b9239159_M.png

 

 

 

 

 

 

Share this post


Link to post
Share on other sites

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

 

Сегодня расскажу ещё об одном устройстве, выполнящиюм функции арбитра шины. Сейчас оно выглядит как-то вот так:

 

0_9b51b_28fcdc8e_XL.png

 

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

 

Внутри этого устройства находится UART, ПЗУ с микрокодом и два региона ОЗУ.

ПЗУ и ОЗУ сгенерированы с помощью мегафункций Altera.

Один блок ОЗУ зарезервирован для регистров собщений, второй блок ОЗУ - кэш инструкций. Но это в будущем, а в настоящий момент эти два региона ОЗУ задействованы для тестирования отладки.

 

Выглядит это так. После старта в подключенном терминале появляется следующее меню:

┌────────────────────────> Welcome to Everest core <───────────────────────────┐
│  1 - Load binary file via X-modem protocol                                   │
│  2 - Run previously loaded binary file                                       │
│  3 - Show RAM (0x100000-0x100140)                                            │
│  4 - Test of message registers                                               │
│  5 - Show previously loaded ANSI picture                                     │
│  6 - Show built-in ANSI pic #1                                               │
│  7 - Show built-in ANSI pic #2                                               │
└──────────────────────────────────────────────────────────────────────────────┘

 

А дальше всё тривиально - после нажатия клавиши 1, устройство ожидает принятия файла по протоколу X-modem

Нажатие клавиши 2 в терминале запустит загруженный файл.

И т.д.

 

Устройство постепенно обрастает библиотечными функциями. Последние из реализованных -

_mul - умножение двух целых числел,

_div - деление целых числел,

_print_dec - вывод числа в десятичной форме в терминал.

Edited by alman

Share this post


Link to post
Share on other sites
В соседней теме кипят нешуточные страсти...

Есть две платы с Cyclone III и StratixII. На обоих у меня было несколько проектов на NiosII, при работе с программатором USB Blaster.

А как поработать на этих ПЛИС с Вашим ядром, это коммерческая тема или есть доступ для тестирования?

То есть, как сравнить все, что относится к NiosII с Вашими наработками по Эвересту...

Просмотрел Ваши сайты, но пока еще не разобрался...

 

Share this post


Link to post
Share on other sites
Есть две платы с Cyclone III и StratixII. На обоих у меня было несколько проектов на NiosII, при работе с программатором USB Blaster.

А как поработать на этих ПЛИС с Вашим ядром, это коммерческая тема или есть доступ для тестирования?

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

Формат QAR, помещённый в запароленный ZIP будет удобен?

Пароль сообщу личным сообщением.

 

Прошу понять меня правильно - сам по себе процессор ценности почти не имеет - он создан для реализации аппаратного microkernel совместимого с L4. Таким образом "просто процессор" готов раздать всем желающим, на условиях нераспространения его исходного кода. А вот что касается микроядра, то его пока нет и если оно будет реализовано, то будет коммерческим.

 

p.s. Откровенно, Ваш вопрос выбил меня из колеи. Уже как-то привык, что никакого отклика, а как получил первый вопрос, то лишился дара речи.

 

p.p.s. Прошивку для платы Марсоход2 можно скачать здесь - форум "Марсохода".

Edited by alman

Share this post


Link to post
Share on other sites

А не поздно ли в нашем "болоте" ядрами заниматься? Понятно, что отстали технологически, ну оч намного. Откуда у вас вера в коммерцию для вашего ядра, вот чего не пойму. В той же калифорнии, полно обанкротившихся компаниями с шикарными решениями ядер, причем у них под боком ну оч приличная топо технология. И вы туда же?

Share this post


Link to post
Share on other sites
А не поздно ли в нашем "болоте" ядрами заниматься? Понятно, что отстали технологически, ну оч намного. Откуда у вас вера в коммерцию для вашего ядра, вот чего не пойму.

 

Вы будете смеяться, но вся вера построена на одном допущении. Предистория такова - в 2003 году был перенсён код самописной файловой системы из консольного тестового проекта MS Visual Studio в задачу, исполняющуюся поверх микроядра L4Ka::Pistachio на архитектуре ia32. С учётом того, что микроядро L4 синхронное, файловая система заблокировала всю систему в момент чтения со stdin (проще говоря - система заблокировалась в ожидании нажатия клавиши на клавиатуре). Самое смешное, что все писатели операционных систем, использующих синхронные микроядра, сталкиваются с этой проблемой и решают её по своему. В результате, почти случайно, было найдено оригинальное решение развязывания синхронных вызовов в асинхронные, которое давало минимальный оверхед по ресурсам. Собственно, многолетняя убеждённость в том, что решение удачное, уникальное и никому пока ещё не пришло в голову - вот эта убеждённость и придаёт силы.

 

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

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

 

Кстати, собственно почему пришла идея сделать свой микропроцессор? Такие мысли были давно, но желание превратилось в намерение после переноса операционной системы "Хамелеон" с x86-32 на x86-64. В какой-то момент перенести удалось, но само микроядро L4-Pistachio работает нестабильно на 64-битах. Это очень нехорошее чувство, когда то, на что опирается ваш код, работает нестабильно, а трудозатраты на исправление чужого кода сопоставимы с трудозатратами при разработке с нуля. В общем, тут сам Бог велел забыть о "чужих" проблемах и недоработках, а сделать то, что нужно самому.

 

Не то, чтобы в Калифорнии никто не делал аппаратных планировщиков - такие исследования проводились разными командами, но вот чтобы кто-то реализовал аппаратно синхронное микроядро (microkernel) - такого ещё не сделал никто. Во всяком случае не сделал нечто, опирающееся на идеи из вот этой спецификации - http://www.l4ka.org/l4ka/l4-x2-r7.pdf

 

Простите за многословность. Я теряю самообладаение когда речь идёт об микроядре L4.

 

 

Share this post


Link to post
Share on other sites
...Прошивку для платы Марсоход2 можно скачать...
Прочел ссылки, и на мой взгляд, Вы синтезируете аппаратный диспетчер для многозадачных процессов, с целью ускорения работы операционных систем. Но могу и ошибаться…

 

Меня же пока интересует маленький процессор на 8 или 16 разрядов, с ограниченным набором команд, который загружался бы в ПЛИС типа Cyclone III, например, с EPCS16. И помимо процессора, чтобы можно было загружать программы к нему, а также другую аппаратную обвязку.

Для подобных загрузок надо знать, как вместе с процессором разместить в EPCS программу к нему, и как все это из EPCS выгрузить. Для NiosII это решается интегрированной средой и с применением jic-файла, но не понятны детали, как это все делать и увязать самому.

Конечно, NiosII удовлетворяет с лихвой, но есть задачи и для души...

Share this post


Link to post
Share on other sites
Меня же пока интересует маленький процессор на 8 или 16 разрядов, с ограниченным набором команд, который загружался бы в ПЛИС типа Cyclone III, например, с EPCS16. И помимо процессора, чтобы можно было загружать программы к нему, а также другую аппаратную обвязку.

Для подобных загрузок надо знать, как вместе с процессором разместить в EPCS программу к нему, и как все это из EPCS выгрузить. Для NiosII это решается интегрированной средой и с применением jic-файла, но не понятны детали, как это все делать и увязать самому.

Конечно, NiosII удовлетворяет с лихвой, но есть задачи и для души...

У меня есть на сайте статьи "микропроцессор своими руками"...

А вообще маленький микроконтроллер делается быстро. Самое главное - это сделать систему команд. И еще 2 стека: стек возвратов и стек данных. Двухпортовка в качестве регистрового файла... И команды перехода по выбору бита из байта.

Будут вопросы - могу подробнее объяснить.

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this