|
Распределенная память на FPGA Altera, часть 2 |
|
|
|
Nov 23 2008, 11:05
|
Участник

Группа: Участник
Сообщений: 21
Регистрация: 30-04-08
Пользователь №: 37 189

|
Подобная тема уже была, но закрылась. Интересует информация в контексте этого сообщения: Цитата Нет распределённого озу. Тригеры можно использовать как ячейки памяти, но это слишком жирно. Задача состоит в следующем: необходимо иметь возможность, двоичную матрицу n*n, где n – порядка 20-30, загружать в триггеры LE. И чтобы при этом двоичные значения геометрически располагались, так же как и в матрице. Ну и возможность выгрузить при необходимости эту матрицу (считать значения с триггеров LE) из FPGA. Возможно ли вообще такое в условиях отсутствия возможности явного обращения к LE и LAB? Может есть какие мегафункции для подобных действий?
|
|
|
|
|
 |
Ответов
|
Nov 23 2008, 11:11
|
Местный
  
Группа: Свой
Сообщений: 263
Регистрация: 2-01-07
Из: Ростовская область
Пользователь №: 24 044

|
Цитата(files @ Nov 23 2008, 14:05)  И чтобы при этом двоичные значения геометрически располагались, так же как и в матрице. Что имеется в виду ? вы ведь их глазом всё равно не увидите... и под микроскопом - тоже  Что мешает создать память с однобитной шиной данных и log_2(n)+log_2(n) битной шиной адреса ?
Сообщение отредактировал Mc_off - Nov 23 2008, 11:14
|
|
|
|
|
Nov 23 2008, 13:46
|
Частый гость
 
Группа: Свой
Сообщений: 166
Регистрация: 2-11-08
Из: Ростов-на-Дону
Пользователь №: 41 331

|
1. Распределенного ОЗУ в FPGA Altera нет 2. Нет никакой разницы, какая реализация функции (у вас - памяти) применяется, если по поведению они одинаковы. Встроенные блоки памяти позволяют экономить регистры. 3. Располагаться геометрически ? Какая Вам разница, в каком порядке они лежат на кристалле? Для компилятора это имеет некоторе значение, а для пользователя имеет значение только порты (30 downto 1) (30 downto 1) 4. Если очень хотите, то 30 на 30 бит это всего 900 регистров. В любой современной ПЛИС это поместится, даже в младших моделях циклона это всего 25% их объема. Запускаете Megawizard Plug-In Manager, выбираете закладку Memory Compiler, RAM - нужное число портов, на первой странице ставите "LCs" - вся память будет размещена в триггерах.
Опишите Вашу задачу, невозможно понять зачем Вы так усложняете. Возможно Вам нужно, чтобы все значения были доступны одновременно, без выборки с помощью адреса ?
Сообщение отредактировал murmel1 - Nov 23 2008, 13:48
|
|
|
|
|
Nov 29 2008, 19:14
|
Участник

Группа: Участник
Сообщений: 21
Регистрация: 30-04-08
Пользователь №: 37 189

|
Цитата(murmel1 @ Nov 23 2008, 15:46)  2. Нет никакой разницы, какая реализация функции (у вас - памяти) применяется, если по поведению они одинаковы. Встроенные блоки памяти позволяют экономить регистры. 3. Располагаться геометрически ? Какая Вам разница, в каком порядке они лежат на кристалле? Для компилятора это имеет некоторе значение, а для пользователя имеет значение только порты (30 downto 1) (30 downto 1) 4. Если очень хотите, то 30 на 30 бит это всего 900 регистров. В любой современной ПЛИС это поместится, даже в младших моделях циклона это всего 25% их объема. Запускаете Megawizard Plug-In Manager, выбираете закладку Memory Compiler, RAM - нужное число портов, на первой странице ставите "LCs" - вся память будет размещена в триггерах. Здравствуйте. То, что вы предлагаете, даст эмуляцию обычной линейной памяти на параллельной физической среде ПЛИС. Не так ли? Представим себе, что мне нужно выполнить простую операцию над двумя элементами такой памяти. Я должен выбрать из памяти первый элемент и сохранить его где-то. Затем выбрать второй элемент. Затем выполнить операцию. Цитата(murmel1 @ Nov 23 2008, 15:46)  Опишите Вашу задачу, невозможно понять зачем Вы так усложняете. Возможно Вам нужно, чтобы все значения были доступны одновременно, без выборки с помощью адреса ? Именно это. Меня интересует возможность ПЛИС естественным образом хранить двумерную структуру данных и выполнять над этими данными вычислительные действия. Привожу синтетический пример. Нужно считать содержимое из триггера текущего LE, сложить его по OR со значением из левого LE, результат умножить по AND с верхним LE и поместить в правый LE. И это действие нужно одновременно (синхронно) выполнить для всех LE некоторой квадратной (прямоугольной) области ПЛИС. Такое возможно?
Сообщение отредактировал files - Nov 29 2008, 19:17
|
|
|
|
|
Nov 29 2008, 20:09
|
Знающий
   
Группа: Свой
Сообщений: 961
Регистрация: 28-11-05
Пользователь №: 11 489

|
Цитата(files @ Nov 29 2008, 22:14)  Нужно считать содержимое из триггера текущего LE, сложить его по OR со значением из левого LE, результат умножить по AND с верхним LE и поместить в правый LE. И это действие нужно одновременно (синхронно) выполнить для всех LE некоторой квадратной (прямоугольной) области ПЛИС.
Такое возможно? Возможно всё. Память может быть двух или даже трёх портовая, соответственно можешь выбирать одновременно несколько элементов за один такт и тут же производить с ними операции. Если это не годится, то из триггеров и мультиплексоров можно нагородить что угодно, любой размерности. Когда говорят про LE, обычно имеется ввиду Logic Elements из которых состоит FPGA. Где они окажутся после route & place слева или справа, тебя не должно волновать. Тем более физически это будет не квадратная или прямоугольная область в FPGA.
--------------------
В действительности всё не так, как на самом деле.
|
|
|
|
Сообщений в этой теме
files Распределенная память на FPGA Altera, часть 2 Nov 23 2008, 11:05  des00 Цитата(murmel1 @ Nov 23 2008, 08:46) 1. Р... Nov 24 2008, 04:54   murmel1 Цитата(des00 @ Nov 24 2008, 07:54) Ну я б... Nov 24 2008, 18:23   sazh Цитата(files @ Nov 29 2008, 22:14) Меня и... Nov 29 2008, 19:44   murmel1 Цитата(files @ Nov 29 2008, 22:14) Привож... Nov 29 2008, 20:03 Elresearch ИМХО под "Распределенным ОЗУ" обычно пон... Nov 24 2008, 06:04
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|