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

...
Google Search
Forth-FAQ Spy Grafic

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




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

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

Код:
elsif clk'event and clk='1' and enable = '1' then


и во входных сигналах

Код:
      enable   : in std_logic;


компилирую

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


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

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

Даже капельку поднялась - 132MHz :)

Симулирую, вводя на входе сигнал enable с частотой в 3 раза ниже и скважностью 33.3%

Норма! Работает!

И программка тестовая отработала как надо

LIT LIT LIT LIT
загрузило числа 00, 20, 40, 80 на стек

ADD --> на стеке C0
toR --> C0 ушло на стек возвратов, на стеке данных 20
ADD --> на стеке 00+20=20
fromR --> вернулось C0
NAND --> C0 nand 20 = FFFF -- его и вижу

CALL 0 --> перешли на ноль, программа зациклилась и пошла на повторы. На стеке возвратов 000А --> первый адрес после адреса перехода в памяти

Ok!

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


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

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

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


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

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


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

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

Цикл процессора удлиннился до 4-х тактов, но это не страшно в свете идеи многоядерности, которую хочу тут использовать
-- через некоторое время --
Eще одна существенная добавка к скорости - отключил тестовые выводы в проекте -> 186MHz.

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


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

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


Тайминговая симуляция - тоже проходит нормально

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


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

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

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


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

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

Код:
      if clk'event and clk='1' and enable = '1' then
         sinc_res <= reset;
         sinc_id <= id;
         if sinc_res = '0' then
            CPU <= CPU_init(CPU,sinc_id);
         else
            CPU <= new_CPU;
         end if;
      end if;



И делаю функцию инициализации процессора, зависящую от внешнего идентификатора:

Код:
   function CPU_init(CPU : cpu_t; id : byte) return cpu_t is
      variable CPU_m : cpu_t;
   begin
      CPU_m.pc   := zero;
      if id = 1 then CPU_m.pc   := zero+256; end if;
      if id = 2 then CPU_m.pc   := zero+512; end if;
      if id = 3 then CPU_m.pc   := zero+768; end if;
      
      CPU_m.cmd   := zero;
      CPU_m.mem   := Mnop;
      return CPU_m;
   end;   



В зависимости от идентификатора, процессор стартует с разных адресов.
Это будут идентификаторы ядер, а пока ядро одно, и идентификатор по умолчанию нулевой.

Код:
   signal sinc_id,id : byte := "00000000";


Компилирую...

Чудны пути квартуса... 190MHz :shock:

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


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

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
WingLion писал(а):
Чудны пути квартуса... 190MHz :shock:

Не это ли
http://en.wikipedia.org/wiki/Braess'_paradox


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Все гораздо проще. Во-первых, синхронный сброс чуть быстрее асинхронного. Во-вторых, при повторных запусках автотрассировщика (а для ПЛИС ручная расстановка "бессмысленна и беспощадна") возникают вариации начального размещения, от которого и идет поиск. Результаты могут различаться достаточно существенно. А при запуске многопроходной трассировки результаты еще замысловатее, и не всегда поддаются точной интерпретации.


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

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

Принцип стар как мир - конвеер. Только устроен он несколько нетрадиционно.
Четыре ядра (пусть их будет четыре, а формально может быть и двадцать четыре) представляются четырьмя наборами регистров, которые расположены "по кругу". В цепочке. Каждый такт состояния регистров ядер меняется по этому самому кругу. Состояние первого ядро записывается в регистры второго, состояние второго в регистры третьего, состояние третьего в регистры четвертого, а состояние четвертого ядра модифицируется логической функцией и уже модифицированное состояние записывается в регистры первого ядра.
Все четыре записи происходят одновременно, поэтому получается, что все четыре ядра сохраняют свое состояние и движутся по кругу, а на стыке первого и четвертого и происходит исполнение команды того ядра, которое перед ним оказалось.
И теперь, для того, чтобы память успела выдать данные для этой самой обработки состояния ядра, адрес на нее надо выдать заранее на три такта.

А три такта назад обрабатываемое состояние уже находилось на конвеере, поэтому адрес для памяти уже тогда мог быть вычислен. Поэтому в следующей схеме адрес для памяти получается не из того ядра, которое обрабатывается в этот момент:

Объявление для четырех ядер:

Код:
   signal new_CPU,CPU,CPUm,CPUmm,CPUmmm : cpu_t;


И модифицированный процесс с конвеером:

Код:
   process (reset,clk) begin
      if clk'event and clk='1' then
         sinc_res <= reset;
         sinc_id <= id;      
      end if;
   
      if clk'event and clk='1' and enable = '1' then
         if sinc_res = '0' then
            CPU <= CPU_init(CPUmmm,sinc_id);
            CPUm <= CPU;
            CPUmm <= CPUm;
            CPUmmm <= CPUmm;            
         else
            CPU <= Logic_kernel(CPUmmm,ram_q);
            CPUm <= CPU;
            CPUmm <= CPUm;
            CPUmmm <= CPUmm;
         end if;
      end if;


Запускаю и компилирую

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


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

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


В квартусе этот режим отключаем. И сейчас он у меня отключен, чтобы результаты не зависели от предыдущих трассировок.

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


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

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

Объем 1677 логических ячеек, 1200 триггеров, 128 килобит памяти.

Как видно, четыре ядра заняли не в четыре раза больше ячеек, хотя, по триггерам, как и ожидалось, в четыре раза скачок.

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


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

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

Заработало оно не сразу, ошибки правил еще до того, как посты про многоядерность писать начал.

А сейчас, чтобы разделить ядра, заставить их стартовать с разных адресов, делаю внешний вход для идентификатора:

Код:
      id : in byte := "00000000";


Убираю его из строчки объявления сигнала и запускаю компиляцию

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


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
WingLion писал(а):
Хищник писал(а):
Во-вторых, при повторных запусках автотрассировщика (а для ПЛИС ручная расстановка "бессмысленна и беспощадна") возникают вариации начального размещения, от которого и идет поиск.

В квартусе этот режим отключаем. И сейчас он у меня отключен, чтобы результаты не зависели от предыдущих трассировок.

Это немного другое. При изменении схемы начальная расстановка не сохранится. Таким образом, даже при мелких правках схемы основные компоненты могут "гулять" по чипу. Это помимо отдельного режима с вариациями расстановки одной и той же схемы, предусматриваемой в САПР.


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

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


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

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


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

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