Модель JK триггера¶
В этом примере мы покажем, как моделировать JK-триггер, используя компоненты из базовой палитры библиотеки блоков.
Описание модели¶
В этой модели показано, как собрать JK триггер из логических компонентов (блоков Logic
) и блоков задержки (UnitDelay
). Триггер обновляет свое состояние с каждым импульсом тактирующего сигнала (блок PulseGenerator
), так что на основе этой модели можно показать, каким образом формируется входной сигнал в зависимости от переключения входов J и K.
Если переключатели входов модели находятся в исходном состоянии (положение "вверх") оба входа JK триггера выставлены в 1, и тогда выходное состояние триггера переключается на каждом нисходящем фронте тактирующего сигнала (заднем фронте).
Внутри подсистемы JK триггера находятся два SR триггера:
SR триггеры выглядят следующим образом (все логические элементы реализованы при помощи блоков Logic
):
Работа модели¶
Загрузим (если модель еще не открыта) и выполним модель средствами проргаммного управления:
if "jk_trigger" ∉ getfield.(engee.get_all_models(), :name)
engee.load( "$(@__DIR__)/jk_trigger.engee");
end;
data = engee.run( "jk_trigger" )
Построим графики работы модели в состоянии, когда оба входа выставлены в верхнее положение.
gr()
plot(
plot( data["CLK"].time,
[ data["CLK"].value, data["J"].value, data["K"].value ],
lc=[1 2 5], lw=2, titlefont=font(9), linestyle=[:solid :solid :dash], legend = :outerright,
label=["CLK" "J" "K"], title="Сигналы на входе синхронного JK триггера"),
plot( data["CLK"].time,
[ data["Q"].value data["~Q"].value ],
lc=[3 4], lw=2, legend = :outerright, titlefont=font(9),
label=["Q" "~Q"], title="Сигналы на выходе синхронного JK триггера"),
layout=(2,1)
)
Когда тактирующий сигнал CLK
в верхнем положении, первый RS-триггер активирован, а второй нет. Сигналы J
и K
к этот момент могут менять значение первого триггера, а значение второго заморожено. Если изменить входные параметры, установив J=1
и K=0
, то выход первого триггера Q
устанавливается в 1, но ход второго не изменяется.
Как только тактирующий сигнал CLK
переходит в нижнее положение, активируется второй RS-триггер, а первый отключается. Второй триггер принимает состояние первого, его выходные значения теперь равны выходным значениям первого на предыдущем этапе (первый триггер сохраняет прежнее состояние). Выход первого триггера был равен Q=0
, поэтому второй триггер получает на вход S=1
и R=0
, и выход второго триггера становится Q=1
. Но поскольку входной триггер отключен, изменение сигналов на входе не меняет его состояния.
И когда тактирующий сигнал CLK
снова переходит в верхнее положение, первый триггер активируется, а второй отключается. Выходы JK
триггера не изменяются на переднем фронте, потому что второй триггер отключен и не меняет своего состояния.
Заключение¶
Мы изучили модель JK-триггера – устройства, способного длительное время находиться в одном из двух устойчивых состояний и чередовать их под воздействием внешних сигналов.
Более детальную модель можно было бы собрать из блоков КМОП логики, но в текущем виде она отлично показывает принцип работы JK-триггера.