JK 触发器型号¶
在本示例中,我们将演示如何使用模块库基本调色板中的组件为 JK 触发器建模。
模型描述¶
该模型展示了如何通过逻辑元件(块Logic
)和延迟块(UnitDelay
)组装 JK 触发器。触发器随时钟信号(块PulseGenerator
)的每个脉冲更新其状态,因此该模型可用于展示输入信号如何根据 J 和 K 输入端的切换而产生。
如果模型的输入开关处于初始状态(向上位置),触发器的两个 JK 输入端都被置 1,然后触发器的输出状态在时钟信号的每个下降沿(后沿)切换。
JK 触发器子系统内有两个 SR 触发器:
SR 触发器的外观如下(所有逻辑元件均使用Logic
块实现):
在输出
Q
之前,上层块Unit Delay
的初始化值为-1
,下层输出的初始化值为 0。
模型运行¶
让我们通过程序控制来加载(如果模型尚未打开)和执行模型:
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 触发器的模型,这是一种能够长时间保持两种稳定状态之一,并在外部信号影响下交替变化的装置。
我们可以利用 CMOS 逻辑块建立更详细的模型,但目前的模型完美地展示了 JK 触发器的工作原理。