Многоскоростные фильтры

Поддерживаемые типы Многоскоростного фильтра

Генерация 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 ; задает имя входного порта включения синхроимпульса.