Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Пт апр 19, 2024 15:45

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 137 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7, 8 ... 10  След.
Автор Сообщение
 Заголовок сообщения: Re: VHDL: процессор за час
СообщениеДобавлено: Вс фев 06, 2011 22:00 
Не в сети
Administrator
Administrator
Аватара пользователя

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

нашел ОШИБКУ в главном CASE исправляю...

Код:
         when prisv =>
            -- на адрес подать вершину стека данных
            new_CPU.Addr := CPU.data_stack.top;
            -- на данные подвершину
            new_CPU.oData := CPU.data_stack.subtop;
            -- и надо бы подать команду памяти на запись
            new_CPU.mem := Mwrite;
            -- !! двойной POP !!
            new_CPU.data_stack := POP4STACK(POP4STACK(CPU.data_stack));


двойное выталкивание из стека данных отсутствовало :(

Подозреваю, что после этого изменения может упасть частота...

хм... 166MHz с учетом кучи тестовых выводов... терпимо.

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: VHDL: процессор за час
СообщениеДобавлено: Пн фев 07, 2011 13:46 
Не в сети

Зарегистрирован: Сб май 06, 2006 12:01
Сообщения: 959
Откуда: Украина, Харьков
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
Поскольку выделенной темы нет - хочу спросить про программирование этого процессора. Похожий вопрос задавал в теме про Минимальные набор слов Форта на второй странице (кстати, как сделать точную ссылку на сообщение?):
Код:
: INVERT ( a --~a)   DUP NAND ;
: AND ( a b -- a&b )   NAND INVERT ;
: OR ( a b -- a|b )   INVERT SWAP INVERT NAND ;  \ можно ли лучше?
: XOR ( a b -- a xor b )   OVER OVER OR -ROT NAND NAND INVERT ;   \ можно ли лучше?

На данный момент лучшее:
Коротко:
Код:
: inv ( a --~a)   DUP nand ;
: and ( a b -- a&b )   nand inv ;
: or ( a b -- a|b ) inv SWAP inv nand ;
: xor ( a b -- a xor b )  DUP inv >R SWAP DUP >R inv nand R> R> nand nand ;
Итого, INV и AND выражаются через 1 nand , OR через 3 nand , XOR через 5 nand.
Если у кого-то есть решение получше - сообщите, пожалуйста!

Код теста полностью:
Код:
\ 2011.02.07  сравнение логики
\ Задача: получить реализацию полного набора логических
\   операций


: t  ( -- true )
   TRUE DUP . 9 EMIT ;

: f  ( -- false )
   FALSE DUP . 9 EMIT ;

: nand  AND INVERT ;

VECT op

' nand TO op

: test1
   ' TO op
   f op . CR
   t op . CR ;


: test2
   ' TO op
   f f op . CR
   f t op . CR
   t f op . CR
   t t op . CR ;

.( nand) CR test2 nand CR


: inv  DUP nand ;
.( inv) CR test1 inv CR


: and  nand inv ;
.( and) CR test2 and CR


: or  inv SWAP inv nand ;
  \ использовалось правило деМоргана x+y=^^(x+y)=^(^x*^y)
.( or) CR test2 or CR


: xor  OVER OVER or  -ROT nand nand inv ;
.( xor) CR test2 xor CR


: xor  OVER OVER inv nand >R SWAP inv nand R> nand ;
.( xor2) CR test2 xor CR

: xor  DUP inv >R SWAP DUP >R inv nand R> R> nand nand ;
.( xor3) CR test2 xor CR

\ xor3 - то же в базисе DUP SWAP >R R> nand
\ x y                 R:       DUP inv >R
\ x y                 R: ^y    SWAP DUP >R inv
\ y ^x                R: ^y x  nand R> R>
\ ^(^x*y) x ^y        R:       nand nand
\ ^(^(^x*y)*^(x*^y))  R:
И, если переходить к такому набору команд, типичные способы решения обычных задач надо будет делть по-другому. Соответственно, старые исходники нужно будет переписать. Или будет неэффективно.
Про автоматическое преобразования для другой системы команд я даже и не слышал.

Кстати, если заменить SWAP на OVER , скорость процессора изменится?

_________________
With best wishes, in4.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: VHDL: процессор за час
СообщениеДобавлено: Пн фев 07, 2011 17:34 
Не в сети

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


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

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
in4 писал(а):
: XOR ( a b -- a xor b ) OVER OVER OR -ROT NAND NAND INVERT ;

7 команд, но -ROT - это что-то составное и INVERT - тоже

: XOR OVER OVER DUP NAND NAND >R SWAP DUP NAND NAND R> NAND ;

тут просто 12 команд

in4 писал(а):
: OR ( a b -- a|b ) INVERT SWAP INVERT NAND ;


4 команды из них две составных

: OR DUP NAND SWAP DUP NAND NAND ;

чисто 6 команд

забыто еще:

: SUB DUP NAND ADD DUP NAND ;

in4 писал(а):
Кстати, если заменить SWAP на OVER , скорость процессора изменится?


вряд ли изменится.

Прямо сейчас и проверю...

Контрольная компиляция...
одноядерный вариант, 16-разрядное ядро, EP3C5E144C8 ... 211MHz, 837LCELL

правлю кусочек в определении swap:
Код:
--            tmp := new_CPU.data_stack.top;
--            new_CPU.data_stack.top := CPU.data_stack.subtop;
--            new_CPU.data_stack.subtop := tmp;
    new_CPU.data_stack := PUSH2STACK(CPU.data_stack,CPU.data_stack.subtop);


Компилирую... 198MHz, 994LCELL...
"что-то тут не так, сказал Колобок, дожевывая Лису" :shock:

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


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

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


http://fforum.winglion.ru/viewtopic.php?f=3&t=2706&p=30285#p30285


Номер поста для p= можно подглядеть в ссылке на кнопке 'цитата'

и номера темы и форума тоже.

так, а можно и проще:
http://fforum.winglion.ru/viewtopic.php?p=30285#p30285

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


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

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

: ROT SWAP >R SWAP R> ;
: -ROT >R SWAP R> SWAP ;

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


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

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

А главную то новость я здесь не пропечатал!!

процессор (в 16-битном варианте) сегодня заработал в реальном железе на ките с EP2C20... На частоте 160MHz, и уже умеет моргать светодиодами...
Осталось научить его петь, плясать и на дуде играть...

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: VHDL: процессор за час
СообщениеДобавлено: Пн фев 07, 2011 22:00 
WingLion писал(а):
Да, еще вот:

: ROT SWAP >R SWAP R> ;
: -ROT >R SWAP R> SWAP ;


Правильно будет если ROT и -ROT поменять местами.


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

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


Упс... на автомате написал 'заученное' и не поглядел, что получается :shuffle;

Код:
: -ROT SWAP >R SWAP R> ;
: ROT >R SWAP R> SWAP ;

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: VHDL: процессор за час
СообщениеДобавлено: Пн фев 07, 2011 23:53 
Не в сети

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

Надо бы:
Код:
: xor ( a b -- a xor b )  dup inv >r swap dup >r inv nand r> r> nand nand ;
\ или, для скорости расписать inv :
: xor ( a b -- a xor b )  dup dup nand >r swap dup >r dup nand nand r> r> nand nand ;
14 команд набра.
Т.к. команды OVER в наборе не было, значит, надо без нее.
На сегодня это лучшая реализация логических операций через NAND, которую я знаю.

ОVER через команды набора:
Код:
: over ( 1 2 -- 1 2 1 ) >r dup r> swap ;
4 команды набора.

А для каких задач проектируется этот такой процессор?

Хотя кое-где можно сэкономить, перегруппировать команды или инвертировать логику условий, для задач управления команд маловато. На проверку и установку флажков будет уходить слишком много команд.

_________________
With best wishes, in4.


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

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


Вопрос, можно сказать в поддых ;)

Eго можно считать просто обобщением способа построения процессоров, которое я для себя сделал. И записал в этой теме пошагово.

in4 писал(а):
Хотя кое-где можно сэкономить, перегруппировать команды или инвертировать логику условий, для задач управления команд маловато. На проверку и установку флажков будет уходить слишком много команд.


Про экономию речи пока просто не идет.
Без реальной задачи она просто бессмысленна.

Конкретно, процессор нужен для работы с Ethernet протоколами, которые мне светят в ближайшем будущем...
Ох, и долго же они светят... прямо как морковка перед носом зайца, тянущего большую телегу.

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


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

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

Откомпилировалось и развелось без сообщений об ошибках.
На варнинги не смотрю.

Slice Logic Distribution: 
Number of LUT Flip Flop pairs used: 697
Number with an unused Flip Flop: 342 out of 697 49%
Number with an unused LUT: 2 out of 697 0%
Number of fully used LUT-FF pairs: 353 out of 697 50%
Number of unique control sets: 8


Cross Clock Domains Report:
--------------------------

Clock to Setup on destination clock clk
---------------+---------+---------+---------+---------+
| Src:Rise| Src:Fall| Src:Rise| Src:Fall|
Source Clock |Dest:Rise|Dest:Rise|Dest:Fall|Dest:Fall|
---------------+---------+---------+---------+---------+
clk | 5.489| | | |
---------------+---------+---------+---------+---------+


Это, если я правильно понял соответствует - 182MHz

А мне пора на работу топать... Вечерком попробую четырехядерник откомпилить на spartan-6 ;))

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


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

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


по схеме
(A xor B) := (A nand (A nand B)) nand (B nand (A nand B));


12 команд... напутал или нет?

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


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

Зарегистрирован: Сб май 06, 2006 12:01
Сообщения: 959
Откуда: Украина, Харьков
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
WingLion писал(а):
12 команд... напутал или нет?
Напутал... :(
Код:
: xor ( a b -- a xor b )  dup dup nand >r swap dup >r dup nand nand r> r> nand nand ;
14 команд набра, меньше пока не знаю.

A xor B == (A nand ^B) nand (B nand ^A) ==(A nand (B nand B)) nand (B nand (A nand A))
расписывается двойное отрицани с использованием правила Де Моргана.

Посмотри, как проверяю(Код теста полностью), такая проверка делается быстро!

_________________
With best wishes, in4.


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

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

однако..
Код:
: XOR DUP >R SWAP DUP >R NAND DUP R> NAND SWAP R> NAND NAND ;

таки 13 команд, не 14 ;)

Используется вот это:
Изображение

проверка в форке:

fork.ini included

FORTH(0)>: NOT -1 XOR ;
Ok
FORTH(0)>: NAND AND NOT ;
Ok
FORTH(0)>: nXOR DUP >R SWAP DUP >R NAND DUP R> NAND SWAP R> NAND NAND ;
Ok
FORTH(0)>HEX
Ok
FORTH(0)>10 20 XOR .
30 Ok
FORTH(0)>10 20 nXOR .
30 Ok
FORTH(0)>AA 0F XOR .
A5 Ok
FORTH(0)>AA 0F nXOR .
A5 Ok


Вложения:
Комментарий к файлу: старая-старая схема XOR на 155ЛА3
XOR4rezNAND.GIF
XOR4rezNAND.GIF [ 3.68 Кб | Просмотров: 20905 ]

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)
Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 137 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7, 8 ... 10  След.

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


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

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


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

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