close

Вход

Забыли?

вход по аккаунту

?

Lab3 Quartus

код для вставкиСкачать
Лабораторная работа № 3
Примитивы триггеров и цифровые устройства на их основе.
В языке AHDL в качестве готовых логических блоков могут быть использованы встроенные примитивы буферов и триггеров. Наиболее легко воспринимаемым способом их использования в описании устройства является объявление именованного экземпляра примитива в разделе переменных. После такого объявления в логическом разделе описания можно обращаться к портам (выводам) примитива.
Рассмотрим примитив D-триггера dffe. Он описывается следующим прототипом функции:
FUNCTION DFFE (D, CLK, CLRN, PRN, ENA) RETURNS(Q).
Таблица истинности данного триггера имеет вид:
Входы ВыходыCLRNPRNENADCLKQLHXXXLHLXXXHLLXXXIllegalHHLXXQoHHHLLHHHHHHHXXLQo Программа именованного экземпляра D-триггера может быть записана следующим образом:
TITLE "D-TRIGGER";
SUBDESIGN dtr
(
data, clock, resetn, setn, oe : INPUT;
out : OUTPUT;
)
VARIABLE
a_trig : dffe;
BEGIN
a_trig.d=data;
a_trig.clk=clock;
a_trig.clrn=resetn;
a_trig.prn=setn;
a_trig.ena=oe;
out=a_trig.q;
END;
Указанный примитив можно использовать при построении более сложных цифровых структур, например, регистров. При построении 4-х разрядного регистра в программе следует предусмотреть использование четырех однотипных триггеров, причем включить их следует последовательно (выход предыдущего триггера должен быть подключен к входу следующего).
Программа, реализующая указанную структуру, будет иметь приведенный ниже вид. Для более глубокого изучения механизмов построения структур на основе примитивов в данную и последующие программы, отмеченные знаком ***, сознательно введены некоторые неточности.
TITLE "REGD-TRIGGER***";
SUBDESIGN regdtr
(
data, clock, resetn, setn, oe : INPUT;
a, b, c, d : OUTPUT;
)
VARIABLE
dt1, dt2, dt3, dt4 : dffe;
BEGIN
dt1.d=data;
dt1.clk=clock;
dt1.clrn=resetn;
dt1.prn=setn;
dt1.ena=oe;
a=dt1.q;
dt2.d=data;
dt2.clk=clock;
dt2.clrn=resetn;
dt2.prn=setn;
dt2.ena=oe;
b=dt2.q;
dt3.d=data;
dt3.clk=clock;
dt3.clrn=resetn;
dt3.prn=setn;
dt3.ena=oe;
c=dt3.q;
dt4.d=data;
dt4.clk=clock;
dt4.clrn=resetn;
dt4.prn=setn;
dt4.ena=oe;
d=dt4.q;
END; Задание примитивов тириггеров может осуществляться и без их объявления. Рассмотрим пример программной реализации Т-триггера, использующей указанный метод. Примитив Т-триггера описывается следующим образом.
Примитив TFF (Триггер Т-типа, Flipflop)
Прототип функции: FUNCTION TFF (T, CLK, CLRN, PRN)
RETURNS(Q);
Входы ВыходыPRNCLRNCLKTQLHXXHHLXXLLLXXIllegalHHLQoHHHToggleHHLXQoToggle - переключательный (счетный) режим.
Программа для описания Т-триггера без его объявления имеет вид:
TITLE "T-trigger";
SUBDESIGN ttr
(
clock : INPUT;
outa : OUTPUT;
)
BEGIN
outa=tff(vcc,clock,vcc,vcc);
END;
На основе нескольких Т-триггеров можно построить двоичный счетчик. Программа для его реализации имеет вид:
TITLE "ST***";
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 состояний 4-х разрядного двоичного кода. Выполнив дешифрацию 14-го состояния счетчика и использовав дешифрированный импульс в качестве сигнала обнуления счетчика, можно построить счетчик, который осуществляет формирование 14-ти состояний 4-х разрядного двоичного кода.
Программа, полученная на основе модификации предыдущей, будет иметь вид:
TITLE "COUNT_T-trigger_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. В этом случае изменения в последней программе будут следующими.
TITLE "COUNT_T-trigger***";
SUBDESIGN sttr
(
clock,setn,resetn:INPUT;
tt1,tt2,tt3,tt4,t1,t2,t3,t4:OUTPUT;
)
BEGIN
tt1=tff(vcc,clock,resetn,setn);
tt2=tff(dt1,clock,resetn,setn);
tt3=tff(dt2,clock,resetn,setn);
dt4=tff(dt3,clock,resetn,setn);
t1=tt1 & tt2 & tt3 & tt4;
t2=tt1 & tt2 & tt3 & tt4;
t3=tt1 & tt2 & tt3 & tt4;
t4=tt1 & tt2 & tt3 & tt4;
END;
Если в программу внести дополнительные изменения, можно сформировать стробы от первого импульса до каждого из следующих импульсов.
TITLE "COUNT_T-trigger***";
SUBDESIGN sttr
(
clock, setn, resetn : INPUT;
tt1, tt2, tt3, tt4, t1, t2, t3, t4, st1, st2, st3 : 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);
t1=tt1 & tt2 & tt3 & tt4;
t2=tt1 & tt2 & tt3 & tt4;
t3=tt1 & tt2 & tt3 & tt4;
t4=tt1 & tt2 & tt3 & tt4;
st1=srff(t1,t1,clock,gnd,vcc);
st2=srff(t1,t1,clock,vcc,gnd);
st3=srff(t1,t1,clock,vcc,vcc);
END;
Порядок выполнения лабораторной работы
1. В рабочее окно Quartus II перенести из теоретической части описания работы программу, синтезирующую D-триггер. Проверить, отражает ли работа программы режимы таблицы истинности для D-триггера
2. Используя Waveform Tool проанализировать работу триггера. Частоту сигнала на входе clock задать, используя опцию Count Value, предварительно установив параметр Grid Size = 100 nc.
3. Изменить исходную программу D-триггера таким образом, чтобы в ней были принудительно определены как VCC значения сигналов на портах clrn, prn, ena.
4. На основе последовательно подключенных однотипных триггеров построить четырехразрядный регистр сдвига, учитывая, что выход первого триггера должен быть подключен к входу второго триггера, а выход второго триггера - к входу третьего и т.д.
5. В редакторе Waveform Editor задать на входе d первого триггера импульс уровня логической единицы в течение одного периода частоты clock. Проследить продвижение импульса по всей цепочке триггеров.
6. Записать программу для описания Т-триггера и с помощью волновой диаграммы проследить принцип его функционирования.
7. Записать программу для двоичного счетчика на основе четырех Т-триггеров. Посмотреть ее работу в редакторе Waveform Editor. В программе сделать необходимые исправления так, чтобы она адекватно отражала работу счетчика.
8. Сделать исправления в программе с целью обеспечения коэффициента деления счетчика, равного 14.
9. В программу счетчика внести дешифрирующие схемы, позволяющие выделить четыре указанных в описании импульса. Работу схемы проверить с помощью редактора Waveform Editor.
10. На основе синхронных RS-триггеров сформировать три строба между 1-2, 1-3 и 1-4 импульсами соответственно.
Документ
Категория
Рефераты
Просмотров
360
Размер файла
98 Кб
Теги
quartus, lab3
1/--страниц
Пожаловаться на содержимое документа