Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Picoblaze для Altera
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
confflex
Привет всем!
Интересует опыт применения Picoblaze для Altera. Кто-нибудь делал такое?
gk2
Такая штука называется Pacoblaze http://bleyer.org/pacoblaze/.
Здесь как-то обсуждали. Занимает слишком много ресурсов в
отличии от Xilinx Picoblaze
Builder
Цитата(confflex @ Sep 13 2009, 15:20) *
Привет всем!
Интересует опыт применения Picoblaze для Altera. Кто-нибудь делал такое?

Есл нужно что-то типа микропрограммного автомата или простелького проца, посмотрите ещё это:

Avalon MicroSequencer Reference Design
http://www.altera.com/support/refdesigns/s...-avl-micro.html
Avalon State Sequencer Reference Design
http://www.altera.com/support/refdesigns/s...-avl-state.html
Немного обсуждалось тут:
http://electronix.ru/forum/lofiversion/index.php/t11767.html

Сам ещё не пробовал, только присматриваюсь.
des00
Цитата(gk2 @ Sep 13 2009, 13:33) *
Такая штука называется Pacoblaze http://bleyer.org/pacoblaze/.
Здесь как-то обсуждали. Занимает слишком много ресурсов в
отличии от Xilinx Picoblaze


Не на всех фпга от альтеры, основная проблема это регистровый файл на памяти с асинхронным чтением, но и тут у альтеры есть сподвижки. Вариантов оптимизация портирования много, вот несколько по месту :
1. можно уменьшить количество регистров до 4-х + scratch pad на блочной памяти
2. использовать квази-асинхронную блочную память, да времянка упадет. но многим не критично.
3. использовать просто блочную память + подпилить секвенсер конвейера %)
confflex
Попробовал скомпелить pacoblaze, получилось почти 1500 LE, многовато.
Попалась статейка интересная:
http://www.iaeng.org/publication/IMECS2009...pp1541-1544.pdf
Так вот 389 LE поинтересней будут.
Leka
Програмировать то на ассемблере придется, какой тогда смысл в picoblaze-совместимом ядре для Альтеры?
des00
Цитата(confflex @ Sep 14 2009, 11:14) *
Попробовал скомпелить pacoblaze, получилось почти 1500 LE, многовато.
Попалась статейка интересная:
http://www.iaeng.org/publication/IMECS2009...pp1541-1544.pdf
Так вот 389 LE поинтересней будут.


кто-то, кого-то разводит в этой статье. асинхронной памяти на втором циклоне у альтеры нет, следовательно регистровый файл займет 16*8 = 128 триггеров, скратчпад рам 64*8 = 512 триггеров, откуда взялось цифра в 389 не понятно. хотя если только в статье "забыли" написать сравнение по количеству регистров...
Methane
Цитата(des00 @ Sep 15 2009, 07:18) *
кто-то, кого-то разводит в этой статье. асинхронной памяти на втором циклоне у альтеры нет, следовательно регистровый файл займет 16*8 = 128 триггеров, скратчпад рам 64*8 = 512 триггеров, откуда взялось цифра в 389 не понятно. хотя если только в статье "забыли" написать сравнение по количеству регистров...

тут обсуждают что нет, а я помню что в первом точно была. во втором уже нету?
Postoroniy_V
Цитата(Methane @ Sep 15 2009, 13:28) *
тут обсуждают что нет, а я помню что в первом точно была. во втором уже нету?

что такого не припомню вовсе biggrin.gif в циклонах память была и есть M4K
асинхронная было в асексах
Methane
Цитата(Postoroniy_V @ Sep 15 2009, 08:59) *
что такого не припомню вовсе biggrin.gif в циклонах память была и есть M4K
асинхронная было в асексах

Ну и память как память. Чего её нельзя как регистровый файл использовать? Что такого военного в ксилинксах?
COMA
Цитата(Builder @ Sep 14 2009, 01:19) *
Есл нужно что-то типа микропрограммного автомата или простелького проца, посмотрите ещё это:

Avalon MicroSequencer Reference Design
http://www.altera.com/support/refdesigns/s...-avl-micro.html
Avalon State Sequencer Reference Design
http://www.altera.com/support/refdesigns/s...-avl-state.html
Немного обсуждалось тут:
http://electronix.ru/forum/lofiversion/index.php/t11767.html

Сам ещё не пробовал, только присматриваюсь.


Интересная штука. Как попробуете отпишитесь.
Artem_Petrik
Цитата(Methane @ Sep 15 2009, 09:03) *
Ну и память как память. Чего её нельзя как регистровый файл использовать? Что такого военного в ксилинксах?

Память как память. Только данные на выходе появляются в следующем такте, после того как выставлен адрес. А для проца с машинным циклом в 1 такт нужно чтоб сразу. Ну или конвеер лепить, чтоб адрес зараннее выставлять.
des00
Цитата(Methane @ Sep 15 2009, 00:03) *
Ну и память как память. Чего её нельзя как регистровый файл использовать? Что такого военного в ксилинксах?


ну попробуйте, отпишитесь о результатах %)

для справки регистровый файл у пикоблейза это файл 16х8 с одним портом записи и двумя портами чтения. цикл работы пикоблейза занимает 2 такта. 1 такт выборка операндов/алу, второй такт write back. Без асинхронной на чтение памяти вам придеться переделать конвейер.
Methane
Цитата(des00 @ Sep 15 2009, 10:23) *
ну попробуйте, отпишитесь о результатах %)

для справки регистровый файл у пикоблейза это файл 16х8 с одним портом записи и двумя портами чтения. цикл работы пикоблейза занимает 2 такта. 1 такт выборка операндов/алу, второй такт write back. Без асинхронной на чтение памяти вам придеться переделать конвейер.

Я не помню что в циклонах. Двухпортовое ОЗУ там точно можно было сделать.
des00
Цитата(Methane @ Sep 15 2009, 01:44) *
Я не помню что в циклонах. Двухпортовое ОЗУ там точно можно было сделать.


вы не на то свойство смотрите, повторю еще раз Без асинхронной на чтение памяти вам придеться переделать конвейер. у блочной памяти чтение занимает 1 такт, в результате цикл придеться делать 3-х фазным

1. выборка
2. алу
3. write_back

или

1. выборка
2. алу/write_back

но этот вариант изменит временные соотношения на шине пикоблейза, т.к. она вместо аналога APB 2.0 станет аналогом вишбона с ws = 0.

Если бы все было так просто, тогда Кен Чапмен заложил бы в свой процессор возможность использовать блочную память, лишние 1к регистров всегда пригодились бы.
SM
Цитата(Artem_Petrik @ Sep 15 2009, 11:12) *
Память как память. Только данные на выходе появляются в следующем такте, после того как выставлен адрес. А для проца с машинным циклом в 1 такт нужно чтоб сразу. Ну или конвеер лепить, чтоб адрес зараннее выставлять.

Фигня война. Просто для момента "запись во время чтения" надо сделать байпасный путь. Т.е. если адрес записи совпадает с адресом чтения и запись активна, то читать не из ОЗУ а с шины данных записи. И все проблемы решены одним компаратором и мультиплексором.
des00
Цитата(SM @ Sep 15 2009, 04:45) *
Фигня война. Просто для момента "запись во время чтения" надо сделать байпасный путь. Т.е. если адрес записи совпадает с адресом чтения и запись активна, то читать не из ОЗУ а с шины данных записи. И все проблемы решены одним компаратором и мультиплексором.


угу, при этом это все на входе однотактного АЛУ и на выход системной шины. ИМХО тактуха упадет где-то раза в 2-2.5 %)
SM
Цитата(des00 @ Sep 15 2009, 13:53) *
ИМХО тактуха упадет где-то раза в 2-2.5

Не знаю, как в альтере, а в асике байпасный путь мне не подпортил ровном счетом ничего, даже немного улучшил критический путь. А все из-за того, что мультиплексор + синхронная память оказались шустрее асинхронной, позволяющей читать записываемое.
Leka
Цитата(SM @ Sep 15 2009, 20:05) *
Не знаю, как в альтере, а в асике байпасный путь мне не подпортил ровном счетом ничего, даже немного улучшил критический путь. А все из-за того, что мультиплексор + синхронная память оказались шустрее асинхронной, позволяющей читать записываемое.

Асинхронная память в FPGA не для "чтения записываемого" - у синхронной блочной памяти есть режим "write first", и байпасные пути для этого не требуются. Асинхронный режим нужен для чтения и записи по разным адресам в одном такте и для одного порта. Например, когда в текущем такте (i) прочесть по двум адресам А(i), В(i), и записать по третьему адресу С(i)==B(i-1). Байпасные пути не помогут.

Те режим 2х-портового чтения--модификации--записи в каждом такте - как реализовать на синхронной памяти?
Methane
Цитата(des00 @ Sep 15 2009, 11:19) *
но этот вариант изменит временные соотношения на шине пикоблейза, т.к. она вместо аналога APB 2.0 станет аналогом вишбона с ws = 0.

Если бы все было так просто, тогда Кен Чапмен заложил бы в свой процессор возможность использовать блочную память, лишние 1к регистров всегда пригодились бы.

понял. Не знал что такая штука в ксилинксе есть.
confflex
Цитата(SM @ Sep 15 2009, 20:05) *
Не знаю, как в альтере, а в асике байпасный путь мне не подпортил ровном счетом ничего, даже немного улучшил критический путь. А все из-за того, что мультиплексор + синхронная память оказались шустрее асинхронной, позволяющей читать записываемое.

Вы использовали "правленный" picoblaze в асиках? Может выложите исходники, а мы для Альтеры попробуем. biggrin.gif
Artem_Petrik
Цитата(Leka @ Sep 15 2009, 20:26) *
Асинхронная память в FPGA не для "чтения записываемого" - у синхронной блочной памяти есть режим "write first", и байпасные пути для этого не требуются. Асинхронный режим нужен для чтения и записи по разным адресам в одном такте и для одного порта. Например, когда в текущем такте (i) прочесть по двум адресам А(i), В(i), и записать по третьему адресу С(i)==B(i-1). Байпасные пути не помогут.

Те режим 2х-портового чтения--модификации--записи в каждом такте - как реализовать на синхронной памяти?

Можно взять 2 блока памяти, писать в оба одновременно (содержимое памяти будет одинаковое), читать из одного блока операнд А, из другого операнд Б. 
Leka
Цитата(Artem_Petrik @ Sep 15 2009, 22:34) *
Можно взять 2 блока памяти, писать в оба одновременно (содержимое памяти будет одинаковое), читать из одного блока операнд А, из другого операнд Б. 

Да, так можно, если блочной памяти не жалко. smile.gif
SM
Цитата(Leka @ Sep 15 2009, 21:26) *
Те режим 2х-портового чтения--модификации--записи в каждом такте - как реализовать на синхронной памяти?

Т.е. трехпортовая память? Два порта на чтение и один на запись? Или чтение на первом пол-такте и запись по тому же порту на втором? Если разбивка по пол-тактам, то можно и синхронную запустить на удвоенной частоте, что эквивалентно.
Leka
Цитата(SM @ Sep 16 2009, 01:18) *
Т.е. трехпортовая память? Два порта на чтение и один на запись? Или чтение на первом пол-такте и запись по тому же порту на втором? Если разбивка по пол-тактам, то можно и синхронную запустить на удвоенной частоте, что эквивалентно.

Для асинхронной(по чтению) памяти с регистром на адресном входе получается так: по фронту клока - запись по старому адресу(в регистре адреса) и чтение по новому адресу(защелкнутому в регистре адреса). Можно и на синхронной - с мультиплексорами, многофазным клоком, и тп. Просто если нет асинхронной памяти - выгоднее взять другую архитектуру - под синхронную память.
des00
Цитата(SM @ Sep 15 2009, 11:05) *
Не знаю, как в альтере, а в асике байпасный путь мне не подпортил ровном счетом ничего, даже немного улучшил критический путь. А все из-за того, что мультиплексор + синхронная память оказались шустрее асинхронной, позволяющей читать записываемое.


ну то в асике %) для фпга вижу несколько "проблем" :
1. блочная память, в отличие от распределенной находиться только в определенных местах фпга : это надо будет учесть при разводке мультиплексоров и алу.
2. появляется лишний слой логики на выходе блочной памяти (байпас на шину и однотактное алу) что с учетом больших задержек при работе с блочной памятью даст увеличение критических путей %)

Цитата(Leka @ Sep 15 2009, 12:26) *
Асинхронная память в FPGA не для "чтения записываемого" - у синхронной блочной памяти есть режим "write first", и байпасные пути для этого не требуются. Асинхронный режим нужен для чтения и записи по разным адресам в одном такте и для одного порта. Например, когда в текущем такте (i) прочесть по двум адресам А(i), В(i), и записать по третьему адресу С(i)==B(i-1). Байпасные пути не помогут.

Те режим 2х-портового чтения--модификации--записи в каждом такте - как реализовать на синхронной памяти?


для пикоблейза это не актуально, т.к. у него такт проца всегда двухфазный, и регистровый файл можно просто сделать на одном элементе блочной памяти, все начинает портить латентность чтения этой памяти и особенности реализации АЛУ данного проца %)
SM
Цитата(des00 @ Sep 16 2009, 07:22) *
2. появляется лишний слой логики на выходе блочной памяти (байпас на шину и однотактное алу) что с учетом больших задержек при работе с блочной памятью даст увеличение критических путей %)

Да не проблема это. У асинхронной памяти время доступа куда больше, чем Tco синхронной. Итого Tpd асинхронной больше, чем (Tco синхронной + Tpd байпаса)

Ну и можно собрать для аррии например, у нее и распределенная память есть.
des00
Цитата(SM @ Sep 16 2009, 00:54) *
Да не проблема это. У асинхронной памяти время доступа куда больше, чем Tco синхронной. Итого Tpd асинхронной больше, чем (Tco синхронной + Tpd байпаса)

Ну и можно собрать для аррии например, у нее и распределенная память есть.


для асика может быть, вот из даташита на спартан3е,

для распределенной памяти "время чтения" TILO The time it takes for data to travel from the CLB’s F (G) input to the X (Y) output 0.66ns
для блочной TBCKO When reading from block RAM, the delay from the active transition at the CLK input to data appearing at the DOUT output 2.45ns

на альтеры с распределенной памятью пикоблейз легко переноситься
SM
Цитата(des00 @ Sep 16 2009, 10:59) *
для распределенной памяти "время чтения" TILO The time it takes for data to travel from the CLB’s F (G) input to the X (Y) output 0.66ns
для блочной TBCKO When reading from block RAM, the delay from the active transition at the CLK input to data appearing at the DOUT output 2.45ns

И это сравнение для того же объема и конфигурации, набранного распределенной памятью, как у блока? Не верю.
des00
Цитата(SM @ Sep 16 2009, 01:30) *
И это сравнение для того же объема и конфигурации, набранного распределенной памятью, как у блока? Не верю.


Это сравнение пикоблейзовского регистрового файла сделанного на 8 ми элементах RAMD16x1(1 LUT) и его же сделанного на одном элементе RAMB16. Ведь речь в теме идет о переводе пикоблейза на блочную память as is, без переработки адресации операндов %)
AlexanderX
Я года два или три назад написал свою версию пикоблейза для Альтеры. Для того чтобы не городить асинхронную память на распределенной логике был поставлен блок встроенной памяти для регистрового файла. Для этого пришлось пожертвовать тактами - цикл процессора 4 такта. Поскольку пикоблейз используется в проектах для решения вспомагательных задач не критичных ко времени выполнения, для меня это не принципиально. При этом я получил определенные преимущества: высокая тактовая (более 100МГц), в четыре раза больший регистровый файл, возможность объединить память программ и регистровую память в одном блоке если программа маленькая. Занимаемый объем после компиляции около 270 lcell и 64 dedicated registers в циклоне 3 без учета встроенной памяти.
Кстати компилятор не анализирует выход за размер регистрового файла в 64 регистра, а команда вмещает 256 локаций регистров. Это количество регистров в некоторых проектах очень выручало wink.gif. Пользуюсь компилятором pBlaseIDE версии 3.6.
des00
Цитата(AlexanderX @ Sep 16 2009, 07:40) *
Кстати компилятор не анализирует выход за размер регистрового файла в 64 регистра, а команда вмещает 256 локаций регистров. Это количество регистров в некоторых проектах очень выручало wink.gif. Пользуюсь компилятором pBlaseIDE версии 3.6.


смотрю ug129 PicoBlaze 8-bit Embedded Microcontroller User Guide -> Instruction Codes. 256 адресов возможны только в командах вида reg-reg, reg-ram, и в операциях вида reg-reg только для одного из операндов. Но это лучше чем ничего %)
AlexanderX
Сорри, неправильно выразился, регистров 16, а скратчпад 256. blush.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.