Engee 文档
Notebook

JK触发器模型

在此示例中,我们将演示如何使用块库的基本调色板中的组件对JK触发器进行建模。

模型描述

此模型演示如何从逻辑组件(块)组装JK触发器 Logic)和延迟块(UnitDelay). 触发器用时钟信号的每个脉冲更新其状态(块 PulseGenerator),因此基于该模型,能够示出取决于输入J和K的切换的输入信号是如何形成的。

如果模型的输入开关处于初始状态("向上"位置),则JK触发器的两个输入都设置为1,然后触发器的输出状态在时钟信号的每个下降沿(后沿)上切换。

image.png

JK触发器子系统内部有两个SR触发器:

image.png

SR触发器如下所示(所有逻辑元素都使用块实现 Logic):

image.png

上座 Unit Delay 退出前 Q 用值初始化 -1,较低的输出初始化为零。

模型的工作

我们将加载(如果模型尚未打开)并使用软件管理工具执行模型。:

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

data = engee.run( "jk_trigger" )
Out[0]:
SimulationResult(
    "Q" => WorkspaceArray("jk_trigger/Q"),
    "J" => WorkspaceArray("jk_trigger/J"),
    "CLK" => WorkspaceArray("jk_trigger/CLK"),
    "~Q" => WorkspaceArray("jk_trigger/~Q"),
    "K" => WorkspaceArray("jk_trigger/K")
)

让我们在两个输入都设置为上位置的状态下绘制模型的时间表。

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触发器被激活,但第二个不是。 信号 JK 此时,第一触发器的值可以改变,而第二触发器的值被冻结。 如果通过设置更改输入参数 J=1K=0,则第一触发器的输出 Q 它被设置为1,但第二个的输入不会改变。

只要时钟信号 CLK 切换到较低的位置,第二个RS触发器被激活,第一个被关闭。 第二个触发器假设第一个的状态,它的输出值现在等于前一阶段第一个的输出值(第一个触发器保留前一个状态)。 第一个触发器的输出等于 Q=0,因此,第二个触发器得到一个输入 S=1R=0,并且第二触发器的输出变为 Q=1. 但由于输入触发器被禁用,改变输入信号不会改变其状态。

什么时候是时钟信号 CLK 它再次切换到上位置,第一个触发器被激活,第二个触发器被禁用。 产出 JK 触发器在前沿不会更改,因为第二个触发器被禁用且不会更改其状态。

结论

我们研究了JK触发器的模型,这是一种能够长时间停留在两种稳定状态之一的设备,并在外部信号的影响下交替它们。

一个更详细的模型可以由CMOS逻辑块组装而成,但以目前的形式,它完美地展示了JK触发器的工作原理。