СОВРЕМЕННАЯ ЭЛЕКТРОНИКА №7/2012

БПФ, обмен данными осуществляется через шину Wishbone. В ядре БПФ от дельными модулями выделены блоки умножения и память для поворачива ющих коэффициентов. В данной вер сии реализации ядро БПФ принимает данные от контроллера UART, которые, в свою очередь, генерируются тесто вой программой на компьютере. По лученные данные обрабатываются: для входного вектора данных вычисляется БПФ, результирующие данные пере сылаются обратно в UART и затем в графическом виде отображаются на компьютере. Все математические операции в ядре БПФ выполняются в формате с фикси рованной точкой. Входные данные от UART содержат 14 бит в формате Q5.9, т.е. для представления дробной части служат девять младших разрядов, затем четыре разряда представляют целую часть и старший разряд определяет знак. Отрицательные числа представ лены в формате дополнения до двух. Далее входные данные расширяются до 18 бит; в последующем все данные представленывформатеQ9.9, т.е. на це луючасть отведено 8 разрядов. При та ком представлении данных возможно хранение чисел в диапазоне от –256 до 255,998046875 с шагом 0,001953125. Шаг определяется как минимальное значение формата Q9.9. При 9 разря дах, отведённых под дробную часть, возможно хранение 512 комбинаций чисел 1/512 = 0,001953125. Работойядра управляет конечныйав томат, блок схема которогопоказанана рисунке4. Самконечныйавтомат содер жится в файле fft_top.v. При отсутствии входных данных автомат находится в состоянииFFT_IDLE. Сигналначалапре образования conv_start_i генерируется модулемшиныWishbone (файлwb_fft.v) послеполученияпакетаданныхотконт роллера UART. При этом конечный ав томат ядра БПФ переходит в состояние FFT_STAGE1. Бит реверсная сортировка выполняется модулем контроллераши ны Wishbone путём реверса адресных битов: assign buf_ptr_inv = {buf_ptr[0], buf_ptr[1], buf_ptr[2], buf_ptr[3], buf_ptr[4], buf_ptr[5], buf_ptr[6]}, гдеbuf_ptr_inv–ад рес реверсированных отсчётов. После выполнения умножения и сло жения на стадии FFT_STAGE1, автомат переходит в состояние FFT_STAGE2. Та ким образом, последовательно выпол няются все семь ступеней преобразо вания, и после окончания этого про цесса конечный автомат переходит в состояние FFT_DONE. При этом уста навливается в единичное значение сиг нал conv_rdy_o , преобразованные дан ные передаются модулю контроллера шиныWishbone и далее персональному компьютеру через UART. Ядро содержит два буфера памяти. На первой стадии входные данные бе рутся из одного буфера и результаты вычислений записываются в другой буфер. На следующей стадии всё про исходит наоборот. Все математичес кие операции выполняются модулем умножения (см. рис. 3), исходный код которого находится в файле mult.v. Рассмотрим более подробно работу этого модуля. М ОДУЛЬ УМНОЖЕНИЯ Основой модуля умножения являет ся примитив DSP48A1, предназначен ный для ПЛИС семейства Spartan 6. Подробное описание блока DSP48A1 содержится в [3]. Примитив DSP48A1 позволяет аппаратно выполнять умно жение, а также пре и пост суммиро вание или вычитание данных. Эти функции часто востребованы в прило жениях ЦОС. Упрощённая схема блока DSP48A1 изображена на рисунке 5. Блок содер жит 8 битный конфигурационный ре гистр, с помощью которого можно включать или выключать различные функции примитива. Прямоуголь никами обозначены регистры, с по мощью которых можно буферизиро вать входные и промежуточные сигна лы. Буквенные названия входов и выходов соответствуют названиям в шаблоне блока DSP48A1 на языке Veri log в среде PlanAhead. Поскольку для быстрого вычисления ДПФ необходи мо применение комплексного БПФ, модуль умножения работает с ком плексными числами. Пусть на входе имеются два ком плексных числа x + yi и u + vi . Формула умножения комплексных чисел выгля дит следующим образом: ( x + yi )( u + vi ) = ( xu – yv ) + ( xv + yu ) i . Соответственно, для умножения двух комплексных чисел необходимо ис пользование четырёх умножителей – примитивов DSP48A1. Блок схема умножителя комплексных чисел пока зана на рисунке 6. На четыре умножите ля подаются различные комбинации действительной и мнимой частей комплексных чисел. Входные данные имеют разрядность 18 бит. После умно жения получается 36 битное число, ко торое в модуле DSP48A1 расширяется до 48 бит. Результаты умножения сум мируются и вычитаются в соответ ствии с вышеприведённой формулой, и затем получается итоговое компле ксное число с действительной частью re_o и мнимой частью im_o . Примитив DSP48A1 выдаёт 48 бит ный результат, который необходимо округлить до 18 бит, чтобы использо вать в качестве входа во время следую щего цикла вычислений. Для округле ния числа с фиксированной точкой в ПРОГРАММИРОВАНИЕ 64 WWW.SOEL.RU СОВРЕМЕННАЯ ЭЛЕКТРОНИКА ◆ № 7 2012 FFT_ STAGE1 FFT_ STAGE2 FFT_ STAGE3 FFT_ STAGE4 FFT_ STAGE6 FFT_ STAGE7 FFT_ DONE FFT_ STAGE5 FFT_ IDLE conv_start_i next_state1 && ~next_state2 ~next_state1 && next_state2 next_state1 && ~next_state2 ~next_state1 && next_state2 next_state1 && ~next_state2 ~ next_state1 && next_state2 next_state1 && ~next_state2 conv_rdy_o Рис. 4. Блок схема конечного автомата ядра БПФ Хост контроллер шины Wishbone Контроллер UART Контроллер шины Wishbone модуля БПФ Ядро БПФ Модуль умножения Память для поворачивающих коэффициентов Рис. 3. Блок схема системы на кристалле ' СТА - ПРЕСС

RkJQdWJsaXNoZXIy MTQ4NjUy