Методическое указание к лабораторной работе на учебном стенде LESO7 .
Шауэрман Александр А . shamrel@yandex.ru
Цель работы
Краткие сведения о системе автоматизированного проектирования цифровых устройств – Quartus Prime
Введение в Verilog
Обзор периферии учебного стенда
Применение модуля ФАПЧ
Ход работы
Вопросы для самопроверки
1 Цель работы
Научиться работать со средой проектирования Quartus Prime, создавать и настраивать проект, загружать файл конфигурации в учебный стенд. Познакомится с аналого-цифровым преобразователем (АЦП) и с цифро-аналоговым преобразователем (ЦАП). Исследовать особенности дискретизации и квантования сигнала.
2 Краткие сведения о системе автоматизированного проектирования цифровых устройств – Quartus Prime
2.1 Создание проекта
Каждая логическая схема или подсхема, разработанная с помощью программного обеспечения Quartus Prime, называется проектом. Программное обеспечение работает только над одним проектом одновременно, вся информация для этого проекта сохраняется в одном каталоге (папке). Перед началом работы следует создать специальную директорию. Точное расположение проекта лабораторной работы следует уточнить у преподавателя. Для примера создадим папку d:\leso7\leso7_lab1\.
Запускаем программное обеспечение Quartus Prime. Вид запущенной программы показан на рисунке 1. Главное окно программы разбито на несколько окон, которые обеспечивают доступ ко всем функциям САПР.
Рисунок 1 – Главный вид Quartus Prime
Доступ к большинству команд, предоставляемых программным обеспечением Quartus Prime, можно получить с помощью набора меню, расположенных под строкой заголовка. Для примера на рисунке 2 показанное активированное меню File.
Рисунок 2 – Меню File
Для создания проекта в Quartus Prime используется специальная интегрированная утилита – Мастер Создания Проекта (New Project Wizard ). Запускаем Quartus Prime. В меню выбираем: File -> New Project Wizard. Навигация по вкладкам Мастера выполняется с помощью кнопок Next – переход на следующую вкладку и Back – Возврат на предыдущую.
На вкладке «Directory, Name, Top-Level Entity» выбираем заранее созданную директорию для проекта. В строке «What is the name of this Project?» пишем имя проекта, например, leso7_lab1. В третьей строке автоматически появится имя модуля верхнего уровня. Это имя можно при необходимости далее изменить в настройках проекта, или оставить по умолчанию. В последнем случае, для того, чтобы Quartus автоматически нашел «сущность» верхнего уровня, следует файл с основным модулем назвать так же, как и сам проект (рисунок 3).
Рисунок 3 – Мастер проекта. Directory, Name, Top-Level Entity
На следующей вкладке «Project type» следует выбрать пункт «Empty project» (пустой проект) и нажать «Next».
На вкладке «Add Files» будет предложено добавить существующие файлы (если таковые имеются) в проект. Предполагается что на данном этапе у нас нет существующих файлов, поэтому можно пропустить этот пункт и добавить файлы, когда проект будет уже создан. Переходим на следующую вкладку нажимая «Next».
На вкладке «Family & Device Settings [page 3 of 5]» мы должны выбрать микросхему ПЛИС, с которой мы собираемся работать. В лабораторном стенде LESO7 используется Cyclone IV E EP4CE6E22C8N (рисунок 4).
Рисунок 4 – Мастер проекта. Выбор микросхемы ПЛИС
На вкладке «EDA Tool Settings» предлагается выбрать внешние инструменты для работы с проектом. Пока нам достаточно встроенных в Quartus Prime. Пропускаем этот пункт.
На последней вкладке приводятся сводные параметры создаваемого проекта. Читаем, проверяем, и, если со всем согласны, то завершаем создание: жмем Finish. Теперь можно через любой файловый браузер зайти в рабочую директорию и убедиться, что Quartus создал рабочие файлы.
На рисунке 5 показано окно Quartus Prime с только что созданным проектом.
Рисунок 5 – Окно Quartus Prime с созданным проектом
Для описания устройства на языке Verilog используется текстовый редактор Quartus Prime. Для того чтобы создать файл verilog в меню «File» следует выбрать пункт «New». В открывшемся окне нужно выбрать тип создаваемого файла «Verilog HDL File» (рисунок 6). После нажатия на кнопку «ОК» запустится окно текстового редактора. Следующий шаг – задать имя файлу, который должен быть создан (меню File, пункт – Save As...). Задаем имя файла, совпадающее с именем проекта, в текущем примере это «leso7_lab1». Следует проследить, что установлена галочка в строке «Add file to current project».
Рисунок 6 – Выбор типа создаваемого файла
На этапе первоначальной настройки проекта целесообразно установить формат генерируемых фалов. В результате компиляции проекта формируется файл конфигурации ПЛИС с расширением *.sof . Однако для конфигурирования ПЛИС через порт USB персонального компьютера требуется файл с расширением *.rbf . Нужно настроить проект таким образом, чтобы файл *.rbf формировался автоматически в процессе компиляции. Для этого в меню «Assignments» выбираем пункт «Device…» Нажимаем кнопку «Devise & Pin Options». Далее в разделе «Programming file» необходимо установить галочку «Raw Binary File (*.rbf)». После активации опции потребуется перекомпиляция проекта.
На этом этапе считаем рабочий проект созданным.
2.2 Тестовый редактор Quartus Prime
На рисунке 7 показано окно текстового редактора Quartus Prime. Под строкой заголовка располагается набор меню. Ниже меню расположена панель инструментов. По усмотрению пользователя панель может быть перенесена на левую, правую или нижнюю границу окна.
Рисунок 7 – Текстовый редактор Quartus Prime
На рисунке 8 показана панель инструментов текстового редактора с кратким описанием назначения кнопок. Для важных инструментов в скобочка приведено значение комбинации «горячих» клавиш.
Рисунок 8 – Панель инструментов текстового редактора
При работе в редакторе рекомендуется активировать функцию автозаполнения. Для этого в меню Edit следует выбрать пункт «Autocomplete Text» Это позволит текстовому редактору прогнозировать синтаксическое слово, разделитель или ключевое слово, которое требуется ввести при наборе текста. По мере ввода в раскрывающемся списке появляется набор возможных слов. Выбор нужного слова осуществляется клавишами со стрелочками на клавиатуре, завершается выбор клавишей Enter.
2.9 Компиляция проекта
Для компиляции выбираем в меню Processing -> Start Compilation. Или нажимаем CTRL+L, или нажимаем соответствующий значок (сиреневый треугольник) на панели инструментов. Проект должен компилироваться без ошибок. В консоли (внизу окна Quartus II) появится ряд предупреждений. Пока не будем обращать на это внимание.
Во время первой компиляции, компилятор Quartus II был свободен в выборе контактов ПЛИС для входов и выходов. Однако, на плате учебного стенда имеется аппаратная связь между компонентами платы и ножками микросхемы ПЛИС. Определить какой вывод ПЛИС подключен к какому компоненту можно по принципиальной схеме.
Привязка портов ввода-вывода выполняется во встроенной утилите Pin Planer . Запуск утилиты производится из меню Assignments, либо нажатием комбинаций клавиш CTRL+SHIFT+N , либо соответствующей пиктограммой на панели инструментов. В столбце Node Name приведен список всех портов проекта. В столбце Location следует задать каждому узлу определенную ножку ПЛИС. Это можно сделать с помощью мышки (двойной щелчок), выбрав из списка, но удобнее ввести с клавиатуры: начинаем вводить требуемый номер, редактор сам добавляет префикс «pin_» и варианты заполнения. На рисунке 9 показано окно Pin Planner с уже назначенными выводами.
Рисунок 9 – Pin Planer
2.4 Загрузка файла конфигурации в ПЛИС
Загрузка файла *.rbf в ПЛИС производится с помощью отдельной программы – загрузчика (LabForProg). После запуска этой программы появляется окно, изображенное на рисунке 10
Рисунок 10 – Окно загрузчика LabForProg
Следует выбрать устройство «LESO7 B» и указать путь к файлу конфигурации. После нажатия кнопки «Программировать» в случае успешной загрузки индикатор окрасится в зеленый цвет, а ПЛИС начнет функционировать в соответствии с блок-схемой
3 Введение в Verilog
3.1 Verilog HDL
Verilog, Verilog HDL (от англ. Verilog Hardware Description Language) – это язык описания аппаратуры, используемый для описания и моделирования электронных систем.
3.2 Переменные
Все переменные в Verilog представляют собой некоторые синтезируемые аппаратные сущности. Пока нам достаточно знать две такие сущности – это wire (линия, провод, сигнал) и reg (регистр). Регистр, в отличие от линии, способен хранить значение и, как правило, далеко не всегда синтезируется компилятором как набор триггеров.
Декларация (объявление) переменных:
wire < имя линии>; // объявление одноразрядной линии
wire [ < СЗР>:< МЗР> ] < имя линии>; // объявление многоразрядной линии (шины)
reg < имя регистра>; // объявление одноразрядного регистра
reg [ < СЗР>:< МЗР> ] < имя регистра>; // объявление многоразрядного регистра (Вектора)
3.3 Комментарии
В Verilog поддерживаются два типа комментариев. Они аналогичны принятым в С++. Для комментария одной строки используются две косые черты в ее начале
Чтобы закомментировать несколько строк, используются следующая конструкция:
/* Это
многострочный
комментарий...
*/
3.4 Целые числа
Целые числа могут быть двоичными (binary), обозначаются b или B , десятичными (decimal, d или D ), шестнадцатеричными (hexidecimal, h, H ) или восьмеричными (octal, o или O ). Для определения чисел используются следующие форматы:
<<<разрядность>'<основание><число> – полное описание числа,
<<<основание><число> – используется разрядность по умолчанию,
<<<число> – интерпретируется как число с десятичным основанием.
Примеры:
´hff // 00ff в шестнадцатеричном формате, по умолчанию 16 бит
16 ´h ff // То же самое, но разрядность указана явно
1 ´b 1 // Логическая единица
1 ´b1 // Пробел после "B" может и не стоять
1 ´b 0 // Логический ноль
0 // Так тоже можно указать ноль
6'h0 // Тоже ноль, но в шести разрядах
8 'b 00101010 // Бинарная запись числа, 8 бит
8 'b 0010_1010// Для удобства восприятия число можно вводить с "_"
7 'd 123 // 123 в десятичном виде, указано, что занимает 7 бит
123 // По умолчанию, число интерпретируется как десятеричное
3.5 Операторы
Операторы выполняют операцию над одним или несколькими операндами в выражении.
Операторы
* // Умножение
/ // Деление
% // Взятие модуля
+ // Плюс. Сложение
- // Минус. Вычитание
<< // Логический сдвиг влево
>> // Логический сдвиг вправо
<<< // Арифметический сдвиг влево
>>> // Арифметический сдвиг вправо
< // Меньше
<= // Меньше или равно
> // Больше
>= // Больше или равно
== // Логическое равенство
!= // Логическое не равенство
& // AND. Побитная «И»
~& // NAND. Побитная «И-НЕ»
^ // XOR. Побитная «Исключающее ИЛИ»
^~ // XOR. Побитная «Исключающее ИЛИ-НЕ»
~^ // XOR. Побитная «Исключающее ИЛИ-НЕ»
| // OR. Побитная «ИЛИ»
~| // OR. Побитная «ИЛИ-НЕ»
&& // AND. Логическая «И»
|| // Логическая «ИЛИ»
3.6 Модули
Встраиваемое (загружаемое) программное обеспечение ПЛИС (в профессиональной среде называют «прошивка») состоит из модулей, объединенных в файл верхнего уровня.
Модули Verilog, как и функции на других языках программирования, представляют собой фрагменты кода, которые можно использовать и повторно использовать в рамках одной программы. Модули Verilog определяются с помощью ключевого слова module
и заканчиваются ключевым словом endmodule
.
Для определения модуля в Verilog может быть использован различный синтаксис. В лабораторных работа цикла следует придерживаться рекомендуемого стиля Altera (Intel) и приведенного в Template Quartus.
Пример:
module < Имя модуля>
(
// входные порты:
input < имя порта>, // одноразрядная линия
input [ < СЗР>:< МЗР> ] < имя порта>, // многоразрядная шина
// СЗР -- старший значащий разряд
// МЗР -- младший значащий разряд
...
// выходные порты:
output < имя порта>, // одноразрядная линия
output [ < СЗР>:< МЗР> ] < имя порта>, // шина
output reg < имя порта>, // одноразрядный регистр
output reg [ < СЗР>:< МЗР> ] < имя порта>, // многоразрядный регистр
...
) ;
// тело модуля
endmodule
3.7 Непрерывное назначение (присваивание)
Левая сторона непрерывного присваивания должна быть сеть или конкатенация (объединение) сетей, правая — выражение, использующее любые другие сигналы.
Синтаксис:
assign < net_lvalue> = < value>;
3.8 Конкатенации (Объединение)
Оператор конкатенации Verilog – это открытые и закрытые скобки {,}
, в которых через запятую перечислены объединенные сигналы. Конкатенацию можно использовать для того, чтобы объединить несколько векторов или сигналов. В Verilog объединяемые сигналы не обязательно должны быть одного типа. Кроме того, ширина объединяемых сигналов может не совпадать с шириной шины приемника объединения. Например, можно объединить два сигнала шириной 4 бита в сигнал шириной 16 бит. Verilog дополнит верхние 8 битов нулями.
Примеры объединения:
wire [ 7 : 0 ] var1; // 8-ми разрядный вектор
wire [ 4 : 0 ] var2; // 5-х разрядный вектор
wire [ 2 : 0 ] var3; // 3-х разрядный вектор
assign var1 = { var2, var1} ; // Объединили вектора var2 и var3, результат
// записали в var1. Вектор var2 помещен в
// старшие 5 бит вектора var1, var3 помещен в
// младшие 3 бита вектора var1.
assign var1 = { var2[ 3 : 0 ] , var1} ; // То же самое, но в объединение
// участвует только 4 младших бита var2.
// Старший бит var1 заполнен нулем.
assign var1 = { var2, 3 'b 010} ; // Объединение var2 с константой.
// Число 010 поместилось
// в младшие три бита var1.
assign var1 = { 3 'b 010, var2} ; // Объединение var2 с константой.
// Число 010 поместилось
// в старшие три бита var1.
3.9 Пример простого модуля
На листинге ниже показан пример простого модуля. Информация с тумблеров выводится на светодиодные индикаторы. Для удобства проектирования каждому порту следует присвоить осмысленное имя, соответствующее элементу принципиальной схемы, с которым соединен выбранный порт. Например, если порт ввода соединен с тумблерами SB1…SB4, в названии порта вводим «sb».
Пример:
module leso7_lab1( // Имя модуля
output [ 3 : 0 ] hl, // Описания светодиодов. 4-х разрядная шина
input [ 3 : 0 ] sb // Описание тумблеров
) ;
assign hl = sb; // На линии светодиодов назначаем линии тумблеров
endmodule
Каждому элементу шины светодиодов можно присвоить значение отдельно, в этом случае присваивание примет вид:
assign hl[ 3 ] = 1 ; // Всегда светит
assign hl[ 2 ] = 0 ; // Всегда не светит
assign hl[ 1 ] = sb[ 1 ] ; // Управляется тумблером
assign hl[ 0 ] = ~ sb[ 0 ] ; // Управляется тумблером с инверсией
4 Обзор периферии учебного стенда
4.1 Тумблеры и светодиоды
Простейшим источником дискретного сигнала является тумблер. Тумблер представляет собой двух позиционный переключатель, один вывод которого подключен к источнику питания (логическая единица), второй – к общему проводу (логический ноль). В зависимости от позиции центральный вывод подключен либо к первому, либо ко второму выводу, формируя на выходе либо ноль, либо единицу.
На рисунке 11 показана схема подключения тумблера к выводу ПЛИС. Светодиод HL1 служит для индикации состояния тумблера. Резистор R2 задает ток светодиода. Резистор R1 служит защитным ограничителем тока в случае, если соответствующий вывод ПЛИС будет по ошибке сконфигурирован как выход.
Рисунок 11 – Схема подключения тумблера к ПЛИС
На стенде установлены 4 тумблера, обозначенные на принципиальной схеме как SB1, SB2, SB3, SB4.
Для индикации логических уровней на стенде установлены четыре светодиода HL1, HL2, HL3, HL4. При подаче логической единицы светодиод светится, при подаче нуля – нет.
4.2 Тактовый генератор
Для синхронизации работы схемы в ПЛИС на плате учебного стенда расположен тактовый генератор. На принципиальной схеме микросхема генератора обозначена как D1. Частота генератора 50 МГц. Выход генератора подается на специальный вход ПЛИС, который в блок-схеме может быть инициализирован как обычный порт ввода.
4.3 Аналого-цифровой преобразователь
Н стенде установлено два аналого-цифровых преобразователя (АЦП) AD9283 фирмы Analog Devices. На принципиальной схеме микросхемы АЦП обозначены как DA9 и DA11. На входе АЦП установлен согласующий усилитель, диапазон входных напряжений от -1 В до 1 В. Для защиты от перенапряжения на входе установлены диоды. Разрядность АЦП 8 бит, максимальная частота дискретизации 50 МГц.
Выход АЦП параллельный. Для данных используется 8 линий (D0-D7), D0 – младший значащий разряд (МЗР), D7 – старший значащий разряд (СЗР). Одна линия (ENCODE
) используется для тактирования микросхемы. Частота тактовых сигналов определяется частоту преобразования. На рисунке 12 показана функциональная схема подключения АЦП к ПЛИС. Стрелочками на линиях обозначено направление сигнала. Линия PWRDWN
(Power-Down) служит для перевода АЦП в режим низкого энергопотребления. Для нормальной работы на этой линии должен быть установлен логический ноль. Для визуального контроля активности АЦП возле каждой микросхемы установлены светодиодные индикаторы HL9, HL10. Свечение светодиодов говорит о том, что АЦП находится в активном режиме.
Рисунок 12 – Функциональная схема подключения АЦП к ПЛИС
Для программной работы с АЦП в модуле верхнего уровня следует объявить соответствующие порты ввода-вывода: шина данных, сигнал управления режимом и сигнал тактирования.
В теле модуля верхнего уровня на линию управления режимом следует подать логический ноль, а на линию тактирования подать тактовые импульсы. Дискретный код выборки будет доступен на линии данных.
Ниже представлен листинг модуля верхнего уровня с задействованным АЦП.
Листинг модуля:
module leso7_lab1(
output [ 3 : 0 ] hl,
input [ 3 : 0 ] sb,
input clk_50MHz, // Вход с тактового генератора
input [ 7 : 0 ] adc_d, // Шина данных АЦП
output adc_encode, // Сигнал ENCODE АЦП
output arc_pwrdwn // Сигнал PWRDWN АЦП
// после объявления последнего порта запятая не ставится
) ;
assign adc_pwrdwn = 0 ; // Переводим АЦП в рабочий режим
assign adc_encode = clk_50MHz; // Подаем тактовые импульсы на АЦП
assign hl = adc_d[ 7 : 4 ] ; // Подаем старшие 4 бита данных на светодиоды
endmodule
4.4 Цифро-аналоговый преобразователь
На стенде установлен двуканальный цифро-аналоговый преобразователь (ЦАП) AD9767 фирмы Analog Devices. На принципиальной схеме микросхема ЦАП обозначена как DA5. Разрядность ЦАП: 14 бит, максимальная частота преобразования: 125 МГц. Функциональная схема подключения ЦАП к ПЛИС показана на рисунке 13. Выходной усилитель обеспечивает размах сигнала от -5 В до 5 В.
Рисунок 13 – Функциональная схема подключения ЦАП к ПЛИС
ЦАП имеет 14 битный входной порт и линии управления CLK и WRT. Линия WRT (от англ. write – писать) тактирует входной регистр данных, а линия CLK тактирует непосредственно блок преобразования. В общем случае тактовые импульсы на обоих линиях управления должны быть идентичны.
Для программной работы с ЦАП в модуле верхнего уровня следует объявить соответствующие порты вывода: шина данных, линии тактирования WRT и CLK.
В теле модуля на линии тактирования следует подать тактовые импульсы, а на линю данных подавать цифровой код выборки. Ниже на листинге приведен пример модуля передающие данные с АЦП на ЦАП.
Листинг модуля:
module leso7_lab1(
output [ 3 : 0 ] hl,
input [ 3 : 0 ] sb,
input clk_50MHz, // Вход с тактового генератора
input [ 7 : 0 ] adc_d, // Шина данных АЦП
output adc_encode, // Сигнал ENCODE АЦП
output arc_pwrdwn, // Сигнал PWRDWN АЦП
output [ 13 : 0 ] dac_d, // Шина данных ЦАП
output dac_wrt, // Сигнал WRT ЦАП
output dac_clk // Сигнал CLK ЦАП
// после объявления последнего порта запятая не ставится
) ;
assign adc_pwrdwn = 0 ; // Переводим АЦП в рабочий режим
assign adc_encode = clk_50MHz; // Подаем тактовые импульсы на АЦП
assign dac_d = { adc_d, 6'h0 } ; // Подаем данные с АЦП на ЦАП
// В младшие 6 бит записываем нули
assign dac_clk = clk_50MHz; // Подаем тактовые импульсы на вход CLK ЦАП
assign dac_wrt = clk_50MHz; // Подаем тактовые импульсы на вход WRT ЦАП
endmodule
4.5 Таблица соответствия выводов ПЛИС
Для удобство использования назначения ножек ПЛИС приведены в Таблица 1.
Таблица 1 – Назначение выводов ПЛИС
Компонент
Вывод компонента
Вывод ПЛИС
Тумблер SB1
143
Тумблер SB2
142
Тумблер SB3
141
Тумблер SB4
138
Светодиод HL1
3
Светодиод HL2
2
Светодиод HL3
1
Светодиод HL4
144
АЦП
DA9 (Вход 1)
DA11 (Вход 2)
D0
126
111
D1
127
112
D2
128
113
D3
129
114
D4
132
115
D5
133
119
D6
135
120
D7
136
121
ENCODE
137
124
PWRDWN
125
110
ЦАП
Выход 1
Выход2
D0
77
53
D1
80
54
D2
83
55
D3
84
58
D4
85
59
D5
86
60
D6
87
65
D7
98
66
D8
99
67
D9
100
68
D10
103
69
D11
104
70
D12
105
71
D13
106
72
WRT
76
73
CLK
75
74
Тактовый генератор D1
23
5 Применение модуля ФАПЧ
Микросхемы ПЛИС семейства Cyclone IV E имеют в своем составе аппаратный модуль фазовой автоподстройки частоты (ФАПЧ, англ. PLL – Phase Locked Loop). Модуль ФАПЧ предназначен для генерации сетки опорных частот для тактирования логических схем в ПЛИС. Модуль ФАПЧ умножает исходную опорную частоту на дробный коэффициент. Для управления модулем ФАПЧ в Quartus Prime предназначена специальное ядро «ALTPLL» (Altera Phase-Locked Loop).
Для того, чтобы в своей работе можно было использовать тактовые частоты отличные от частоты опорного генератора, в проект следует добавить ядро ALTPLL. Для этого в меню «Tools» выбираем пункт «IP Catalog». Откроется окно выбора IP-функций. По умолчанию оно располагается в правой области окна Quartus Prime. Следует выбрать функцию «ALTPLL».
Рисунок 14 – Окно выбора IP Core
После активации пункта ALTPLL будет предложено указать путь к директории с файлами ядра. В рабочей папке проекта создаем отдельную папку, назовем ее, например, «pll». Указываем путь к созданной папке, активируем язык «Verilog» (рисунок 15).
Рисунок 15 – Сохранение файлов модуля
Запустится окно мастера настройки функций MegaWizard . Навигация между вкладками с помощью манипулятора «мышь», либо с помощью кнопок «Back» (назад) и «Next» (далее). На вкладке «Parametr Setting -> General/Mode» устанавливаем в строке «What is the frequency of the inclk0 input?» входную частоту генератора 50.0 МГц. Остальные опции оставляем по умолчанию (рисунок 16).
Отключаем вход асинхронного сброса и флаг готовности ФАПЧ, для этого на вкладке «Parametr Setting -> Input/Lock» снимаем галочки с пунктов «Create an ‘areset’ input to asynchronously reset the PLL» и «Create ‘locked’ output» (рисунок 17).
Рисунок 16 – Мастер настройки ALTPLL. Вкладка Parameter Settings
Рисунок 17 – Мастер настройки ALTPLL. Вкладка Parameter Settings Input/Lock
На вкладке «Output Clocks» можно активировать до пяти независимых выводов модуля (clk c0, clk c1, clk c2, clk c3, clk c4). Для активации на соответствующей вкладке устанавливаем галочку «Use this clock» и вводим требуемые параметры: частоту (frequency), фазовый сдвиг (Clock phase shift), коэффициент заполнения (Clock duty cycle).
Ввод частоты возможен в двух режимах «Enter output clock frequency», когда пользователь вводит частоту в МГц, а мастер подбирает для этой частоты коэффициенты умножения самостоятельно, либо ввод непосредственно коэффициентов (опция «Enter output clock parameter») (рисунок 18).
Рисунок 18 – Мастер настройки ALTPLL. Вкладка Output Clock
После того, как настройки ALTPLL выполнены, следует нажать кнопку «Finish». Осуществится переход на вкладку «Summary», где будет предложено выбрать генерируемые файл. Рекомендуется создать файл с шаблоном экземпляра (Instantiation template file) для того, чтобы было удобнее добавлять модуль pll в модуль верхнего уровня проекта (рисунок 19).
Рисунок 19 – Мастер настройки ALTPLL. Вкладка Summary
Нажать кнопку «Finish». Будет предложено добавить сгенерированные файлы в проект, нажимаем «Yes». После генерации файлы созданы и находятся в поддиректории pll.
Описание модуля pll находится в файле pll.v. Файл прикреплен к проекту и доступен в Навигаторе проекта (Project Navigator, рисунок 20).
Рисунок 20 – Project Navigator. Выбор категории
Двойной щелчок по строке «pll» в категории «IP components» Навигатора проекта запустит MegaWizard для редактирования ALTPLL. А выбор pll.v в категории Files откроет непосредственно файл с реализацией модуля pll.
Рисунок 21 – Project Navigator. Категория Files (Файлы)
Файл pll.v не предназначен для редактирования, редактирование IP-Функции должно осуществляться только через MegaWizard.
Пример экземпляра модуля можно найти в файле pll_inst.v. Открыть файл можно через меню File, выбрав опцию «Open…», либо нажав соответствующую пиктограмму на панели инструментов основного окна. Ниже на листинге приведен экземпляр модуля с комментариями.
pll pll_inst ( // имя экземпляра модуля
.inclk0 ( inclk0_sig ) , // сигнал опорной частоты
.c0 ( c0_sig ) // выходной сигнал
) ;
Теперь установив данный экземпляр в модуле верхнего уровня можно получить тактовые импульсы заданной частоты. Ниже на листинге показан пример модуля верхнего уровня с установленным pll.
Пример:
module leso7_lab1(
output [ 3 : 0 ] hl,
input [ 3 : 0 ] sb,
input clk_50MHz // вход с тактового генератора
) ;
wire clk_pll; // объявляем линию для выхода pll
pll pll_inst (
.inclk0 ( clk_50MHz ) , // На вход модуля pll подаем сигнал
// с тактового генератора.
.c0 ( clk_pll ) // Подключаем линию clk_pll к выходу pll
) ;
assign hl[ 0 ] = clk_pll; // На светодиод выводим полученную тактовую частоту,
// в этом нет никакой целесообразности,
// сделано для примера.
assign hl[ 1 ] = sb[ 1 ] ;
assign hl[ 2 ] = sb[ 2 ] ;
assign hl[ 3 ] = sb[ 3 ] ;
endmodule
Обратите внимание, что после компиляции в окне «Flow Summary» в графе «Totals PLLs», показано использование одного pll из двух (рисунок 22).
Рисунок 22 – Итоги компиляции проекта
6 Ход работы
6.1 Этап 1. Освоение среды Quartus Prime
Создать и настроить проект в Quartus Prime .
Написать модуль, коммутирующий сигналы с тумблеров на светодиодные индикаторы. Скомпилировать проект. Положительным результатом считать отсутствие ошибок компиляции и появления файла конфигурации с расширением «rbf » в рабочей директории проекта (поддиректория output_files).
Подключить учебный стенд LESO 7 к компьютеру.
Загрузить файл конфигурации в ПЛИС учебного стенда.
Изменяя положение тумблеров убедиться в работоспособности прошивки.
6.2 Этап 2. Ввод и вывод сигнала
Реализовать модуль, коммутирующий данные с АЦП на ЦАП, частоту дискретизации выбрать равную частоте задающего генератора. В младшие разряды ЦАП записать нули.
Подключить ко входу АЦП выход генератора LESO5. Гармонический сигнал размахом 1 В, частотой 1 кГц.
Подключить Анализатор сигналов LESO4 к выходу ЦАП. Проконтролировать наличие сигнала на выходе ЦАП. Подобрать оптимальные значения развертки и усиления по вертикали. Сохранить изображение сигнала и его спектр. Спектр наблюдать в логарифмическом масштабе.
Плавно увеличивать размах сигнала до характерного искажения «ограничение сверху» или «ограничение снизу». С помощью анализатора LESO 4 замерить максимальные значения входного сигнала АЦП свободного от искажений. Искажения удобно отслеживать с помощью анализатора спектра LESO 4. Сохранить изображение сигнала.
6.3 Этап 3. Изучение квантованного сигнала
Модифицировать модуль таким образом, чтобы на выход ЦАП подавались только 4 старших бита с выхода АЦП. Это уменьшит эквивалентную разрядность АЦП и позволит визуально оценить эффект квантования. Сохранить изображение сигнала и его спектр (Рисунок 23 – пример квантованного сигнала).
Рисунок 23 – Осциллограмма квантованного сигнала
6.4 Этап 4. Изучение спектра дискретного сигнала
Используя IP-Функцию ALTPLL установить частоту дискретизации АЦП согласно варианту (50-200 кГц).
Подать сигнал синусоидального формы частотой 1 кГц. Установить размах таким образом, чтобы сигнал на выходе ЦАП не имел характерных искажений, вызванных ограничением «снизу» и «сверху».
В анализаторе сигналов выбрать усиление по вертикали таким образом, чтобы график сигнала занимал большую часть рабочей области. Пронаблюдать на различных развертках сигнал (рисунок 24, рисунок 25).
Рисунок 24 – Осциллограмма дискретного сигнала
Рисунок 25 – Спектр дискретного сигнала
С помощью курсоров измерить интервал (шаг) дискретизации (Рисунок 26). Сохранить изображение сигнала.
Рисунок 26 – Измерение шага дискретизации
Изменяя частоту входного сигнала наблюдать изменение спектра. Сохранить изображение сигнала и спектра.
7 Вопросы для самопроверки
Какие настройки в проекте Quartus нужно выполнить, что бы получить файл конфигурации rbf?
Объяснить физический смысл квантования сигнала.
Объяснить физический смысл дискретизации сигнала.
Объяснить особенности спектра дискретного сигнала.
Объяснить отличие квантованного сигнала от дискретного.
Объяснить возрастание уровня шумов на спектрограмме при изменении эквивалентной разрядности АЦП.
8 Содержание отчета:
Название и цель работы.
Функциональная подключения АЦП и ЦАП к ПЛИС.
Осциллограммы и скриншоты измерений.
Для каждого этапа сделать выводы.