Генерация HDL-кода поддерживается для следующих типов многоскоростных фильтров:
Интерполятор каскадного интегратора (CIC) (dsp.CICInterpolator
)
Каскадный дециматор интегратора (CIC) (dsp.CICDecimator
)
Конечная импульсная характеристика Полифазы дециматор (dsp.FIRDecimator
)
Конечная импульсная характеристика Полифазы интерполятор (dsp.FIRInterpolator
)
Конечная импульсная характеристика Полифазы Выборки Rate Converter (dsp.FIRRateConverter
)
Интерполятор компенсации CIC (dsp.CICCompensationInterpolator
)
CIC Компенсационный дециматор (dsp.CICCompensationDecimator
)
Чтобы сгенерировать многоскоростной фильтр код, сначала выберите и спроектируйте один из поддерживаемых типов фильтров с помощью Filter Designer, Filter Builder или MATLAB® командная строка.
После создания фильтра откройте диалоговое окно Generate HDL, установите желаемые свойства генерации кода и сгенерируйте код. Смотрите Опции Генерации кода для Многоскоростных фильтров.
Чтобы сгенерировать код, используя generatehdl
задайте многоскоростной фильтр генерации кода свойства, которые функционально эквивалентны опциям пользовательского интерфейса. Смотрите Generatehdl Properties для Многоскоростные Фильтры.
Когда разработан многоскоростной фильтр поддерживаемого типа (см. «Поддерживаемые типы Многоскоростного фильтра»), изменяется состояние включения/отключения нескольких опций в диалоговом окне Генерация HDL.
На вкладке Global settings включено Clock inputs раскрывающееся меню. Это меню предоставляет две альтернативы для генерации входных входов синхроимпульса для многоскоростных фильтров.
Примечание
Меню Clock inputs не поддерживается для:
Фильтры с Partly serial
архитектура
Многоступенчатые преобразователи частоты дискретизации: dsp.FIRRateConverter
, или dsp.FilterCascade
содержит несколько скоростей
Для CIC-фильтров на вкладке Filter Architecture опция Coefficient multipliers отключена. Множители коэффициентов не используются в CIC-фильтрах.
Для CIC-фильтров на вкладке Filter Architecture опция FIR adder style отключен, так как CIC-фильтры не требуют окончательного сумматора.
Следующий рисунок показывает настройки по умолчанию диалогового окна Генерация HDL- опций для поддерживаемого CIC-фильтра.
Ниже перечислены Clock inputs опции:
Single
: Когда вы выбираете Single
кодер генерирует один вход синхроимпульса для многоскоростного фильтра. Объявление модуля или сущности для фильтра имеет один вход синхроимпульса со связанным входом включения синхроимпульса и выходом включения синхроимпульса. Сгенерированный код включает счетчик, который управляет синхронизацией передачи данных на выход фильтра (для децимирующих фильтров) или вход (для интерполяционных фильтров). Счетчик ведет себя как вторичный синхроимпульс, скорость которого определяется коэффициентом десятикратного уменьшения или интерполяции. Эта опция обеспечивает автономное решение синхронизации для проектов FPGA.
Для настройки имени выхода включения синхроимпульса см. раздел Установка имени Выход включения синхроимпульса. Интерполяторы также проходят через входной сигнал включения синхроимпульса к порту выхода с именем ce_in
. Этот сигнал указывает, когда объект принял вход выборку. Можно использовать этот сигнал для управления потоком данных в восходящем направлении. Вы не можете настроить это имя порта.
Следующие фрагменты кода были сгенерированы из CIC децимирующего фильтра, имеющего коэффициент десятикратного уменьшения 4
с Clock inputs установленным значением Single
.
Кодер генерирует вход часы, вход часы и выход часы.
ENTITY cic_decim_4_1_single IS PORT( clk : IN std_logic; clk_enable : IN std_logic; reset : IN std_logic; filter_in : IN std_logic_vector(15 DOWNTO 0); -- sfix16_En15 filter_out : OUT std_logic_vector(15 DOWNTO 0); -- sfix16_En15 ce_out : OUT std_logic ); END cic_decim_4_1_single;
Часы активируют выход обрабатывают, ce_output
, поддерживает сигнал counter
. Каждый 4-й тактовый цикл, counter
переключается на 1.
ce_output : PROCESS (clk, reset) BEGIN IF reset = '1' THEN cur_count <= to_unsigned(0, 4); ELSIF clk'event AND clk = '1' THEN IF clk_enable = '1' THEN IF cur_count = 3 THEN cur_count <= to_unsigned(0, 4); ELSE cur_count <= cur_count + 1; END IF; END IF; END IF; END PROCESS ce_output; counter <= '1' WHEN cur_count = 1 AND clk_enable = '1' ELSE '0';
Следующий фрагмент кода иллюстрирует типичное использование counter
сигнал, в этом случае ко времени выхода фильтра.
output_reg_process : PROCESS (clk, reset) BEGIN IF reset = '1' THEN output_register <= (OTHERS => '0'); ELSIF clk'event AND clk = '1' THEN IF counter = '1' THEN output_register <= section_out4; END IF; END IF; END PROCESS output_reg_process;
Multiple
: Когда вы выбираете Multiple
кодер генерирует несколько входов синхроимпульса для многоскоростного фильтра. Объявление модуля или сущности для фильтра имеет отдельные входы синхроимпульса (каждый со связанным входным сигналом включения синхроимпульса) для каждой скорости многоскоростного фильтра. Вы несете ответственность за предоставление входных синхросигналов, которые соответствуют желаемому коэффициенту десятикратного уменьшения или интерполяции. Чтобы увидеть пример, сгенерируйте испытательный стенд для многоскоростного фильтра и исследуйте clk_gen
процессы для каждого синхроимпульса.
The Multiple
опция предназначена для ASIC и ПЛИС. Это обеспечивает большую гибкость, чем Single
опция, но принимает, что вы обеспечиваете HDL-код более высокого уровня для управления входными часами вашего фильтра.
Синхронизаторы между несколькими областями не предусмотрены.
Когда вы выбираете Multiple
кодер не генерирует выходы включения синхроимпульса; поэтому поле Clock enable output port на панели Global Settings отключено.
Следующая ENTITY
объявление было сгенерировано из CIC децимирующего фильтра с Clock inputs установленным на Multiple
.
ENTITY cic_decim_4_1_multi IS PORT( clk : IN std_logic; clk_enable : IN std_logic; reset : IN std_logic; filter_in : IN std_logic_vector(15 DOWNTO 0); -- sfix16_En15 clk1 : IN std_logic; clk_enable1 : IN std_logic; reset1 : IN std_logic; filter_out : OUT std_logic_vector(15 DOWNTO 0) -- sfix16_En15 ); END cic_decim_4_1_multi;
Кодер генерирует выход включения синхроимпульса, когда вы задаете Clock inputs Single
в диалоговом окне «Генерация HDL». Имя по умолчанию для выхода включения синхроимпульса ce_out
.
Чтобы изменить имя выхода включения синхроимпульса, измените Clock enable output port поле панели Ports диалогового окна Генерация HDL.
Кодер включает поле Clock enable output port только при генерации кода для многоскоростного фильтра с одним входом синхроимпульсом.
generatehdl
Свойства для многоскоростных фильтровЕсли вы используете generatehdl
чтобы сгенерировать код для многоскоростного фильтра, можно задать следующие свойства, чтобы задать опции генерации синхроимпульса:
ClockInputs
- соответствует Clock inputs опции; выбирает генерацию входных входов одного или нескольких синхроимпульсов для многоскоростных фильтров.
ClockEnableOutputPort
: Соответствует полю Clock enable output port ; задает имя выходного порта включения синхроимпульса.
ClockEnableInputPort
соответствует полю Clock enable input port ; задает имя входного порта включения синхроимпульса.