| Crates.io | digicir |
| lib.rs | digicir |
| version | 0.1.0 |
| created_at | 2025-10-11 14:24:37.363809+00 |
| updated_at | 2025-10-11 14:24:37.363809+00 |
| description | An interesting simulation of a digital circuit |
| homepage | |
| repository | https://github.com/tiamd3/circuit |
| max_upload_size | |
| id | 1878256 |
| size | 50,159 |
对数字电路及其设计进行模拟,用于更好地学习数字电路,提高抽象思维能力
目前还在开发初期,随时可能有重大改动
struct Component {
inputs: Vec<SignalId>,
outputs: Vec<SignalId>,
inner_graph: Vec<LogicComponent>,
}
各种逻辑部件之间可以相互调用,相互连接
可以自定义逻辑部件
引入并发
介绍一些实现上的想法
Signal: Option<bool> 信号有三种状态:None(无信号),Some(true), Some(false)signal_pool: Vec<Signal> 信号池。在信号池中每个信号都拥有唯一的id(索引)circuit_graph: Vec<LogicComponent> 存储逻辑部件
信号池初始化输入信号后,每次新增逻辑部件,逻辑部件从已有信号中选取输入,并产生输出加入信号池。WiredGate,门级逻辑部件的实现,直接使用抽象代数类型带来的类型多态,暂时不支持完整的自定义模式。全局同步:每个时钟周期遍历部件并更新,每次运行只需依次遍历circuit_graph,更新signal_pool
事件驱动:只在信号变化时调度相关部件