Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Свои процессоры
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
Страницы: 1, 2, 3, 4, 5, 6, 7
Егоров
Цитата(Corner @ Aug 17 2013, 23:04) *
А мне больше нравиться архитектура, когда в одном программном слове указатели на данные и их формат. Одна инструкция содержит до 11 скрытых операций: . Мало кода, четкая параллельность...

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

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

Сколько не читал так и не понял, что тут за архитектура и на каких частотах работает. Такое ощущение, что это несколько ALU с шедулером и КП.
Pavia
Изучаю verilog, делаю свой процессор.
Чувствую что застрял. Какие есть архитектуры процессоров и что по ним можно прочитать?
Postoroniy_V
Цитата(Paviaa @ Feb 21 2014, 21:19) *
Изучаю verilog, делаю свой процессор.
Чувствую что застрял. Какие есть архитектуры процессоров и что по ним можно прочитать?


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

http://electronix.ru/forum/index.php?showtopic=88548
alman
Позвольте и мне показать "микропроцессор". Это 32-х битное ядро, которое выглядит так:



Ядро использует собственную систему команд, нескромно названную "Эверест":
  • 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. Если успеет... sm.gif

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

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






alman
Такое живое обсуждение процессоров в этой теме sm.gif

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







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

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



Как видно из картинки, устройство почти полностью симметрично показанному выше ядру, за исключением добавленных ног - 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 - вывод числа в десятичной форме в терминал.
Serhiy_UA
Цитата(alman @ May 21 2014, 13:10) *
В соседней теме кипят нешуточные страсти...

Есть две платы с Cyclone III и StratixII. На обоих у меня было несколько проектов на NiosII, при работе с программатором USB Blaster.
А как поработать на этих ПЛИС с Вашим ядром, это коммерческая тема или есть доступ для тестирования?
То есть, как сравнить все, что относится к NiosII с Вашими наработками по Эвересту...
Просмотрел Ваши сайты, но пока еще не разобрался...
alman
Цитата(Serhiy_UA @ May 21 2014, 15:27) *
Есть две платы с Cyclone III и StratixII. На обоих у меня было несколько проектов на NiosII, при работе с программатором USB Blaster.
А как поработать на этих ПЛИС с Вашим ядром, это коммерческая тема или есть доступ для тестирования?

Если согласны не передавать исходный код ядра третьим лицам, то могу передать архив с проектом, например, расшарив его через Google диск.
Формат QAR, помещённый в запароленный ZIP будет удобен?
Пароль сообщу личным сообщением.

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

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

p.p.s. Прошивку для платы Марсоход2 можно скачать здесь - форум "Марсохода".
Aner
А не поздно ли в нашем "болоте" ядрами заниматься? Понятно, что отстали технологически, ну оч намного. Откуда у вас вера в коммерцию для вашего ядра, вот чего не пойму. В той же калифорнии, полно обанкротившихся компаниями с шикарными решениями ядер, причем у них под боком ну оч приличная топо технология. И вы туда же?
alman
Цитата(Aner @ May 21 2014, 18:27) *
А не поздно ли в нашем "болоте" ядрами заниматься? Понятно, что отстали технологически, ну оч намного. Откуда у вас вера в коммерцию для вашего ядра, вот чего не пойму.


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

Цитата(Aner @ May 21 2014, 18:27) *
В той же калифорнии, полно обанкротившихся компаниями с шикарными решениями ядер, причем у них под боком ну оч приличная топо технология. И вы туда же?

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

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

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

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

Serhiy_UA
Цитата(alman @ May 21 2014, 17:37) *
...Прошивку для платы Марсоход2 можно скачать...
Прочел ссылки, и на мой взгляд, Вы синтезируете аппаратный диспетчер для многозадачных процессов, с целью ускорения работы операционных систем. Но могу и ошибаться…

Меня же пока интересует маленький процессор на 8 или 16 разрядов, с ограниченным набором команд, который загружался бы в ПЛИС типа Cyclone III, например, с EPCS16. И помимо процессора, чтобы можно было загружать программы к нему, а также другую аппаратную обвязку.
Для подобных загрузок надо знать, как вместе с процессором разместить в EPCS программу к нему, и как все это из EPCS выгрузить. Для NiosII это решается интегрированной средой и с применением jic-файла, но не понятны детали, как это все делать и увязать самому.
Конечно, NiosII удовлетворяет с лихвой, но есть задачи и для души...
iosifk
Цитата(Serhiy_UA @ May 26 2014, 14:49) *
Меня же пока интересует маленький процессор на 8 или 16 разрядов, с ограниченным набором команд, который загружался бы в ПЛИС типа Cyclone III, например, с EPCS16. И помимо процессора, чтобы можно было загружать программы к нему, а также другую аппаратную обвязку.
Для подобных загрузок надо знать, как вместе с процессором разместить в EPCS программу к нему, и как все это из EPCS выгрузить. Для NiosII это решается интегрированной средой и с применением jic-файла, но не понятны детали, как это все делать и увязать самому.
Конечно, NiosII удовлетворяет с лихвой, но есть задачи и для души...

У меня есть на сайте статьи "микропроцессор своими руками"...
А вообще маленький микроконтроллер делается быстро. Самое главное - это сделать систему команд. И еще 2 стека: стек возвратов и стек данных. Двухпортовка в качестве регистрового файла... И команды перехода по выбору бита из байта.
Будут вопросы - могу подробнее объяснить.
Stewart Little
Цитата(Serhiy_UA @ May 26 2014, 14:49) *
Меня же пока интересует маленький процессор на 8 или 16 разрядов, с ограниченным набором команд,
Насколько "маленький" должен быть процессор в ресурсах ПЛИС? Есть пара "почти доделанных" вариантов 8-разрядникров "для души" (порядка 200-400 LE в зависимости от степени махровости) sm.gif

Цитата(Serhiy_UA @ May 26 2014, 14:49) *
который загружался бы в ПЛИС типа Cyclone III, например, с EPCS16. И помимо процессора, чтобы можно было загружать программы к нему, а также другую аппаратную обвязку.
Для подобных загрузок надо знать, как вместе с процессором разместить в EPCS программу к нему, и как все это из EPCS выгрузить. Для NiosII это решается интегрированной средой и с применением jic-файла
А зачем так сложно? Размещейте код в блоках встроенного ОЗУ ПЛИСа. Для отладки кода можно использовать In-system Memory Content Editor. А финальная версия кода будет содержаться в pof'е и грузиться во всторенное ОЗУ ПЛИС в процессе конфигурирования.
alman
Цитата(Serhiy_UA @ May 26 2014, 14:49) *
Прочел ссылки, и на мой взгляд, Вы синтезируете аппаратный диспетчер для многозадачных процессов, с целью ускорения работы операционных систем. Но могу и ошибаться…


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

Цитата(Serhiy_UA @ May 26 2014, 14:49) *
Меня же пока интересует маленький процессор на 8 или 16 разрядов, с ограниченным набором команд, который загружался бы в ПЛИС типа Cyclone III, например, с EPCS16.


Посмотрите вот это (кликабельно):



Цитата(Serhiy_UA @ May 26 2014, 14:49) *
И помимо процессора, чтобы можно было загружать программы к нему, а также другую аппаратную обвязку.
Для подобных загрузок надо знать, как вместе с процессором разместить в EPCS программу к нему, и как все это из EPCS выгрузить. Для NiosII это решается интегрированной средой и с применением jic-файла, но не понятны детали, как это все делать и увязать самому.
Конечно, NiosII удовлетворяет с лихвой, но есть задачи и для души...


Задачи для души, по моему скромному мнению, это самый лучший стимул для разработки.
Я использовал мегафункцию ROM для размещения интерактивного монитора и загрузчика по протоколу X-modem непосредственно в ПЛИС.
В принципе, в микрокод можно поместить довольно сложные программы.

Ой... Вы имеете в виду как загрузить из EPCS пользовательскую программу в процессор и что NiosII умеет это делать.
Да, я тоже хотел бы это знать, как можно "программно" прочитать регион памяти из EPCS, в которой зашита прошивка устройства. Некоторая информация есть вот здесь .

Грендайзер
Здравствуйте, товарищи! Не совсем пишу туда куда надо, но не хочу создавать целую тему, во всяком случае пока что, так что выскажусь здесь. Не имю большого опыта в работе с софт процессорами, но весчь безусловна интересная и архиполезная! Вот и я гуляя по просторам тырнета в поисках халявный ядрышек набрёл на сайтик http://www.oreganosystems.at/?page_id=96 на коем валяется бесплатный проектик ядра 8051. Вообщем собрал я его и запустил, удачно поморгал сетодиодиками, но вот в итоге встал вопрос, что дальше то? У меня стоит задача общения с n-ым кол-вом устройств по уарт на скорости до 1Мб/с. Однако как я понял, по диодикам, ядро работает не так что б аж "В ЛЁТ"! На симулирование времени не было. Досканально разбирать код - cranky.gif крыша съедит, нет ни времени ни желания. Правда прогнал его через TimeQuest, в коем я совсем и не спец (ограничения задал лишь на клоковую частоту) ну и на 25МГц полезли слаки (хотя в даташитах написано, что эту частоту выставлять и надо). В составе ядра имеется т.н. datamux, который и портил картину - весь проект тактируется по переднему фронту, а этот блок по заднему! В следствии точо, что как я понял из схемы он и не нужен вообщем (схема видимо сыровата и последний раз правилась аж 10 лет назад) то я его исключил. И вроде на 25МГц завелось. Но вот мож но ли ещё частоту задрать? Вообщем вопрос в следующем, кто нибудь вообще с этой штукой ковырялся и стоит ли вообще её ковырять?
P.S.
Цитата
Конечно, NiosII удовлетворяет с лихвой, но есть задачи и для души...

Сложно представить, во всяком случае если он эконом класса... т.е. БЕСплатный! АВРка и та могутнее в ряде случаев будит, хотя конечно если количество интерфейсов или счётчиков не нормировано... то да-с...
iosifk
Цитата(Грендайзер @ Jun 25 2014, 16:28) *
бесплатный проектик ядра 8051.
Вообщем вопрос в следующем, кто нибудь вообще с этой штукой ковырялся и стоит ли вообще её ковырять?

На открытых проектах полно разных процессоров. Так зачем их искать по "помойкам", да еще тех, которые не поддерживаются...
Чем не устраивают те, к которым есть компиляторы? Скажем Альтеровские? Или бесплатные Актеловские?
А может вообще, N+1 автомат нужен и все дела?
Грендайзер
Ну по поводу открытых проектов - как я понял эти занимаются все у кого душа к этому тяготеет, и прожжёный спец и начинающий любитель... так что как попадёшь, и в этом плане данное ядро ничем не отличается от открытых ресурсов. А вот дока на него очень качественная! Теперь, что значит
Цитата
не поддерживаются...
и
Цитата
Чем не устраивают те, к которым есть компиляторы?

Программку то я для него написал и скомпилил!!! Более того скоомпилил в последней (бесплатной версии) Keil, её я скачал с сайта совсем не давно. Да и ядро это тащем то популярное... относительно, даже в нынешнее время! Ниос же как я писал эконом класа меня не устроил (не успевает он достойно обрабатывать прерывания на той скорости что я указывал), а "экспропреировать" его не выходит. С актеловскими вообще не знаком и как вообще аолучится ли их в альтеру то засунуть?
Leka
Для нового проекта перешел на Altera. Попробовал перенести давнишнее ядро, оптимизированное под Xilinx:
http://electronix.ru/forum/index.php?showt...mp;#entry597323
и сразу проблемы:
1) Квартус ни под каким соусом не хочет есть Верилоговское описание True Dual Port памяти с сигналом разрешения клока. Это действительно так, или плохо смотрел?
2) Квартус не хочет автоматом размещать в MLAB мелкие регистровые файлы с асинхронным чтением, без явного размещения атрибута (* ramstyle = "MLAB, no_rw_check" *) перед каждым объявлением мелкой памяти. Это действительно так, или плохо смотрел?

Пока-что двухпортовую память выделил в отдельную мегафункцию, и вставил нужный атрибут перед объявлением регистрового файла (но это неудобно, тк Верилоговский код синтезируется автоматом из другого описания). Дизайн заработал, результат синтеза для 32-разрядного ядра(Фон-Неймановская архитектура с 1К РФ в памяти) + память(2К слов) + UART + кнопки + светодиоды:
Код
+------------------------------------------------------------------------------+
; Fitter Summary                                                              ;
+---------------------------------+--------------------------------------------+
...
; Family                         ; Cyclone V                                 ;
; Device                         ; 5CGXFC5C6F27C7                            ;
; Timing Models                  ; Final                                     ;
; Logic utilization (in ALMs)    ; 203 / 29,080 ( < 1 % )                    ;
; Total registers                ; 197                                       ;
; Total pins                     ; 26 / 364 ( 7 % )                          ;
; Total virtual pins             ; 0                                         ;
; Total block memory bits        ; 73,728 / 4,567,040 ( 2 % )                ;
...
+---------------------------------+--------------------------------------------+



Как описать такую память на Верилоге, чтобы Квартус понял?
Kopa
Цитата(iosifk @ May 26 2014, 09:48) *
У меня есть на сайте статьи "микропроцессор своими руками"...
А вообще маленький микроконтроллер делается быстро. Самое главное - это сделать систему команд. И еще 2 стека: стек возвратов и стек данных. Двухпортовка в качестве регистрового файла... И команды перехода по выбору бита из байта.
Будут вопросы - могу подробнее объяснить.

"Наследие" MISC архитектуры?
Leka
Не понял, к кому вопрос. Но могу пояснить, зачем мне понадобилось реанимировать собственное маленькое ядро - для проверки кое-каких идей по описанию схем с целью синтеза. Верилог (и тп) в синтезе == ассемблер в программировании. Ушли от ассемблера - давно уже пора уходить и от Верилога (и тп).
Поэтому и встал вопрос описания памяти. В ISE именно с этим проблем нет (но есть другая принципиальная проблема, почему и перешел на Квартус).
Stewart Little
Цитата(Leka @ Sep 1 2014, 18:16) *
1) Квартус ни под каким соусом не хочет есть Верилоговское описание True Dual Port памяти с сигналом разрешения клока. Это действительно так, или плохо смотрел?
...
Как описать такую память на Верилоге, чтобы Квартус понял?

Не оно: Verilog HDL: True Dual-Port RAM with a Single Clock ?
Ну и другие примеры там посмотреть можно...
Kuzmi4
Цитата(Leka @ Sep 1 2014, 16:16) *
1) Квартус ни под каким соусом не хочет есть Верилоговское описание True Dual Port памяти с сигналом разрешения клока. Это действительно так, или плохо смотрел?

У меня вот такое нормально работает на альтере и хилых, не совсем разрешение клока конечно но может вам подойдёт:
CODE

//////////////////////////////////////////////////////////////////////////////////
module sdpram #(parameter p_DW = 0, parameter p_AW = 0)
(
// SYS_CON
input i_clk,
// IN / port-a
input i_we_a,
input [p_AW-1:0] iv_addr_a,
input [p_DW-1:0] iv_data_a,
// OUT / port-b
input i_rd_b,
input [p_AW-1:0] iv_addr_b,
output reg [p_DW-1:0] ov_data_b
);
//////////////////////////////////////////////////////////////////////////////////
// ram-MEM
reg [p_DW-1:0] sv_mem [2**p_AW-1:0];

//////////////////////////////////////////////////////////////////////////////////
//
// Construct "Simple Dual Port RAM" logic
//
always @ (posedge i_clk)
begin : RAM_LOGIC
// IN / port-a
if (i_we_a)
sv_mem[iv_addr_a] <= iv_data_a;
// OUT / port-b
if (i_rd_b)
ov_data_b <= sv_mem[iv_addr_b];
end
//////////////////////////////////////////////////////////////////////////////////
endmodule
Serhiy_UA
Цитата(Leka @ Sep 1 2014, 21:57) *
...но есть другая принципиальная проблема, почему и перешел на Квартус...

Уточните, в чем проблема и почему переход на Квартус ее решил...

Сделал недавно небольшой софт RISC-процессор на 8 разрядов. Память команд и данных по 4К. Система команд - 25 инструкций, схожая на MCS51. Всего 20% времени ушло на verilog-синтез и 80% - на программирование на С++ транслятора с ассемблера в машинные коды.Память программ сначала была одно-, а потом двух-портовая, что в итоге позволило двухбайтные команды также выполнять за один такт. На Cyclone III скорость 100 MГц.
Выгода этого дела - процессор можно постоянно улучшать как по системе команд и функционалу, так и по производительности. Если будет свободное время…
Leka
Такое описание синтезируется:
Код
//True Dual Port RAM
module mem(
    output reg [10-1:0] qA, qB,
    input [10-1:0] dA, dB,
    input [10-1:0] aA, aB,
    input weA, weB, reA, reB, clkA, clkB
);
    //(* ramstyle = "M10K, no_rw_check" *)
    reg [10-1:0] ram[2**10-1:0];
    
    always@(posedge clkA)
        if(weA)
            ram[aA] = dA;

    always@(posedge clkB)
        if(weB)
            ram[aB] = dB;            
        
    always@(posedge clkA)
        //if(reA)
            qA <= ram[aA];

    always@(posedge clkB)
        //if(reB)
            qB <= ram[aB];

endmodule

а с сигналами разрешения чтения не синтезируется. Придется костыль приделывать...

Цитата(Serhiy_UA @ Sep 2 2014, 14:20) *
Уточните, в чем проблема и почему переход на Квартус ее решил...


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

По поводу простого ядра - могу выложить свое 5-летней давности (более поздние еще не реанимировал) с простым компилятором(без исходника), но код малочитаем: 1) некоторые блоки ручками соптимизированы, 2) весь код автоматически сгенерирован из другого описания, в котором все сигналы по-умолчанию 64-разрядные(и тп), 3) док нет, тк это просто один из экспериментов по поиску "оптимальной" архитектуры.
Serhiy_UA
Leka, если не трудно, то уточните.
Цитата(Leka @ Sep 2 2014, 20:22) *
Мои интересы сейчас - переход на более высокий уровень описания синхронных схем.
Это по отношению к верилогу, или что-то другое?

Цитата(Leka @ Sep 2 2014, 20:22) *
По поводу простого ядра - могу выложить свое 5-летней давности ...
Интересно было бы узнать его структурные данные.

Цитата(Leka @ Sep 2 2014, 20:22) *
весь код автоматически сгенерирован из другого описания...
С одного HDL в другой?

Цитата(Leka @ Sep 2 2014, 20:22) *
...это просто один из экспериментов по поиску "оптимальной" архитектуры.
Какими будут критерии оптимальности?

Меня еще интересует метод повышения быстродействия для стандартных инструкций для RISC-процессоров за счет конвейеризации. Где бы почитать об этом?
Leka
top.v - топ-модуль
soc.v - ядро + uart + кнопки + светодиоды
memA.v - RAM для CycloneV
memX.v - RAM для Xilinx
top.hex - код для загрузки ядра по uart (содержит служебную информацию)
q.pas - тестовая программа (конструкции языка + N-ферзей)
c.bat - запуск компилятора и симулятора
compile.exe - компилятор (без каких-либо проверок синтаксиса и тп, winXP), создает top.hex
core.exe - потактовый симулятор ядра (winXP), исполняет top.hex .
sof.bat - вызывает jtag загрузчик и устанавливает параметры uart, надо поправить путь к top.sof и номер uart
top.bat - компилирует программу и загружает код в ядро, надо поправить номер uart
u.exe - выводит на экран поток из uart (u.c, winXP)

Цитата(Serhiy_UA @ Sep 3 2014, 09:29) *
Это по отношению к верилогу, или что-то другое?

По отношению к верилогу.

Цитата
Какими будут критерии оптимальности??

Это целый опус писать надо, не сейчас.
Leka
Кстати, top.v для CycloneV Квартус 9sp1 (какой был с моделями старых Циклонов) без переделки собрал для CycloneIII, заменив асинхронный MLAB на синхронный M9K wacko.gif
Платы с CycloneIII под рукой нет (только с CycloneV), если кто проверит в железе - буду признателен.
Копейкин
Многоуважаемые проектировщики собственных процессоров.
Поделитесь, пожалуйта, информацией, где можно почитать про микрокоды,
для разработки собственного процессора.
Разработка, инструментарий, практические советы, внятные примеры...
yes
есть книжка в свободном доступе VHDL Coocbook
там в качестве примера процессор

но по хорошему, нужно брать на Opencores.org ядро процессорное и смотреть, как сделано. еще есть leon от gaisler-а - но это лучше для понимания как делать микропроцессорную систему, само ядро там, по-моему, сложно описано - трудно разбираться

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

для совсем простого - просто посмотреть Zylin ZPU проект
Serhiy_UA
Представляю свой 8-разрядный софт процессор miniByte, реализованный в среде QII 8.1 на Cyclone III.
Приложение miniByte.rar включает:
miniByte.pdf – краткое описание структуры процессора и сиcтемы команд.
mb.exe - транслятор с ассемблера mb.asm в файл mb.mif
mb.asm – пример кода с выводом текста «HELLO» на LCD.

Процессор miniByte предназначен для программирования внутри ПЛИС, с возможностью изменять под задачу его архитектуру и систему команд.
Система команд miniByte схожа с 51 архитектурой, но сокращена до 32 команд с длинами в один или два байта.
Тактовая частота до 100 МГц, а команды выполняются за 1 или 2 такта. Память RAM и ROM емкостью по 4096*8 реализована на 2-х портовой внутренней памяти М9К. Стек в RAM произвольной длины. Систему прерывания пока не делал.

Синтез софт процессора на verilog и транслятор на С++ написал сам.
Для трансляции запустить mb.exe в том же директории, где и mb.asm. Создастся файл mb.mif, используемый далее в QII при загрузках в ROM.
Средствами QII 8.1 можно симулировать программу из mb.mif до уровня регистров.
После конфигурирования ПЛИС, процессор сбрасывается сигналом locked от мега-функции ALTPLL.
alman
Цитата(Serhiy_UA @ Jan 13 2015, 13:47) *
Представляю свой 8-разрядный софт процессор miniByte, реализованный в среде QII 8.1 на Cyclone III.


Конкуренция растёт. sm.gif
А я предлагаю 32-разрядный микропроцессор. Точнее, архитектуру. Вот, намедни сделал карту системы команд.



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

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

А вот так может выглядеть программа на ассемблере для этого процессора



Знаю проекты, которые продвинулись значительно дальше моего, но с точки зрения возможностей архитектуры я готов пободаться.sm.gif
Serhiy_UA
Цитата(alman @ Feb 15 2015, 14:13) *
Конкуренция растёт. sm.gif
8 –разрядный софт процессор не конкурент 32-разрядному. У них разное предназначение, скорее он мог бы быть младшим партнером. Для меня главное, что мой miniByte уже работает и его можно легко втыкать в ПЛИС взамен очень больших FSM.
Здесь мне интересны методы аппаратной реализации процессора в HDL, а также способы и детали программирования транслятора с ассемблера, ну и архитектура в целом. То есть, кто и как это все реализует…
У Вас, как я понимаю, задача аппаратной реализации операционной системы... Один мой знакомый, правда в Америке, что-то подобное делает.
~Elrond~
Serhiy_UA
Цитата
Представляю свой 8-разрядный софт процессор miniByte, реализованный в среде QII 8.1 на Cyclone III.
А исходники самого проца (rtl) и ассемблера вы можете выложить?
Maverick
Цитата(~Elrond~ @ Mar 11 2015, 22:40) *
Serhiy_UA
А исходники самого проца (rtl) и ассемблера вы можете выложить?

это Вам не подходит?
на 2 поста выше...
~Elrond~
Maverick
А вы вообще скачивали этот архив? Буду весьма благодарен, если вы найдёте там хоть один verilog файл. sm.gif
Timmy
Мне кажется, что miniByte подходит только для самых простых задач - ну типа светодиодом поморгать, передать в ком порт константную строчку и т.п. Поскольку в нём нет даже сложения двух регистров(сложение возможно только с константой), более сложные операции придётся выполнять, примерно как на машине Тьюринга sm.gif.
des00
Цитата(Timmy @ Mar 12 2015, 15:36) *
Мне кажется, что miniByte подходит только для самых простых задач - ну типа светодиодом поморгать, передать в ком порт константную строчку и т.п. Поскольку в нём нет даже сложения двух регистров(сложение возможно только с константой), более сложные операции придётся выполнять, примерно как на машине Тьюринга sm.gif.

ну не факт. вот на таких чипах народ даже работал, минибайт по сравнению с этим супер пупер проц sm.gif
Serhiy_UA
Цитата(Timmy @ Mar 12 2015, 11:36) *
Мне кажется, что miniByte подходит только для самых простых задач - ну типа светодиодом поморгать, передать в ком порт константную строчку и т.п. Поскольку в нём нет даже сложения двух регистров(сложение возможно только с константой), более сложные операции придётся выполнять, примерно как на машине Тьюринга sm.gif.

Timmy, спасибо за замечание!
Проглядел, исправлю. Бывает, когда все делаешь сам.
Теперь вместо команды INC A, введу двухбайтную ADD A, Rx. Ведь аккумулятор инкрементируется и через ADD A, xy.
Проблем нет, я как раз и хотел обсуждения…

Сравнение с машиной Тьюринга забавно, а какая на самом деле там была система команд, кто знает?

Да, еще для затравки. Хотел сделать софт-процессор "полуБайт". То есть с данными в 4 бита. Пока только хочу... Тоже для микро применений.
des00
Цитата(Serhiy_UA @ Mar 12 2015, 16:02) *
Сравнение с машиной Тьюринга забавно, а какая на самом деле там была система команд, кто знает?

описание языка brainfuck почитайте. это оно и есть
Цитата
Да, еще для затравки. Хотел сделать софт-процессор "полуБайт". То есть с данными в 4 бита. Пока только хочу... Тоже для микро применений.

возьмите пикоблейз и прокачайте его до нормального уровня (большой регистровый файл, 4К команд, AXI), вот это будет дело
x736C
Как раз 3 команд не хватает до pic'а (35 команд).

Может тогда все команды, где осуществляются операции с заданной константой, перевести в режим работы с аккумулятором, как у Motorola MC14500B, ссылку на который привел ув. des00.

Код
#1    LD    A        RR ← A
#2    AND   B        RR ← A • B
#3    STO   TEMP     RR = A • B → TEMP
#4    LD    C        RR ← C
#5    AND   D        RR ← C • D
#6    OR    TEMP     RR ← C • D + (TEMP = A • B) = A • B + C • D
#7    STO   LOAD     RR = A • B + C • D → LOAD
Maverick
Цитата(~Elrond~ @ Mar 12 2015, 09:51) *
Maverick
А вы вообще скачивали этот архив? Буду весьма благодарен, если вы найдёте там хоть один verilog файл. sm.gif

честно признаюсь, не скачивал - verilog файлов в архиве действительно не оказалось... laughing.gif
Leka
У меня для проекта "Си как HDL, или Верилог без always" (см. marsohod.org ) написан софт-процессор, совместимый по ассемблеру с ядром msp430 - программы можно писать на Си с использованием GCC. Но компиляция с ассемблера в машинные коды делается самопальной программой. Проект делался только как демо-пример, поэтому без поддержки библиотек и тп. Без периферии занимает ~350 ЛЕ, быстродействие ~50МГц msp430.
des00
Цитата(Leka @ Mar 12 2015, 18:37) *
У меня для проекта "Си как HDL, или Верилог без always" (см. marsohod.org ) написан софт-процессор

ткните пожалуйста носом, поиск в проектах на этом сайте привел меня в никуда sad.gif Спасибо.
~Elrond~
des00
Я так понял, вот эта тема http://marsohod.org/index.php/forum-33/raz...-proshivki#3101
Только там нет исходников процессора.
Timmy
Цитата(des00 @ Mar 12 2015, 12:16) *
возьмите пикоблейз и прокачайте его до нормального уровня (большой регистровый файл, 4К команд, AXI), вот это будет дело

Однажды я из любопытства и для тренировки написал за 4 дня на верилоге клон Lattice mico8(это примерно то же, что пикоблейз), когда он ещё был сам по себе. В результате у меня получилась fmax 145MHz против 85 у оригинала, меньше объём LE, и один такт на инструкцию(кроме исполняемых переходов), вместо двух. Потом посмотрел, как криво mico8 интегрировали в систему с wishbone, и энтузиазм сделать так же и опубликовать почему-то пропалsm.gif.
В общем, я легко могу сделать на верилоге свободный и открытый аналог пикоблейза с улучшенной растактовкой и системой команд(по прикидке, можно, например, сделать 64 общих регистра и 4килослова кода), присобачить его мастером к AXI/Avalon, и написать на TCL ассемблер. А вот сделать под него порт binutils+gcc энтузиазма уже не хватит. Хотя можно, например, сделать точный клон mico8 под AXI, чтобы к нему подходил софт от Латтис.
~Elrond~
Timmy
Поделитесь пожалуйста своими наработками по клону Mico8 (если это не коммерческий проект, конечно).
des00
Цитата(Timmy @ Mar 19 2015, 14:05) *
В результате у меня получилась fmax 145MHz против 85 у оригинала, меньше объём LE, и один такт на инструкцию(кроме исполняемых переходов), вместо двух.

При всем уважении не верю. По тому как : один такт на инструкцию вида reg = opA + opB означает регистровый файл с асинхронным чтением + асинхронное АЛУ. Регистровый файл у латекса сделан на распределенной памяти, поэтому при переводе на однотактность, вы могли только убрать из АЛУ регистры. Этим, при всем желании, вы не могли увеличить тактовую частоту, тем более 1,7 раза.

Поэтому имею следующее предубеждение :
1. затык по тактовой мико8 находиться не в АЛУ и причина такой низкой тактовой в чем то другом (двухтактовость как раз можно объяснить).
2. в своей реализации вы явно/неявно вырезали то место, которое к этому приводило и ваш проц не является полнофункциональным аналогом мико8

будет интересно отреверсить ваш код, если выложите

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

Вот это будет интересно, неужели вы на асихронном АЛУ получите больше 200-250МГц которые дает пикоблейз со своим синхронным АЛУ. Ну и если начнете пилить систему команд, то интересно как вы решите ограничение ширины слова команды == оптимальной разрядности блочной памяти sm.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.