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

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


Местный
***

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



Теперь про блок-схему.

Если бы там нужно было только лишь нарисовать АЦП и три зеленые линии, то я не стал бы Вас просить это делать - это нарисовать можно меньше чем за минуту. smile.gif

Я хотел, чтобы Вы немножко подумали как подключить АЦП к БПФ.

Блок-схема она не просто так рисуется – это первое приближение реализации. Она определяет макроблоки (модули) проекта и их взаимодействие. От того, насколько мы удачно разделим устройство на макроблоки зависит простота и удобство дальнейшего проектирования, реализации и отладки. Блок-схема не должна углубляться в детали реализации, но и не может от них абстрагироваться совсем – она должна учитывать реализацию, но в первом приближении. Блок-схема не расписывает детально все сигналы, соединяющие блоки, но она определяет структуру интерфейсов между ними. Макроблок, в свою очередь, не должен быть "перегружен начинкой". Грубо говоря, блок-схему БПФ можно свести и к 2-м квадратам "Память" и "Бабочка", двунаправленной стрелки между ними, стрелки на вход от АЦП и стрелки на выход. Но от такой блок-схемы не будет никакой помощи в реализации. Наоборот возникнет множество вопросов вроде "как это реализовать?", "куда это поместить?" (в "Бабочку" или в "Память"), "как это состыковать?" и т.д. и т.п.

Давайте представим, что было бы, если бы я не нарисовал блок управления. Возможны два варианта.

1) Я бы не нарисовал вообще ничего из управления, ни блок, ни управляющие сигналы (красные линии). В этом случае каждый блок должен был бы содержать свое собственное управление, работающее независимо от остальных блоков. БПФ смог бы работать только по очень жесткой временной диаграмме. Это все реализуемо, но ... Получаем много дублирующего кода, отсутствие какой-либо гибкости, сложность модификации, повышенную сложность стыковки блоков при сборке воедино, неудобство и повышенную сложность отладки, сложность в использовании блока в другом проекте.

2) Я бы не нарисовал блок управления, но нарисовал бы управляющие сигналы от блока к блоку. Этот вариант гораздо лучше 1-го. В некоторых системах такое распределенное управление бывает даже весьма выгодным и удобным, но в нашем случае оно хуже, чем централизованное. В нашем случае операции в блоках настолько детерминированы, набор их настолько ограничен, а взаимодействия между блоками настолько стационарны, что удобнее управлять всем этим из одного места. При попытке сделать в БПФ распределенное управление, мы столкнемся с трудностью его распределения по блокам.

Идем дальше.

На моей блок-схеме потоки данных, обозначенные синими линиями, одинаковые. Из памяти в бабочку мы передаем 4 точки всегда (2-х Т.Б. может рассматриваться либо как частный случай, когда из 4 точек используются только 2, а можно сделать и две 2-х ТБ – они ведь очень маленькие и сверх простые и схема БПФ нам это позволяет, но об этом позже), из бабочки в умножители тоже 4 точки всегда (неважно, что один из 4-х умножит. физически будет там отсутствовать за перманентной равностью коэффициента 1), из умножителей в память тоже возвращается 4 точки всегда. Мало того, точки-то комплексные!

И тут Вы... , извините,... "втыкаете" АЦП прямо в память! smile.gif Неужели он у Вас выдает комплексный сигнал и по 4 точки за раз?!

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

Насчет памяти не смущайтесь smile.gif когда подойдем к ее реализации все станет ясно.


Предлагаю параллельно с подключением АЦП заняться уже и самой бабочкой.

Сколько разрядов на данные и сколько на коэффициенты Вы предполагаете?

Напишите, пожалуйста VHDL код 4-х точечной бабочки (не забудьте, умножение на доворачивающие множители в нее не входит). Если что-то не ясно, не стесняйтесь, спрашивайте сразу.

Сообщение отредактировал Sefo - Mar 6 2009, 15:46
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
- - 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
|- - 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 Текстовая версия Сейчас: 19th July 2025 - 21:59
Рейтинг@Mail.ru


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