Перейти к содержанию
    

Передо мной стоит задача реализовать БПФ на ПЛИС на VHDL, многие скажут, что в гугле миллион разных вариантов, я за два дня поисков не нашел подходящий вариант, т.к. основная честь "самописных ядер" очень сложна для понимания, другая часть заточена под Xsilinx, где все время идет речь о встроенных блоков умножения и памяти. Еще много простых кодов, но совсем без описания. Или варианты описаны очень абстрактно, а у меня есть конкретная задача имеется АЦП 12 бит и Cyclone 3. Я формирую синусоиду с выхода ЦАП она идет на АЦП затем необходимо преобразовать ее в СПЕКТР. Нужно сделать максимально маленький и простой проект, но главное с ПЛИС вывести спектр на 2й ЦАП и на осциллограф.

 

Может кто подскажет хорошую книгу, или есть готовые решения, но с хорошим описанием.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В книге Тарасова Потехина: Разработка систем цифровых сигналов на база ПЛИС на 73 странице описывается самый простой алгоритм, что я нашел, но без объяснения многих вещей.

image.png.c10ec9ee54ef5d4cc36ec34c72fa2079.png

С сумматорами (DD8,DD9), умножителями(DD6 DD7) и сo cчетчиком(DD1) все понятно в книги  даже приведены их VHDl коды.

Помогите разобраться с DD2 DD3 на них нету кодов, их описывают как ПЗУ в которых хранятся таблици косинусов(DD2) и синусов(DD3) .

Еще в книге даны эти графики в качестве подсказки, но почему то для sin отдельного графика нет.

image.png.7903ccb9d960a83d7ed007a908260e7d.pngimage.png.8fd1773c0468d9761586ad4952aaeff0.png

 

И теперь вопросы:

 1 Как можно умножая на значения Сos и Sin получить спектр сигнала?

2  Я рассматривал много примеров, везде говорилось об операции "бабчока" это она и есть или как?

3 В источниках пишут БПФ по 8 / 16 / 64 /1024 точкам а у нас то что?

4 Подскажите как все - таки написать блоки DD2 DD3

5 Допустим я сделаю блоки DD2 DD3 мне нужно выход реальный  выход сумматора подать на ЦАП и я сразу получу спектр синусоиды которая идет с АЦП ?

 

 

 

image.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Just now, Burenkov said:

Почему не хотите взять IP Core от альтеры, которая с квартусом идет?

Она платная. У меня все проекты в версии 13.1. Знаете как взломать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Цитата

Еще в книге даны эти графики в качестве подсказки, но почему то для sin отдельного графика нет.

Потому что синус этот тот же косинус только сдвинутый.
 

Цитата

1 Как можно умножая на значения Сos и Sin получить спектр сигнала?

Вообще то спектр это и есть разложение сигнала на синусы и косинусы.

Цитата

2  Я рассматривал много примеров, везде говорилось об операции "бабчока" это она и есть или как?

Гугл выдаёт первой же ссылкой: https://ru.wikipedia.org/wiki/Бабочка_(БПФ)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

17 hours ago, Icedevil777228 said:

 1 Как можно умножая на значения Сos и Sin получить спектр сигнала?

 

Вы бы сначала разобрались, что такое БПФ, как оно работает и для чего надо. Реализовали бы его в лоб на Matlab, потом реализовали бы Бабочку на Matlab.

А там глядишь и таких вопросов не осталось бы.

А то очень странно видеть вопросы по базовому курсу РТЦ в разделе ПЛИС работаем с ПЛИС.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Tpeck

Вы бы сначала разобрались, что такое БПФ, как оно работает и для чего надо. Реализовали бы его в лоб на Matlab, потом реализовали бы Бабочку на Matlab.

Более того там в симулинке и FFT корка синтезируемая есть. Свою нарисовать можно, просимулировать в подходящем для ЦОС окружении, автоматом в VHDL перевести. Разбираться с FFT на HDL и в HDL симуляторах - более непригодного варианта не найти наверное.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 11/23/2018 at 11:45 AM, MegaVolt said:

 

Всем спасибо, за наводки я разобрался и сделал свой блок БПФ, теперь мне предстоит сделать блок БПФ, работающий в режиме реального времени например на 32768 точек. Я осознаю, что такой блок мне не написать руками, поэтому собираюсь использовать готовые ядра в Квартусе! Чем отличается ядро FFT в старых версиях, который находится в мега функциях от того что в Qsys? Есть версии Квартуса, где можно ркально реализовать блок FFT без лицензии в Web Edition? Вообще кто в каких версиях делал блок FFT и какие семейства ПЛИС  использовал? У меня версия 13.1 но ядро не компелируется, процесс компиляции зависает, даже во взломанной версии (отдельное спасибо Burenkov за таблетку), так же зависает Fir Compiler. У меня два предположения почему зависает на моменте Generating Megacor function top-level это использование 32 битной WIN7 или я выбираю кристалл ПЛИС в котором невозможно генерировать ядро.   В Квартусе 9.1 компелируется, но в железо не зашивается требует лицензию. Главный вопрос что бы бесплатно реализовать FFT в какой либо версии Квартуса его обязательно нужно взломать или нет? Есть смысл использовать Qsys ? Ну и кто нибудь сталкивался с процессом зависания ?

Изменено пользователем Icedevil777228

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

16 hours ago, Icedevil777228 said:

процесс компиляции зависает

Можно написать конструкцию, которая формально синтезируема (т.е. при проверке синтаксиса ошибок не находится), но во время компиляции (т.е. синтеза реальной схемы) зацикливается - получаем зависон.

У Вас когда это происходит - на этапе синтеза?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 hours ago, Yuri124 said:

У Вас когда это происходит - на этапе синтеза?

Зависает на моменте Generating Megacor function top-level. Еще в интернете советуют в диспетчере задач удалить процесс quartus map , тогда программа отвисает, ядро "типа" компелируется, но сам блок ядра в схемотехническом редакторе не появляется.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

О! Тут уже давали на мой гитхаб ссылку. В общем, если коротко - у меня почти платформонезависимая корка БПФ на любую длину. Radix-2 и 2-х параллелизм. Можно заменить узлы, где делается умножение и сложение на DSP48 узлах Xilinx на то, что есть в альтере - и оно заработает (главное задержки такие же соблюсти). Или тупо переписать код влоб, типа:

X_RE = A_RE * W_RE - A_IM * W_IM;

X_IM = A_RE * W_IM + A_IM * W_RE;

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

 

Если АЦП не очень скоростная, то двухкратный параллелизм - избыточен. В таком случае нужно делать БПФ по схеме single path delay feedback - оно проще и легче. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вообщем последний вопрос можно закрыть! Я выкинул свой старый комп с 32 win 7 , взял поновее поставил современную версию Quartus 17.0, взломал ее. Зашел в Qsys сгенерировал блок FFT.

Прошу прощение за мою назойливость, но мне нужно как можно быстрее развиться в данном вопросе! Напишите в Лс, кто авторитарен в вопросах работы с ядром FFT.  Вообщем у этого ядра много входов и выходов которые мне ненужны. Я видел проекты где блоки FFT имеют свои блоки управления, которые им разрешают работать в определенные моменты времени, а так же на выходе процессоры, которые обрабатывают информацию, н омне для начала нужно сделать элементарный проект. 

Как мне сделать простой проект, где будет генератор синусоиды, который выдает например двоичный 12 битный прямой код за 32 отсчета.  Вот, например, 5 точек из 32 в десятичной системе [2047 - 4095 - 2047 - 0 - 2047].   Я правильно понимаю код с синусоиды нужно подавать sink_real ? Что с остальными  входными и выходными портами  делать, какие из них нужно на 0, какие на 1 или может вообще не трогать?

?fft.thumb.png.9a3c4a0a53a5cc0dc87c5f9453b74f75.png 

 

На выходе ожидаю получить нечто подобное:

 

image.png.a955444504191418168647dce36ef697.png

 

 

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы каким симулятором пользуетесь?  ..симулятор обязателен иначе никогда не разберётесь.

В приложении генератор синуса из ActiveHDl , правда 8-мибитный , вам придётся сдвинуть вверх на 4-ре бита . Ну или оставить как есть. 

Подавать можно как на real так и на imag , так и на оба вместе.

На входы вашей БПФ корки надо что-то подать чтобы симуляция была адекватная на сигналы типа valid и ready - 1'b1

на error - 2'b00 . 

 

gen_cos_tb.txt

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...