Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Чт мар 28, 2024 13:46

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 408 ]  На страницу Пред.  1 ... 13, 14, 15, 16, 17, 18, 19 ... 28  След.
Автор Сообщение
 Заголовок сообщения: Re: Как сделать форт-процессор 2022
СообщениеДобавлено: Ср авг 03, 2022 20:31 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
KPG писал(а):
А, почему не пригодное, и откуда помехи, если всё, к примеру, работает по реализованной спецификации Verilog, VHDL?

Что по спецификации работает? Провода между дискретными микросхемами? Там возможно придется и конденсаторами подзаваливать фронты где-нибудь.

KPG писал(а):
Думаю, что может быть/или есть, что сама среда синтеза проводит некоторые оптимизации и такого представления её схем в FPGA. (не думаю, конечно, что это как то сильно пересекается с картами Карно)

Нужно почитать что-нибудь на эту тему, чтобы не гадать. В FPGA сама суть заключается в реализации логики напрямую в виде таблиц истинности. Физически, внутри микросхемы. Схема и карта Карно - просто формы представления.

KPG писал(а):
Интересно увидеть реальные результаты как справится система синтеза с такими проектами в постановке, ведь раньше схемы ПЛИС больше рисовали, а не описывали в текстовой форме.

А что, САПР так и не скачан? Можно ввести и посмотреть.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Как сделать форт-процессор 2022
СообщениеДобавлено: Пт авг 05, 2022 17:11 
Не в сети
Аватара пользователя

Зарегистрирован: Ср июл 03, 2019 11:10
Сообщения: 463
Откуда: Москва
Благодарил (а): 57 раз.
Поблагодарили: 22 раз.
Твою ж дивизию... :D Посмотрел на деление, которое используется в бродилке под мой самодельный проц, и ужаснулся: там аж 4 цикла, причем нет сдвигов, побитовых операций и т.д., а используются только сложения и вычитания. Т.е. я когда-то давно делал деление под esoteric forth на уровне "проверить, лишь бы работало", вот оно сюда и перекочевало. Примерно 200 команд получается после компиляции, в то время как для stm32 и lpc в районе 15 "низкоуровневых" ассемблерных инструкций, причем сделано на регистрах, а не при помощи перекладывания ячеек в стеке. Так что бродилка под самодельный процессор с огромными гирями на ногах бегает, но уже не уступает arm-ам и cortex-ам :) Ради интереса сделал без деления (там можно, если результат деления и сравнение с числом заменить на сравнение делимого с числом, умноженным на делитель), сразу стало 35fps @ 20MHz и размер прошивки усох до 1.4K. Можно, конечно, и для ARM/Thumb без деления попробовать, но там скорость если и вырастет, то не так заметно.

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

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Как сделать форт-процессор 2022
СообщениеДобавлено: Пт авг 05, 2022 18:42 
Не в сети

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 2141
Благодарил (а): 8 раз.
Поблагодарили: 74 раз.
Total Vacuum писал(а):
Кстати, видно, что у традиционных процессоров имеется преимущество, когда надо сделать короткий цикл на пару инструкций. Такой цикл будет выполняться за несколько тактов. А у меня в аналогичной ситуации и 10 и 20 инструкций может получиться.

Если при декодировании "широкого" слова (за раз считано несколько Форт команд)
и их возможно выполнить в одном такте, то тоже может ускорится код, если кто так делает.
А, циклы (For вместо Loop) , где возможно, можно делать и на одном счётчике (и может его зарезервировать в системе команд)

P.S. Вот и по этому, Форт процессоры могут быть все такие разные при выборе конкретных решений по их реализации. :)
Где то на местном форуме была мысль, что стековый процессор как таковой может быть реализован только через использование регистровой модели.
Х.З. насколько эта мысль фундаментальна в её восприятии и понимании реалий построения Форт процессоров.

Если 3D бродилке давать видео данные и детектировать границы объектов в видеопотоке, то получится "лидар" :)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Как сделать форт-процессор 2022
СообщениеДобавлено: Сб авг 06, 2022 00:09 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Total Vacuum писал(а):
Деление, конечно же, переделаю. Можно даже "на регистрах" сделать, если зарезервировать под "регистры" пару-тройку нижних адресов, которые в моей системе команд кодируются одним-двумя полубайтами. А-ля 6502 получится. Ну или через стек, тут надо подумать еще.

Деление может выполняться по схеме "один бит за такт". Можно отдельной командой запускать FSM делителя, а можно в принципе и постоянно запускать деление, но нормально оно отработает только при неизменных значениях на стеке. То есть в принципе можно поставить 16 или 32 NOP, а потом забрать результат из внешнего устройства.
Total Vacuum писал(а):
Кстати, видно, что у традиционных процессоров имеется преимущество, когда надо сделать короткий цикл на пару инструкций. Такой цикл будет выполняться за несколько тактов.

DO I LOOP могут быть аппаратными, с отдельным стеком циклов (I, Imax, Addr).


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Как сделать форт-процессор 2022
СообщениеДобавлено: Сб авг 06, 2022 02:37 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
KPG писал(а):
Если при декодировании "широкого" слова (за раз считано несколько Форт команд)
и их возможно выполнить в одном такте, то тоже может ускорится код, если кто так делает.

Это очевидно.
KPG писал(а):
Где то на местном форуме была мысль, что стековый процессор как таковой может быть реализован только через использование регистровой модели.
Х.З. насколько эта мысль фундаментальна в её восприятии и понимании реалий построения Форт процессоров.

Не совсем понятно. Регистровая модель, или программная модель - действительно первый шаг нормального проектирования. Однако это не конкретная схема, а этап работ. А вот регистровая архитектура - это схема, но она использует не вершину стека, а номера регистров в поле команды. В этом и отличие от стековой. Фундаментальности тут никакой, это все очевидно в HDL - как адрес для блока регистров формируется, такой процессор и получается.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Как сделать форт-процессор 2022
СообщениеДобавлено: Пн авг 08, 2022 12:35 
Не в сети
Аватара пользователя

Зарегистрирован: Ср июл 03, 2019 11:10
Сообщения: 463
Откуда: Москва
Благодарил (а): 57 раз.
Поблагодарили: 22 раз.
KPG писал(а):
Если при декодировании "широкого" слова (за раз считано несколько Форт команд) и их возможно выполнить в одном такте, то тоже может ускорится код, если кто так делает.
Да, есть такое в планах, но пока нет идей, как реализовать. :) Может как-то "двухпортовость" BRAM использовать или же дробить стадию чтение-декодирование-выполнение на несколько более мелких стадий.

KPG писал(а):
Если 3D бродилке давать видео данные и детектировать границы объектов в видеопотоке, то получится "лидар" :)
Почему бы и да? :) Между высотой столбца от подошвы до линии горизонта и расстоянием до объекта есть взаимно однозначное соответствие. Но это если пол плоский (без ям и гор), а все объекты стоят на полу. :)

Hishnik писал(а):
Total Vacuum писал(а):
Деление, конечно же, переделаю. Можно даже "на регистрах" сделать, если зарезервировать под "регистры" пару-тройку нижних адресов, которые в моей системе команд кодируются одним-двумя полубайтами. А-ля 6502 получится. Ну или через стек, тут надо подумать еще.
Деление может выполняться по схеме "один бит за такт". Можно отдельной командой запускать FSM делителя, а можно в принципе и постоянно запускать деление, но нормально оно отработает только при неизменных значениях на стеке. То есть в принципе можно поставить 16 или 32 NOP, а потом забрать результат из внешнего устройства.
Я специально "на регистрах" в кавычки взял, т.е. речь не о реализации деления на verilog'e, а о программной реализации, дословно повторяющей реализацию деления на регистрах под ARM или Thumb, просто вместо регистров будут задействованы ячейки BRAM с наименьшими адресами, которые кодируются короче всего. Ну, например,
Код:
sub r1,r0,r2
add r0,r0,1
дословно меняем на
Код:
r0 @ r2 @ - r1 !
r0 @ 1 + r0 !
А сами r0,r1,... описаны как-то так:
Код:
:: r0 0 ; \ 0 кодируется командой push0 \
:: r1 1 ; \ 1 кодируется командами push0 1 \
...
Т.е. можно тупо повторить алгоритм из ARM/Thumb, платой за это будет размер кода (с десяток команд моего процессора на каждую команду ARM, впрочем, вес одной команды в ARM/Thumb 2/4 байта против полубайта на команду у меня эту разницу почти сразу же нивелирует), но даже в таком виде деление будет быстрее, чем тот ужас, который у меня было до этого :)
Ну или да, в столбик сделать, 16 итераций, по одной для каждого бита.
Ну или на veriloge сделать отдельный модуль math, которому в регистры надо будет записать операнды и код операции, а забирать результат, когда этот модуль выставит в регистре статуса флаг готовности результата.
Тут вариантов море, буду экспериментировать. :)

KPG писал(а):
А, циклы (For вместо Loop) , где возможно, можно делать и на одном счётчике (и может его зарезервировать в системе команд)
Hishnik писал(а):
Total Vacuum писал(а):
Кстати, видно, что у традиционных процессоров имеется преимущество, когда надо сделать короткий цикл на пару инструкций. Такой цикл будет выполняться за несколько тактов.
DO I LOOP могут быть аппаратными, с отдельным стеком циклов (I, Imax, Addr).
Я сравнивал не вообще все стековые процессоры с традиционными, а конкретно мой с любыми другими, в т.ч. и стековыми. Обычно адрес или смещение зашиты в теле инструкции перехода, а в моей системе команд нужно набить адрес на вершине стека мелкими двухбитовыми порциями при помощи команд 0-3, только после этого можно прыгать. Т.е. обычно jmp читается и выполняется за такт, ну максимум 3, а у меня для безусловного прыжка по большому адресу может быть даже так:
Код:
push0 push0 3 2 1 2 3 0 3 2 jz
т.е. 11 инструкций
Почему-то в последнее время из циклов со счетчиком оставил только циклы с автодекрементом до 0, сам счетчик при этом лежит на вершине стека данных, а после завершения цикла со стека данных снимается.
Код:
4 do dup . loop \ напечатает 3 2 1 0 \


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Как сделать форт-процессор 2022
СообщениеДобавлено: Пн авг 08, 2022 16:47 
Не в сети

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 2141
Благодарил (а): 8 раз.
Поблагодарили: 74 раз.
Немного свежего оффтопика, т.к. Форт процессоры в истории их производства не упомянуты.
Советские микропроцессоры. Заводы «Интеграл», «Микрон» и «Ангстрем». Что они могут сейчас?

P.S. Интересно, а Форт процессоры по каким технологиям "делаются" этими производителями?
Хотя бы в выпускаемые Российские ПЛИС Форт должен неплохо поместиться, но Х.З. по какой цене выйдет такое решение


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Как сделать форт-процессор 2022
СообщениеДобавлено: Вт авг 09, 2022 22:14 
Не в сети

Зарегистрирован: Пн окт 05, 2009 18:21
Сообщения: 405
Откуда: Минск SotnikSTO@mail.ru
Благодарил (а): 48 раз.
Поблагодарили: 3 раз.
KPG писал(а):
Немного свежего оффтопика, т.к. Форт процессоры в истории их производства не упомянуты.
Советские микропроцессоры. Заводы «Интеграл», «Микрон» и «Ангстрем». Что они могут сейчас?

P.S. Интересно, а Форт процессоры по каким технологиям "делаются" этими производителями?
Хотя бы в выпускаемые Российские ПЛИС Форт должен неплохо поместиться, но Х.З. по какой цене выйдет такое решение
Микроконтроллеры PADAUK и ещё трёхцентовые MCU будут намного круче нашего старья... :(
Не знаю что сейчас с доставабельностью.

_________________
Сотник. SotnikSTO@mail.ru


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Как сделать форт-процессор 2022
СообщениеДобавлено: Ср авг 10, 2022 00:12 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Микросхемы не делают впрок. Без постоянных заказов производитель не будет раскладывать их по витринам, ожидая, пока хоббисты заинтересуются. Если кто-то хочет попробовать себя в скульптуре - есть пластилин. А требовать свои творческие идеи сразу в бронзе и граните немного странно.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Как сделать форт-процессор 2022
СообщениеДобавлено: Пт авг 12, 2022 11:42 
Не в сети
Аватара пользователя

Зарегистрирован: Ср июл 03, 2019 11:10
Сообщения: 463
Откуда: Москва
Благодарил (а): 57 раз.
Поблагодарили: 22 раз.
Заменил для пробы пару мест в коде ядра, где читается код следующей команды и вычисляются "будущие" значения счетчика команд и стека данных.
Код:
//   cmd = code[pc];
   cmd = {code[pc+1],code[pc]};
Код:
//   default : xstack <= {stack[`WIDTH:16],s0[13:0],cmd[1:0]};
   default : xstack <= cmd[7:6]?{stack[`WIDTH:16],s0[13:0],cmd[1:0]}:{stack[`WIDTH:16],s0[11:0],cmd[1:0],cmd[5:4]};
Код:
//   default : begin xrstack <= rstack; xpc <= (cmd==`JZ)?s1?pc+1:s0:pc+1; end
   default : begin xrstack <= rstack; xpc <= (cmd[3:0]==`JZ)?s1?pc+1:s0:(cmd[3:2]|cmd[7:6])?pc+1:pc+2; end
и т.д.
Т.е. сейчас параллельно выполняется по 2 команды, если они обе относятся к одной группе 0-3 (сдвинуть tos на 2 бита влево и прибавить значение 0-3). Максимальная частота почти не изменилась (было 66MHz, стало 65MHz), да и потребление ресурсов поменялось незначительно, но производительность выросла заметно:
- штатная бродилка с делением от esoteric forth - было 23 fps, стало 28 fps @ 20MHz
- бродилка без деления - было 37 fps, стало 47 fps @ 20MHz
Не в 2 раза, конечно же, но все же... А ведь можно и по 8 таких команд паковать, хотя писанины будет много :)
Ну и проблема коротких циклов и длинных адресов/литералов автоматически решается :)

upd. Проверил и со счетверенными командами 0-3, т.е. за такт в tos утрамбовывается до байта, максимальная скорость все та же (65MHz), но рост потребления ресурсов ПЛИС уже заметнее :) А рост производительности уже не так значителен:
- c делением - 23 fps (исходная) => 28 fps (x2) => 31 fps (x4)
- без деления - 37 fps (исходная) => 47 fps (x2) => 55 fps (x4)
Подозреваю, что для x8 будет гигантский рост потребления ресурсов и мизерный прирост скорости. По всей видимости, x8 или x4 могут иметь какой-то смысл только для больших прошивок или для прошивок, использующих много больших чисел. А тестовая бродилка весит всего 1530 байт, т.е. в районе 3K инструкций, значит адреса съедают максимум полтора байта. По всей видимости, большая часть работы по оптимизации сделана еще на этапе компиляции, компилятор сокращает адреса/литералы везде (почти), где можно, хотя и здесь пока еще есть возможности для улучшения (все никак руки не дойдут до прыжков вперед).

:) Так что это я размечтался о кратном росте производительности, реальность оказалась куда суровее. Впрочем, параллельно можно выполнять не только команды 0-3, но и push0, за которым идет серия 0-3 или даже push0 [0-3] jz/call. Так что и тут есть пространство для творчества. :)

Кстати, забавная архитектура получается. Обычно код либо компактный, либо быстрый. А тут надо делать компактно, чтобы было быстро :)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Как сделать форт-процессор 2022
СообщениеДобавлено: Пт авг 12, 2022 15:04 
Не в сети

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 2141
Благодарил (а): 8 раз.
Поблагодарили: 74 раз.
Интересные результаты.
Думаю, если основное тело бродилки будет сделано на косвенном шитом коде, а примитивы команд Форт языка будут в рамках нативных команд, то вероятно выигрыш будет существеннее, хотя тоже вряд ли очень сильно.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Как сделать форт-процессор 2022
СообщениеДобавлено: Пт авг 12, 2022 21:16 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Способ работы с литералами вообще очень существенно влияет на итоговые характеристики. Если рассматривать только фрагменты, может показаться, что все хорошо и так (на примере пары связок команд), а потом где-нибудь оно вылезает не в ту сторону. Потом, к примеру, DUP не стоит ничего, достаточно просто не снимать число со стека для следующей команды. Ну и так далее. Сокращенные литералы для адресов как раз противоположный пример - как можно улучшить практически все характеристики за счет знания специфики архитектуры.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Как сделать форт-процессор 2022
СообщениеДобавлено: Вт авг 16, 2022 21:07 
Не в сети
Аватара пользователя

Зарегистрирован: Ср июл 03, 2019 11:10
Сообщения: 463
Откуда: Москва
Благодарил (а): 57 раз.
Поблагодарили: 22 раз.
Hishnik писал(а):
Способ работы с литералами вообще очень существенно влияет на итоговые характеристики.

Ну у меня вообще всё здание на этом гвозде держится :) Даже прыгать и подпрограммы вызывать без литералов не могу :)

Попробовал еще пару вариантов:
- c делением - 23 fps (исходная) => 28 fps (x2) => 31 fps (x4) => 32 fps (x6/x8)
- без деления - 37 fps (исходная) => 47 fps (x2) => 55 fps (x4) => 58 fps (x6/x8)
Т.е. видно, что после двенадцатибитных литералов (2 бита x6) роста скорости уже нет, что объяснимо, т.к. все адреса в бродилке умещаются в 12 бит.
Также другие комбинации команд пробовал запараллелить в дополнение к литералам, бродилка с делением раскочегарилась до 43 fps @ 20MHz, а без деления - аж до 80 fps, причем видно, что это далеко не предел. А ведь еще и частоту можно 72MHz поставить вместо 20 :)
Еще интересно, что разница между исходной и x2 всего-то 17 slices и 1 lut, т.е. почти даром, а производительность вырастает заметно.
А вот варианты x4, x6, x8 поджирают ресурсы, в т.ч. съедают и дополнительные блоки bram (1, 2 и 3 соответственно). По всей видимости, xilinx завязывает узлом несколько двухпортовых блоков bram, чтобы синтезировать мою хотелку cmd={code[pc+n-1],code[pc+n-2],...}
Ну а для x2 просто задействуется второй порт блока bram, где хранится прошивка.

Теперь задумался, как межпроцессорное взаимодействие организовывать. Надо ведь и этот момент как-то осваивать. :) Пока на ум пришел только вариант совместного использования двумя ядрами общего блока bram. Ну а если ядер больше, то что-то другое придумывать. Пока с двумя разобраться.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Как сделать форт-процессор 2022
СообщениеДобавлено: Вт авг 16, 2022 21:34 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Total Vacuum писал(а):
Ну у меня вообще всё здание на этом гвозде держится Даже прыгать и подпрограммы вызывать без литералов не могу

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

Я даже раскрашивал дампы после компиляции. Ближе к концу были сплошные LIT @ LIT @ CALL LIT !


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Как сделать форт-процессор 2022
СообщениеДобавлено: Ср авг 17, 2022 09:43 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1287
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
Hishnik писал(а):
Оно вообще на литералах держится. Если разобраться, программа рано или поздно от арифметики приходит к чтению-записи переменных и вызову подпрограмм.

Я даже раскрашивал дампы после компиляции. Ближе к концу были сплошные LIT @ LIT @ CALL LIT !


А фортеры тем временем продолжают рассуждать про шитый код)

_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 408 ]  На страницу Пред.  1 ... 13, 14, 15, 16, 17, 18, 19 ... 28  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 18


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB