Документация Engee
Notebook

Модель JK триггера

В этом примере мы покажем, как моделировать JK-триггер, используя компоненты из базовой палитры библиотеки блоков.

Описание модели

В этой модели показано, как собрать JK триггер из логических компонентов (блоков Logic) и блоков задержки (UnitDelay). Триггер обновляет свое состояние с каждым импульсом тактирующего сигнала (блок PulseGenerator), так что на основе этой модели можно показать, каким образом формируется входной сигнал в зависимости от переключения входов J и K.

Если переключатели входов модели находятся в исходном состоянии (положение "вверх") оба входа JK триггера выставлены в 1, и тогда выходное состояние триггера переключается на каждом нисходящем фронте тактирующего сигнала (заднем фронте).

image.png

Внутри подсистемы JK триггера находятся два SR триггера:

image.png

SR триггеры выглядят следующим образом (все логические элементы реализованы при помощи блоков Logic):

image.png

Работа модели

Загрузим (если модель еще не открыта) и выполним модель средствами проргаммного управления:

In [ ]:
if "jk_trigger"  getfield.(engee.get_all_models(), :name)
    engee.load( "$(@__DIR__)/jk_trigger.engee");
end;

data = engee.run( "jk_trigger" )
Out[0]:
Dict{String, DataFrame} with 5 entries:
  "Q"   => 101×2 DataFrame…
  "J"   => 101×2 DataFrame…
  "CLK" => 101×2 DataFrame…
  "~Q"  => 101×2 DataFrame…
  "K"   => 101×2 DataFrame

Построим графики работы модели в состоянии, когда оба входа выставлены в верхнее положение.

In [ ]:
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)
)
Out[0]:

Когда тактирующий сигнал CLK в верхнем положении, первый RS-триггер активирован, а второй нет. Сигналы J и K к этот момент могут менять значение первого триггера, а значение второго заморожено. Если изменить входные параметры, установив J=1 и K=0, то выход первого триггера Q устанавливается в 1, но ход второго не изменяется.

Как только тактирующий сигнал CLK переходит в нижнее положение, активируется второй RS-триггер, а первый отключается. Второй триггер принимает состояние первого, его выходные значения теперь равны выходным значениям первого на предыдущем этапе (первый триггер сохраняет прежнее состояние). Выход первого триггера был равен Q=0, поэтому второй триггер получает на вход S=1 и R=0, и выход второго триггера становится Q=1. Но поскольку входной триггер отключен, изменение сигналов на входе не меняет его состояния.

И когда тактирующий сигнал CLK снова переходит в верхнее положение, первый триггер активируется, а второй отключается. Выходы JK триггера не изменяются на переднем фронте, потому что второй триггер отключен и не меняет своего состояния.

Заключение

Мы изучили модель JK-триггера – устройства, способного длительное время находиться в одном из двух устойчивых состояний и чередовать их под воздействием внешних сигналов.

Более детальную модель можно было бы собрать из блоков КМОП логики, но в текущем виде она отлично показывает принцип работы JK-триггера.

Блоки, использованные в примере