Как сгенерировать волну sinc с помощью Verilog

Я делаю "Генератор сигналов произвольной формы" на ПЛИС. в настоящее время я работаю над созданием волны «sinc» с использованием FPGA [используя Verilog].

Для фиксированной частоты я могу сделать sinc с помощью LUT на ПЗУ, но мне нужно дать возможность сделать sinc с определенной пользователем частотой.

Итак, любая хорошая идея, как это сделать???

Любая помощь будет высоко ценится.


person HammadTariq    schedule 22.03.2013    source источник
comment
Синус или синус? Вы говорите sinc в одном предложении и sin в другом.   -  person Tim    schedule 22.03.2013
comment
sinc... извините за орфографическую ошибку.   -  person HammadTariq    schedule 22.03.2013


Ответы (1)


Вы по-прежнему можете использовать LUT для функции переменной частоты sin(x).

Просто создайте LUT из 1000 или около того (в зависимости от желаемого разрешения) записей одного цикла синусоиды. Затем вы решаете, сколько записей будет проходить через каждый такт в зависимости от желаемой частоты.

Например, если ваша тактовая частота составляет 1 МГц, а желаемая выходная частота составляет 1 кГц, то вы переходите к следующей записи LUT каждые такт (завершите период в 1000 тактовых циклов). Если желаемая выходная частота составляет 10 кГц, то вы перескакиваете 10 записей в LUT каждый цикл. (завершить период за 100 тактов)

Чтобы получить sinc, хотя sin(x)/x, я думаю, вам нужно будет реализовать схему деления, так как я не могу придумать никакого способа обойти это.

person Tim    schedule 22.03.2013
comment
Да, я использовал LUT для переменной синусоиды, то есть DDS. - person HammadTariq; 22.03.2013
comment
Итак, ваш настоящий вопрос заключается в том, чтобы просто попытаться найти способ избежать схемы деления? - person Tim; 22.03.2013
comment
И я думал сделать синус, используя ту же технику, что и синус... т. е. сделать LUT, используя ПЗУ, и выбрать разное количество точек/цикл в зависимости от частоты. Так что вы думаете, это возможно ..?? - person HammadTariq; 22.03.2013
comment
Раньше я так не думал, но теперь я думаю, что можно было бы просто использовать LUT таким же образом. Просто запрограммируйте функцию sinc(x) на LUT и переходите через шаги в зависимости от входной частоты. - person Tim; 22.03.2013
comment
На самом деле мой вопрос заключается в том, чтобы сделать как можно проще. Использование делителя требует больше ресурсов и может снизить максимальную скорость моего проекта. Поэтому я думаю, что было бы лучше избежать схемы делителя. Что ты говоришь? Должен ли я использовать схему делителя? - person HammadTariq; 22.03.2013
comment
Я думаю, что вы, вероятно, можете сделать это с помощью одного LUT. - person Tim; 22.03.2013