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

...
Google Search
Forth-FAQ Spy Grafic

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




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

Интерсна ли данная тема?
Да, безусловно. 89%  89%  [ 17 ]
Нет, полный бред. 0%  0%  [ 0 ]
Надоело! Когда же закончатся недоделки и будет рабочий проц? 11%  11%  [ 2 ]
Всего голосов : 19
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Вс фев 01, 2009 01:35 
Не в сети
Administrator
Administrator
Аватара пользователя

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

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


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

Зарегистрирован: Ср сен 13, 2006 10:06
Сообщения: 636
Откуда: Омск
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
Я же не голосовал вроде бы. По крайне мере мне дало.

_________________
Меня нет, не будет и не было.


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

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

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


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

Зарегистрирован: Вт мар 20, 2007 23:39
Сообщения: 1261
Благодарил (а): 3 раз.
Поблагодарили: 19 раз.
WingLion писал(а):
Дык, голосование не закрыто, и каждый, кто не глосовал, еще может изменить счет "в нашу пользу"

Хых, толку-то - цифра 13 только плодится:
86% [ 13 ]
13% [ 2 ]

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


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

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

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


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

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

Код:
TITLE "FORTH-CPU version 7";

include "../fcpu7/stack.inc";
include "../fcpu7/alu_5.inc";
include "../fcpu7/alu_6.inc";
include "../fcpu7/alu_7.inc";

constant nop = 0;
constant pop = 2;
constant push = 1;
constant swap = 3;

PARAMETERS (
        WIDTH = 16,
        DEPTH = 8
);
SUBDESIGN fcpu (
        CLKi : input;  -- ясное дело - синхронизация!
        DI[WIDTH-1..0] : input; -- данные, считываемые из ОЗУ
        DO[WIDTH-1..0] : output; -- данные для запппписи в ОЗУ
        ADR[WIDTH-1..0] : output; -- адрес ОЗУ
        RD,WR,CS : output; -- управляющие сигналы ОЗУ
        RESET : input;
)
VARIABLE
CLK : node;
    RCMD[WIDTH-1..0] : DFF;
    RStack : stack with(WIDTH=WIDTH,DEPTH=DEPTH);
    DStack : stack with(WIDTH=WIDTH,DEPTH=DEPTH);
    PC[WIDTH-1..0] : DFFE;
    TR[WIDTH-1..0] : DFFE;
    CMD[3..0] : NODE;
    PREF[3..0]: NODE;
    ALU5 : alu_5 with(WIDTH=WIDTH);
    ALU6 : alu_6 with(WIDTH=WIDTH);
    ALU7 : alu_7 with(WIDTH=WIDTH);
    XR  : DFF;
BEGIN


DEFAULTS
    RStack.cmd[] = GND; -- по умолчанию nop
    DStack.cmd[] = GND; -- по умолчанию nop
    PC[].ena = GND;  -- PC не меняется
    TR[].ena = GND;  -- TR не меняется
    RD = VCC;
    WR = VCC;
    CS = VCC;
    XR.d = GND;
END DEFAULTS;

CLK = GLOBAL(CLKi);
(RCMD[].clrn,PC[].clrn) = DFF(RESET,CLK,,);

    RCMD[].clk = clk;
    RStack.clk = clk;
    DStack.clk = clk;
    PC[].clk = clk;
    TR[].clk = clk;
    ALU5.cmd[] = PREF[]; ALU5.op1[] = TR[]; ALU5.op2[] = DStack.do[];
    ALU6.cmd[] = PREF[]; ALU6.op1[] = TR[]; ALU6.op2[] = DStack.do[];
    ALU7.cmd[] = PREF[]; ALU7.op1[] = TR[]; ALU7.op2[] = DStack.do[];
    PREF[] = RCMD[7..4];
    XR.clk = clk;

CASE CMD[3..0] IS
    WHEN 0 => -- команда 0 NOP
        RCMD[] = DI[]; RD = GND;
        PC[] = PC[] + 1; PC[].ena = VCC;
    WHEN 1 => -- команда 1 LIT
        RCMD[] = (B"0000",RCMD[WIDTH-1..4]);
        PC[] = PC[] + 1; PC[].ena = VCC;
        TR[] = DI[]; TR[].ena = VCC; RD = GND;
        DStack.di[] = TR[];
        DStack.cmd[] = push;
    WHEN 2 => -- команда 2 CALL
        RCMD[] = (B"0000",RCMD[WIDTH-1..4]);
        PC[] = DI[]; PC[].ena = VCC; RD = GND;
        RStack.cmd[] = push;
        RStack.di[] = PC[] + 1;
    WHEN 3 => -- команда 3 RET
        RCMD[] = (B"0000",RCMD[WIDTH-1..4]);
PC[] = RStack.do[]; PC[].ena = VCC; RStack.cmd[] = pop;
    WHEN 4 => -- команда 4
        RCMD[] = (B"0000",RCMD[WIDTH-1..4]);
        IF (TR[] == 0) THEN
            PC[] = PC[] + 1;
        ELSE
            PC[] = DI[]; RD = GND;
        END IF;
        PC[].ena = VCC;
    WHEN 5 => -- команда 5 DUP*
        RCMD[] = (B"00000000",RCMD[WIDTH-1..8]);
        TR[] = ALU5.res[]; TR[].ena = VCC;
     DStack.di[] = TR[]; DStack.cmd[] = push;
    WHEN 6 => -- команда 6 DROP*
        RCMD[] = (B"00000000",RCMD[WIDTH-1..8]);
        TR[] = ALU6.res[]; TR[].ena = VCC;
        DStack.di[] = TR[]; DStack.cmd[] = pop;
    WHEN 7 => -- команда 7 SWAP*
        RCMD[] = (B"00000000",RCMD[WIDTH-1..8]);
        TR[] = ALU7.res[]; TR[].ena = VCC;
        DStack.di[] = TR[]; DStack.cmd[] = swap;
    WHEN 8 => -- @ -- call*
        RCMD[] = (RCMD[WIDTH-1..4],B"1001");
        PC[] = TR[]; PC[].ena = VCC;
        RStack.di[] = PC[]; RStack.cmd[] = push; -- сохраняется неизменное(!) значение PC
    WHEN 9 => -- продолжение @ - ret-@
        RCMD[] = (B"0000",RCMD[WIDTH-1..4]);
        PC[] = RStack.do[]; PC[].ena = VCC; RStack.cmd[] = pop;
        TR[] = DI[]; TR[].ena = VCC; RD = GND;
    WHEN 10 => -- ! -- call*
        RCMD[] = (RCMD[WIDTH-1..4],B"1011");
        PC[] = TR[]; PC[].ena = VCC;
        RStack.di[] = PC[]; RStack.cmd[] = push; -- сохраняется неизменное(!) значение PC
        TR[] = DStack.do[]; TR[].ena = VCC; DStack.cmd[] = pop;
    WHEN 11 => -- продолжение ! ret-!
        WR = GND;
        RCMD[] = (B"0000",RCMD[WIDTH-1..4]);
        PC[] = RStack.do[]; PC[].ena = VCC; RStack.cmd[] = pop;
        TR[] = DStack.do[]; TR[].ena = VCC; DStack.cmd[] = pop;
    WHEN 12 => -- >R
        RCMD[] = (B"0000",RCMD[WIDTH-1..4]);
        RStack.di[] = TR[]; RStack.cmd[] = push;
        TR[] = DStack.do[]; TR[].ena = VCC;
        DStack.cmd[] = pop;
    WHEN 13 => -- R>
        RCMD[] = (B"0000",RCMD[WIDTH-1..4]);
        DStack.di[] = TR[]; DStack.cmd[] = push;
        TR[] = RStack.do[]; TR[].ena = VCC;
        RStack.cmd[] = pop;
    WHEN 14 => -- MOVE
  PC[] = RStack.do[]; RStack.cmd[] = swap; PC[].ena = VCC;
  RStack.di[] = PC[] + 1;
  XR = !XR;

  IF !XR THEN
   TR[] = DI[]; TR[].ena = VCC; RD = GND;
   DStack.di[] = TR[]; DStack.cmd[] = push;
  ELSE
   DStack.cmd[] = pop;
   TR[] = DStack.do[] - 1; WR = GND; TR[].ena = VCC;
  END IF;
  -- return to normal execute
  IF (TR[] == 0) and !XR THEN
   RCMD[] = (B"0000",RCMD[WIDTH-1..4]);
         ELSE
   RCMD[] = RCMD[];
  END IF;
WHEN 15 =>
  -- NEXT (= RET&CALL)
  RCMD[] = (RCMD[WIDTH-1..4],B"0010"); -- next command - CALL
  -- all for RET
  PC[] = RStack.do[]; PC[].ena = VCC; RStack.cmd[] = pop;
 
END CASE;
CS = WR and RD;
    CMD[] = RCMD[3..0];
ADR[] = PC[];
DO[] = TR[];

END;


Добавлена команда NEXT = RET&CALL

По этой команде за 2 такта иполняется эквивалент [b]R> DUP 1+ >R @ >R RET

Адресный интерпретатор для прямого шитого кода, таким образом, фактически оказывается встроен в процессор.

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


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

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
WingLion, а можно указывать где можно взять полную версию (желательно в архиве и с описанием 8)?

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


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

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

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


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

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

A возвращаюсь сюда, потому что сегодня начал доработку процессора до нормального юзабельного состояния.
В конкретном приборе (не будем говорить, каком именно, приборов может быть много).

Что приятно удивило, так это то, что вместо вот этого:

WingLion писал(а):
для EP2C20F484C7
занято
логических ячеек - 846
занято внутренней памяти - 0
встроенных 9бит-умножителей - 2
блоков PLL - 0
предельная частота - 98.75MHz
время компиляции 1мин39сек


Quartus 9.0 web edition показал предельную частоту 157MHz... (раньше была 8-я версия)

Чтобы не упираться в предел, сейчас делаю встроенную
систему на форт-процессоре с рабочей частотой 75MHz.
С использованием почти всей памяти, что есть в рабочей ПЛИС. (память работает на удвоенной частоте - 150MHz).

Почти всей, потому что 64k в рабочей ПЛИС нет, а для ровного адреса использую только 32k

Надеюсь сам форт уложить в 16k, и остальные 16k - для экрана
(хотя, экрану и 8k хватит - 4k символы и атрибуты + 4k знакогенератор)

Короче, пришло время изворачиваться... :shuffle;

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


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

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


небольшое уточнение. Сие достижение верно только для процессора с исключенной командой умножения на встроенных умножителях ПЛИС, что обидно, но не смертельно.

Описание процессора теперь будет здесь: http://winglion.ru/equinox/ а в этой теме только обсуждение исходного кода на AHDL

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


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

Зарегистрирован: Пн окт 05, 2009 18:21
Сообщения: 405
Откуда: Минск SotnikSTO@mail.ru
Благодарил (а): 48 раз.
Поблагодарили: 3 раз.
WingLion писал(а):
Описание процессора теперь будет здесь: http://winglion.ru/equinox/ а в этой теме только обсуждение исходного кода на AHDL

Это всё уже собрано в кучу и работает в железе? :)


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

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
В железе работает VHDL-ная версия этого процессора.
Вот эта: http://fforum.winglion.ru/viewtopic.php?t=2291

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


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

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


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

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


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

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