exponenta event banner

Оптимизированный фильтр FIR

Создание папки для файлов учебного пособия

Настройте рабочую папку, доступную для записи, за пределами установочной папки MATLAB ® для хранения файлов, которые будут создаваться по завершении учебной работы. В инструкциях по обучению предполагается, что создается папкаhdlfilter_tutorials на приводе C.

Проектирование фильтра FIR в конструкторе фильтров

В этом учебном пособии приведены инструкции по проектированию оптимизированного дискретно-временного КИХ-фильтра, созданию кода Verilog для фильтра и проверке кода Verilog с помощью созданного тестового стенда.

В этом разделе предполагается, что пользователь знаком с интерфейсом пользователя MATLAB и конструктором фильтров.

  1. Запустите программное обеспечение MATLAB.

  2. Установите текущую папку в папку, созданную в разделе «Создание папки для файлов учебного пособия».

  3. Запустите конструктор фильтров, введя filterDesigner в окне команд MATLAB. Откроется диалоговое окно Фильтровать инструмент проектирования и анализа (Filter Design & Analysis Tool).

  4. В диалоговом окне «Инструмент проектирования и анализа фильтров» задайте следующие параметры фильтра:

    ВыборСтоимость
    Тип ответаLowpass
    Метод проектированияFIR Equiripple
    Порядок фильтрацииМинимальный заказ
    ВариантыDensity Factor: 20
    Частотные характеристики

    Единицы измерения: Hz

    Fs: 48000

    Фпас: 9600

    Фстоп: 12000

    Характеристики величины

    Единицы измерения: dB

    Апасс: 1

    Астоп: 80

    Эти настройки предназначены для конструкции фильтра по умолчанию, создаваемой конструктором фильтров. Если изменение фильтра не требуется, а фильтр конструкции выделен серым цветом, можно перейти к параметру «Квантовать фильтр КИХ».

  5. Щелкните Фильтр проектирования (Design Filter). Конструктор фильтров создает фильтр для указанной конструкции. По завершении задачи в строке состояния конструктора фильтров появится следующее сообщение.

    Designing Filter... Done
    

    Дополнительные сведения о проектировании фильтров с помощью конструктора фильтров см. в документации по Toolbox™ системы DSP.

Квантование фильтра FIR

Необходимо квантовать фильтры для генерации кода HDL. Чтобы квантовать фильтр,

  1. Откройте конструкцию фильтра FIR, созданную в окне «Design the FIR Filter in Filter Designer», если она еще не открыта.

  2. Нажмите кнопку «Задать параметры квантования» на левой панели инструментов. Конструктор фильтров отображает арифметическое меню «Фильтр» в нижней половине диалогового окна.

  3. Выбрать Fixed-point из списка. Затем выберите Specify all из списка Точность фильтра (Filter precision). Конструктор фильтров отображает первую из трех панелей с вкладками параметров квантования в нижней половине диалогового окна.

    Используйте опции квантования для проверки влияния различных настроек на производительность и точность квантованного фильтра.

  4. Установите параметры квантования следующим образом:

    СчетПараметрНастройка
    КоэффициентыДлина слова-числителя16
     Длины дробей с наилучшей точностьюSelected
     Использовать неподписанное представлениеCleared
     Масштабирование числительных коэффициентов для полного использования всего динамического диапазонаCleared
    Ввод/выводДлина входного слова16
     Длина входной фракции15
     Длина выходного слова16
    Фильтровать внутренние устройстваРежим округленияFloor
     Режим переполненияSaturate
     Аккум. длина слова40
  5. Нажмите кнопку «Применить».

Дополнительные сведения о квантовании фильтров с помощью конструктора фильтров см. в документации панели инструментов системы DSP.

Настройка и создание оптимизированного кода Verilog

После квантования фильтра можно настроить параметры кодера и создать код Verilog для фильтра. В этом разделе описывается запуск пользовательского интерфейса, настройка параметров и создание кода Verilog и тестового стенда для фильтра FIR, который был разработан и квантован при проектировании фильтра FIR в конструкторе фильтров и квантовании фильтра FIR.

  1. Начните Дизайн Фильтра, HDL Coder™ UI, выбирая Цели> Производит HDL в диалоговом окне Filter Designer. Конструктор фильтров отображает диалоговое окно Генерировать ЛПВП (Generate HDL).

  2. Выбрать Verilog для параметра «Язык», как показано на следующем рисунке.

  3. В текстовом поле «Имя» на панели «Цель» замените имя по умолчанию на optfir. Этот параметр задает имя модуля Verilog и файла, содержащего код Verilog для фильтра.

  4. На панели Архитектура фильтра (Filter architecture) выберите опцию Оптимизировать для HDL (Optimize for HDL). Этот параметр предназначен для создания кода HDL, оптимизированного для требований к производительности или пространству. Когда эта опция включена, кодер делает компромиссы относительно типов данных и может игнорировать ваши настройки квантования для достижения оптимизации. При использовании этой опции помните, что это происходит за счет потенциальных числовых различий между результатами фильтрации, полученными исходным объектом фильтра, и смоделированными результатами для оптимизированного кода HDL.

  5. Выбрать CSD для параметра Множители коэффициентов. Эта опция оптимизирует операции множителя коэффициентов, предписывая кодеру заменить их добавками частичных произведений, произведенных методом канонического знака (CSD). Этот метод минимизирует количество операций сложения, необходимых для постоянного умножения, путем представления двоичных чисел с минимальным числом ненулевых цифр.

  6. Выберите опцию Добавить регистры трубопровода (Add pipeline regists). Для фильтров FIR эта опция оптимизирует окончательное суммирование. Кодер создает конечный сумматор, который выполняет парное сложение последовательных произведений и включает в себя стадию конвейерных регистров после каждого уровня дерева. При использовании для фильтров FIR эта опция может создавать числовые различия между результатами, полученными исходным объектом фильтра, и смоделированными результатами для оптимизированного кода HDL.

  7. Появится диалоговое окно Генерировать ЛПВП (Generate HDL), как показано на рисунке.

  8. Выберите вкладку Глобальные параметры пользовательского интерфейса. Затем выберите вкладку Общие в разделе Дополнительные настройки.

    В текстовом поле Комментарий в заголовке введите Tutorial - Optimized FIR Filter. Кодер добавляет комментарий к концу блока комментариев заголовка в каждом созданном файле.

  9. Выберите вкладку «Ports» в разделе «Additional settings» пользовательского интерфейса.

  10. Измените имена портов ввода и вывода. В текстовом поле «Порт ввода» замените filter_in с data_in. В текстовом поле «Порт вывода» замените filter_out с data_out.

  11. Снимите флажок для опции Добавить входной регистр. Теперь панель «Порты» выглядит так, как показано на рисунке.

  12. Перейдите на вкладку Test Stench (Испытательный стенд) в диалоговом окне Generate HDL (Генерировать ЛПВП). В текстовом поле Имя файла замените имя по умолчанию на optfir_tb. Этот параметр определяет имя созданного файла тестового стенда.

  13. На панели Test Bench (Испытательный стенд) перейдите на вкладку Configuration (Конфигурация). Обратите внимание, что опция Error margin (bits) включена. Эта опция включена, поскольку ранее выбранные опции оптимизации (например, Добавить регистры трубопровода) потенциально могут давать числовые результаты, отличающиеся от результатов, полученных исходным объектом фильтра. Эту опцию можно использовать для настройки количества младших битов, которые стенд игнорирует во время сравнения, прежде чем генерировать предупреждение.

  14. В диалоговом окне «Создание HDL» нажмите кнопку «Создать» для запуска процесса создания кода. По завершении создания кода нажмите кнопку Закрыть, чтобы закрыть диалоговое окно.

    При создании файлов Verilog фильтра и тестового стенда кодер отображает следующие сообщения в окне команд MATLAB:

    ### Starting Verilog code generation process for filter: optfir
    ### Generating: C:\hdlfilter_tutorials\hdlsrc\optfir.v
    ### Starting generation of optfir Verilog module
    ### Starting generation of optfir Verilog module body
    ### HDL latency is 8 samples
    ### Successful completion of Verilog code generation process for filter: optfir
    
    ### Starting generation of VERILOG Test Bench
    ### Generating input stimulus
    ### Done generating input stimulus; length 3429 samples.
    ### Generating Test bench: C:\hdlfilter_tutorials\hdlsrc\optfir_tb.v
    ### Please wait ...
    ### Done generating VERILOG Test Bench 

    Как указано в сообщениях, кодер создает папку hdlsrc в текущей рабочей папке и помещает файлы optfir.v и optfir_tb.v в этой папке.

    Обратите внимание, что сообщения содержат гиперссылки на сгенерированный код и файлы тестового стенда. Щелкнув эти гиперссылки, можно открыть файлы кода непосредственно в редакторе MATLAB.

    Созданный код Verilog имеет следующие признаки:

    • Модуль Verilog с именем optfir.

    • Регистры, использующие асинхронный сброс, когда сигнал сброса является активным высоким (1).

    • Созданный код, оптимизирующий использование типов данных и устраняющий избыточные операции.

    • Множители коэффициентов, оптимизированные методом CSD.

    • Окончательные суммирования, оптимизированные с использованием конвейерной методики.

    • Порты со следующими именами:

      Порт VerilogИмя
      Входdata_in
      Продукцияdata_out
      Вход синхросигналаclk
      Вход включения тактового синхросигналаclk_enable
      Сброс входного сигналаreset
    • Дополнительный регистр для обработки выходного сигнала фильтра.

    • Именованные коэффициенты coeffn, где n - номер коэффициента, начинающийся с 1.

    • Представление безопасности типа используется при объединении нулей: '0' & '0'...

    • Постфикс '_process' добавляется к последовательному (begin) имена блоков.

    Сформированный испытательный стенд:

    • Является переносимым файлом Verilog.

    • Принудительное включение синхросигнала, включение синхросигнала и сброс входных сигналов.

    • Принудительно переводит входной сигнал включения синхросигнала в активное состояние.

    • Управляет входным синхросигналом высокой (1) в течение 5 наносекунд и низкой (0) в течение 5 наносекунд.

    • Инициирует сигнал сброса в течение двух циклов плюс время удержания 2 наносекунды.

    • Применяет время удержания 2 наносекунды к входным сигналам данных.

    • Применяет запас ошибки, равный 4 битам.

    • Для FIR-фильтра применяет импульсные, ступенчатые, линейные, чирпические и белые шумовые стимулы.

Обзор оптимизированного кода Verilog

Познакомьтесь с оптимизированным кодом Verilog, открыв и просмотрев файл optfir.v в редакторе симулятора ASCII или HDL:

  1. Открытие созданного файла фильтра Verilog optcfir.v.

  2. Поиск optfir. Эта строка идентифицирует модуль Verilog, используя значение, указанное для параметра «Имя» на панели «Цель». См. шаг 3 в разделе Настройка и создание оптимизированного кода Verilog.

  3. Поиск Tutorial. В этом разделе кода кодер помещает текст, введенный для параметра Комментарий в заголовке. См. шаг 9 в разделе Настройка и создание оптимизированного кода Verilog.

  4. Поиск HDL Code. В этом разделе перечислены параметры кодера, измененные в разделе Настройка и создание оптимизированного кода Verilog.

  5. Поиск Filter Settings. В этом разделе кода VHDL описываются настройки конструкции фильтра и квантования, указанные в разделе «Проектирование фильтра FIR в конструкторе фильтров» и «Квантование фильтра FIR».

  6. Поиск module. Эта строка именует модуль Verilog, используя значение, указанное для параметра «Имя» на панели «Цель». Эта строка также объявляет список портов в соответствии с параметрами на панели «Порты» диалогового окна «Создание HDL». Портам для ввода и вывода данных присваиваются значения, указанные для опций Входной порт (Input port) и Выходной порт (Output port) на вкладке Порты (Ports) диалогового окна Генерировать HDL (Generate HDL). См. шаги 3 и 11 в разделе Настройка и создание оптимизированного кода Verilog.

  7. Поиск input. Эта линия и следующие четыре линии объявляют режим направления для каждого порта.

  8. Поиск Constants. Этот код определяет коэффициенты. Они именуются с использованием схемы именования по умолчанию. coeffn, где n - номер коэффициента, начинающийся с 1.

  9. Поиск Signals. Этот код определяет сигналы фильтра.

  10. Поиск sumvector1. Эта область кода объявляет сигналы для реализации экземпляра конвейерного конечного сумматора. Также включены объявления сигналов для четырех дополнительных конвейерных конечных сумматоров. Эти сигналы используются для оптимизации стиля конвейерного сумматора FIR, указанного в опции Добавить регистры трубопровода (Add pipeline regists). См. шаг 7 в разделе Настройка и создание оптимизированного кода Verilog.

  11. Поиск process. block имя Delay_Pipeline_process включает значение по умолчанию block постфикс '_process'.

  12. Поиск reset. Этот код подает сигнал сброса. По умолчанию указан активный высокий (1). Также обратите внимание, что process применяет стиль асинхронного сброса по умолчанию при создании кода для регистров.

  13. Поиск posedge. Этот код Verilog проверяет растущие границы, когда фильтр работает с регистрами.

  14. Поиск sumdelay_pipeline_process1. Этот блок реализует стадию регистра конвейера стиля сумматора FIR конвейера, указанного на шаге 7 документа Настройка и генерация оптимизированного кода Verilog.

  15. Поиск output_register. Этот код записывает выходные данные фильтра в выходной регистр. Код для этого регистра создается по умолчанию. На шаге 12 в разделе Настройка и создание оптимизированного кода Verilog вы отменили опцию Add input register (Добавить входной регистр), но оставили флажок Add output register (Добавить выходной регистр). Также обратите внимание, что имя процесса Output_Register_process включает значение по умолчанию process постфикс '_process'.

  16. Поиск data_out. Этот код управляет выходными данными фильтра.

Проверка созданного кода Verilog

В этом разделе объясняется, как проверить оптимизированный созданный код Verilog для фильтра FIR с помощью созданного тестового стенда Verilog. В этом учебном пособии в качестве инструмента для компиляции и моделирования кода Verilog используется симулятор Mentor Graphics ® ModelSim ®. Можно использовать другие пакеты инструментов моделирования HDL .

Чтобы проверить код фильтра, выполните следующие действия.

  1. Запустите симулятор. При запуске симулятора Mentor Graphics ModelSim появляется экран, подобный следующему.

  2. Укажите текущую папку, содержащую созданные файлы Verilog. Например:

    cd hdlsrc
  3. При необходимости создайте библиотеку конструкций для хранения скомпилированных модулей Verilog. В симуляторе Mentor Graphics ModelSim можно создать библиотеку конструкций с помощью vlib команда.

    vlib work
  4. Скомпилировать созданные файлы Verilog фильтра и тестового стенда. В симуляторе Mentor Graphics ModelSim вы компилируете код Verilog с помощью vlog команда. Следующие команды компилируют код Verilog тестового стенда фильтра и фильтра.

    vlog optfir.v
    vlog optfir_tb.v

    На следующем экране отображается последовательность команд и информационные сообщения, отображаемые во время компиляции.

  5. Загрузите стенд для моделирования. Процедура загрузки стенда зависит от используемого тренажера. В симуляторе Mentor Graphics ModelSim загрузите тестовый стенд для моделирования с помощью vsim команда. Например:

    vsim optfir_tb

    На следующем экране показаны результаты загрузки optfir_tb с vsim команда.

  6. Откройте окно отображения для мониторинга моделирования при запуске тестового стенда. В симуляторе Mentor Graphics ModelSim можно использовать следующую команду для открытия окна волны и просмотра результатов моделирования в виде форм сигнала HDL.

    add wave *

    Откроется следующее окно волны:

  7. Чтобы запустить моделирование, выполните команду start simulation для симулятора. Например, в симуляторе Mentor Graphics ModelSim можно запустить моделирование с помощью run команда.

    На следующем дисплее показаны run -all используется для запуска моделирования.

    Во время моделирования тестового стенда следите за сообщениями об ошибках. Если появляются сообщения об ошибках, интерпретируйте их как относящиеся к конструкции фильтра и выбранным опциям генерации кода HDL. Определите, ожидаются ли результаты на основе настроек, заданных при создании кода Verilog фильтра.

    В следующем волновом окне показаны результаты моделирования в виде сигналов HDL.