Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Какой разрядности цифрового CORDIC гетеродина дотсаточно?
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Aleksandr Vihorev
Какой разрядности цифрового CORDIC гетеродина дотсаточно для построения радиотракта на ПЛИС. Есть два варианта - работа на низкой ПЧ, порядка десятков кГц совместно с аналоговым трактом. И второй вариант - весь КВ диапазон до 30 МГЦ и прямое преобразование сигнала со входа в цифровую форму. Как необходимая и достаточная разрядность гетеродина соотносится с разрядностью АЦП?
Vascom
Зависит от тактовой частоты и требуемой точности переноса частоты гетеродином. Какие у тебя требования?
serjj
Разрядность выходных сигналов - 16 бит.
Разрядность входа сигнала частоты определяется исходя из требуемой точности. В общем виде df = f_clock/(2^FREQ_WIDTH), при условии, что в кордике не менее FREQ_WIDTH итераций.
Проще всего насимулировать выборку 100-500 тыс. выходных отсчётов и скормить её матлабу, а там уже построить спектр сигнала (с окном типа Блэкмана, Блэкмана-Харриса). И сравнить результат с требованиями на качество генератора.
soldat_shveyk
Делайте 18 бит, если есть аппаратные умножители 18х18, как например у Альтеры.
Разрядность больше 18 бит вряд ли себя оправдает, поскольку SFDR 16-битного АЦП будет намного хуже.
Какое АЦП использовать планируете?
Aleksandr Vihorev
Цитата(soldat_shveyk @ Oct 6 2015, 08:41) *
Делайте 18 бит, если есть аппаратные умножители 18х18, как например у Альтеры.
Разрядность больше 18 бит вряд ли себя оправдает, поскольку SFDR 16-битного АЦП будет намного хуже.
Какое АЦП использовать планируете?

Пока экспериментировал с 12-битным - построил стенд с АЦП, ЦАП, ПЛИС Xilinx 3XC500 тактовый генератор 50 МГц, аналоговая часть КВ трансивера
soldat_shveyk
12 бит АЦП/ЦАП при 50 МГц тактовой - это для КВ не достаточно.
16 бит + 100 МГц - необходимый минимум. Даже у радиолюбителей сейчас такие SDR.
Aleksandr Vihorev
Цитата(soldat_shveyk @ Oct 6 2015, 09:48) *
12 бит АЦП/ЦАП при 50 МГц тактовой - это для КВ не достаточно.
16 бит + 100 МГц - необходимый минимум. Даже у радиолюбителей сейчас такие SDR.
Да, я про это знаю, цифровой тракт задумывался для работы на низкой ПЧ, и в целях изучения как программирования, так и самих ПЛИС. Начинал почти с нуля, имея знания по программированию 8-битных МК AVR на Си, да и, честно говоря в программировании ПЛИС ушел недалеко
Vascom
Тогда можешь сделать сколько влезет при твоей тактовой частоте, например 24 или 32 бита.
Aleksandr Vihorev
Цитата(Vascom @ Oct 6 2015, 14:07) *
Тогда можешь сделать сколько влезет при твоей тактовой частоте, например 24 или 32 бита.

Да вот я не совсем еще с VHDL разобрался, например, я пишу, когда нужно поделить число на 2 в степени n, как операцию деления. Как в этом случае правильно писать с использованием ror или rol? А то после анализа среда разработки пишет, что максимальная частота около 5 МГц, это примерно при 18 бит, а чем больше выборок тем лучше, так что такое низкое быстродействие - не вариант. Сразу говорю, знания у меня слабоватые, поэтому и вопросы могут быть соответствующие
ViKo
Вот в этой штуковине - 8-разрядные АЦП. А кайфу - на все 16. sm.gif Искать по имени RTL-SDR.
count_enable
Настоятельно рекомендую изучить Xilinx Core Generator и примитивы, которые он генерирует. В вашей плисине есть замечательные аппаратные умножители, быстрые и простые - их и надо задействовать. И CORDIC можно сгенерировать сразу готовый, и производительность его будет заведомо лучше всего, что напишет новичок. Ничего в этом сложного нету, освоите работу с ним в один вечер. Плата фирменная или самопал?
В вашем случае ни ror, ни rol.
sra - Shift Right - деление на 2^x.
srl - Shift Left - умножение на 2^x.
Но сейчас компилятор умный, он сам поймёт знак деления как сдвиг. И даже пожалуется при попытке поделить на 3, например.

Ага, и работайте с numeric_std, в старых книгах используются арифметичесие библиотеки от Синопсиса не рекомендуемые ныне и многие новички продолжают ими пользоваться.
litv
да действительно у меня rtlsdr работает на КВ на 8 разрядах АЦП, просто АРУ и усилители нужны.
Vascom
Цитата(Aleksandr Vihorev @ Oct 6 2015, 18:07) *
Да вот я не совсем еще с VHDL разобрался, например, я пишу, когда нужно поделить число на 2 в степени n, как операцию деления. Как в этом случае правильно писать с использованием ror или rol? А то после анализа среда разработки пишет, что максимальная частота около 5 МГц, это примерно при 18 бит, а чем больше выборок тем лучше, так что такое низкое быстродействие - не вариант. Сразу говорю, знания у меня слабоватые, поэтому и вопросы могут быть соответствующие

Попробуй Verilog. Он гораздо проще для понимания и читабельнее код. При этом по функционалу, качеству VHDL и Verilog равны.
Операцию деления и умножения там можно делать просто сдвигами >> и <<, или <<< и <<<.
Maverick
Цитата(Aleksandr Vihorev @ Oct 6 2015, 18:07) *
Да вот я не совсем еще с VHDL разобрался, например, я пишу, когда нужно поделить число на 2 в степени n, как операцию деления. Как в этом случае правильно писать с использованием ror или rol? А то после анализа среда разработки пишет, что максимальная частота около 5 МГц, это примерно при 18 бит, а чем больше выборок тем лучше, так что такое низкое быстродействие - не вариант. Сразу говорю, знания у меня слабоватые, поэтому и вопросы могут быть соответствующие

для деления на степень двойки можно просто писать - примеры:

a <= b/16;
a <= b/32;
a <= b/128;

Aleksandr Vihorev
Цитата(count_enable @ Oct 6 2015, 18:34) *
Настоятельно рекомендую изучить Xilinx Core Generator и примитивы, которые он генерирует. В вашей плисине есть замечательные аппаратные умножители, быстрые и простые - их и надо задействовать. И CORDIC можно сгенерировать сразу готовый, и производительность его будет заведомо лучше всего, что напишет новичок. Ничего в этом сложного нету, освоите работу с ним в один вечер. Плата фирменная или самопал?
В вашем случае ни ror, ни rol.
sra - Shift Right - деление на 2^x.
srl - Shift Left - умножение на 2^x.
Но сейчас компилятор умный, он сам поймёт знак деления как сдвиг. И даже пожалуется при попытке поделить на 3, например.

Ага, и работайте с numeric_std, в старых книгах используются арифметичесие библиотеки от Синопсиса не рекомендуемые ныне и многие новички продолжают ими пользоваться.

Плату я сам развел и спаял - это целый станд, там не только ПЛИС, но и перриферия и аналоговая часть, может, конечно, не совсем удачно именно для изучения VHDL

Цитата(Vascom @ Oct 7 2015, 06:35) *
Попробуй Verilog. Он гораздо проще для понимания и читабельнее код. При этом по функционалу, качеству VHDL и Verilog равны.
Операцию деления и умножения там можно делать просто сдвигами >> и <<, или <<< и <<<.

Да нет, я уже с чего начал, сейчас на другой язык переходить жедлания нет, и дело не в читабельности кода - задачи, которые я перед собой ставлю - простые, никакой там обработки видеосигнала. Просто мне нужно нормально и эффективно использовать ресурсы этой старой ПЛИС, затем я и задаю вопросы, а использовать последние разработки я вообще не хочу - мне нужно чтобы плата была двухсторонняя, никаких BGA и update-ов среды разработки, опять-же потому что задачи весьма скромные
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.