WingLion's Forum

А чего тут только нет?.. и поиска нет, и юзеров нет, и ничего ненужного нет
Текущее время: 23 мар 2019, 00:42

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




Начать новую тему Ответить на тему  [ Сообщений: 129 ]  На страницу Пред.  1, 2, 3, 4, 5 ... 9  След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: 10 июн 2005, 22:01 
Не в сети
Аватара пользователя

Зарегистрирован: 05 фев 2005, 14:50
Сообщения: 144
Откуда: Сфероид.
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Тоесть, Крыля, можно на данной разновидности ФОРТа написать прогу и она будет работать без компиляции?

_________________
Дракон-киборг.
Хочеш веселья? - Дёрни кольцо! (Надпись на гранате).
Танки грязи не боятся! - Особенно Т-3200!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 11 июн 2005, 04:40 
Не в сети
Добрый Админ
Добрый Админ
Аватара пользователя

Зарегистрирован: 04 фев 2005, 06:45
Сообщения: 616
Откуда: St.Petersburg
Благодарил (а): 1 раз.
Поблагодарили: 32 раз.
falanger писал(а):
Тоесть, Крыля, можно на данной разновидности ФОРТа написать прогу и она будет работать без компиляции?


Программа, работающая без компиляции -- это двоичный код :)

С Форта в этот код ее надо перевести, и делает это компилятор, так что совсем без него не получится.

_________________
Дракон всегда прав. Даже, когда он Лев - он прав!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 11 июн 2005, 04:41 
Не в сети
Добрый Админ
Добрый Админ
Аватара пользователя

Зарегистрирован: 04 фев 2005, 06:45
Сообщения: 616
Откуда: St.Petersburg
Благодарил (а): 1 раз.
Поблагодарили: 32 раз.
Теперь приступаю к тестированию того, что получилось.
Для этого надо подключить к процессору ОЗУ, записать в него команды и проверять работу.

Чтобы проверять в имитаторе MAX+, подключаю внутреннее ОЗУ. Оно создает 2 такта задержки, но это не страшно. За скоростью не гонимся...

Итак, процессор с подключенным ОЗУ:

=== FORTH.TDF ===
Код:

TITLE "Forth-CPU";

include "gen";
include "stack_lc";
include "stack_m";
include "alu2";
include "mdb";
include "lpm_ram_dp";

PARAMETERS
(
WIDTH = 16
);

SUBDESIGN forth
(
CLK100   : INPUT;
CLKF   : BIDIR;
CLK_CPU   : INPUT;
-- ENA    : INPUT = VCC;
ENA    : OUTPUT;

A[WIDTH-1..0] : OUTPUT;

-- DI[WIDTH-1..0] : INPUT;
DI[WIDTH-1..0] : BIDIR;

DO[WIDTH-1..0] : BIDIR;

MR    : OUTPUT;
MW    : OUTPUT;
CS    : OUTPUT;

)
VARIABLE

GN    : gen WITH (FRQ=3);
CLK    : NODE;

DOR[WIDTH-1..0] : NODE;
D_OUT   : NODE;

D_Stack   : stack_lc WITH (WIDTH=WIDTH,DEPTH=8,MODE=0);
R_Stack   : stack_lc WITH (WIDTH=WIDTH,DEPTH=8,MODE=0);

ALU    : alu2 WITH (WIDTH=WIDTH,MODE=0);

PROC   : mdb WITH (WIDTH=WIDTH);

-- iPC[WIDTH-1..0] : DFF;
-- PC[WIDTH-1..0] : DFFE;

AR[WIDTH-1..0] : DFFE;

DR[WIDTH-1..0] : NODE;
MEMR   : NODE;
CMDR[WIDTH-1..0]: NODE;

-- DR[WIDTH-1..0] : DFFE;
-- DR[WIDTH-1..0] : NODE;

-- CMDR[WIDTH-1..0]: DFFE;

RSTC[1..0]  : NODE;
DSTC[1..0]  : NODE;
ALUFN[5..0]  : NODE;

ENA    : NODE;
ENA2   : NODE;

RSTD[WIDTH-1..0]: NODE;

D_OUT_R   : NODE;
RAM    : lpm_ram_dp WITH (LPM_WIDTH=WIDTH,LPM_WIDTHAD=8,
      LPM_FILE = "program.mif",
      lpm_outdata="REGISTERED");


BEGIN

RAM.wren        = LCELL(ENA2 & MEMR & CMDR[WIDTH-3]);
RAM.data[]      = DO[];
RAM.wraddress[] = A[7..0];
RAM.wrclock     = CLK;
RAM.wrclken     = VCC;
RAM.rden        = VCC;
RAM.rdaddress[] = A[7..0];
RAM.rdclock     = CLK;
RAM.rdclken     = VCC;

FOR i IN 0 TO WIDTH-1 GENERATE
  DI[i] = TRI(RAM.q[i],D_OUT_R);
END GENERATE;

D_OUT_R   = LCELL(A[] == B"00000000XXXXXXXX");

GN.clk   = CLK100;
CLKF   = GN.clkf;
-- CLK    = CLKF;
CLK    = CLK_CPU;

-- ENA2   = DFF(ENA,CLK,,);

-- *****************************

R_Stack.CLK   = CLK;
R_Stack.ENA   = ENA2;
R_Stack.DI[]  = RSTD[];
-- R_Stack.command[] = RSTC[];
R_Stack.command[] = CMDR[7..6];

D_Stack.CLK   = CLK;
D_Stack.ENA   = ENA2;
D_Stack.DI[]  = AR[];
-- D_Stack.command[] = DSTC[];
D_Stack.command[] = CMDR[9..8];

DOR[]    = AR[];

-- *****************************
ENA    = PROC.ena;
ENA2   = PROC.ena2;

PROC.clk  = CLK;
PROC.di[]  = DI[];
PROC.AR[]  = AR[];
PROC.RSTO[]  = R_Stack.DO[];

A[]    = PROC.AO[];

CMDR[]   = PROC.command[];

DR[]   = PROC.DO[];

MEMR   = PROC.MEM;
-- *****************************

IF CMDR[14] THEN
  RSTD[]   = PROC.PCI[];
ELSE
  RSTD[]   = AR[];
END IF;

AR[].clk  = CLK;
AR[].ena  = ENA2;

CASE (MEMR,CMDR[WIDTH-3]) IS
  WHEN 0 => AR[] = ALU.Q[];
  WHEN 1 => AR[] = ALU.Q[];
  WHEN 2 => AR[] = DR[];
  WHEN 3 => AR[] = ALU.Q[];
END CASE;

ALUFN[]   = CMDR[5..0] xor B"000000";

-- *****************************

ALU.clk   = CLK;
ALU.ena   = ENA2;
ALU.command[] = ALUFN[];
ALU.a[]   = AR[];
ALU.b[]   = D_Stack.DO[];

-- *****************************

D_OUT   = VCC;

FOR i IN 0 TO WIDTH-1 GENERATE
  DO[i] = TRI(DOR[i],D_OUT);
END GENERATE;

(MR,MW,CS) = VCC;

END;

===

В приведенном коде уже сделаны некоторые исправления, которые были обнаружены в процессе тестирования на симуляторе. (По недосмотру за использованием имен переменных имелась ошибка работы с регистром AR)

Для ОЗУ требуется еще один файлик:

=== PROGRАМ.MIF ===

Код:
DEPTH = 256;
WIDTH = 16;
CONTENT
BEGIN
[0..FF] :
    0000000000000000;

0  :0000000000000000
    0000000000000000   
    0100000000010000 -- CALL 10h
    0000000000000000
    1000000000000000 -- RET-REP
    0000000000000000
;

10  :0000000000000000
    0100000000011000 -- call 18h
    0000000000000000
    1000000000000000 -- RET-REP

    0000000000000000
    0000000000000000
    0000000000000000
    0000000000000000
;
18  :1000000011000000 -- RET
    0000000000000000
    0000000000000000
    0000000000000000
;
END ;

===

В данном простом тесте производится проверка вызова подпрограмм и возврата из подпрограмм.

Эквивалент ассемблера:
Код:
   org 02h
   call 010h
   nop
   ret-rep

   org 10h
   call 18h
   nop
   ret-rep
   
   org 18h
   ret


Команда ret-rep производит возврат из подпрограммы без выталкивания адреса из стека возвратов, так, что следующий ret или ret-rep возвращает счетчик команд в точку, следующую за вызвавшей командой call, в данном примере, на адрес 03

=============

Обнаружилось еще одно упущение -- нет загрузки констант :(

Пошел переделывать MDB.TDF...

================

Новый блок управления памятью:
Добавлена команда LIT и префикс условного перехода по управляющему входу IF_IN.

=== MDB2.TDF ===
Код:


Title "Memory direction block";

PARAMETERS
(
WIDTH = 16
);

CONSTANT CMD_CALL = 2^(WIDTH-2) + 64; -- push rst
CONSTANT CMD_RET = 2^(WIDTH-1) + 192; -- pop rst
CONSTANT CMD_CALL_AR = 3*2^(WIDTH-2) + 64 + 8 + 768; -- push rst, pop dst, alu-B

CONSTANT CMD_LIT = 256; -- push dst
CONSTANT CMD_RET_RD = 2^(WIDTH-1) + 192 + 256; -- pop rst, push dst
CONSTANT CMD_RET_WR = 2^(WIDTH-1) + 192 + 768; -- pop rst, pop dst
CONSTANT CMD_NOP = 0;

SUBDESIGN MDB2
(
CLK     : INPUT;

ENA     : OUTPUT;
ENA2    : OUTPUT;

DI[WIDTH-1..0]  : INPUT;
DO[WIDTH-1..0]  : OUTPUT;

COMMAND[WIDTH-1..0] : OUTPUT;
MEM     : OUTPUT;

MR,MW,CS   : OUTPUT;
READY    : INPUT = VCC;

AO[WIDTH-1..0]  : OUTPUT;

RSTO[WIDTH-1..0] : INPUT = VCC;
DSTO[WIDTH-1..0] : INPUT = VCC;

AR[WIDTH-1..0]  : OUTPUT;

-- AR[WIDTH-1..0]  : INPUT = GND;

PCI[WIDTH-1..0]  : OUTPUT;

RSTI[WIDTH-1..0] : OUTPUT;
DSTI[WIDTH-1..0] : OUTPUT;

IF_IN    : INPUT = GND;

)
VARIABLE

START[1..0]   : DFF;
ENA     : NODE;
ENA2    : NODE;

CMDR[WIDTH-1..0] : DFFE;
MEM     : DFFE;

iPC[WIDTH-1..0]  : DFF;
PC[WIDTH-1..0]  : DFFE;
AR[WIDTH-1..0]  : DFFE;
-- ARX[WIDTH-1..0]  : NODE;

DR[WIDTH-1..0]  : DFFE;

LIT     : DFFE;
CMDXX[2..0]   : DFFE;

CMDX[2..0]   : LCELL;
CMDXR[2..0]   : DFFE;

IF_BIT    : DFFE;
IMM     : DFFE;

CPC[1..0]   : DFFE;
CAR[1..0]   : DFFE;

BEGIN

DEFAULTS
IF_BIT = GND;
LIT  = GND;
MEM  = GND;
IMM  = GND;
CMDXX[] = GND;
END DEFAULTS;

-- command
-- 0000XX -- NEXT
-- 0001XX -- IF_PREF
-- 0010XX -- LIT
-- 0011XX -- IMM_LIT
-- 01XXXX -- CALL
-- 10XXXX -- RET/NEXT
-- 110XXX -- MEM-READ
-- 111XXX -- MEM-WRITE

START[].clk = CLK;
START[]  = START[] + 1;

ENA   = DFF((START0 & START1),CLK,,);

IF_BIT.clk = CLK;
IF_BIT.ena = ENA;

DR[].clk = CLK;
DR[].ena = ENA;
DR[]  = DI[];
DO[]  = DR[];

-- *************************************

CMDR[].clk = CLK;
CMDR[].ena = ENA;
MEM.clk  = CLK;
MEM.ena  = ENA;
LIT.clk  = CLK;
LIT.ena  = ENA;
IMM.clk  = CLK;
IMM.ena  = ENA;

CMDXX[].clk = CLK;
CMDXX[].ena = ENA;

CASE (LIT,DI[WIDTH-1..WIDTH-3]) IS
  WHEN 0 => CMDX[] = 0; IF_BIT = DI[WIDTH-4];
  WHEN 1 => CMDX[] = 0; LIT = !DI[WIDTH-4]; CMDXX[] = 1;
         IMM = DI[WIDTH-4]; -- LIT
  WHEN 2 => CMDX[] = B"010" xor (IF_BIT & IF_IN); -- 2/5
  WHEN 3 => CMDX[] = B"010" xor (IF_BIT & IF_IN); -- 2/5
  WHEN 4 => CMDX[] = 4;
  WHEN 5 => CMDX[] = 4;
  WHEN 6 => CMDX[] = 3; LIT = VCC; CMDXX[] = 6;-- MEM-RD
  WHEN 7 => CMDX[] = 3; LIT = VCC; CMDXX[] = 7;-- MEM-WR

  WHEN 8,9,10,11,12,13,14,15
      => CMDX[] = CMDXX[];
END CASE;

CASE CMDX[] IS

  WHEN 0 => CMDR[] = DI[];
  WHEN 1 => CMDR[] = CMD_LIT;
  WHEN 2 => CMDR[] = CMD_CALL;
  WHEN 3 => CMDR[] = CMD_CALL_AR;
  WHEN 4 => CMDR[] = CMD_RET;
  WHEN 5 => CMDR[] = CMD_NOP; -- nop for IF
  WHEN 6 => CMDR[] = CMD_RET_RD;
  WHEN 7 => CMDR[] = CMD_RET_WR;

END CASE;

COMMAND[] = CMDR[];

CMDXR[].clk = CLK;
CMDXR[].ena = ENA;
CMDXR[]  = CMDX[];

CPC[1..0].clk = CLK; CPC[1..0].ena = ENA;
CAR[1..0].clk = CLK; CAR[1..0].ena = ENA;

CASE CMDX[] IS
  WHEN 0 => CPC[] = 0; CAR[] = (DI[WIDTH-4] & !LIT);
  WHEN 1 => CPC[] = 0; CAR[] = 1;
  WHEN 2 => CPC[] = 1; CAR[] = 0;
  WHEN 3 => CPC[] = 2; CAR[] = 2;
  WHEN 4 => CPC[] = 3; CAR[] = 0;
  WHEN 5 => CPC[] = 3; CAR[] = 2;
  WHEN 6 => CPC[] = 3; CAR[] = 1;
  WHEN 7 => CPC[] = 3; CAR[] = 2;
END CASE;

CASE CPC[] IS
  WHEN 0 => PC[] = iPC[];
  WHEN 1 => PC[] = (GND,GND,DR[WIDTH-3..0]);
  WHEN 2 => PC[] = AR[];
  WHEN 3 => PC[] = RSTO[];
END CASE;

CASE CAR[] IS
  WHEN 0 => AR[] = AR[];
  WHEN 1 => AR[] = DR[];
  WHEN 2 => AR[] = DSTO[];
  WHEN 3 => AR[] = ((B"1111" & DR[WIDTH-5]),DR[WIDTH-5..0]);
END CASE;

%
CASE CMDXR[2..0] IS
  -- NEXT
  WHEN 0 => PC[] = iPC[];  AR[] = ARX[];
  -- LIT
  WHEN 1 => PC[] = iPC[];  AR[] = DR[];
  -- CALL
  WHEN 2 => PC[] = (GND,GND,DR[WIDTH-3..0]); AR[] = ARX[];
  -- CALL AR
  WHEN 3 => PC[] = AR[];   AR[] = DSTO[];
  -- RET
  WHEN 4 => PC[] = RSTO[]; AR[] = ARX[];
  -- RET
  WHEN 5 => PC[] = RSTO[]; AR[] = DSTO[];
  -- RET/RD
  WHEN 6 => PC[] = RSTO[]; AR[] = DR[];
  -- RET/WR
  WHEN 7 => PC[] = RSTO[]; AR[] = DSTO[];

END CASE;
%

MR = !MW;
MW = !DFFE((MEM & CMDR[WIDTH-3]),CLK,,,ENA2);
CS = GND;

ENA2   = DFF(ENA,CLK,,);

iPC[].clk  = CLK;
iPC[]   = PC[] + 1;
PCI[]   = iPC[];

PC[].clk  = CLK;
PC[].ena  = ENA2;

AR[].clk  = CLK;
AR[].ena  = ENA2;

AO[] = PC[];

DSTI[] = AR[];
RSTI[] = iPC[];

END;


===

Теперь, управляющие старшие биты такие:

-- 0000XX -- NEXT -- просто команда
-- 0001XX -- IF_PREF -- префикс команды условного перехода,
-- следующий переход будет, если выполнено условие IF_IN == 0
-- 0010XX -- LIT -- загрузка непосредственных данных
-- 0011XX -- IMM_LIT -- загрузка короткого числа -- -0800h..+07FFh непосредственно из команды
-- 01XXXX -- CALL -- вызов подпрограммы
-- 10XXXX -- RET -- возврат из подпрограммы
-- 110XXX -- MEM-READ -- загрузка данных из памяти "@"
-- 111XXX -- MEM-WRITE -- запись в память "!"

_________________
Дракон всегда прав. Даже, когда он Лев - он прав!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 11 июн 2005, 04:43 
Не в сети
Добрый Админ
Добрый Админ
Аватара пользователя

Зарегистрирован: 04 фев 2005, 06:45
Сообщения: 616
Откуда: St.Petersburg
Благодарил (а): 1 раз.
Поблагодарили: 32 раз.
Та-ак... замечен еще один глюк...

Нет пути передачи данных со стека возвратов в стек данных...

И нет схемы формирования условия для условного перехода...

Но это уже завтра, ЗАВТРА, ЗАВТРА

_________________
Дракон всегда прав. Даже, когда он Лев - он прав!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 11 июн 2005, 16:13 
Не в сети
Злой Модерун
Злой Модерун
Аватара пользователя

Зарегистрирован: 05 фев 2005, 04:22
Сообщения: 45
Откуда: с деревни
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Крыля, ты уже полпроцессора в MDB2.TDF запихнул, может, прямо на нем весь и сделаешь? :)

P.S. А процессора то нету и нету! Уж скоро неделя пройдет, а у тебя одна Кадабра с приставкой Абра... :roll:

_________________
Всех сгым, а кого нэ сгым, того пынадкусаю!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 11 июн 2005, 19:24 
Запретить, адназначна!

[мат стерт]

+ Еще один IP=адрес в БАН-листе.

Отредактировано Зверюгой


Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: 11 июн 2005, 20:42 
Не в сети
Аватара пользователя

Зарегистрирован: 05 фев 2005, 14:50
Сообщения: 144
Откуда: Сфероид.
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Ириновский - дурак! Нрыля - работник "почтового ящика". :lol:

Крыля, я жду что будет дальше.
Пока интересно получается.

_________________
Дракон-киборг.
Хочеш веселья? - Дёрни кольцо! (Надпись на гранате).
Танки грязи не боятся! - Особенно Т-3200!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 11 июн 2005, 22:31 
Не, в поведенческом стиле все-таки гораздо проще писать. AHDL, как посмотрю, практически та же самая схема, только зачем-то в тексте. Приходится прописывать, что с чем соединено.

http://www.kc.ru/~tile/proc_creating2.htm

Там шаблон.


Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: 15 июн 2005, 22:26 
Не в сети
Злой Модерун
Злой Модерун
Аватара пользователя

Зарегистрирован: 05 фев 2005, 04:22
Сообщения: 45
Откуда: с деревни
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Схему в тексте проще прописывать. И удобнее. Особенно, когда надо что-то править. А в графической схеме и запутаться проще и ошибок больше делается...
К тому же, граф.схемы MAX-Plus дольше обрабатывает почему-то...

_________________
Всех сгым, а кого нэ сгым, того пынадкусаю!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 16 июн 2005, 00:39 
Так я не про графический ввод говорю, а про VHDL. Там тот же текст, но он почитабельнее выглядит. Я, собственно, не призываю все тут же бросить, просто констатирую, что к AHDL подключаться как-то не с руки... а Форт-процессорам я немножко не чужд :)


Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: 16 июн 2005, 02:57 
Не в сети
Добрый Админ
Добрый Админ
Аватара пользователя

Зарегистрирован: 04 фев 2005, 06:45
Сообщения: 616
Откуда: St.Petersburg
Благодарил (а): 1 раз.
Поблагодарили: 32 раз.
Спорить о том, что читабельнее, думаю, незачем.
Дело вкуса и привычки, в конце концов.
Я, например, после AHDL на VHDL ничего сделать не сумел, то ли от того, что сам глупый, то ли от того, что MAX+Plus с VHDL плохо работает. К тому же, некоторые конструкции языка VHDL я просто не понимаю...

_________________
Дракон всегда прав. Даже, когда он Лев - он прав!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 16 июн 2005, 03:06 
Не в сети
Добрый Админ
Добрый Админ
Аватара пользователя

Зарегистрирован: 04 фев 2005, 06:45
Сообщения: 616
Откуда: St.Petersburg
Благодарил (а): 1 раз.
Поблагодарили: 32 раз.
Первая версия признана совершенно неработоспособной, поэтому главный файл и файл устройства управления существенно переработаны. Регистры PC и AR вернулись в главный файл, а в устройстве управления остались только микрокоды и логика их выдачи при двухцикловых командах, требующих.дополнительное обращение к памяти.

Файлы FORTH2.TDF и MDB3.TDF в зипе
Теперь главный файл - FORTH2.TDF

Блок MDB теперь выдает только микрокод команды (сигналы MC_CODE[]), который закодирован следующим образом:

Код:

MC_CODE[15..14] -- выбор источника для загрузки PC[]
00    -- PC+1
01    -- DR(JP/CALL)
10    -- RET
11    -- AR(EXEC)

MC_CODE[13..12] -- выбор источника для загрузки AR[]
00    -- NOP
01    -- ALU
10    -- RST
11    -- DR

MC_CODE[11] -- выбор источника для стека возвратов
0    -- PC
1    -- AR

MC_CODE[10] -- выбор источника для стека данных
0    -- AR
1    -- ALU

MC_CODE[9..8] -- команда стека возвратов
00    -- NOP
01    -- PUSH
10    -- SWAP
11    -- POP

MC_CODE[7..6] -- команда стека данных
00    -- NOP
01    -- PUSH
10    -- SWAP
11    -- POP

MC_CODE[5..0] -- функция АЛУ
XXXXXX    -- ALL Functions



Блок схема процессора:

Изображение

_________________
Дракон всегда прав. Даже, когда он Лев - он прав!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 16 июн 2005, 03:46 
Не в сети
Добрый Админ
Добрый Админ
Аватара пользователя

Зарегистрирован: 04 фев 2005, 06:45
Сообщения: 616
Откуда: St.Petersburg
Благодарил (а): 1 раз.
Поблагодарили: 32 раз.
Теперь немного поиграюсь с компилятором и разными ПЛИС, что получится.

1. EP1K30TC144-1 (в меньшую не помещается - 610 требуется ячеек)

LCs = 610 - 35%, Memory - 4096bit - 16%
F_max=106MHz (реально - делить на 4 - 26.5MHz)

2. EP1K50QC208-2

LCs = 610 - 21%
Memory = 4096 - 10%
F_max = 81.96MHz (20.49MHz)

3. EP1K30QC208-3

LCs = 610 - 35%
Memory = 4096 - 16%
F_max = 64.51MHz (16.12MHz)

4. EP1K10TC100-1 (в режиме "стеки на внутренней памяти")

LCs = 378 - 65%
Memory = 12288 - 100%
F_max = 92.59MHz (23.15MHz)

_________________
Дракон всегда прав. Даже, когда он Лев - он прав!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 16 июн 2005, 22:07 
Не в сети
Добрый Админ
Добрый Админ
Аватара пользователя

Зарегистрирован: 04 фев 2005, 06:45
Сообщения: 616
Откуда: St.Petersburg
Благодарил (а): 1 раз.
Поблагодарили: 32 раз.
Хмм... Оно вроде даже хрюкает потихоньку...
Пора к нему форт-оболочку писать...

_________________
Дракон всегда прав. Даже, когда он Лев - он прав!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 16 июн 2005, 22:21 
Не в сети
Аватара пользователя

Зарегистрирован: 16 июн 2005, 01:15
Сообщения: 62
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
А почему при работе с памятью получается два цикла? При двухтактном цикле мы перед первым тактом в любом случае выдаем вершину стека на адресные линии памяти данных и на всякий случай читаем оттуда. Если из кода выбрана команда @, то прочитанное значение переписывается в стек. Если же это запись, то перед вторым тактом устанавливается WE на памяти и по его фронту произойдет запись. Или это не гарвард?

Все, сейчас разберусь с исходниками, надо для разнообразия и с AHDL познакомиться.
Кстати, еще бы времянки посмотреть, кроме схемы-то?


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

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


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

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


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

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