МАРСОХОД

Open Source Hardware Project

Добро пожаловать, Гость
Логин: Пароль: Запомнить меня
  • Страница:
  • 1
  • 2

ТЕМА: SoC для платы Марсоход3

SoC для платы Марсоход3 3 года 2 мес. назад #4581

  • Ynicky
  • Ynicky аватар Автор темы
  • Не в сети
  • Завсегдатай
  • Завсегдатай
  • Сообщений: 209
  • Спасибо получено: 39
Получил плату Марсоход3.
Проверил оба проекта для нее. Все работает.
Теперь буду делать Систему на Кристалле.
Возник вопрос. Какой процессор вставлять?
Свой собственный? Опять получится работа
только для себя. Могу поставить клоны MIPS,
NIOS2, ARM или другие. Может посоветуете какой?
И еще вопрос, много ли человек приобрели
Марсоход3 без bis? Если только я один, то
овчинка выделки не стоит.

Николай.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

SoC для платы Марсоход3 3 года 2 мес. назад #4582

Ynicky пишет: Получил плату Марсоход3.
Проверил оба проекта для нее. Все работает.

Прекрасно когда всё работает.

Теперь буду делать Систему на Кристалле.
Возник вопрос. Какой процессор вставлять?
Свой собственный? Опять получится работа
только для себя. Могу поставить клоны MIPS,
NIOS2, ARM или другие. Может посоветуете какой?


Сложный вопрос - Вы вложили множество сил в свою разработку и готовы спрятать её в архив, занявшись другими архитектурами. А как же то устройство, для которого не хватало логических элементов в Марсоходе2? В общем, чуть ниже мой ответ на вопрос "какой".

И еще вопрос, много ли человек приобрели
Марсоход3 без bis? Если только я один, то
овчинка выделки не стоит.


Я планирую в течение месяца (и даже раньше) пиехать в Таганрог и приобрести Марсоход3 (который с 50 тыс. логических элементов). Осталось только согласовать время для поездки. Но вопрос в том, что устройство мне нужно для своего проекта. Ценность Марсохода3 для меня это ценность инструмента с большими возможностями, а все конкурирующие проекты, они и еть конкурирующие.

Мне, право, неудобно от такой наглости, но если нет совершенно никаких предпочтений в выборе, то как минимум одного постоянного и фанатичного пользователя можно обрести в моём лице, если использовать вот эту систему команд - everest.l4os.ru/cpu_commands_map_v1_1/ Помимо хорошей плотности кода и высокой расширяемости, что само по себе неплохо, в эту штуку пытаюсь запихнуть базовую часть RTOS, а именно многозадачность - управление процессами и разделение времени.

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

Что касается ARM, то как бы уже есть вот это marsohod.org/prodmarsohod2/amber-arm-soc - с учётом третьего Марсохода в него можно поместить чуть ли готовый компьютер. Как бы смысл в использовании готовых процессоров чтобы занять минимум логических элементов, а остальные использовать для ускорения каких-либо сложных насущных задач.

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

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

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от alman.

SoC для платы Марсоход3 3 года 2 мес. назад #4586

  • Ynicky
  • Ynicky аватар Автор темы
  • Не в сети
  • Завсегдатай
  • Завсегдатай
  • Сообщений: 209
  • Спасибо получено: 39

Мне, право, неудобно от такой наглости, но если нет совершенно никаких предпочтений в выборе, то как минимум одного постоянного и фанатичного пользователя можно обрести в моём лице, если использовать вот эту систему команд - everest.l4os.ru/cpu_commands_map_v1_1/


Если Вы имеете в виду реализацию вашего процессора (я думал, он у Вас уже сделан),
то есть некоторые сложности.
Поразбирался с системой команд.
Сразу нашлись проблемы с аппаратной реализацей процессора.
1. Возникнут сложности с определением начального байта инструкции при ошибке программирования,
так как система команд не фиксирована (нужен аппаратный анализ нескольких байтов инструкций).
2. Сложность реализации арифметико-логических команд с памятью, так как процессор не load/store.
Т.е. необходимо реализовать микрокод или эмулировать такие команды в несколько простых команд
(загрузка, операция АЛУ, выгрузка).
А еще есть команды поддержки многозадачности (пока не разбирался с реализацией).
Я, как системщик (приходится выбирать компромисс между разработкой аппаратуры и программного
обеспечения), не уверен в том что справлюсь с аппаратной реализацией такого процессора.
До сих пор имел дело только с разработкой load/store RISC процессоров с фиксированной
длиной команд Гарвардской архитектуры. Да и пишу я на VHDL, а не на Verilog-е.

Николай.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

SoC для платы Марсоход3 3 года 2 мес. назад #4587

Ynicky пишет: Если Вы имеете в виду реализацию вашего процессора (я думал, он у Вас уже сделан),

Сделан и даже работает, но на уровне прототипа прототипа. :)
Пока даже конвейера нет - реализовано "в лоб".

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

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

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

так как система команд не фиксирована (нужен аппаратный анализ нескольких байтов инструкций).


Вот такая конструкция используется для анализа размера инструкции
   wire [3:0] GetOperandSize = 
      (opcode[7:5] == 4'b000  ) ? 4'h1 :
      (opcode[7]   == 1'b0    ) ? 4'h2 :
      (opcode[7:5] == 3'b111  ) ? 4'h5 :
      (opcode[7:6] == 2'b11   ) ? 4'h4 : 4'h3;

Я сожалею за введение в заблуждение - по таблице инструкций эта инфаормация никак не следует.

2. Сложность реализации арифметико-логических команд с памятью, так как процессор не load/store.
Т.е. необходимо реализовать микрокод или эмулировать такие команды в несколько простых команд
(загрузка, операция АЛУ, выгрузка).

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

А еще есть команды поддержки многозадачности (пока не разбирался с реализацией).

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

Пока не реализовано, я старался не раскрывать детали. С Вашего позволения намекну как это выглядит. Регистровый файл поделен на сегменты, каждый сегмент соответствует задаче. Т.е. в текущей реализации число задач предопределено количеством сегментов в регистровом файле. В момент переключения задач переключается активный сегмент регисрового файла. Задача с номером 0 это планировщик. При выполнении некоторых инструкций их семантика отличается если они выполняются планировщиком или любой другой задачей.

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

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

Я, как системщик (приходится выбирать компромисс между разработкой аппаратуры и программного
обеспечения), не уверен в том что справлюсь с аппаратной реализацией такого процессора.
До сих пор имел дело только с разработкой load/store RISC процессоров с фиксированной
длиной команд Гарвардской архитектуры. Да и пишу я на VHDL, а не на Verilog-е.

Имхо, в данном случае язык не принципиален. Особенно в свете того, что в пределах одного проекта Quartus позволяет смешивать разные языки.

В принципе, можно устроить небольшой "holywar" на предмет RISC vs CISC. Т.е. я твёрдо уверене что у CISC есть преимущество в виде более высокой плотности кода, а это значит кто кэш инструкицй используются более оптимально, более быстрее происхдит выборка из медленной динамической памяти. Если удастся удачно конвейеризировать операции, то у RISC останется только одно преимущество - RISC использует меньшее количество логических элементов.

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

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

В общем, извините, что "тяну одеяло на себя" - скоро будет 15 лет как я познакомился и влюбился в микроядро L4 Pistachio и я действительно знаю как оптимально и эффективно использовать синхронные сообщения. Семафоры, мютексы, критические секции и прочие объекты синхронизации... они все будут нужны только для прикладного legacy софта. Синхронные сообщения - это базис на котором можно построить надёжную систему любой сложности. А если эти сообщения будут реализованы в железе, то это будет хорошим технологическим преимуществом.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

SoC для платы Марсоход3 3 года 2 мес. назад #4607

Ynicky пишет: Получил плату Марсоход3.
Проверил оба проекта для нее. Все работает.
Теперь буду делать Систему на Кристалле.
Возник вопрос. Какой процессор вставлять?
Свой собственный? Опять получится работа
только для себя. Могу поставить клоны MIPS,
NIOS2, ARM или другие. Может посоветуете какой?


Вы не написали, зачем хотите делать Систему-на-Кристалле. Ответ на этот вопрос значительно упрощает выбор.

Если пошёл разговор про SoC, то кроме архитектуры процессорного ядра довольно важным является то,
насколько удачно система собирается из IP-блоков: тут важно и то, насколько удобно разработчику компоновать
систему из блоков, так и то, насколько будет эффективен interconnect блоков.

С этой точки зрения довольно впечатляющим инструментом является fusesoc: github.com/olofk/fusesoc

fusesoc позволяет "собрать" SoC из готовых IP-блоков opencores с шиной Wishbone: для этого разработчик
пишет конфигурационный файл в котором указывает, из каких IP-блоков (процессорных ядер и периферийных
контроллеров) состоит SoC, на каких адресах Wishbone какой блок будет расположен. По этому файлу fusesoc
скачает исходные тексты IP-блоков, сгенерирует Wishbone-коммутатор и подготовит проект для САПР ПЛИС.
При необходимости при помощи fusesoc возможно запустить тесты для сгенерированной SoC.

Вот примеры конфигураций для fusesoc: github.com/openrisc/orpsoc-cores

Хотя основные IP-блоки процессорных ядер, с которыми работает fusesoc --- это OpenRISC (ядра or1200 и mor1kx),
ничто не мешает подключить ядро с другой архитектурой, главное, чтобы оно подключалось через Wishbone.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

SoC для платы Марсоход3 2 года 7 мес. назад #5756

  • Ynicky
  • Ynicky аватар Автор темы
  • Не в сети
  • Завсегдатай
  • Завсегдатай
  • Сообщений: 209
  • Спасибо получено: 39
Два года назад на Марсоходе 2 пытался сделать эмулятор ZX Spectrum.
Но ресурсов не хватило.
Сейчас решил вернуться к этой теме.
Переделал процессор st16 на 32 разряда и назвал его st32.
Сделал VGA/HDMI контроллер, который работает с экранной памятью спектрума.
По последовательному каналу через USB кабель посылаю картинки в
экранную область памяти.
Последовательный порт работал очень плохо, пока не замкнул накоротко резистор R24
как и в плате Марсоход 2.
После этого нареканий при передаче в плату нет.



Николай.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

SoC для платы Марсоход3 2 года 7 мес. назад #5757

Ура! Ynicky вернулся!

Ynicky пишет: Переделал процессор st16 на 32 разряда и назвал его st32.


Система команд сильно изменилась?

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

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

SoC для платы Марсоход3 2 года 7 мес. назад #5758

  • Ynicky
  • Ynicky аватар Автор темы
  • Не в сети
  • Завсегдатай
  • Завсегдатай
  • Сообщений: 209
  • Спасибо получено: 39
Мнемоника ассемблера осталась почти такой-же.
Исключения составляют команды загрузки-выгрузки
из-за добавления 32-х разрядных операндов.
Разрядность системы команд оставил 16р.
Регистры стали 32-х разрядными.
Что касается конкурентов, то я это делаю для души,
а не для конкуренции.
Долго не появлялся на форуме из-за занятости
в проектах для конференций, где выступает сын.

Николай.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

SoC для платы Марсоход3 2 года 7 мес. назад #5799

  • Ynicky
  • Ynicky аватар Автор темы
  • Не в сети
  • Завсегдатай
  • Завсегдатай
  • Сообщений: 209
  • Спасибо получено: 39
Проверил зашитый в процессор генератор псевдослучайного шума, взятый отсюда:
http://microsin.net/programming/avr/lfsr-pseudo-random-number-generator.html
Вывожу на 2/3 экрана, т.к. это кратно степени 2.
Вот что получилось:


Николай.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

SoC для платы Марсоход3 2 года 7 мес. назад #5800

Не будете ли добры выложить где-нибудь sof файл? Мне надо погонять свою плату под нагрузкой. Сколько ресурсов заняло весь проект? Мне для теста чем больше - тем лучше.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

  • Страница:
  • 1
  • 2
Время создания страницы: 0.195 секунд

facebook  GitHub  YouTube  Twitter