2 个版本

0.2.1 2018年11月24日
0.2.0 2018年11月15日

#395 in 模拟

GPL-3.0 许可证

53KB
1.5K SLoC

Logical

Docs Build Status GPL3 licensed


lib.rs:

Logical 是一个数字网络模拟器。它的名字来源于德语单词 "Logical",描述了一种遵循逻辑规则的谜题。

您可以构建任意复杂的网络,然后进行模拟。它支持 Ieee1164 符合的值,如强驱动、弱驱动、未初始化、高阻抗和无关紧要逻辑。有关这些信息的更多信息,请参阅 Ieee1164 类型。

您还可以生成各种格式的跟踪文件,请参阅 dump 模块。

用法

该软件包将在 crates.io 上提供,可以通过在您的项目的 Cargo.toml 文件中添加 logical 依赖项来使用。

[dependencies]
logical = "0.1"

之后您可以在您的 2018-rust-project 中使用它

use logical;

示例:连接一个端口到另一个端口

通常您会将一个 Port 连接到一个 Signal 作为输入,然后将另一个端口作为输出连接到该信号。在 Updateable::update 时,输入的值将被传输到输出。

use logical::{Ieee1164, Port, Signal, Updateable};
use logical::direction::{Input, Output};

let from = Port::<_, Output>::new(Ieee1164::from('1'));
let to = Port::<_, Input>::default();
let mut signal = Signal::new();

signal.connect_as_input(&from);
signal.connect_as_output(&to);

signal.update();

assert_eq!(Ieee1164::from('1'), to.value());

示例:多个端口

如果您有多个连接器,则信号上的值将根据 Resolve 特性确定。在这种情况下,高阻抗值将被强零值覆盖,因此结果为 0。

use logical::{Ieee1164, Port, Signal, Updateable};
use logical::direction::{Input, Output};

let from1 = Port::<_, Output>::new(Ieee1164::from('z'));
let from2 = Port::<_, Output>::new(Ieee1164::from('0'));
let to = Port::<_, Input>::default();
let mut signal = Signal::new();

signal.connect_as_input(&from1);
signal.connect_as_input(&from2);
signal.connect_as_output(&to);

signal.update();

assert_eq!(Ieee1164::from('0'), to.value());

依赖项

~1MB
~18K SLoC