Оптимизированный КИХ-фильтр

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

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

Проект КИХ просачивается Filter Designer

Этот пример проводит вас по шагам для разработки оптимизированного квантованного КИХ-фильтра дискретного времени, генерации кода Verilog для фильтра и проверки кода Verilog со сгенерированным испытательным стендом.

Этот раздел принимает, что вы знакомы с интерфейсом пользователя MATLAB и Filter Designer.

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

  2. Установите свою текущую папку на папку, в которой вы создали, Создают Папку для Ваших Учебных Файлов.

  3. Запустите Filter Designer путем ввода команды filterDesigner в Окно Команды MATLAB. Диалоговое окно The Filter Design & Analysis Tool появляется.

  4. В диалоговом окне Filter Design & Analysis Tool, набор следующие опции фильтра:

    ОпцияЗначение
    Response TypeLowpass
    Design MethodFIR Equiripple
    Filter OrderMinimum order
    OptionsDensity Factor: 20
    Frequency Specifications

    Модули: Hz

    Fs: 48000

    Fpass: 9600

    Fstop: 12000

    Magnitude Specifications

    Модули: dB

    Apass: 1

    Astop: 80

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

  5. Нажмите Design Filter. Filter Designer создает фильтр для заданного проекта. Следующее сообщение появляется в строке состояния Filter Designer, когда задача завершена.

    Designing Filter... Done
    

    Для получения дополнительной информации о разработке фильтров с Filter Designer см. документацию DSP System Toolbox™.

Квантуйте КИХ-фильтр

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

  1. Откройтесь КИХ-фильтр разрабатывают вас созданный в Проекте, КИХ Просачивается Filter Designer, если это не уже открыто.

  2. Нажмите кнопку Set Quantization Parameters на панели инструментов левой стороны. Filter Designer отображает меню Filter arithmetic в нижней половине его диалогового окна.

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

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

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

    ВкладкаПараметрУстановка
    CoefficientsNumerator word length16
     Best-precision fraction lengthsSelected
     Use unsigned representationCleared
     Scale the numerator coefficients to fully utilize the entire dynamic rangeCleared
    Input/OutputInput word length16
     Input fraction length15
     Output word length16
    Filter InternalsRounding modeFloor
     Overflow modeSaturate
     Accum. word length40
  5. Нажмите Apply.

Для получения дополнительной информации о квантовании фильтров с Filter Designer см. документацию DSP System Toolbox.

Сконфигурируйте и сгенерируйте оптимизированный код Verilog

После того, как вы квантуете свой фильтр, вы готовы сконфигурировать опции кодера и сгенерировать код Verilog для фильтра. Этот раздел проводит вас по запуску пользовательского интерфейса, установке опций, и генерация кода Verilog и испытательного стенда для КИХ фильтрует вас разработанный и квантованный в Проекте, КИХ Просачивается Filter Designer и Квантует КИХ-Фильтр.

  1. Запустите пользовательский интерфейс Filter Design HDL Coder™ путем выбора Targets> Generate HDL в диалоговом окне Filter Designer. Filter Designer отображает диалоговое окно Generate HDL.

  2. Выберите Verilog для опции Language, как показано в следующей фигуре.

  3. В текстовом поле Name панели Target замените имя по умолчанию на optfir. Эта опция называет модуль Verilog и файл, который содержит код Verilog для фильтра.

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

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

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

  7. Диалоговое окно Generate HDL теперь появляется как показано.

  8. Выберите вкладку Global settings пользовательского интерфейса. Затем выберите вкладку General раздела Additional settings.

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

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

  10. Поменяйте имена портов ввода и вывода. В текстовом поле Input port замените filter_in на data_in. В текстовом поле Output port замените filter_out на data_out.

  11. Снимите флажок для опции Add input register. Панель Ports теперь смотрит как показано.

  12. Кликните по вкладке Test Bench в диалоговом окне Generate HDL. В текстовом поле File name замените имя по умолчанию на optfir_tb. Эта опция называет сгенерированный файл испытательного стенда.

  13. В панели Испытательного стенда кликните по вкладке Configuration . Заметьте, что опция Error margin (bits) включена. Эта опция включена, потому что ранее выбранные опции оптимизации (такие как Add pipeline registers) могут потенциально привести к числовым результатам, которые отличаются от результатов, приведенных исходным объектом фильтра. Можно использовать эту опцию, чтобы настроить количество младших значащих битов, которые испытательный стенд игнорирует во время сравнений прежде, чем сгенерировать предупреждение.

  14. В диалоговом окне Generate HDL нажмите Generate, чтобы запустить процесс генерации кода. Когда генерация кода завершится, нажмите Close, чтобы закрыть диалоговое окно.

    Кодер отображает следующие сообщения в Окне Команды MATLAB, когда оно генерирует фильтр и испытательный стенд файлы Verilog:

    ### 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
      Вход Clockclk
      Часы включают входclk_enable
      Вход Resetreset
    • Выводится дополнительный регистр для обработки фильтра.

    • Коэффициенты под названием coeffn, где n является содействующим номером, начиная с 1.

    • Безопасное с точки зрения типов представление используется, когда нули конкатенированы: '0' & '0'...

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

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

    • Портативный файл Verilog.

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

    • Силы часы включают входной сигнал к активному высоко.

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

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

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

    • Применяет допуск на погрешность 4 битов.

    • Для КИХ-фильтра, применяет импульс, шаг, пандус, щебет и белые шумовые типы стимула.

Исследуйте оптимизированный сгенерированный код Verilog

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

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

  2. Ищите optfir. Эта строка идентифицирует модуль Verilog, с помощью значения, которое вы задали для опции Name в панели Target. Смотрите, что шаг 3 в Конфигурирует и Генерирует Оптимизированный Код Verilog.

  3. Ищите Tutorial. Этот раздел кода - то, куда кодер помещает текст, вы ввели для опции Comment in header. Смотрите, что шаг 9 в Конфигурирует и Генерирует Оптимизированный Код Verilog.

  4. Ищите HDL Code. Этот раздел перечисляет опции кодера, в которых вы изменили, Конфигурируют и Генерируют Оптимизированный Код Verilog.

  5. Ищите Filter Settings. Этот раздел кода VHDL описывает проект фильтра и настройки квантования, когда вы задали в Проекте, КИХ Просачивается Filter Designer и Квантует КИХ-Фильтр.

  6. Ищите module. Эта строка называет модуль Verilog, с помощью значения, которое вы задали для опции Name в панели Target. Эта строка также объявляет список портов, как задано опциями на панели Ports диалогового окна Generate HDL. Порты для ввода данных и вывода называют со значениями, которые вы задали для Input port и опций Output port на вкладке Ports диалогового окна Generate HDL. Смотрите, что шаги 3 и 11 в Конфигурируют и Генерируют Оптимизированный Код Verilog.

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

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

  9. Ищите Signals. Этот код задает сигналы фильтра.

  10. Ищите sumvector1. Эта область кода объявляет сигналы для реализации экземпляра конвейерного итогового сумматора. Объявления сигнала для четырех дополнительных конвейерных итоговых сумматоров также включены. Эти сигналы используются, чтобы реализовать конвейерную КИХ-оптимизацию стиля сумматора, заданную с опцией Add pipeline registers. Смотрите, что шаг 7 в Конфигурирует и Генерирует Оптимизированный Код Verilog.

  11. Ищите process. Имя block Delay_Pipeline_process включает block по умолчанию, снабжает постфиксом '_process'.

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

  13. Ищите posedge. Этот код Verilog проверяет на возрастающие ребра, когда фильтр работает с регистрами.

  14. Ищите sumdelay_pipeline_process1. Этот блок реализует конвейерный этап регистра конвейерного КИХ-стиля сумматора, из которого вы задали на шаге 7, Конфигурируют и Генерируют Оптимизированный Код Verilog.

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

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

Проверьте сгенерированный код Verilog

Этот раздел объясняет, как проверить оптимизированный сгенерированный код Verilog для КИХ-фильтра со сгенерированным испытательным стендом Verilog. Этот пример использует средство моделирования Mentor Graphics® ModelSim® в качестве инструмента для компиляции и симуляции кода Verilog. Можно использовать другие пакеты инструмента симуляции 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, может использовать следующую команду, чтобы открыть окно wave и просмотреть результаты симуляции как формы волны HDL.

    add wave *

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

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

    Следующее отображение показывает команду run -all, используемую, чтобы запустить симуляцию.

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

    Следующее окно wave показывает результаты симуляции формами волны HDL.