ЭБВСиС ЛР Quartus
.pdf
11
есть название Waveform1.vwf будет заменено на название проекта с расширением .vwf (рис. 9).
Для запуска процесса моделирования в форму временных диаграмм требуется ввести имена переменных проекта. Необходимо щелкнуть правой копкой в поле имен узлов и шин редактора временных диаграмм. В появившемся контекстном меню следует выбрать строку Insert→Insert Node or Bus… ("Ввести узел или шину…"). На экране появится окно Insert Node or Bus (рис. 10). Это окно позволяет ввести в файл временных диаграмм отдельный узел или шину, набрав вручную имя в верхнем поле окна Name. Для входного узла остальные параметры можно оставить без изменения и щелкнуть по кнопке "OK". Однако существует более удобная возможность автоматического ввода узлов и шин из числа существующих в конструкторском файле. Для реализации этой возможности следует, не меняя параметров окна Insert Node or Bus, щелкнуть по кнопке Node Finder… ("Регистратор узлов…"). На экране появится окно Node Finder (рис. 11). В окне Node Finder в поле ввода Named: ("Из имен:") оставьте символ
Рис. 9
Рис. 10
шаблона для всех возможных имен – "*". В списке Filter: ("Фильтр:") выберите строку "input" для "фильтрации" в список только входных выводов проекта ("output" – только выходных; "all" – всех и т. п.). Щелкните по кнопке
12
List ("Извлечь список"). В окне Nodes Found: ("Найденные узлы:") появится список всех входных узлов проекта.
Если выделить в списке Nodes Found один или несколько узлов и щелкнуть по кнопке ">", то только выделенные узлы будут занесены в список Selected Nodes: ("Выбранные узлы:"). Если, не выделяя узлов, щелкнуть по кнопке ">>", то все узлы из списка Nodes Found будут занесены в список Selected Nodes. Для выделения группы следующих друг за другом узлов необходимо щелкнуть по первому и затем щелкнуть с нажатой клавишей Shift по последнему из выделяемых узлов.
Ошибочно внесенные узлы можно удалить из списка "Selected Nodes:". Щелчок по кнопке "<" удалит только выделенные в этом списке узлы; щелчок по кнопке "<<" – все внесенные узлы.
Далее следует щелкнуть по кнопке "OK" окна Node Finder и затем – по кнопке "OK" окна Insert Node or Bus. В результате в поле Name редактируемого файла временных диаграмм появится список имен входных узлов, в поле Value появятся значения "B 0" ("Binary 0" – Двоичный 0),
Рис. 11
а в поле временных диаграмм – соответствующие логическому значению 0 диаграммы во всем временном диапазоне. По умолчанию по оси времени установлен диапазон 0 – 1us (0 – 1 микросекунда).
Конечное значение времени моделирования можно изменить, выбрав в главном меню Edit→End Time… ("Редактирование→Конечное время") и
установив в появившемся окне End Time в поле ввода Time требуемое значение верхнего предела времени, а в расположенном справа списке – нужные единицы измерения: s – секунды, ms – миллисекунды, us – микросекунды, ns – наносекунды, ps – пикосекунды. Начальное значение временного диапазона всегда равно нулю.
Также можно задать отсчеты времени (шаги изменения состояний) временных диаграмм. Для этого следует в главном меню выбрать Edit→Grid Size… ("Редактирование → Параметры сетки…"). В появившемся окне
13
Grid Size, не меняя других параметров, в поле ввода Period: ("Период:") установить число, например 100, а в следующем справа от него списке единиц – "ns" (наносекунды). Щелкнуть по кнопке "OK". Установленная таким образом сетка времени позволит точно совмещать фронты логических уровней на диаграммах разных входных узлов в точках, кратных шагу сетки.
Для функционального моделирования проекта необходимо сформировать диаграммы всех входных сигналов так, чтобы они воспроизводили все возможные комбинации значений аргументов из таблицы истинности разрабатываемого устройства.
Рассмотрим принцип задания входных колебаний. Выделим узел "а" в редакторе временных диаграмм. Для этого щелкнем по имени "а" в поле имен или по полю значений напротив имени "а" (рис. 12). Выделенный узел
Рис. 12
вместе со своей диаграммой будет помечен так, как это показано на рис. 12. Если требуется в каком-либо временном интервале установить известное логическое значение сигнала, то необходимо выделить мышью этот временной интервал на диаграмме данного сигнала, а затем воспользоваться одной из основных кнопок на вертикальной панели инструментов:
•"Forcing Unknowm (X)" – установка неопределенного уровня;
•"Forcing Low (0)" – установка низкого (0) логического уровня;
•"Forcing High (1)" – установка высокого (1) логического
уровня;
• "High Impedance (Z)" – установка третьего состояния (Z).
Для установки переменного колебания необходимо щелкнуть по кнопке Count Value ("Расчетное значение"). Краткие названия кнопок появляются в подсказках при наведении курсора мыши на кнопку. На экране появится окно Count Value (рис. 13). В этом окне активизируйте закладку Timing ("Хронометраж"). Установите отметку против надписи At absolute times: ("По абсолютным отсчетам:"). В поле ввода Count every:
("Рассчитывать каждые:") введите, например, число 100, а в находящемся справа от него списке единиц выберите "ns". В поле Multiplied by:
14
("Умножать на:") введите 1. Щелкните по кнопке "OK". Временная диаграмма для выбранной переменной будет представлять собой импульсное колебание с параметрами, заданными в окне Count Value.
Таким же образом можно сформировать временные диаграммы для других узлов. Если требуется диаграмма, аналогичная сигналу "а", но с большей длительностью импульса, необходимо повторить все перечисленные действия, но в поле Multiplied by введите значение 2 или более.
Рис. 13
Моделирование проектируемого устройства
Для осуществления моделирования процессов в проектируемом устройстве необходимо кликнуть в главном меню на Processing → Simulator Tool ("Процессы → Параметры симулятора"). В появившемся окне
Simulator Tool (рис. 14) в списке Simulation mode: ("Режим моделирования:") выбрать строку Timing ("Временной").
При установке режима Functional ("Функциональный") в результате моделирования будут получены идеальные временные диаграммы сигналов выходных узлов без учета реальных аппаратных задержек, что может быть полезно на предварительных этапах проектирования. В режиме "Временной" будут получены диаграммы с задержками сигналов, определяемыми числом элементов на пути распространения сигнала и выбранным типом микросхемы. Кроме того, в режиме "Временной" симулятором обнаруживаются так называемые Glitches ("Выбросы") – перепады логического уровня за короткие промежутки времени.
Для запуска процесса моделирования необходимо щелкнуть по кнопке с тремя точками справа от поля Simulation input: ("Входные данные для моделирования:") и убедиться в том, что в поле внесено имя подготовленного файла временных диаграмм "*.vwf". На панели Simulation period ("Период моделирования") включите радиокнопку "Run simulation until all vector stimuli are used". На панели Simulation options ("Параметры моделирования") установите "галочку" в строке Automatically add pins to simulation outputs waveforms ("Автоматически включать выходные узлы в результирующие временные диаграммы"). Установка указанного выше свойства обеспечит автоматическое добавление в исходный файл "*.wvf" всех
15
существующих выходных узлов с их диаграммами. Это свойство не следует включать, если требуется наблюдать диаграммы только части выходных узлов. В этом случае названия узлов необходимо ввести вручную.
Рис. 14
Остальные свойства на панели Simulation options обеспечивают следующее:
• Check outputs ("Контроль выходных диаграмм") – позволяет симулятору сравнивать сформированные разработчиком ожидаемые диаграммы выходных сигналов с диаграммами, получаемыми в результате моделирования;
• Setup and hold time violation detection ("Обнаружение нарушений времени предустановки и времени удержания") – контролирует процесс моделирования на наличие нарушений параметров "время предустановки" и "время удержания" и сообщает о них в окне сообщений;
• Glitch detection ("Обнаружение выбросов") – контролирует процесс временного моделирования на наличие выбросов и сообщает о них в окне сообщений;
• Overwrite simulation input file with simulation results
("Обновление входного файла "*.vwf" c добавлением результатов моделирования") – включает режим обновления файла временных диаграмм.
Старт симуляции можно выполнить как из данного окна, так и из главного меню, кликнув Processing→Start Simulation. На экране появится окно Simulation Report ("Отчет о моделировании"), а в окне состояния процесса начнет отражаться объем выполнения процесса моделирования. После завершения моделирования на экране появится информационное окно с сообщением о завершении процесса. Его следует закрыть, щелкнув по кнопке "OK".
Если моделирование завершилось успешно, то на экране останется окно Simulation Report, представленное на рис. 15.
16
Рис. 15
ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ
1.Откройте созданный в первой лабораторной работе файл, используемый для синтеза дешифратора семисегментного индикатора.
2.Выполните компиляцию файла.
3.Просмотрите и зафиксируйте назначения аппаратной реализации проекта, сделанные по умолчанию системой Quartus II. Определите тип микросхемы, загрузку ее макроячеек, требуемое количество ресурсов и топологию размещения входных и выходных выводов.
4.Подключите сигнальный редактор Waveform Editor. Сделайте назначения входных сигналов индивидуально для каждого входа, установив на них уровни логической единицы в течение следующих интервалов времени: i0 – 100 нс, i1 – 200 нс, i2 – 300 нс, i3 – 400 нс. Выполните моделирование, зафиксируйте и проанализируйте результаты моделирования.
5.Измените общее время моделирования с 1мкс на 5мкс.
6.В окне редактора Waveform Editor представьте входные сигналы в составе группы. Используя назначения счетчика генератора входных сигналов, установите шаг изменения инкремента сначала 1, а затем 2 и временные интервалы 100 мкс и 400 мкс соответственно. Результаты моделирования зафиксируйте и проанализируйте.
7.Проанализируйте работу цифровых объектов, представленных на рис. 8, программная реализация которых выполнена в лабораторной работе № 1. Для аппаратной реализации проектов используйте микросхему
EPF10K10LI84-4 серии FLEX10K.
КОНТРОЛЬНЫЕ ВОПРОСЫ
1. Как выполняются подготовка и создание файла временных диаграмм, используемого в процессе моделирования поведения объекта проекта?
17
2.Как выполняется моделирование проектируемого устройства и какие изменения можно внести в исходный файл временных диаграмм?
3.Как выявить возможную некорректную работу проектируемого устройства, фиксируя несоответствия задержек в его узлах?
4.Как задаются общее время моделирования и градация шага изменения состояний временных диаграмм?
5.Как в окно временных диаграмм внести дополнительные переменные, введенные в программу с расширением .tdf при ее модификации?
Лабораторная работа № 3
Примитивы триггеров и цифровые устройства на их основе
Цель: знакомство с особенностями применения примитивов языка AHDL и построения цифровых устройств на их основе.
ТЕОРЕТИЧЕСКАЯ ЧАСТЬ
В языке AHDL в качестве готовых логических блоков могут применяться встроенные примитивы буферов и триггеров.
Наиболее легко воспринимаемым способом использования примитивов в описании устройства является объявление именованного экземпляра примитива в разделе переменных. После такого объявления в логическом разделе описания можно обращаться к портам (выводам) примитива. Рассмотрим применение примитива D-триггера типа dff. Программа с использованием именованного экземпляра dff может быть записана следующим образом:
SUBDESIGN dtr
(
data, clock, resetn, setn : INPUT; out : OUTPUT;
)
VARIABLE a_trig : dff; BEGIN a_trig.d=data; a_trig.clk=clock; a_trig.clrn=resetn; a_trig.prn=setn; out=a_trig.q; END;.
Указанный примитив можно применять при построении более сложных цифровых структур, например регистров. При построении четырехразрядного регистра в программе следует предусмотреть использование четырех однотипных D-триггеров, причем включить их следует последовательно (выход предыдущего триггера должен быть подключен к входу последующего). Использование примитивов триггеров может осуществляться
18
и без их объявления. Программа, реализующая регистр на четырех триггерах dff без их предварительного объявления, будет иметь приведенный ниже вид. Для более глубокого изучения механизмов построения структур на основе примитивов в данную и последующие программы, отмеченные знаком ***,
введены некоторые неточности.
TITLE "REGISTR***"; SUBDESIGN regdtr
data, clock, resetn, setn : INPUT; a, b, c, d : OUTPUT;
)
BEGIN
a=dff(data, clock, resetn, setn) b=dff(data, clock, resetn, setn) c=dff(data, clock, resetn, setn) d=dff(data, clock, resetn, setn) END;
Рассмотрим пример программной реализации Т-триггера.
TITLE "T-trigger"; SUBDESIGN ttr
(
clock : INPUT; outa : OUTPUT;
)
BEGIN outa=tff(vcc,clock,vcc,vcc); END;
На основе нескольких Т-триггеров можно построить двоичный счетчик. Программа для его реализации имеет вид:
TITLE “ COUNTER***”;
SUBDESIGN sttr
(
clock, setn, resetn : INPUT; tt1, tt2, tt3, tt4 : OUTPUT;
)
BEGIN tt1=tff(vcc,clock,resetn,setn); tt2=tff(tt1,clock,resetn,setn); tt3=tff(tt2,clock,resetn,setn); tt4=tff(tt3,clock,resetn,setn); END;.
Счетчик, построенный с использованием данной программы, последовательно реализует 16 состояний четырехразрядного двоичного кода. Выполнив дешифрацию 14-го состояния счетчика и использовав дешифрированный импульс в качестве сигнала обнуления счетчика, можно построить асинхронный счетчик-делитель на 14. Программа, полученная на основе модификации предыдущей, будет иметь вид:
19
TITLE "COUNTER_uk***"; SUBDESIGN sttr
(
clock,setn:INPUT;
tt1,tt2,tt3,tt4:OUTPUT;
)
BEGIN tt1=tff(vcc,clock,R,setn); tt2=tff(tt1,clock,R,setn); tt3=tff(tt2,clock,R,setn); tt4=tff(tt3,clock,R,setn); R=!(tt1& tt2 & tt3 & tt4); END;.
Если дополнить последнюю структуру счетчика схемами дешифрации, то можно выделить, например, следующие состояния счетчика: 0, 5, 8, 12. В этом случае в последнюю программу следует внести изменения. Так, нулевое состояние счетчика дешифрируется следующей записью: t0=!tt1 & !tt2 & !tt3 & !tt4, внесенной в логический раздел программы. Аналогично можно выполнить дешифрацию и остальных перечисленных состояний.
ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ
1.В рабочее окно Quartus II перенесите из теоретической части описания работы программу, синтезирующую D-триггер. Проверьте, отражает ли работа программы режимы таблицы истинности для D-триггера.
2.Используя Waveform Tool, проанализируйте работу триггера. Частоту сигнала на входе clock задайте, используя опцию Count Value, предварительно установив параметр Grid Size = 100 ns.
3.Измените исходную программу D-триггера таким образом, чтобы в ней были принудительно определены как VCC значения сигналов на портах clrn, prn.
4.На основе последовательно подключенных однотипных триггеров постройте четырехразрядный регистр сдвига, учитывая, что выход первого триггера должен быть подключен к входу второго триггера, а выход второго триггера – к входу третьего и т.д.
5.В редакторе Waveform Editor задайте на входе d первого триггера импульс уровня логической единицы в течение одного периода частоты clock. Проследите продвижение импульса по всей цепочке триггеров.
6.Запишите программу для описания Т-триггера и с помощью волновой диаграммы проследите принцип его функционирования.
7.Взяв за основу программу для двоичного счетчика на основе четырех Т-триггеров, исследуйте работу счетчика в редакторе Waveform Editor. В программе требуется сделать необходимые исправления так, чтобы она адекватно отражала работу счетчика.
8.Выполните доработку программы, полученной в п.7, с целью обеспечения коэффициента деления счетчика, равного 14.
20
9. В программу счетчика внесите дешифрирующие схемы, позволяющие выделить четыре указанных в описании импульса. Работу схемы проверьте с помощью редактора Waveform Editor.
КОНТРОЛЬНЫЕ ВОПРОСЫ
1.Как осуществляется использование примитива триггера в программе проекта на AHDL?
2.Перечислите существующие примитивы триггеров, указав их отличительные особенности.
3.Перечислите наиболее часто используемые примитивы буферов. Охарактеризуйте их.
4.В чем состоит отличие использования примитива триггера без объявления от использования с объявлением в разделе переменных?
5.Какие порты примитива триггеров не требуют обязательного назначения сигналов на них?
Лабораторная работа № 4
Создание и использование модулей цифровых устройств
Цель: изучение методов создания и использования модулей цифровых устройств.
ТЕОРЕТИЧЕСКАЯ ЧАСТЬ
Модулями в описании языка AHDL называются предварительно спроектированные цифровые блоки, используемые в текущем проекте как компоненты. В оригинальном описании языка модули носят название функций (мегафункций). Применение модулей похоже на применение встроенных примитивов. Отличие в использовании обусловлено тем, что модули не являются предопределенными объектами языка. Для применения модуля в текущем проекте необходимо следующее.
1.Наличие файла *.tdf с описанием модуля на языке AHDL. Этот файл должен быть помещен в папку подключаемой библиотеки пакета САПР или находиться в папке текущего проекта.
2.В предварительном разделе проекта должен быть помещен прототип модуля (оператор prototype) или с помощью оператора include подключен файл *.inc используемого модуля.
3.В разделе переменных необходимо объявить именованные экземпляры модуля аналогично объявлению экземпляров примитивов.
4.В логическом разделе следует произвести подключение выходных внутренних портов модуля и обеспечить присваивание сигналов входным внутренним портам в соответствии с решаемой задачей.
Для получения информационной поддержки по описанию и применению прототипов функции следует, находясь в файле с расширением *.tdf, нажать кнопку F1. В результате откроется файл помощи Quartus II Help.
Внем можно отыскать информацию о необходимом для использования модуле, прототип которого размещен в библиотеке САПР. Для получения
