NCO на основе Gowin CORDIC
Возникла идея повторить один из наших давних FPGA проектов: SDR радиоприёмник. Когда-то он был выполнен на плате Марсоход2 с Cyclone III, но сейчас у нас уже другая плата Марсоход3GW совсем другая FPGA от Gowin. Но, по прежнему, на плате есть АЦП 8 бит и даже на последних платах этот АЦП работает на частоте 50МГц.
Для реализации проекта SDR приёмника нужны будут несколько компонентов: NCO, CIC фильтр и FIR фильтр.
К сожалению, в библиотеке компонентов среды проектирования Gowin FPGA Designer нет компонента NCO. NCO - это Numerically Controlled Oscilator. Управляемый генератор синусоидального сигнала. Его придется сделать самим. Эта статья как раз про "промежуточный проект" - NCO в FPGA.
Хоть готового компонента NCO в среде проектирования я не нашёл, за то тут есть другие компоненты, которые мне могут помочь. Это Gowin компоненты CORDIC и DDS.
DDS - Direct Digital Frequency Synthesizer. Этот компонент позволяет синтезировать синусоиды или сигналы другой формы. Как я понял компонент использует таблицы отсчётов сигнала в BSRAM. Его вполне можно использовать для создания NCO. Это в принципе почти и есть NCO. Я не стал идти этим путём, так как мне не понравилось, что конфигурация компонента DDS должна происходить путём записи в его управляющие регистры. Кроме этого, мне нужен NCO с двумя выходами: синус и косинус одновременно. И тогда возникает вопрос: либо ставить два экземпляра DDS либо разбираться, как работают каналы DDS. Возможно применение двух каналов в одном экземпляре модуля DDS это подходящий вариант. Однако, как я уже сказал, я пошёл другим путём.
Второй кандидат это компонент Gowin CORDIC. Далее я расскажу подробнее про использование CORDIC в составе модуля NCO.
Подробнее...