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

 
 
> Реализация БПФ на ПЛИС, Тудности, встречаемые при реализации
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
Ответов
soldat_shveyk
сообщение Jan 18 2009, 20:55
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 454
Регистрация: 3-07-07
Из: С-Петербург
Пользователь №: 28 859



1. Чтобы поворачивающий множитель W, меньший единицы, преобразовать в целое число, имеющее разрядность N бит, надо выполнить следующее преобразование:
round(W*(N-1)) - если число положительное,
(2^N) - round(abs(W)*(N-1)) - если число отрицательное.

Правила приведены для дополнительного кода.

2. Для умножения знаковых чисел надо пользоваться специальной мегафункцией, указав ей параметр "SIGNED"

3. Если вы делаете БПФ на ПЛИС, то надо смотреть на алгоритмы по основанию 4, а не по основанию 2.
Получается намного удобнее и эффективнее. Классическая бабочка - наследие от процессоров DSP, где она сделана аппаратно. Ядром алгоритма БПФ по основанию 4 является более сложный 4-х точечный БПФ, где все поворачивающие множители равны либо 1, либо -1. На ПЛИС удобно реализуется на сумматорах, можно сделать комбинаторную сехему, выполняющею этот самый 4-х точечный БПФ за один такт. Я такое делал, железно работало на частотах выше 100 МГц.

Ну, а если время на выполнение БПФа достаточно много, то можно обойтись обычным ДПФ-ом, легко реализуется,
и вполне себя оправдывает, да и ошибкой квантования легче управлять - операция округления одна и выполняется она в самом конце.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- ZED   Реализация БПФ на ПЛИС   Jan 18 2009, 19:19
- - 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
- - Sefo   Сначала давайте определимся что мы хотим и выберем...   Feb 18 2009, 15:38
- - 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 Текстовая версия Сейчас: 23rd July 2025 - 02:11
Рейтинг@Mail.ru


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