构建真值表、布尔方案和表达式
在本演示中,我们将演示如何创建用于计算真值表输出信号的离散模型,并将其与从逻辑元素创建的模型进行比较。
模型描述
让我们创建一个模型,将一组输入位转换为根据以下真值表生成的输出信号:
|A/B/C|Y/
| - | - | - | - |
| 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 0 |
| 0 | 1 | 0 | 1 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 0 | 1 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 1 |
| 1 | 1 | 1 | 0 |
真值表可以用许多不同的方式设置,例如使用放置在块内的代码。 Engee Function.
输入信号是使用脉冲发生器产生的 Pulse Generator 对于每个后续发生器,脉冲周期被除以 2 ("少年"有期 1 с,下一个 2 с,"前辈" – 4 с) . 默认情况下,所有发生器在时间零(在参数中指定)的顶部脉冲电平开始 Amplitude). 真值表的通常形式意味着信号的枚举从较低级别开始。 为了不改变每个发电机的相位,我们使用操作 Not 到每个输入通道(使用适当配置的块 Logical Operator).
模型的采样步骤为 0.5. 在一个完整周期内,每个发生器输出脉冲值-上限和下限,填充因子为50%。 所以我们得到了下面的模型:
在块内部,真值表由以下代码描述:
``'茱莉亚
函数(c::块)(T::实,A,B,C)
如果A0&&B0&&C0返回0;
elseif A0&&B0&&C1返回0;
elseif A0&&B1&&C0返回1;
elseif A0&&B1&&C1返回0;
elseif A1&&B0&&C0返回1;
elseif A1&&B0&&C1返回0;
elseif A1&&B1&&C0返回1;
elseif A1&&B1&&C1返回0;
else return0;结束;
结束
我们可以使用逻辑元素AND,OR,NOT创建相同的方案。
我们的真值表对应于公式描述的方程 ). 在几个块的帮助下很容易实现。 Logical Operator.
通过使用表达式 (u[1] || u[2]) && !u[3] 块内 Fcn.
启动模型
让我们使用软件控制命令运行模型:
modelName = "truth_tables"
# Если модель еще не открыта, загрузим из файла
if modelName ∉ [m.name for m in engee.get_all_models()] engee.load( "$(@__DIR__)/$modelName.engee"); end;
data = engee.run( modelName )
我们想象结果。 如果真值表转换为逻辑电路正确执行,我们应该得到三个相同的图。:
gr()
plot(
plot( data["Y"].time, data["Y"].value, st=:step, lc=1, leg=false, title="Сигналы по таблице истинности" ),
plot( data["Y1"].time, data["Y1"].value, st=:step, lc=2, leg=false, title="Сигналы по логической схеме" ),
plot( data["Y1"].time, data["Y2"].value, st=:step, lc=3, leg=false, title="Сигналы по логическому выражению" ),
layout=(3,1)
)
结论
我们已经建立了几个简单的模型,可用于研究微电子或创建测试数字设备的环境。
