Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Настройки CORDIC
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
tonloon
Доброго времени суток.
Решил поставить в свой проект модуль CORE Generator - CORDIC (coordinate rotational digital computer) - для вычисления амплитуды и фазы сигнала на выходе FFT (также собранный в CORE Generator).
CORDIC поддерживает три формата 1) Signed Fraction 2) Unsigned Fraction 3) Unsigned Integer, тогда как FFT выдает данные в формате two’s complement.
При выборе функции ядра (Functional Selection) - Translate в CORDIC автоматически устанавливается формат Signed Fraction.
Как правильно в данном случае подключить CORDIC к выходу FFT ?
CaPpuCcino
скажите, пожалуйста, какое отношение ваша тема имеет к Языкам описания аппаратуры? вы правила форума читали? twak.gif
tonloon
Проект написан на VHDL.
CORDIC и FFT придется соеденять именно в нем.
Этот единственный раздел куда подходит данная тема.
CaPpuCcino
Цитата(tonloon @ Sep 6 2010, 12:03) *
Проект написан на VHDL.

а у вашего шефа рубашка не в цветочек? а то может стоит разместить эту тему в разделе мода и бизнес?
где в вашем вопросе связь с языками вообще и с ВХДЛ в частности?
эта тема подходит куда угодно в этой рубрике прежде, а сюда в последнюю очередь:
первый раздел посвящён непосредственно средам разработки и работы с ними, к которым относиться ваш CORE generator
четвертый раздел посвящён коркам(блокам IP),к которым относятся ваши FFT и кордик
и даже второй раздел по областям применения можно (хоть и с небольшой натяжкой) подвести под вашу тему
а в случае с Языками описания и вашим вопросом получается как в анекдоте про Василия Ивановича и спички
one_man_show
Цитата
Как правильно в данном случае подключить CORDIC к выходу FFT ?

Уважаемый tonloon, попробуйте раскрыть этот вопрос, возможно, приведя части исходников, тогда он точно впишется в тему

Если все-таки Ваш вопрос касается именно реализации алгоритма, то Вам придется прибегнуть к помощи Модератора, чтобы тему перенесли в раздел "Алгоритмы ЦОС"
Shtirlits
Правила нарушать конечно нельзя, но раз уж они нарушились...
Давайте разбираться со схемой, а верный раздел форума потомки определят.
Если что, тут разберемся с типами и сформулируем вопрос для специалистов в "Алгоритмах ЦОС".

Допустим, я ничего не понимаю в cordic и fft, как и компилятор VHDL этого не понимает.
Объясните мне, что за данные у вас поступают на вход fft, что на выходе, block floating point или fixed point или что?
Чем оно не устраивает?
Зачем понадобился cordic ?
tonloon
Цитата(CaPpuCcino @ Sep 6 2010, 16:10) *
а у вашего шефа рубашка не в цветочек? а то может стоит разместить эту тему в разделе мода и бизнес?
где в вашем вопросе связь с языками вообще и с ВХДЛ в частности?
эта тема подходит куда угодно в этой рубрике прежде, а сюда в последнюю очередь:
первый раздел посвящён непосредственно средам разработки и работы с ними, к которым относиться ваш CORE generator
четвертый раздел посвящён коркам(блокам IP),к которым относятся ваши FFT и кордик
и даже второй раздел по областям применения можно (хоть и с небольшой натяжкой) подвести под вашу тему
а в случае с Языками описания и вашим вопросом получается как в анекдоте про Василия Ивановича и спички


Надо посмотреть в цветочек или нет, а вдруг...
Спасибо что просветили относительно разделов.
Действительно - виноват, пожалуй стоило выложить эту тему в четвертый раздел.
Анекдот такой не помню, уж простите.



Цитата(one_man_show @ Sep 6 2010, 16:36) *
Уважаемый tonloon, попробуйте раскрыть этот вопрос, возможно, приведя части исходников, тогда он точно впишется в тему

Если все-таки Ваш вопрос касается именно реализации алгоритма, то Вам придется прибегнуть к помощи Модератора, чтобы тему перенесли в раздел "Алгоритмы ЦОС"


Обращусь к модератору.
Подойдет раздел: Системы на ПЛИС - System on a Programmable Chip (SoPC).




Цитата(Shtirlits @ Sep 6 2010, 18:26) *
Правила нарушать конечно нельзя, но раз уж они нарушились...
Давайте разбираться со схемой, а верный раздел форума потомки определят.
Если что, тут разберемся с типами и сформулируем вопрос для специалистов в "Алгоритмах ЦОС".

Допустим, я ничего не понимаю в cordic и fft, как и компилятор VHDL этого не понимает.
Объясните мне, что за данные у вас поступают на вход fft, что на выходе, block floating point или fixed point или что?
Чем оно не устраивает?
Зачем понадобился cordic ?


FFT работает в режиме Burst I/O следующим образом: данные поступают в потоковом режиме (на частоте порядка 700 кГц) в FIFO, затем по накоплению 1024 отсчетов выдается команда старта FFT, данные загружаются из FIFO в FFT (частота 100 МГц) и, собственно, производится расчет. На выходе данные в формате fixed point.
Проблема в том, что формат signed fraction и формат fixed point разные форматы представления данных.
CORDIC потребовался для представления данных FFT в удобном формате, а именно в виде амплитуды и фазы обработаного сигнала.
hobgoblin
Цитата
Проблема в том, что формат signed fraction и формат fixed point разные форматы представления данных.

Я никогда с ядрами Xilinx не работал, просто увидел не в своей теме знакомые слова и заинтересовался smile.gif , но судя по беглому взгляду на datasheet-ы signed fraction и signed fixed point в этих блоках означают одно и то же, вопрос только где двоичная точка стоит. В CORDIC-е формат signed fraction - это числа с фиксированной точкой в формате (2.N) - 1 знаковый бит, один бит целой части и N бит дробной части. Выход FFT нужно привести к этому формату. Составляющие комплексного числа на входе CORDIC должны иметь диапазон от -1 (включительно) до +1 (включительно). Если Вам не важен абсолютный уровень в конкретном бите FFT, а интересны только относительные уровни, то, скорее всего можно, можно просто тупо добавить к выходу FFT один знаковый разряд и подать сигнал на вход CORDIC.
tonloon
Цитата(hobgoblin @ Sep 7 2010, 10:59) *
Я никогда с ядрами Xilinx не работал, просто увидел не в своей теме знакомые слова и заинтересовался smile.gif , но судя по беглому взгляду на datasheet-ы signed fraction и signed fixed point в этих блоках означают одно и то же, вопрос только где двоичная точка стоит. В CORDIC-е формат signed fraction - это числа с фиксированной точкой в формате (2.N) - 1 знаковый бит, один бит целой части и N бит дробной части. Выход FFT нужно привести к этому формату. Составляющие комплексного числа на входе CORDIC должны иметь диапазон от -1 (включительно) до +1 (включительно). Если Вам не важен абсолютный уровень в конкретном бите FFT, а интересны только относительные уровни, то, скорее всего можно, можно просто тупо добавить к выходу FFT один знаковый разряд и подать сигнал на вход CORDIC.


Абсолютный уровень не важен.
FFT выдает два сигнала (реальная и мнимая части быстрого преобразования фурье) имеющие знаковый разряд.
Формат представления - дополнительный код.
СORDIC похоже оперирует с данными в обычном двоичном представлении числа + старший бит для знака числа.
hobgoblin
Я же написал выше, что при выборе дробного формата CORDIC ожидает на входе fixed point (2.N). Это и есть дробное число в дополнительном коде, только целая часть занимает два бита (включая знаковый), поскольку диапазон входных чисел включает +1. Если бы +1 не входила в диапазон, то был бы простой знаковый формат (1.N).
ВВот кусок из даташита где это написано
Цитата
A XQN format number is an 1+X+N bit 2’s complement binary number; a sign bit followed by X integer
bits followed by an N bit mantissa (fraction)
. XQN format can be used to express numbers in the range
( -2X ) to ( 2X - 2(-N) ). An equivalent notation using the MathWorks® Fix format, defined as
Fixword_length_fractional_length, would be Fix(1+X+N)_N.
A number using Q15 format is equivalent to a number using Fix16_15 representation, and a number in
1Q15 format is equivalent to a number using Fix17_15 representation.

Там ведь даже пример дан.
tonloon
Цитата(hobgoblin @ Sep 7 2010, 11:31) *
Я же написал выше, что при выборе дробного формата CORDIC ожидает на входе fixed point (2.N). Это и есть дробное число в дополнительном коде, только целая часть занимает два бита (включая знаковый), поскольку диапазон входных чисел включает +1. Если бы +1 не входила в диапазон, то был бы простой знаковый формат (1.N).
ВВот кусок из даташита где это написано

Там ведь даже пример дан.


В формате XQN разобрался.
Если я правильно вас понял данные с FFT можно напрямую подключать к CORDIC, поскольку знаковый разряд на выходе FFT присутствует.
hobgoblin
Напрямую нельзя, нужно дополнить еще одним знаковым разрядом слева. Внутри кордика происходит усиление примерно в 1.6 раз (конкретное значение зависит от числа итераций), и, скорее всего, именно поэтому используется формат (2.N), чтобы избежать переполнения во внутренних сумматорах. Вы бы посмотрели в моделсиме или чем Вы там пользуетесь, какой динамический диапазон у отсчетов на выходе FFT, а еще лучше в MATLAB-е модельку бы сделали, если умеете System Generator-ом пользоваться.
tonloon
Цитата(hobgoblin @ Sep 7 2010, 12:00) *
Напрямую нельзя, нужно дополнить еще одним знаковым разрядом слева. Внутри кордика происходит усиление примерно в 1.6 раз (конкретное значение зависит от числа итераций), и, скорее всего, именно поэтому используется формат (2.N), чтобы избежать переполнения во внутренних сумматорах. Вы бы посмотрели в моделсиме или чем Вы там пользуетесь, какой динамический диапазон у отсчетов на выходе FFT, а еще лучше в MATLAB-е модельку бы сделали, если умеете System Generator-ом пользоваться.


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

Если вас не затруднит, пожалуйста, зайдите icq.

По поводу симуляции...есть возможность смотреть работу CORDIC на плате.
Вот скрины с чипскопа
hobgoblin
Чтобы от формата (1.N) перейти к формату (2.N) надо просто добавить слева еще один бит (скопировать туда знаковый)

1-2^(-(N-1)) = 0.11....1 в формате (1.N) = 00.11...1 в формате (2.N)
+1 = 01.00...0 в формате (2.N)
-1 = 1.00...0 в формате (1.N) = 11.00...0 в формате (2.N)
-2 = 10.00...0 в формате (2.N)

ЗЫ: Я и так в аське сижу
tonloon
Странное поведение у CORDIC
В режиме "Translate" при переводе "Rectangular to Polar Translation"
Выдает на выходе X_OUT (там где должен быть модуль сигнала) отрицательные значения?
hobgoblin
Вы бы вместо картинок, которые мало кому о чем кроме Вас говорят, привели бы значения входного отсчета в двоичном формате, при котором у Вас возникают отрицательное значение, и выходного значения модуля также в двоичном формате. И до кучи настройки ядра с описанием управляющих, тактовых сигналов, которые на него подаются в проекте. тогда может кто-то что-нибудь дельное посоветует.
one_man_show
Тема перенесена по просьбе ее автора
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.