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

Создайте папку для ваших обучающих файлов

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

Проектирование конечной импульсной характеристики в Filter Designer

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

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

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

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

  3. Запустите Filter Designer путем ввода filterDesigner команда в Командном Окне MATLAB. Откроется диалоговое окно Создания фильтра & Analysis Tool.

  4. В диалоговом окне Создание фильтра & Анализ Инструмента установите следующие опции фильтра:

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

    Units: Hz

    Fs: 48000

    Fpass: 9600

    Fstop: 12000

    Magnitude Specifications

    Units: 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. Откройте конечную импульсную характеристику, создание фильтра вы создали в Design фильтр конечной импульсной характеристики в Filter Designer, если он еще не открыт.

  2. Нажмите кнопку «Задать параметры квантования» на левой панели инструментов. 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 in Filter Designer и Quantize the конечной импульсной характеристики Filter.

  1. Запустите Filter Design HDL Coder™ пользовательский интерфейс, выбрав Targets > Generate HDL в диалоговом окне Filter Designer. В Filter Designer появится диалоговое окно «Генерация 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. Теперь отобразится диалоговое окно Генерация HDL (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 в диалоговом окне Генерация HDL. В File name текстовом поле замените имя по умолчанию на optfir_tb. Эта опция называет сгенерированный испытательный стенд.

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

  14. В диалоговом окне «Генерация 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 метода.

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

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

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

    • Коэффициенты с именем coeff n, где n - число коэффициентов, начиная с 1.

    • Представление type-safe используется, когда нули объединены: '0' & '0'...

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

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

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

    • Заставляет синхроимпульсы, активировать синхроимпульсы и сбрасывать входные сигналы.

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

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

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

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

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

    • Для конечная импульсная характеристика применяются типы импульса, шага, пандуса, щебета и белого шума.

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

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

  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 диалогового окна Генерация HDL. Порты для входа и выхода данных называются значениями, заданными для опций Input port и Output port на вкладке Ports диалогового окна Генерация HDL. См. шаги 3 и 11 в разделе Настройка и генерация оптимизированного кода Verilog.

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

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

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

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

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

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

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

  14. Поиск sumdelay_pipeline_process1. Этот блок реализует стадию регистра трубопровода стиля конечной импульсной характеристики сумматора, указанный вами на шаге 7 в Configure and Generate Optimized Verilog Кода.

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

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

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

В этом разделе описывается, как проверить оптимизированный сгенерированный код 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. Чтобы начать запускать симуляцию, выполните команду start simulation для своего симулятора. Например, в симуляторе Mentor Graphics ModelSim можно начать симуляцию с run команда.

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

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

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