реклама на сайте
подробности

 
 
> Реализация БПФ на ПЛИС, Тудности, встречаемые при реализации
ZED
сообщение Jan 18 2009, 19:19
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 264
Регистрация: 17-04-07
Из: Москва
Пользователь №: 27 102



Доброго времени суток!

Нужно реализовать алгоритм БПФ с прореживанием по частоте на ПЛИС, но при реализации возникают трудности, вот некоторые из них:
  1. Поворачивающие множители являются числами по модулю меньше либо равно единицы: |W|<=1. Я так понял, чтобы перейти к целым числам требуется умножать их на (2^N) и то, что после запятой отсекать (N - разрядность). Нужно ли то же самое делать с входными данными (x1 и x2) или не обязательно?
  2. Нужно реализовать операции умножения и сложения со знаковыми числами, тут у меня такая задумка: преобразовать в integer соответствующего диапазона: от -(2^N)/2 до (2^N)/2 - 1, произвести нужные арифметические операции и преобразовать обратно std_logic_vector, код прилагается:

CODE
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;

entity butterfly is
generic (b_size: natural := 14);
port (
x1, x2, w: in std_logic_vector(b_size - 1 downto 0);
y1, y2: out std_logic_vector(b_size - 1 downto 0)
);
end entity butterfly;

architecture behavioral of butterfly is
signal x1_int, x2_int, w_int: integer range -8192 to 8191;
signal y1_int: integer range -8192 to 8191;
signal y2_int: integer range -134217728 to 134217727; -- Т.к. производится умножение на поворачивающий множитель
begin
process (CLK) is
begin
-- Преобразовываю в тип integer:
x1_int <= conv_integer(x1);
x2_int <= conv_integer(x2);
w_int <= conv_integer(w);
y1_int <= conv_integer(y1);
y2_int <= conv_integer(y2);

-- Вычисляю бабочку и преобразовываю обратно в std_logic_vector (b_size - 1 downto 0):
y1 <= conv_std_logic_vector(x1_int + x2_int, b_size);
y2 <= conv_std_logic_vector((x1_int - x2_int) * w_int, b_size);
end process;
end architecture behavioral;

Вопрос будет ли так корректно сделать или все делается совершенно по-другому?
Буду рад любым вашим замечаниям, предложениям, советам и ссылкам. Заранее спасибо!

P.S. На форуме я искал и не нашел ответа на свои вопросы, тем более я уверен далее появятся новые, думаю лучше, чтоб это все было в одной теме...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Sefo
сообщение Feb 18 2009, 15:38
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 429
Регистрация: 11-08-05
Из: Санкт-Петербург
Пользователь №: 7 537



Сначала давайте определимся что мы хотим и выберем подходящую архитектуру БПФ. Основой алгоритма вычисления БПФ является бабочка - на n-точечную бабочку в определенном порядке подаются данные, на выходе результаты умножаются на доворачивающие коэффициенты и сохраняются в памяти, на след. этапе через бабочку прогоняются данные предыдущего этапа и.т.д.

Чтобы не зарубится сразу в дебри сделаем БПФ на фиксированное число точек и, к тому же, являющееся степенью 4, 8 или 2. От того, какому числу будет кратно количество точек зависит какие бабочки нам потребуются и сколько будет этапов. Например, если взять 16 точек, то взяв 2-х точечную бабочку получим 3 этапа и, если принять, что бабочка и умножение на доворачивающие коэффициенты делается за один такт, то потратим 8*3=24 такта (т.е. на каждом этапе мы считаем по 8 бабочек). В случае с 4-х точечной бабочкой БПФ вычислится за 4*2=8 тактов (т.е. на каждом этапе мы считаем по 4 бабочки). Если взять 8-ми точечную бабочку (Т.Б.), то придется вычислять БПФ в 2 этапа и одной 8-ми Т.Б. будет недостаточно - либо на первом, либо на последнем этапе потребуется 2-х точечная бабочка. Тактов это займет 2+8=10 (т.е. на первом этапе вычисляем две 8-ми Т.Б., а на втором восемь 2-х Т.Б.). Если взять 32 точки, то портебуется либо 8-ми и 4-х Т.Б., либо 4-х и 2-х Т.Б., либо только 2-х Т.Б. Этапов потребуется соответственно 2, 3, 5. Тактов потребуется соответственно 4+8=12, 8+8+16=32, 5*16=80. В общем, чтобы понять, сколько этапов и какие бабочки нужны, надо разложить кол-во точек БПФ N на произведение a*b*c*...=N, где сами множители это степень бабочки, а их количество это количество необходимых этапов. Например при N = 16 подходят след. разложения 2*2*2=16, 4*4=16, 8*2=16. При N = 32 возьмем разложения, соответствующие описанным выше примерам: 8*4=32, 4*4*2=32, 2*2*2*2*2=32. Понятно, что в некоторых случаях количество этапов это просто показатель степени (2^5=32)

Далее нужно определится с необходимым быстродействием. Речь не идет пока о частоте клока - речь идет о простом количестве тактов (т.е. их интервал в нс, мс, мкс и т.д. не имеет значения). Одновременно нужно определится и с необходимым количеством ресурсов микросхемы. В БПФ связь этих двух параметров довольно четкая - мало тактов - много места, много тактов мало места. Например, выше, все расчеты тактов делались исходя из того, что бабочка и умножение на коэффициенты делаются за один такт. Это очень быстро, но для 4-х Т.Б. потребуется 8*4=24 сумматора (8 т.к. суммируем комплексные числа) и 3 комплексных(!) умножителя (т.е. 4*3=12 умножителей и 2 сумматора). Однако, если все это вычислять за 4 такта, то надо 8 сумматоров и 1 комплексный умножитель - существенно меньше по ресурсам, но в 4 раза медленнее. Кроме того 8-ми Т.Б. сама по себе больше 4-х, а 4-х больше 2-х. smile.gif

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

Итак :

1) скольки точечное БПФ нужно?

2) Какой баланс выбираем между быстродействием, ресурсами и частотой клока?

Еще одно замечание. Для вычисления 4-х и 2-х Т.Б. нужны только сумматоры, а вот при вычислении 8-ми Т.Б. потребуется еще 2 умножителя. Правда умножать они будут всегда на константу - SQRT(2) (кажется).

Сообщение отредактировал Sefo - Feb 18 2009, 15:34
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- ZED   Реализация БПФ на ПЛИС   Jan 18 2009, 19:19
- - soldat_shveyk   1. Чтобы поворачивающий множитель W, меньший едини...   Jan 18 2009, 20:55
- - Builder   Цитата(ZED @ Jan 18 2009, 23:19) Вопрос б...   Jan 18 2009, 20:57
- - ZED   ЦитатаСам не знаю как лучше, но все-же, а если пос...   Jan 18 2009, 21:26
- - soldat_shveyk   Я малость ошибся правильно будет так: round(W*(2^...   Jan 19 2009, 10:32
- - ZED   ЦитатаЯ малость ошибся правильно будет так: round(...   Jan 19 2009, 16:28
- - soldat_shveyk   Не силен в Verilog. Помочь не могу. А не пробовали...   Jan 20 2009, 07:41
- - ZED   ЦитатаНе силен в Verilog. Помочь не могу. А не про...   Jan 20 2009, 15:42
- - soldat_shveyk   ALTERA FFT Compiler - все основное там есть. Для м...   Jan 20 2009, 19:38
- - ZED   ЦитатаЕсли не подойдут Вам оригинальные варианты, ...   Jan 20 2009, 20:28
- - soldat_shveyk   Для ознакомительной работы в режиме OpenCore можно...   Jan 21 2009, 10:33
- - ZED   Вопрос по vhdl остается открытым, но похоже кроме ...   Jan 21 2009, 18:04
- - soldat_shveyk   Откопал у себя исходники всех альтеровских БПФ-ов,...   Jan 22 2009, 08:07
- - ZED   Буду очень признателен: zed1986@yandex.ru Спасибо...   Jan 22 2009, 19:36
- - ZED   Возникла еще одна проблема, реализую БПФ по схеме ...   Jan 30 2009, 05:06
- - BuTeK   поделитесь рабочей коркой БПФ на почту cvik@tut.by   Jan 30 2009, 05:35
- - ZED   Цитатаподелитесь рабочей коркой БПФ на почту cvik@...   Jan 31 2009, 09:16
- - анатолий   Проще всего сначала представить данные в формате I...   Feb 2 2009, 14:02
- - ZED   Спасибо, Анатолий, я так и делал, возник вопрос ка...   Feb 10 2009, 17:38
- - ZED   В общем нужно масштабировать данные после операций...   Feb 12 2009, 20:14
- - Sefo   Как ваши дела с БПФ? Если вопрос еще актуальный и ...   Feb 18 2009, 01:27
- - BuTeK   Конечно актуально! Поделитесь информацией... О...   Feb 18 2009, 05:45
- - ZED   Вопрос еще актуальный, буду очень признателен. Осо...   Feb 18 2009, 09:26
- - ZED   Не совсем понял про разделение бабочки и поворачив...   Feb 18 2009, 16:34
- - Sefo   Про разделение бабочки и поворачивающих множителей...   Feb 18 2009, 16:56
- - ZED   Хорошо, жду с нетерпением, завтра я буду вечером и...   Feb 18 2009, 17:04
- - Sefo   На рисунке показана базовая операция для БПФ с про...   Feb 19 2009, 13:29
- - ZED   Честно говоря, конечно лучше бы 4-х Т.Б. Но как с ...   Feb 19 2009, 15:21
- - Sefo   Итак, делаем более быстрый вариант с 4-х и 2-х Т.Б...   Feb 19 2009, 22:36
- - ZED   Пока никакого интерфейса я не проектировал, считал...   Feb 20 2009, 17:38
- - Sefo   Я не спроста предложил Вам пройти путь создания БП...   Feb 20 2009, 19:26
- - ZED   Вот пожалуйста, мои инсинуации: http://ifolder.ru/...   Feb 20 2009, 20:50
- - Sefo   Первые комментарии такие. Это не блок схема, а схе...   Feb 21 2009, 09:07
- - ZED   ЦитатаНепонятно назначение блока на входе памяти д...   Feb 21 2009, 10:01
- - Sefo   Но что подается на Q2 когда D подается на Q1?   Feb 21 2009, 10:25
- - ZED   На Q2 подается Z, когда D подается на Q1   Feb 21 2009, 10:42
- - Sefo   Это ножки ПЛИС можно физически перевести в третье ...   Feb 21 2009, 14:31
- - ZED   ЦитатаЭто ножки ПЛИС можно физически перевести в т...   Feb 21 2009, 16:06
- - Sefo   Поскольку мы выбрали схему пин-понг, то двухпортов...   Feb 22 2009, 10:05
- - ZED   Не, это не учебный, ну я думаю там отсчеты будут п...   Feb 22 2009, 10:44
- - Sefo   Все внешние интерфейсы всегда определяются тем, к ...   Feb 22 2009, 12:36
- - ZED   Не, у меня первый вариант, я так понимаю, что блок...   Feb 23 2009, 10:40
- - Sefo   Только не ClockEnable, а Write_Enable. Он так же д...   Feb 24 2009, 12:52
- - Sefo   Куда же Вы пропали?   Feb 27 2009, 05:11
- - ZED   Прошу прощения, у меня просто возникли очень сложн...   Feb 28 2009, 15:35
- - ZED   Вот исправленный БПФ-алгоритм и недоделанная схема...   Mar 2 2009, 20:14
- - Sefo   Стоп, стоп! С блок-схемой притормозите - к сож...   Mar 3 2009, 07:00
- - Sefo   Вот блок-схема БПФ. Вам нужно дорисовать к ней инт...   Mar 4 2009, 11:49
- - ZED   А вот, что подразумевалось под блок-схемой=)) Спас...   Mar 4 2009, 17:05
- - Sefo   Цитата(ZED @ Mar 4 2009, 20:05) ...строго...   Mar 4 2009, 23:41
- - ZED   Исправил. ЦитатаВас смущает в том, чтобы подавать ...   Mar 6 2009, 15:20
- - Sefo   Теперь про блок-схему. Если бы там нужно было то...   Mar 6 2009, 15:42
|- - sazh   Цитата(Sefo @ Mar 6 2009, 18:42) Теперь п...   Mar 6 2009, 16:04
- - Sefo   RE: Реализация БПФ на ПЛИС   Mar 6 2009, 16:55
- - ZED   ЦитатаВ общем, постарайтесь продумать, как его под...   Mar 6 2009, 19:12
- - ZED   Там нужно еще библиотеку добавить: Кодuse IEEE.std...   Mar 6 2009, 20:54
- - Sefo   После просмотра и синтеза вашего кода в Квартусе у...   Mar 7 2009, 14:10
- - ZED   ЦитатаЗачем Вы поставили регистры на входе? Да, де...   Mar 7 2009, 14:22
- - Sefo   В том то и дело, что Квартус плохо разобрался как ...   Mar 7 2009, 14:36
- - Sefo   Попробовали написать код без integer?   Mar 7 2009, 15:49
- - ZED   Попробовал, но не могу проверить (Quartus сломался...   Mar 8 2009, 10:12
- - Sefo   Кроме того, что код оказался не компилируем, разли...   Mar 8 2009, 18:52
- - ZED   Пока на ум пришло только это: Кодlibrary IEEE; us...   Mar 8 2009, 20:21
- - Sefo   "if" не может быть использован вне проце...   Mar 8 2009, 20:50
- - ZED   Цитата"if" не может быть использован вне...   Mar 8 2009, 21:50
- - Sefo   Когда у Вас будет возможность просинтезировать код...   Mar 8 2009, 23:21
- - ZED   Квартус синтезирует 2 сумматора, на вход одного из...   Mar 9 2009, 10:43
- - Sefo   Вот это-то и плохо. У нас обычное суммирование с п...   Mar 9 2009, 12:24
- - ZED   Если только самому как-то описывать полный суммато...   Mar 9 2009, 13:22
- - Sefo   Извиняюсь за длительную паузу. Прием очень простой...   Mar 11 2009, 23:11
- - ZED   Прошу прощения, что долго не отвечал, просто по уч...   Mar 16 2009, 04:22
- - Sefo   Ну как, разрулили?   Mar 18 2009, 09:08
- - ZED   Да, спасибо, разрулил более менее, надеюсь еще как...   Mar 18 2009, 17:18
- - Sefo   1) Локально, это имеется ввиду внутри бабочки. В с...   Mar 18 2009, 18:26
- - Azatot   Господа,так ведь же есть уже готовые БПФ ядра и у ...   Mar 18 2009, 19:02
- - Sefo   В данном случае преследуются учебные цели. Понятно...   Mar 18 2009, 19:44
- - ZED   Ну я так и имел ввиду: Кодsignal A : std_logi...   Mar 19 2009, 19:09
- - Sefo   Теперь мне не очень понятно, поняли ли Вы меня пра...   Mar 19 2009, 20:00
- - ZED   Чего-то не симулируется, квартус лагает, вот проек...   Mar 21 2009, 17:03
- - Sefo   Что значит не симулируется? Под проектом я понимаю...   Mar 21 2009, 19:13
- - ZED   ЦитатаЧто значит не симулируется? Временная диагра...   Mar 21 2009, 20:12
|- - sazh   Цитата(ZED @ Mar 21 2009, 23:12) Временна...   Mar 22 2009, 10:20
- - Sefo   Вы просто не тот файл смотрите. Результаты симуляц...   Mar 22 2009, 08:35
- - ZED   Вот, что у меня получилось:   Mar 22 2009, 10:48
- - Sefo   Цитата(sazh @ Mar 22 2009, 13:20) Если я ...   Mar 22 2009, 11:41
- - ZED   Да, но результат суммирования теперь увеличился на...   Mar 22 2009, 12:49
- - Sefo   Все-таки, Вы не поняли. Округление мы уже произв...   Mar 22 2009, 13:30
- - ZED   В Москве. Просто вы писали: ЦитатаВ случае (A+B+C+...   Mar 22 2009, 14:14
- - Sefo   Видимо, словами "круг замкнулся" я Вас з...   Mar 22 2009, 15:45
- - ZED   Все вроде понял, т.е. мы сразу после АЦП добавляем...   Mar 22 2009, 16:03
- - Sefo   Да. Ура! Ттеперь можно перейти к умножител...   Mar 22 2009, 16:22
- - ZED   1.0 это 2047 -1.0 это -2047 Чтобы не увеличивать...   Mar 22 2009, 16:43
- - Sefo   Давайте пока так начнем. Впроцессе реализации сами...   Mar 23 2009, 07:53
- - ZED   Вот комплексный перемножитель, не знаю правильно л...   Mar 24 2009, 15:32
- - Sefo   Хорошо. Код внимательно посмотрю завтра - навскидк...   Mar 24 2009, 19:37
- - Sefo   Цитата(ZED @ Mar 24 2009, 18:32) вроде ум...   Mar 25 2009, 11:56
- - ZED   ЦитатаЧему равна разрядность произведения двух зна...   Mar 25 2009, 17:23
- - Sefo   Цитата(ZED @ Mar 25 2009, 20:23) n+k Не ...   Mar 25 2009, 18:12
- - ZED   По-моему что для знаковых, что для беззнаковых пр...   Mar 25 2009, 18:20
4 страниц V   1 2 3 > » 


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 6th September 2025 - 23:16
Рейтинг@Mail.ru


Страница сгенерированна за 0.07079 секунд с 7
ELECTRONIX ©2004-2016