Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Чт сен 20, 2018 15:03

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 42 ]  На страницу Пред.  1, 2, 3  След.

Интерсна ли данная тема?
Да, безусловно. 89%  89%  [ 16 ]
Нет, полный бред. 0%  0%  [ 0 ]
Надоело! Когда же закончатся недоделки и будет рабочий проц? 11%  11%  [ 2 ]
Всего голосов : 18
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Пт сен 26, 2008 02:40 
Не в сети

Зарегистрирован: Сб май 06, 2006 12:01
Сообщения: 959
Откуда: Украина, Харьков
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
WingLion писал(а):
    SWAP-3 -- NEG (dd2 dd1 --> dd2 - dd1)

Раньше NEG меняло знак числа.
И хорошо бы добавить INV - поразрядную инверсию 1->0;0->1 - чисто для полноты.

_________________
With best wishes, in4.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт сен 26, 2008 07:22 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
in4 писал(а):
WingLion писал(а):
SWAP-3 -- NEG (dd2 dd1 --> dd2 - dd1)

Раньше NEG меняло знак числа.


это лишний пробел в стековой нотации. Должно быть:

SWAP-3 -- NEG (dd2 dd1 --> dd2 -dd1)

И добавить INV - совсем несложно:

SWAP-4 -- INV (dd2 dd1 --> dd2 !dd1)

железно это добавляется в файл ALU_7.tdf:

Код:
      TITLE "ALU SWAP";

PARAMETERS (
   WIDTH=16
);

SUBDESIGN alu_7 (
   op1[WIDTH-1..0]   : input;
   op2[WIDTH-1..0]   : input;
   cmd[3..0]   : input;
   res[WIDTH-1..0]   : output;
)
VARIABLE
   logic[WIDTH-1..0]   : LCELL;
BEGIN
   CASE cmd[] IS
            WHEN 0 => logic[] = op2[]; -- swap
            WHEN 1 => logic[] = op1[] + 1; -- inc
            WHEN 2 => logic[] = op1[] - 1; -- dec
            WHEN 3 => logic[] = -op1[]; -- neg
            WHEN 4 => logic[] = !op1[]; -- inv
   END CASE;
        res[] = logic[];

END;


хм.. что-то тут не так :?
Ладно, разберусь при отладке, что не так...

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт сен 26, 2008 07:51 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
Исправленное (на сегодня) описание системы команд:

Код:
0 - NOP: нет операции - "ничего не делает" загружает в регистр команд слово по адресу из PC, PC увеличивается на единицу
1 - LIT: загрузка литерала - ( --> dd) загружает в регистр TR слово по адресу из PC, PC увеличивается на единицу
2 - CALL: вызов подпрограммы по непосредственному адресу - PC+1 заталкивается в стек возвратов, в PC загружается слово по адресу из PC
3 - RET: возврат из подпрограммы - Выталкивается из стека возвратов последнее значение и вписывается в PC
4 - IF: условный переход ( --> ) ЕСЛИ регистр TR содержит нуль PC увеличивается на единичку (переходит на адрес следующий после адреса перехода) ИНАЧЕ в PC загружается слово по адресу из PC

5 - DUP* префикс команды типа dup - ( dd  --> dd2 dd1) - глубина используемого стека увеличивается
    набор команд с префиксом DUP*:
    DUP-0 -- DUP ( dd --> dd dd)
    DUP-1 -- OVER ( dd1 dd2 --> d1 dd2 dd1)
    DUP-3 -- TRUE ( dd --> dd FFFF)
    DUP-4 -- FALSE ( dd --> dd 0)
    DUP-5 -- 1 ( dd --> dd 1)
    DUP-5...15 -- зарезервированы (пока эквивалентны DUP-5)
6 - DROP* префикс команды типа dup - ( dd1 --> dd1 dd2 ) - глубина используемого стека уменьшается
    набор команд с префиксом DROP*:
    DROP-0 -- DROP ( dd2 dd1 --> dd2)
    DROP-1 -- ADD ( dd2 dd1 --> dd2+dd1)
    DROP-2 -- SUB ( dd2 dd1 --> dd2-dd1)
    DROP-3 -- MUL ( dd2 dd1 --> dd2*dd1)
    DROP-4 -- AND ( dd2 dd1 --> dd2 and dd1)
    DROP-5 -- OR ( dd2 dd1 --> dd2 or dd1)
    DROP-6 -- XOR ( dd2 dd1 --> dd2 xor dd1)
    DROP-7 -- NIP ( dd2 dd1 --> dd1)
    DROP-8..15 -- зарезервированы (пока эквивалентны DROP-0)
7 - SWAP* префикс команды типа swap - ( dd1 dd2 --> dd1 dd2 ) - глубина используемого стека не меняется
    набор команд с префиксом SWAP*:
    SWAP-0 -- SWAP (dd2 dd1 --> dd1 dd2)
    SWAP-1 -- INC (dd2 dd1 --> dd2 dd1+1)
    SWAP-2 -- DEC (dd2 dd1 --> dd2 dd1-1)
    SWAP-3 -- NEG (dd2 dd1 --> dd2 -dd1)
    SWAP-4 -- INV (dd2 dd1 --> dd2 !dd1)
    SWAP-5..15 -- зарезервированы (пока эквивалентны SWAP-0)
   
8 - @ разыменование (dd --> mem) - (слово из памяти по адресу из TR записывается в TR) сначала PC запоминается в стеке возвртов, а в PC записывается адрес из TR,
    принудительно устанавливается следующий исполняемый код команды - 9 для продолжения исполнения команды @
9 - ret-@ продолжение рзыменования - происходит считывание слова из адреса в PC и запись его в TR, a в PC возвращается значение из стека возвратов
    чистое использование этого кода как команды - сомнительно, поэтому в будущем код будет маскирован и, возможно в чистом виде будет исполнять что-то полезное
10 - ! присводение (dd aa --> ) - (слово dd записывается в память по адресу аа) сначала сначала PC запоминается в стеке возвртов, а в PC записывается адрес из TR,
    принудительно устанавливается следующий исполняемый код команды - 11 для продолжения исполнения команды !
11 - ret-! продолжение присвоения - происходит запись слова из TR в память по адресу из PC, a в PC возвращается значение из стека возвратов
    чистое использование этого кода как команды - сомнительно, поэтому в будущем код будет маскирован и, возможно в чистом виде будет исполнять что-то полезное
12 - >R на-Эр - (dd -->) слово из TR заталкивается на стек возвратов, в TR записывается слово вытолкнутое из стека данных
13 - R> с-Эр - (--> dd) слово из TR заталкивается на стек данных, в TR записывается слово вытолкнутое из стека возвратов
14 - MOVE (** --> **) команда запускает внутренний цикл по пересылке данных  из адреса PC по адресу из стека возвратов (число пересылок равно TR, если TR=0 - ничего не пересылается)
         для работы используется последовательность команд (LIT >R LIT) адрес-премник чило-пересыляемых данных (JNZ MOVE R> RET) адрес источник - в скобках команды, расположенные в одном слове
         вызывать которую следует по call, чтобы возврат произошел правильно, а не куда попало
15 - NOP* резервный код


_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт сен 26, 2008 22:35 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
Некоторые результаты компиляции в Quartus-II 8.0 (P-IV 2.0GHz 1Gb RAM)

Код:
для EP2C20F484C7
    занято
    логических ячеек - 846
    занято внутренней памяти - 0
    встроенных 9бит-умножителей - 2
    блоков PLL   - 0
    предельная частота - 98.75MHz
    время компиляции 1мин39сек
   
для EP2C20F484C6
    занято
    логических ячеек - 845
    занято внутренней памяти - 0
    встроенных 9бит-умножителей - 2
    блоков PLL   - 0
    предельная частота - 120.76MHz
    время компиляции 1мин48сек
   
для EP3C5Е144C7
    занято
    логических ячеек - 843
    занято внутренней памяти - 0
    встроенных 9бит-умножителей - 2
    блоков PLL   - 0
    предельная частота - 119.27MHz
    время компиляции 1мин45сек
   
для EP2S15F484C3
    занято
    логических ячеек (ALUTs) - 423
    занято внутренней памяти - 0
    встроенных 9бит-умножителей - 2
    блоков PLL   - 0
    предельная частота - 157.70MHz
    время компиляции 1мин32сек
   

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт сен 26, 2008 23:16 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
процессор в настоящем состоянии ушел как первый релиз сюда: http://fireforge.net/projects/fcpu/

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср дек 03, 2008 08:40 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
Вот, мысля пришла, как процессор назвать ;)

"РАВНОДЕНСТВИЕ"

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

сегодня 3 декабря, постараюсь к 22 декабря
переоформить всю эту тему в цельную статью
с добавлением некоторых моментов, необходимых по работе.

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср дек 03, 2008 19:17 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6403
Благодарил (а): 14 раз.
Поблагодарили: 100 раз.
WingLion писал(а):
"РАВНОДЕНСТВИЕ"

Equinox? :) (Еще игрушка такая на Спектруме была)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср дек 03, 2008 20:32 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
И альбом у Ж.М.Жарра ;))

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


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

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
Попытался перевести на английский систему команд процессора:

Код:
Used standard FORTH stack notation

PC - Program Counter
RS - Return Stack
DS - Data Stack
TR - Register with copy of Top Data Stack

Four bit instructions agregated in 16-32bit words by 4-8 pieces and executed continiously.

immediate data for instructions follow the instructions word when needed

(LIT LIT LIT LIT) data1 data2 data3 data4 - load four datas by one word of four LIT instructions

0 - NOP: no operation; PC<-PC+1. new instructions word fetch.
1 - LIT: Load immediate data ( --> dd)
2 - CALL: Call subprogram immediate address PC+1->RS.push, immediate data -> PC.
3 - RET: Return from subprogram. RS.pop->PC.

4 - IF: ( flag --> flag )
    if (TR==0) then PC+1->PC else immediate data -> PC

5 - DUP* dup prefix - ( dd  --> dd2 dd1) commands
    with increasing data stack depth

    DUP-0 -- DUP ( dd --> dd dd)
    DUP-1 -- OVER ( dd1 dd2 --> dd1 dd2 dd1)
    DUP-3 -- TRUE ( dd --> dd FFFF)
    DUP-4 -- FALSE ( dd --> dd 0)
    DUP-5 -- 1 ( dd --> dd 1)
    DUP-5...15 -- reserved (now equvivalent DUP-5)

6 - DROP* drop prefix- ( dd2, dd1 --> dd2 ) - commands
    with decreasing data stack depth

    DROP-0 -- DROP ( dd2 dd1 --> dd2)
    DROP-2 -- ADD ( dd2 dd1 --> dd2+dd1)
    DROP-3 -- SUB ( dd2 dd1 --> dd2-dd1)
    DROP-4 -- MUL ( dd2 dd1 --> dd2*dd1)
    DROP-5 -- AND ( dd2 dd1 --> dd2 and dd1)
    DROP-6 -- OR ( dd2 dd1 --> dd2 or dd1)
    DROP-7 -- XOR ( dd2 dd1 --> dd2 xor dd1)
    DROP-8..15 -- reserved (now equvivalent DROP-0)

7 - SWAP* swap prefix - ( dd1 dd2 --> dd1 dd2 ) - commands
    with depth of data stack not changed

    SWAP-0 -- SWAP (dd2 dd1 --> dd1 dd2)
    SWAP-1 -- INC (dd2 dd1 --> dd2 dd1+1)
    SWAP-2 -- DEC (dd2 dd1 --> dd2 dd1-1)
    SWAP-3 -- NEG (dd2 dd1 --> dd2 -dd1)
    SWAP-4..15 -- reserved (now equvivalent SWAP-0)
   
8 - @ fetch ( dd --> mem[dd] ) - initiate one-command subrоutine
    PC->RS.push, TR->PC, goto execute command 9

9 - ret-@ continue fetch. mem[PC]->TR, RS.pop->PC,
    goto execute next command

10 - ! store (dd aa --> ) - (dd->mem[aa])- initiate one-command subroutine
        PC->RS.push, TR->PC, goto execute command 11

11 - ret-! continue store. TR->mem[PC], RS.pop->PC,
    goto execute next command

12 - >R to-R (dd -->) TR->RS.push

13 - R> from-R (--> dd) RS.pop->TR

14 - MOVE (** --> **) start internal cycle for transfer data block.
    for 16bit version use subroutine:
    (NOP LIT R> LIT) target-address data-length (JNZ MOVE R> RET) source-address
    when (cmd1 cmd2 cmd3 cmd4) -- agregate of 4 commands in one 16bit-word
    for 32bit version: (NOP LIT R> LIT JNZ MOVE R> RET) target-address data-length source-address
    when (cmd1 cmd2 cmd3 cmd4 cmd5 cmd6 cmd7 cmd8 ) -- agregate of 8 commands in one 32bit-word

15 - NOP* reserved

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Последний раз редактировалось WingLion Чт янв 08, 2009 00:43, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт янв 08, 2009 00:15 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6403
Благодарил (а): 14 раз.
Поблагодарили: 100 раз.
С префиксами оригинально!


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт янв 08, 2009 00:20 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
а @ и ! :)

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт янв 08, 2009 00:32 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6403
Благодарил (а): 14 раз.
Поблагодарили: 100 раз.
WingLion писал(а):
а @ и !

Уххх!!! :) Поползу медитировать....


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт янв 08, 2009 00:45 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
только что описание команды MOVE добавил ;)

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб янв 31, 2009 20:33 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
кстати, подсчитал, сколько всего команд у процессора, оказалось - 13 (префиксные считаются за одну команду ;) )
Счастливое число, аднака :))

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб янв 31, 2009 21:32 
Не в сети
Аватара пользователя

Зарегистрирован: Вт мар 20, 2007 23:39
Сообщения: 1255
Благодарил (а): 3 раз.
Поблагодарили: 17 раз.
Впрочем как и голосов:
Цитата:
Всего проголосовало : 13

_________________
Cтоимость сопровождения программного обеспечения пропорциональна квадрату творческих способностей программиста.
Роберт Д. Блисc


Последний раз редактировалось VoidVolker Вс фев 01, 2009 11:11, всего редактировалось 1 раз.

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 42 ]  На страницу Пред.  1, 2, 3  След.

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


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

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


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

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