Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Сб ноя 18, 2017 00:51

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 22 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Стековый софт-процессор Proteus
СообщениеДобавлено: Пн фев 02, 2009 21:59 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6086
Благодарил (а): 13 раз.
Поблагодарили: 96 раз.
Протей (Proteus) — древнегреческий бог, меняющий форму.

Софт-процессор (т.е. процессор, реализуемый на программируемых ячейках ПЛИС) Proteus предназначен для обеспечения программной поддержки систем на кристалле, выполняемых на базе FPGA. Архитектура и основные схемотехнические решения ориентированы на использование особенностей ПЛИС Xilinx последних семейств — Spartan-3/6 всех модификаций, Virtex-4/5/6. Процессор имеет стековую архитектуру и аппаратно выполняет базовые команды языка Форт.

Основной чертой ядра Proteus является возможность его синтеза в вариантах с различной разрядностью обрабатываемых данных (8-256). При этом сохраняется программная совместимость между всеми модификациями, за исключением того, что реализации с меньшей разрядностью тракта обработки данных игнорируют несуществующие у них разряды. Независимо от разрядности данных, все команды имеют разрядность 8 бит. Это стало возможным благодаря реализации загрузки непосредственных значений через сдвиговый регистр, представляющий собой вершину стека данных. Остальные ячейки стека данных реализованы на базе распределенной памяти, характерной для FPGA Xilinx. Память такого типа представляет собой таблицы истинности логических ячеек (LUT), конфигурируемые как двупортовое ОЗУ. Каждая LUT может быть сконфигурирована как память с организацией 16x1, что дает возможность создавать компактные блоки памяти, такие как FIFO или стек. Распределенная память обеспечивает доступ ко второй ячейке стека, поэтому появляется возможность выполнения стековых (нуль-операндных) команд над этими данными. Реализация стеков данных и возвратов на базе распределенной памяти делает ядро достаточно компактным — 32-разрядная реализация занимает всего 620 секций ПЛИС Spartan-3.

Полное описание на http://www.msyst.ru/proteus.pdf


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6086
Благодарил (а): 13 раз.
Поблагодарили: 96 раз.
Кстати, система команд.

0 CMD NOP
1 CMD DUP
2 CMD OVER
3 CMD TEMP>
4 CMD R>
5 CMD NIP
6 CMD DEPTH
7 CMD RDEPTH
8 CMD SWAP

9 CMD NOT
10 CMD @
11 CMD SHL
12 CMD SHR
13 CMD SHRA
14 CMD INPORT
16 CMD +
17 CMD -
18 CMD AND
19 CMD OR
20 CMD XOR
21 CMD =
22 CMD <
23 CMD >
24 CMD *
32 CMD DROP
33 CMD cmdJMP
34 CMD cmdCALL
35 CMD cmdRJMP
36 CMD cmdRCALL
37 CMD >R
48 CMD !
49 CMD OUTPORT
50 CMD cmdIF
51 CMD cmdRIF

58 CMD RET

0x80 - 0xBF - положить на стек новое число, равное содержимому разрядов 5 - 0 команды
0xC0 - 0xFF - сдвинуть верхнее число стека на 6 бит влево, вдвигаемые биты находятся в разрядах 5 - 0


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

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
где комманда "не равно"?


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6086
Благодарил (а): 13 раз.
Поблагодарили: 96 раз.
вопрос писал(а):
где комманда "не равно"?

Цитата:
: <> = NOT ;

В номерах команд можно заметить "разрыв" между кодами 24 и 32. Это резерв для команд со стековой нотацией x, y -- z, указатель стека модифицируется, запись в стек производится, только в отсутствие команды по умолчанию пишется вершина стека. Перегружать базовую реализацию вряд ли имеет смысл, тем более что "не равно" все равно выражается всего двумя командами.


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

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
логика должна присутствовать вся!
Код:
1001 constant success_1
1001 constant success_2
1001 constant success_3
1033 constant fail_for_1
1032 constant fail_for_2
1043 constant fail_for_3

\ success if result = constant (1 from 3) and no fail for 1,2,3



   : success
       BEGIN
       
       next_try
       success_1 = SWAP fail_for_1 <> AND
      UNTIL
;

     

и таких циклов 3 - легко посчитать, что количество сравнений увеличивается в 1,5 раза
а количество вызовов - 2


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6086
Благодарил (а): 13 раз.
Поблагодарили: 96 раз.
А если посчитать в абсолютном выражении, получится, что больше всего на одну команду. Впрочем, вот добавил с кодом 25 - принципиально ничего не изменилось. Тем не менее, выражение <> через = является резервом (маленьким, правда) для сокращения аппаратуры и высвобождения дефицитных опкодов аппаратной форт-машины с байт-кодом.


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

Зарегистрирован: Сб янв 26, 2008 18:23
Сообщения: 71
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
извините - думал что кто-то разработал модель форт-процессора для известного симулятора "Протеус" :)

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

с уважением - Jelsay


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6086
Благодарил (а): 13 раз.
Поблагодарили: 96 раз.
Jelsay писал(а):
извините - думал что кто-то разработал модель форт-процессора для известного симулятора "Протеус"

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

Не совсем понял, что имеется в виду.


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

Зарегистрирован: Сб янв 26, 2008 18:23
Сообщения: 71
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Цитата:
Название, не совпадающее ни с чем, придумать сейчас очень сложно

это верно, но "Proteus" это такой же бренд для электронщиков, как для программистов "Microsoft" 8)

Цитата:
Не совсем понял, что имеется в виду.

имеется ввиду поддержка процессором шитого кода.
(прямого шитого кода)

с уважением - Jelsay


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6086
Благодарил (а): 13 раз.
Поблагодарили: 96 раз.
Jelsay писал(а):
имеется ввиду поддержка процессором шитого кода. (прямого шитого кода)

Форт-процессору ШК совершенно ни к чему. У него и так машинный код представляет собой базовые слова Форта.


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

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
А расширяемость как же происходит?


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

Зарегистрирован: Сб янв 26, 2008 18:23
Сообщения: 71
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Хищник писал(а):
Форт-процессору ШК совершенно ни к чему

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

впрочем.. всё это в порядке бреда :oops:

с уважением - Jelsay


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6086
Благодарил (а): 13 раз.
Поблагодарили: 96 раз.
Jelsay писал(а):
наиболее проста, компактна и красива реализация с помощью прямого шитого кода (ПШК) - которая всем хороша кроме скорости на "неродных процессорах" - растут накладные расходы для определения адрес это или уже код пошел- и разве не повыситься скорость выполнения вложенных слов если передача управления будет происходить сразу на код текущей семантики, а не прыгать по куче переходов?

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


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

Зарегистрирован: Сб янв 26, 2008 18:23
Сообщения: 71
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Цитата:
в гарвардской архитектуре

ИМХО, в чистой гарвардской архитектуре этот вопрос решается некрасиво да и не оптимально. Согласитесь что при большей вложенности вызовов необходима специальная структура хранения цепочки адресов переходов - скажем стек адресов. Но зачем нам переходить по каждому адресу возврата если у каждого (исполняемого) адреса будут теги которые сразу скажут что находиться по адресу - следующий адрес в цепочке или машинный код?
Почему структура должна быть специальной? Ну во-первых - желательно чтобы она была СОЗУ и торчать в ядре на своей личной шине, а во вторых - главное - структура, кроме хранения адресов должна проводить их перманентную обработку для выяснения действительно необходимого адреса перехода..

про то что это бред - я не отказываюсь.. 8)

с уважением - Jelsay


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6086
Благодарил (а): 13 раз.
Поблагодарили: 96 раз.
Jelsay писал(а):
ИМХО, в чистой гарвардской архитектуре этот вопрос решается некрасиво да и не оптимально. Согласитесь что при большей вложенности вызовов необходима специальная структура хранения цепочки адресов переходов - скажем стек адресов.

Эта структура называется стеком возвратов. Для Форта и характерно, что стеков у него два - данных и возвратов.
Jelsay писал(а):
Но зачем нам переходить по каждому адресу возврата если у каждого (исполняемого) адреса будут теги которые сразу скажут что находиться по адресу - следующий адрес в цепочке или машинный код?

Это вариант, когда переходы кодируются в виде "xxx aaaaa", где xxx - фиксированная комбинация битов, aaaaa - адрес. Это тоже можно делать, но оно не отменяет стека возвратов.


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

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


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

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


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

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