Санкт-Петербург 2021
Цель работы: знакомство с особенностями применения примитивов языка AHDL и построения цифровых устройств на их основе.
Ход работы:
Примитив D-триггера dffe описывается следующим прототипом функции:
FUNCTION DFFE (D, CLK, CLRN, PRN, ENA)
RETURNS(Q).
Таблица истинности данного триггера имеет вид:
|
|
Входы |
|
|
Выходы |
CLRN |
PRN |
ENA |
D |
CLK |
Q |
L |
H |
X |
X |
X |
L |
H |
L |
X |
X |
X |
H |
L |
L |
X |
X |
X |
Illegal |
H |
H |
L |
X |
X |
Qo |
H |
H |
H |
L |
|
L |
H |
H |
H |
H |
|
H |
H |
H |
X |
X |
L |
Qo |
Программа именованного экземпляра D-триггера может быть записана следующим образом:
TITLE "D-TRIGGER";
SUBDESIGN DTR
(
data, clock : INPUT;
out : OUTPUT;
)
VARIABLE
a_trig : dffe;
BEGIN
a_trig.d=data;
a_trig.clk=clock;
a_trig.clrn=vcc;
a_trig.prn=vcc;
a_trig.ena=vcc;
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 # d;
dt1.clk=clock;
dt1.clrn=resetn;
dt1.prn=setn;
dt1.ena=oe;
a=dt1.q;
dt2.d=a;
dt2.clk=clock;
dt2.clrn=resetn;
dt2.prn=setn;
dt2.ena=oe;
b=dt2.q;
dt3.d=b;
dt3.clk=clock;
dt3.clrn=resetn;
dt3.prn=setn;
dt3.ena=oe;
c=dt3.q;
dt4.d=c;
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);
|
|
Входы |
|
Выходы |
PRN |
CLRN |
CLK |
T |
Q |
L |
H |
X |
X |
H |
H |
L |
X |
X |
L |
L |
L |
X |
X |
Illegal |
H |
H |
|
L |
Qo |
H |
H |
|
H |
Toggle |
H |
H |
L |
X |
Qo |
Toggle – переключательный (счетный) режим.
Программа для описания Т-триггера без его объявления имеет вид:
TITLE "T-trigger";
SUBDESIGN ttr
(
clock : INPUT;
outa : OUTPUT;
)
BEGIN
outa=tff(vcc,clock,vcc,vcc);
END;
Временная диаграмма:
На основе нескольких Т-триггеров можно построить двоичный счетчик. Программа для его реализации имеет вид:
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(tt1&tt2,clock,resetn,setn);
tt4=tff(tt1&tt2&tt3,clock,resetn,setn);
END;
Временная диаграмма:
Сформируем счетчик – делитель на 14.
Программа, полученная на основе модификации предыдущей, будет иметь вид:
SUBDESIGN sttr
(
clock, setn, resetn : INPUT;
tt1, tt2, tt3, tt4, R : OUTPUT;
)
BEGIN
tt1=tff(vcc,clock,R,setn);
tt2=tff(tt1,clock,R,setn);
tt3=tff(tt1&tt2,clock,R,setn);
tt4=tff(tt1&tt2&tt3,clock,R,setn);
R=!(!tt1& tt2 & tt3 & tt4);
END;
Временная диаграмма:
Дополним структуру счетчика схемами дешифрации. Выделим состояния счетчика: 0, 5, 8, 12. В этом случае изменения в последней программе будут следующими.
SUBDESIGN sttr
(
clock, setn, resetn : INPUT;
tt1, tt2, tt3, tt4,t1,t2,t3,t4: OUTPUT;
)
BEGIN
tt1=tff(vcc,clock,resetn,setn);
tt2=tff(tt1,clock,resetn,setn);
tt3=tff(tt1 & tt2,clock,resetn,setn);
tt4=tff(tt1 & tt2 & tt3,clock,resetn,setn);
t1=!tt1 & !tt2 & !tt3 & !tt4;
t2=tt1 & !tt2 & tt3 & !tt4;
t3=!tt1 & !tt2 & !tt3 & tt4;
t4=!tt1 & !tt2 & tt3 & tt4;
END;
Временная диаграмма:
Если в программу внести дополнительные изменения, можно сформировать стробы от первого импульса до каждого из следующих импульсов.
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(tt1 & tt2,clock,resetn,setn);
tt4=tff(tt1 & tt2 & 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,t2,clock,vcc,vcc);
st2=srff(t1,t3,clock,vcc,vcc);
st3=srff(t1,t4,clock,vcc,vcc);
END;
Временная диаграмма:
Вывод: мы ознакомились с принципами и особенностями применения примитивов языка и построения цифровых устройств на их основе в программе Quartus II.
МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
федеральное государственное автономное образовательное учреждение высшего образования
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»
ИНСТИТУТ НЕПРЕРЫВНОГО И ДИСТАНЦИОННОГО ОБРАЗОВАНИЯ
КАФЕДРА 41
|
ОЦЕНКА
ПРЕПОДАВАТЕЛЬ
кандидат технических наук, доцент |
|
|
|
В. И. Исаков |
должность, уч. степень, звание |
|
подпись, дата |
|
инициалы, фамилия |
ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ №4
|
Создание и использование модулей цифровых устройств
|
по дисциплине: Элементарная база вычислительных систем и сетей |
РАБОТУ ВЫПОЛНИЛ
СТУДЕНТ ГР. № |
Z9411 |
|
|
|
Р. С. Кафка |
|
номер группы |
|
подпись, дата |
|
инициалы, фамилия |
Студенческий билет № |
2019/3603 |
|
|
|