Используйте системный генератор Xilinx для реализации простого DDS

  1. Запуск системного генератора
  2. Рисунок 1
  3. фигура 2
  4. Создание модели системного генератора для DDS
  5. Рисунок 3
  6. Блок AddSub
  7. Рисунок 4
  8. Рисунок 5
  9. Рисунок 6
  10. Регистры
  11. Рисунок 7
  12. квантователь
  13. Рисунок 8
  14. ПЗУ
  15. Рисунок 9
  16. Рисунок 10
  17. Преобразование типов данных между частью Xilinx и Simulink
  18. Рисунок 11
  19. Рисунок 12
  20. Рисунок 13
  21. Блок системного генератора Xilinx
  22. Рисунок 14
  23. Рисунок 15
  24. моделирование
  25. Рисунок 16
  26. Рисунок 17
  27. Добавление дизайна в проект ISE
  28. Заключение

В этой статье мы обсудим реализацию простого прямого цифрового синтезатора (DDS) с использованием Xilinx System Generator.

System Generator - это мощный инструмент, который объединяет процесс проектирования Xilinx FPGA с MATLAB Simulink, который использует описание высокого уровня, чтобы легко реализовать сложную систему. Сначала мы проектируем систему и проверяем ее функциональность в среде Simulink. Графическое высокоуровневое описание Simulink значительно облегчает моделирование, моделирование и анализ дизайна. Затем мы можем сгенерировать VHDL-описание проекта и добавить его в наш проект в программном обеспечении Xilinx ISE.

В этой статье мы обсудим реализацию простого прямого цифрового синтезатора (DDS) с использованием Xilinx System Generator.

Запуск системного генератора

Перед запуском System Generator, вы должны отметить два момента:

  1. Убедитесь, что ваш Версия System Generator совместима с версией MATLAB что вы собираетесь использовать.
  2. Свяжите программное обеспечение MATLAB с вашим системным генератором ,

В этой статье я буду использовать ISE 14.7 с MATLAB 2013a. рекомендуемый способ запуска системного генератора выберите «Средства разработки Xilinx \ ISE Design Suite 14.7 \ System Generator \ Sysgen Generator» в меню «Все программы» Windows. Откроется «Браузер библиотеки Simulink», который показан на рисунке 1.

Откроется «Браузер библиотеки Simulink», который показан на рисунке 1

Рисунок 1

Как показано на рисунке, следующие три категории Xilinx добавлены в список библиотек:

  1. Xilinx Blockset
  2. Xilinx Reference Blockset
  3. Xilinx XtremeDSP Kit

В этой статье мы будем использовать блоки, представленные в «наборе блоков Xilinx», для реализации простого DDS, как показано на рисунке 2.

В этой статье мы будем использовать блоки, представленные в «наборе блоков Xilinx», для реализации простого DDS, как показано на рисунке 2

фигура 2

Создание модели системного генератора для DDS

Чтобы создать новую модель Simulink, выберите File \ New \ Model. Это откроет следующее пустое окно, которое позволяет нам описать блок-схему рисунка 2.

Это откроет следующее пустое окно, которое позволяет нам описать блок-схему рисунка 2

Рисунок 3

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

Блок AddSub

Первый блок, который нам нужен, это сумматор. Мы можем использовать блок «AddSub», который можно найти в категории «Xilinx Blockset \ math». На рисунке 4 ниже показаны символ и вкладка «Основные» настраиваемых параметров для этого блока.

На рисунке 4 ниже показаны символ и вкладка «Основные» настраиваемых параметров для этого блока

Рисунок 4

Блок имеет два входа (a и b) и один выход, который дает a + b. Мы оставим параметры вкладки «Основные» такими, как они есть. Настройки вкладки «Вывод» показаны на рисунке 5. На этой вкладке устанавливаются параметры вывода. Чтобы получить 16-разрядный аккумулятор, мы выбираем опцию «Определено пользователем», которая позволяет нам установить «Количество битов» на 16, а «Бинарную точку» на ноль. Это означает, что на выходе получается 16-разрядное целое число. Для DDS на рисунке 2 нам не нужно определять дробный выход, но, если мы установили «Количество битов» на 16 и «Двоичную точку» на 14, 14 бит из общего числа 16 битов вывод будет считаться справа от двоичной точки. Чтобы узнать больше о представлении с фиксированной точкой в ​​целом, обратитесь к Эта статья ,

Рисунок 5

«Арифметический тип» и «Переполнение» - два других параметра, которые важны для нас. «Арифметический тип» должен быть без знака, потому что выходной сигнал аккумулятора интерпретируется как число без знака. «Переполнение» должно быть установлено на «Обтекание», поскольку аккумулятор должен перевернуться при достижении своего максимума.

На рисунке 6 показана вкладка «Реализация» блока. На этой странице вы можете реализовать сумматор, используя либо Fabric, либо Кусочки DSP48 , Для обсуждения разницы между двумя вариантами, обратитесь к упомянутая статья , Мы оставим это как есть по умолчанию, т.е. реализуем с использованием Fabric.

реализуем с использованием Fabric

Рисунок 6

Регистры

Далее добавим набор регистров на выходе сумматора. Реестры могут быть реализованы с использованием блока «Задержка», который находится в категории «Набор блоков Xilinx \ Основные элементы». Мы сохраним все настройки этого блока как есть.

Подключив блок «AddSub» к блоку «Delay», мы получим схему, показанную на рисунке 7.

Рисунок 7

квантователь

Теперь нам нужно добавить «Квантизатор» на рисунке 2, который передает p старших значащих битов (MSB) аккумулятора в таблицу поиска (LUT) и отбрасывает другие биты. Эта функциональность может быть достигнута с помощью блока «Срез», который находится в категории «Блок-набор Xilinx \ Основные элементы». Символ и диалоговое окно настраиваемых параметров для «Среза» показано на рисунке 8.

Символ и диалоговое окно настраиваемых параметров для «Среза» показано на рисунке 8

Рисунок 8

Параметр «Ширина среза (количество битов)» определяет количество битов, извлекаемых из входных данных. Предполагая, что восемь MSB выходного сигнала аккумулятора должны быть переданы в LUT, мы знаем, что ширина выходного сигнала равна восьми, поэтому мы устанавливаем «Width of slice» равным восьми, как показано на рисунке.

Нам также нужно указать, какие битовые позиции входа используются для формирования восьмибитного выхода блока «Срез». Это можно сделать с помощью параметра «Указать диапазон как». Есть три варианта для этого параметра. Мы выбираем «Верхнее положение бита + ширина». Мы должны указать местоположение старшего бита от входа, который будет передаваться в MSB выхода «Slice». Так как мы хотим, чтобы восемь MSB входных данных, старший бит будет MSB входного. Следовательно, мы устанавливаем «Смещение верхнего бита» в ноль и «Относительно» в «MSB входа». Это означает, что верхний желаемый бит имеет нулевое смещение относительно MSB входа. Ширина среза уже указана в параметре «Ширина среза». Следовательно, желаемый диапазон ввода полностью указан. Для получения дополнительной информации об этом блоке, обратитесь к странице 327 этот документ Xilinx ,

ПЗУ

Мы добавим «ROM» из категории «Xilinx Blockset \ memory». Символ и диалоговое окно настраиваемых параметров для «ПЗУ» показано на рисунке 9. Поскольку адрес ввода ПЗУ имеет ширину p = 8 бит, мы должны установить для «Глубины» ПЗУ значение $$ 2 ^ 8 = 256. $$. Как показано на рисунке, мы можем легко написать математическое выражение для указания содержимого ПЗУ. Математическое выражение на рисунке 9 генерирует 256 выборок из одного периода синусоиды. Эти образцы будут взяты на основе точности данных, которая будет указана на вкладке «Вывод». Вы также можете выбрать тип памяти, который может быть реализован как «Распределенная память» или «Блок RAM» , Мы будем использовать Block RAM для реализации необходимой памяти.

Формат данных сохраненных значений можно выбрать на вкладке «Вывод». Мы будем использовать параметры по умолчанию, как показано на рисунке 10. Обратите внимание, что «Арифметический тип» имеет «подпись ( Комп 2 ) », Потому что наши образцы включают отрицательные значения. Из всех 16 битов вывода целочисленной части выделяются только два бита, потому что максимум и минимум выборок равны +1 и -1, соответственно. Остальные биты используются для представления дробного значения выборок.

Рисунок 9

Рисунок 10

Преобразование типов данных между частью Xilinx и Simulink

Соединяя обсуждаемые блоки согласно рисунку 2, получаем схему, показанную на рисунке 11.

Рисунок 11

Модель почти завершена, но нам нужны другие блоки для моделирования системы. В отличие от набора блоков Xilinx, который использует числа с фиксированной запятой для представления различных значений; среда Simulink имеет свой собственный тип данных. Например, Simulink может использовать «двойной» тип данных, который представляет собой 64-битное число с дополнением до двух. Вот почему нам нужны некоторые блоки для выполнения преобразования типов данных при передаче данных из Simulink в часть Xilinx на рисунке 11 или при передаче вывода из рисунка 11 в среду Simulink. Это может быть достигнуто с помощью блоков «Gateway In» и «Gateway Out», как показано на рисунке 12.

Рисунок 12

Мы рассмотрим параметры блоков «Gateway In» и «Gateway Out» через минуту, но перед этим вы должны заметить, что два других блока, «Step» на входе и «Scope» на выходе, добавлен в модель. Как видите, после добавления блоков «Gateway In» и «Gateway Out» мы можем применить входные данные к нашей модели, используя общий Simulink. «Исходные» блоки , Или мы можем контролировать выходы системы с помощью общего Simulink «Раковина» блоков , На рисунке 12 мы применили «Шаг» к входу приращения фазы DDS. Кроме того, вывод ПЗУ контролируется с помощью блока Simulink «Scope».

В дополнение к преобразованию типов данных блоки «Gateway In» и «Gateway Out» определяют порты верхнего уровня конструкции HDL, которые впоследствии будут получены из модели Simulink. Например, поместив блок «Gateway In» перед входом «a» сумматора, мы дадим системному генератору понять, что вход «a» на самом деле является входом проекта верхнего уровня. Аналогично, «Gateway Out» определяет выходы верхнего уровня конструкции HDL.

Диалоговое окно настраиваемых параметров для блока «Gateway In» показано на рисунке 13.

Рисунок 13

Мы должны установить «Арифметический тип» на «Беззнаковый» и выбрать «Количество битов» равное 16 без дробных битов, то есть «Двоичная точка» = 0. Следовательно, любой вход из среды Simulink будет представлен как 16-битное число без знака с фиксированной точкой в ​​части проекта Xilinx. Обратите внимание, что указанный здесь формат соответствует формату данных блока Add / Sub. Мы оставим остальные параметры блока такими, какие они есть по умолчанию.

Блок «Gateway Out» автоматически определяет формат с фиксированной точкой своей стадии вождения. Вот почему здесь мы можем использовать настройки блока по умолчанию.

Блок системного генератора Xilinx

Любая модель Simulink, в которой используются блоки Xilinx, должна содержать блок «System Generator». Этот блок позволяет нам контролировать систему и параметры симуляции. Он также обрабатывает генерацию кода HDL. Символ и диалоговое окно для блока «System Generator» показаны на рисунке 14.

Символ и диалоговое окно для блока «System Generator» показаны на рисунке 14

Рисунок 14

Системный генератор компилирует проект в представления низкого уровня. Мы можем выбрать тип низкоуровневого представления из параметра «Компиляция» диалогового окна. В этой статье мы выберем «HDL Netlist», как показано на рисунке. Это создает коллекцию HDL и некоторые вспомогательные файлы, которые могут быть обработаны инструментом синтеза. Как вы можете видеть на рисунке, мы выбрали «XST» и «VHDL» в качестве инструмента синтеза и HDL соответственно.

Вы также должны выбрать целевое устройство в параметре «Part» диалогового окна и предоставить программному обеспечению папку назначения для хранения сгенерированных файлов. На рисунке 15 ниже показана вкладка «Синхронизация» диалогового окна.


На рисунке 15 ниже показана вкладка «Синхронизация» диалогового окна

Рисунок 15

Первый параметр «тактовый период ПЛИС (нс)» определяет период желаемого тактового сигнала для проекта. Этот параметр может быть передан инструменту синтеза на следующих этапах проектирования. Это может помочь программному обеспечению синтеза выбрать подходящую реализацию, основанную на требованиях к тактовой частоте проекта. На приведенном выше рисунке «период синхронизации ПЛИС» установлен на 10 наносекунд. Это означает, что мы ожидаем, что дизайн будет работать с периодом 10 нс на плате. Simulink может использовать нормализованную форму этого такта в своих симуляциях , Эта нормализация задается параметром «системный период (сек) Simulink» на рисунке 15. При установке этого параметра на 1 каждые 10 нс аппаратной реализации будут представлены 1 секундой в среде Simulink.

моделирование

Чтобы смоделировать дизайн, мы устанавливаем вход «Шаг», чтобы перейти от 264 до 528 в «Шаг времени» 500. Вы можете использовать другие произвольные параметры для этого блока. Наконец, мы готовы смоделировать нашу модель DDS, которая показана на рисунке 16.

Наконец, мы готовы смоделировать нашу модель DDS, которая показана на рисунке 16

Рисунок 16

Нажав кнопку «Выполнить» в Simulink, мы получим следующую кривую на «Scope».

Рисунок 17

Поскольку при «Шаге времени» = 500 вход изменяется с 264 до 528, выходная частота увеличивается в два раза.

Добавление дизайна в проект ISE

После установки всех параметров проекта мы можем сгенерировать VHDL-описание модели, нажав кнопку «Создать» на рисунке 14. Это создаст файл «.sgp», который можно добавить в проект ISE.

Выбрав «Добавить источник» из проекта ISE, мы можем включить файл .sgp в наш дизайн верхнего уровня. Теперь добавленный файл можно использовать так же, как мы используем ядро ​​IP. Нажав на добавленный файл и выбрав «Просмотр шаблона создания HDL», мы можем найти шаблон для использования компонента.

Чтобы прочитать об использовании IP-ядер и компонентов VHDL, обратитесь к Используйте ядро ​​Xilinx CORDIC для простой генерации функций синуса и косинуса а также Как использовать компоненты VHDL для создания аккуратного иерархического дизайна соответственно.

Заключение

В этой статье мы использовали «Системный генератор» для реализации простого DDS. Графические возможности высокого уровня Simulink позволяют нам легко моделировать сложную цифровую систему. После проверки функциональности проекта в среде Simulink, мы можем сгенерировать VHDL-описание проекта и добавить его в наш проект с помощью программного обеспечения Xilinx ISE.


Чтобы увидеть полный список моих статей, пожалуйста, посетите эта страница ,