Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Ср апр 24, 2024 12:05

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 408 ]  На страницу Пред.  1 ... 19, 20, 21, 22, 23, 24, 25 ... 28  След.
Автор Сообщение
 Заголовок сообщения: Re: Как сделать форт-процессор 2022
СообщениеДобавлено: Чт ноя 10, 2022 12:06 
Не в сети

Зарегистрирован: Вс авг 21, 2022 14:56
Сообщения: 41
Благодарил (а): 2 раз.
Поблагодарили: 5 раз.
Total Vacuum писал(а):
Можно вообще двухбитные команды сделать :)

Ну давай ещё однобитные команды делать. 0 - увеличивает регистр команд на еденицу, 1 - выполняет команду и сбрасывает регистр команд в ноль :)

Другой вариант (подсмотрено у Хаффмана): сдвигаем регистр команд дополняя его считанным битом, определённые комбинации будут выполнять команду и обнулять регистр. Правда, придётся либо всегда начинать с еденицы, либо подсчитывать количество бит. Второе предпочтительнее, для литералов разной длины подойдёт.

Можно не обнулять регистр, а сразу туда еденицу записывать, тогда счётчик бит не нужен будет.


Последний раз редактировалось tsdima Чт ноя 10, 2022 12:14, всего редактировалось 1 раз.

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

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

Тогда в системе кoманд потребуется команда по формированию следующего литерала на стеке (10), помимо функциональных команд по номеру (11)
и битовых литералов 00, 01 :)

P.S. Можно и так из двуx команд (вроде как у tsdima) :)

0xxxx... ( - xxx) LIT литерал с заранее определённым количеством бит
1 ( n - ...) EXECUTE выполнение команды n

xxx - литерал может быть закодиpован и передан и к примеру протоколом манчестер-кода или каким то модемным протоколом. (или, например, построен на использовании с микросхемами "последовательной" памяти по интерфейсам I2C, SPI)

Теоретически, можно представить и двух битную "вырожденную" программу для гипотетического "вычислителя":

0 - положить литерал 0 на стек данных
1 - выполнить команду 0, к примеру интерпритируемую как инверсию бита на выходной линии порта.

01010101....
001100110011...
...
Код такой "программы" можно считывать в зацикленном режиме для выполнения. :)


Последний раз редактировалось KPG Пт ноя 11, 2022 05:10, всего редактировалось 8 раз(а).

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

Зарегистрирован: Вс авг 21, 2022 14:56
Сообщения: 41
Благодарил (а): 2 раз.
Поблагодарили: 5 раз.
tsdima писал(а):
Другой вариант

Фактически, это будет выполнение упакованного кода :) Надо патентовать!


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

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 2141
Благодарил (а): 8 раз.
Поблагодарили: 74 раз.
Ещё вариант минималистического "Форт" процессора в TTL
TOM-1
Модель процессора отлажена в программе Digital
(в опциях программы есть возможность экспорта в VHDL, VERILOG)

Код:
Opcodes

This is a non-exhaustive list of opcodes supported by the TOM-1:

    halt
    no_op
    push_literal — pushes a 16-bit operand to the top of stack
    branch0 — if the top of stack is equal to 0, jump to a 16-bit address (operand)
    add — pops values A and B from the data stack, pushes the value A + B to the top of stack
    nand — pops values A and B from the data stack, pushes the value A nand B to the top of stack
    load — pops an address from the stack, pushes the value of that address in RAM to the top of stack
    store — pops an address, then a value, from the stack and sets that address in RAM to the value
    return_push — pushes the value at the top of the stack onto the return stack
    return_pop — pops a value off the return stack and pushes it to the top of stack
    dup — duplicates the value a the top of stack
    drop — drops the top of the stack
    in — read a value from the 8-bit I/O port
    out — output a value on the 8-bit I/O port

I/O Port

The I/O port on the TOM-1 is a bidirectional transceiver that can read and write to any address in RAM. This port has the following pins:

    Power
    GND
    8 bits of data (low byte of 2-byte value in RAM)
    CLK
    Data Valid


По дизайну и системе команд: nybbleForth (verilog)
Код:
            Code          Name      Size                     Operation

            0         noop         4         No operation
            1         @            4         Load word from memory                                             
            2         call         4+16      Push P to return stack, fetch a word and jump                                               
            3         exit         4         Pop P from return stack
            4         (literal)    4+16      Fetch a word and push to stack
            7         r>           4         Pop return stack and push to data stack
            8         +            4         Add top two items on data stack                                           
            9         nand         4          Inverted conjunction of the two top items on data stack
            10        >r           4         Pop data stack and push to return stack
            11        0branch      4+8        Fetch a byte and add to P if popped data stack is zero
            12        !            4         Store word into memory


P.S. По реализации других Форт примитивов в этой системе команд есть вопросы по их эффективности. :)


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

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

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


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

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

Да, есть "непонятное" в мире стеков и "нам" книжек не писать. :)
Digital-Logic-SSM
Цитата:
A Simple Stack Machine
The general idea is to minimize the chips necessary to breadboard it.
The ISA is in isa.txt and is directly converted into the control rom


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Шаг 1. Ставится САПР с бесплатной лицензией. Vivado или Quartus.
Шаг 2. Берется презентация из первого сообщения и воспроизводится в этой САПР
Время - один вечер.

Альтернатива - мечты о непонятном результате вокруг Форта. Время - до бесконечности.


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

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 2141
Благодарил (а): 8 раз.
Поблагодарили: 74 раз.
Hishnik писал(а):
Время - один вечер..

Попутно просмотрев: Ilya Tarasov BUILD YOUR FORTH CPU SUN ON FPGA-- CLASS 1

Hishnik писал(а):
Альтернатива - мечты о непонятном результате вокруг Форта. Время - до бесконечности.

Мечт нет, как и нет доступного описания проектирования "Форт" процессоров в этой книге согласно содержанию. :))
Тарасов И.Е., ПЛИС Xilinx. Языки описания аппаратуры VHDL и Verilog, САПР, приемы проектирования

P.S. Статьи из журнала КиТ (на киберленинка) Стешенко Владимир: Школа схемотехнического проектирования устройств обработки сигналов.

Каршенбойм Иосиф - публиковал серию статей по Форт процессорам
Авторский сайт со всеми статьями опубликованными в КиТ

Некоторый тред A tiny, open CPU is good. Running Forth is not so good. People should also look at this one:

Автоперевод

Можно ли сказать,что Форт-процессор, по своим основопологающим основам не может быть быстрее RISC без рассмотрения вкупе его компактности?


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

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

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

KPG писал(а):
Можно ли сказать,что Форт-процессор, по своим основопологающим основам не может быть быстрее RISC без рассмотрения вкупе его компактности?

А форт-процессор разве не RISC?


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

Зарегистрирован: Ср июл 03, 2019 11:10
Сообщения: 466
Откуда: Москва
Благодарил (а): 57 раз.
Поблагодарили: 22 раз.
Hishnik писал(а):
А форт-процессор разве не RISC?
Кто не рискует, тот не пьёт шампанское :D

KPG писал(а):
Можно ли сказать,что Форт-процессор, по своим основопологающим основам не может быть быстрее RISC без рассмотрения вкупе его компактности
А чего в RISC такого уникального? Они ж даже не умеют 32-битную константу в регистр за одну инструкцию складывать. В лучшем случае - за 2 команды (в MIPS так можно, если не путаю), а, например, те же ARM/Thumb требуют в сложных случаях 4 и более команд. Математика у них на регистрах. Чтобы, например, сложить пару переменных и записать результат в 3-ю, надо
Код:
r1 = addr0; // 2 такта в идеальном случае
r0 = [r1]; // такт
r1 = addr1; // еще 2 такта
r1 = [r1]; // такт
r0 += r1; // такт
r1 = addr2; // 2
[r1] = r0; // такт
Даже для "идеального" MIPS с десяток тактов получается, но для распространенных ARM и Thumb вообще лютый трэш выходит. :D Понятно, что там компилятор умный, может какие-то переменные на регистрах сделать... Ну или, например, если переменные лежат в памяти рядом, то можно и в 6 тактов уложиться
Код:
r2 = addr0; // 2 такта в идеальном случае
r0 = [r2]; // такт
r1 = [r2+offset1]; // такт
r0 += r1; // такт
[r2+offset2] = r0; // такт
Но все равно ничего сверхъестественного... И если честно, то я искренне недоумеваю, почему создатели ARM поленились сделать загрузку хотя бы полуслова за раз, чтобы следующей командой добить литерал до полного слова. Ну а Форт-процессор при достаточно широкой команде, превышающей разрядность процессора, вполне может и за такт адрес/литерал в стек поместить. Ну хорошо, пусть за 2, если ширина команды равна разрядности. И тогда
Код:
addr0 @ addr1 @ + addr2 !
в теории может и за 7 тактов выполниться, ну пусть даже 10... (параллельное выполнение команд пока не рассматриваем)
Что там еще нужно для полного счастья? call/jmp/ret быстрые? Ну так и в Форт-процессоре вполне можно даже за такт, если ширина команды позволяет утрамбовать туда адрес/смещение.
Не знаю, мне кажется, что программа для RISC представляет собой примерно такой же набор примитивных кирпичей-инструкций, что и в случае с Форт-процессором. Разница, на мой взгляд, лишь в размере кода :D Так же бродилка под Форт-процессор весит уже в районе 800 байт в скомпилированном виде, а для ARM/Thumb получается где-то 5K. И по скорости уже 73 fps @ 20MHz для самой простой версии Форт-процессора против 69 fps @ 64 MHz под ARM. Если пересчитать в fps/MHz, то пропать гигантская получается: в 3 с лишним раза не в пользу ARM. И это при том, что для Форт-процессора есть огромный резерв как по размеру кода (в коде сейчас 75% литералов, а сами они на 50% состоят из воды), так и по скорости, т.к. литералы и call/jz выполняются в среднем за 3-4 и 6-7 тактов, а должны (и будут) за 1. :) Понятно, что так сравнивать неправильно, и более высокие показатели для Форт-процессора могут свидетельствовать лишь о неэффективности транслятора под ARM и плохой заточенности ARM под Форт. Но не думаю, что asm-версия под ARM в разы быстрее будет.


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

Зарегистрирован: Ср июл 03, 2019 11:10
Сообщения: 466
Откуда: Москва
Благодарил (а): 57 раз.
Поблагодарили: 22 раз.
Hishnik писал(а):
Шаг 1. Ставится САПР с бесплатной лицензией. Vivado или Quartus.
Шаг 2. Берется презентация из первого сообщения и воспроизводится в этой САПР
Время - один вечер.

Альтернатива - мечты о непонятном результате вокруг Форта. Время - до бесконечности.

:) Не, не, у KPG вроде такая же ПЛИС, как у меня: Spartan-3. Т.е. ставить надо Xilinx ISE 14.7, но у меня и на ISE 12.3 работает. И времени потребует чуточку больше :) :)


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

Зарегистрирован: Ср июл 03, 2019 11:10
Сообщения: 466
Откуда: Москва
Благодарил (а): 57 раз.
Поблагодарили: 22 раз.
KPG писал(а):
По дизайну и системе команд: nybbleForth (verilog)
Код:
            Code          Name      Size                     Operation
            0         noop         4         No operation
            1         @            4         Load word from memory                                             
            2         call         4+16      Push P to return stack, fetch a word and jump                                               
            3         exit         4         Pop P from return stack
            4         (literal)    4+16      Fetch a word and push to stack
            7         r>           4         Pop return stack and push to data stack
            8         +            4         Add top two items on data stack                                           
            9         nand         4          Inverted conjunction of the two top items on data stack
            10        >r           4         Pop data stack and push to return stack
            11        0branch      4+8        Fetch a byte and add to P if popped data stack is zero
            12        !            4         Store word into memory
P.S. По реализации других Форт примитивов в этой системе команд есть вопросы по их эффективности. :)
По эффективности есть, а вот по наполнению интересно. Это, как мне кажется, как раз тот минимум, на базе которого можно сделать полноценный Форт. Странно только, что товарищ не задействовал целых 3 опкода.
:) Но мне с этим товарищем не по пути, ибо практически никогда не делаю r> r@ >r: у меня всегда подпрограммный шитый код и стек возвратов только для call/ret. Да и не только у меня. В PIC, например, если не ошибаюсь, к содержимому стека возвратов нет доступа, только call/ret, только хардкор.


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

Зарегистрирован: Ср июл 03, 2019 11:10
Сообщения: 466
Откуда: Москва
Благодарил (а): 57 раз.
Поблагодарили: 22 раз.
Заглянул ради интереса на opencores. В разделе "Processor" по слову forth нашелся один проект и еще один по слову stack. Много клонов (полноценных и не очень) уже существующих процессоров, но есть и самоделки. И вот с самоделками интересно. С некотороыми из них в комплекте идет ассемблер, а для прочих даже этого нет. Какая ценность у таких изделий, если его даже запрограммировать нормально нельзя?
Вот, допустим, выучил человек Verilog и планирует придумать и реализовать свой процессор. И дальше диалог (сам с собой):
- вот сейчас как напишу свой процессор...
- зачем он тебе?
- ну, софт писать...
- на чем?
- ну, ассемблер напишу...
- светодиодом помигать максимум, на асме далеко не уедешь...
- ну хорошо, Форт напишу, на Си меня не хватит, скорее всего...
- вперед, только говорят, что код на Форте в разы медленнее, чем на асме...
- ха, ну тогда Форт-процессор будет! :)
Шутка, конечно, но если плясать от транслятора, на котором потом разработчик процессора будет писать код, то получается следующее: т.к. код будем писать на Форте (а это, как ни крути, с одной стороны "потолок" для многих программистов, а с другой - вполне достижимая цель), то для получения эффективного кода желательно, чтобы архитектура и система команд были заточены под Форт. Да чего уж там, пусть Форт-процессор и будет! :) Вот так и появляются на свет Форт-процессоры. :)


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

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 2141
Благодарил (а): 8 раз.
Поблагодарили: 74 раз.
Total Vacuum писал(а):
Но не думаю, что asm-версия под ARM в разы быстрее будет.

В целом, из-за большого регистрового файла и равноправности регистров при выполнении команд, всё же, думаю будет быстрее пока нет доказательств обратного. :)

Benchmark 8 ферзей на разных калькуляторах и языках вплоть до варианта на ассемблере.

Разница между ассемблером и, к примеру Форт реализацией - примерно 10-и кратная, но, что интересно Z80 и 8086 на одинаковой частоте почти одинаковые циферки выдают. (HP-200LX vs TI-83)

И удивительно выглядит полученный результат на Форте в Z80 в этом тесте для калькулятора SHARP PC-G850(V)(S) - 0.865c
из проекта Forth850

Код:
PC-E500S / Forth500
PC-G850V / Forth850
---------------------


8 CONSTANT RR
0 VALUE SS
0 VALUE XX
0 VALUE YY
CREATE AA RR 1+ ALLOT
: RCLAA POSTPONE AA POSTPONE + POSTPONE C@ ; IMMEDIATE
: STOAA POSTPONE AA POSTPONE + POSTPONE C! ; IMMEDIATE
: NQCORE
   0 TO SS
   0 TO XX
   BEGIN
     1 +TO XX RR XX STOAA
     BEGIN
       1 +TO SS
       XX TO YY
       BEGIN YY 1 > WHILE
         -1 +TO YY
         XX RCLAA YY RCLAA - DUP
         0= SWAP ABS XX YY - = OR IF
           0 TO YY
           BEGIN XX RCLAA 1- DUP XX STOAA 0= WHILE
             -1 +TO XX
           REPEAT
         THEN
       REPEAT
     YY 1 = UNTIL
   RR XX = UNTIL
;
: NQUEENS
   NQCORE
   ." S=" SS .
;


Total Vacuum писал(а):
- ну хорошо, Форт напишу, на Си меня не хватит, скорее всего...
:)


Си варианты компиляторов есть, но что это даёт перед нативным использованием Форт на железе с его поддержкой


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

Зарегистрирован: Пн окт 05, 2009 18:21
Сообщения: 405
Откуда: Минск SotnikSTO@mail.ru
Благодарил (а): 48 раз.
Поблагодарили: 3 раз.
Total Vacuum писал(а):
Вот так и появляются на свет Форт-процессоры. :)

Не смешно...

Пока не будет своей линейки камней, с быстрой доставабельностью, и приемлемой ценой - факультатив ещё на 100 лет...

Уже 10 лет я об этом говорю в пустыне, и буду говорить.
Дай бег ещё 100 лет прожить... :)

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 408 ]  На страницу Пред.  1 ... 19, 20, 21, 22, 23, 24, 25 ... 28  След.

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


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

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


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

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