EdigE
← ЛЕНТА

Открыты VHDL-модули CIC-дециматора и интерполятора для FPGA

Adiuvo Engineering опубликовала учебную RTL-реализацию CIC-дециматора и CIC-интерполятора с открытыми исходниками на VHDL-2008. В репозитории MZ659 находятся четыре файла: два синтезируемых модуля и два тестовых стенда. Конфигурация по умолчанию использует три каскада, коэффициент изменения частоты R=8, дифференциальную задержку M=1 и 16-битные интерфейсы.

CIC-фильтр Хогенауэра строится из интеграторов и гребенчатых comb-звеньев. В дециматоре интеграторы работают на высокой входной частоте, после них поток прореживается в восемь раз, а comb-каскад выполняется уже на сниженной частоте. В интерполяторе порядок зеркальный: comb-звенья предшествуют вставке нулевых отсчётов и интеграторам. Такая топология обходится сложением, вычитанием и задержками, поэтому в опубликованном RTL отсутствуют DSP-умножители и ROM с коэффициентами.

Экономия арифметических ресурсов сопровождается ростом регистров. Максимальное усиление дециматора определяется выражением (RM)^N. При R=8, M=1 и N=3 оно равно 512, то есть 9 бит дополнительного динамического диапазона. Для 16-битного входа расчётная внутренняя ширина составляет 16 + ceil(3·log2(8)) = 25 бит. Сужать тракт раньше comb-каскада опасно: переполнение интеграторов является частью модульной арифметики CIC и корректно компенсируется последующими разностями только при согласованной разрядности.

Для интерполятора с нулевым заполнением эффективное усиление равно (RM)^N/R, в данном случае 64. Нормализация выполнена выбором битов. Этот приём даёт точный масштаб для коэффициентов, являющихся степенями двойки. При произвольном R потребуется дополнительная арифметика, иначе амплитуда окажется систематически заниженной.

Тестовые стенды проверяют постоянный сигнал и синусоиду. Значение 1000 после установления тракта сравнивается с ожидаемым результатом точно. Для синусоидальных тестов используются широкие допустимые интервалы: 19000–20050 у дециматора и 19500–20100 у интерполятора. Поэтому заявленные результаты симуляции 19570 при расчётных 19624 и 19904 при расчётных 19905 не закреплены в assert с соответствующей точностью. Опубликованных журналов CI и независимого прогона во всех заявленных симуляторах также нет.

Частотная характеристика остаётся типичной для CIC: с ростом порядка усиливается спад амплитуды в рабочей полосе. В примере дециматора расчётный уровень 19624 при входной амплитуде 20000 соответствует примерно −0.165 дБ. В практическом DDC или DUC после изменения частоты обычно добавляется короткий компенсационный FIR, который выравнивает полосу и формирует требуемое подавление вне её.

Параметр M в текущем коде зафиксирован равным 1, а проверки допустимых сочетаний ширины входа, выхода, числа каскадов и коэффициента R в generics отсутствуют. Нет и результатов синтеза с LUT, FF, Fmax или энергопотреблением. Публикация показывает прозрачную основу multirate-тракта и пригодный для модификации VHDL-код, однако характеристики конкретной FPGA предстоит определять после синтеза, разводки и проверки временных ограничений.