逻辑门

逻辑门的继承层级结构实现-python

我的未来我决定 提交于 2020-03-01 09:09:04
为了实现电路,首先要构建逻辑门的表示。顶部的LogicGate类代表逻辑门的通用特性:逻辑门的 标签(label) 和一个 输出(output) 根据逻辑门接收输入的个数来为逻辑门分类。BinaryGate是LogicGate的一个子类,并且有两个输入。UnaryGatet同样是LogicGate的子类,但只有一个输入。这些输入被称作**‘引脚’(pin)**。 AndGate和OrGate是BinaryGate的子类,NotGate是UnaryGate的子类。AndGate、OrGate和NotGate类需要实现各自的布尔运算行为,这里提供一个函数 performGateLogic() 。要使用这些逻辑门,可以构建这些类的实例,详见代码。 有了基本的逻辑门之后,便可以开始构建电路。为此,需要将逻辑门连接起来,前一个的输出是后一个的输入。因此,要实现一个 Connector类 。(Connector类与LogicGate类是HAS-A关系,即连接器内部包含LogicGate类的实例,但是不在继承层次结构中) 每一个连接器对象都包含fromgate和togate两个逻辑门实例,数据值会从一个逻辑门的输出‘流向’下一个逻辑门的输入。因此,需要一个函数 setNextPin() ,将该函数添加到逻辑门类中,以使每一个togate能够选择适当的输入。 # !/user/bin/env

CPU中断的工作原理,从最底层讲起

a 夏天 提交于 2020-02-15 13:23:23
  前言   中断的概念属于硬件层。虽然我们在进行软件编程时不会直接使用中断,但理解它对我们来说依然重要。   我们在使用线程切换及状态管理、异常处理、硬件与处理器的交互、I/O操作等指令时,中断都在默默的为我们服务。   处理器基于硬件封装对外的指令集,底层语言封装指令集为我们提供更加简单的抽象,高级语言基于底层语言赋予程序更明确的语义。可以看到在这条关系链条中,下层的变动会牵一发而动全身影响上层。而上层想要提高效率,改变机制也必须得到下层的支持。   像 I/O 处理的不断演进,从占用CPU等待到通过中断阻塞等待到多路复用与异步,如果没有下层的支持上层是不可能实现的。而不了解下层的原理我们也很难真正理解一个机制的高效的原因。因此了解下层的原理对应用层工程师来说同样重要。   什么是中断   现代计算机具有多任务处理的能力,往往一台我们办公使用的普通计算机上都会同时运行着几十上百的任务(进程)。我们很难想象,我们点击一下鼠标,需要等待计算机的进程调度模块调度到鼠标处理任务后再给我们做出响应,这对我们来说是不可接受的。   现实是我们在点击鼠标或键盘时(正如我现在在做的事情),计算机会立即给我反馈处理结果,计算机与我们之间是在进行实时交互的。而实时性的实现便是依赖了中断,中断是为了顺应人们对实时性交互的需求而产生的技术。中断之所以有用,是因为它会立刻停下当前的程序(软件

虚拟化数电底层

家住魔仙堡 提交于 2019-12-06 01:14:46
虚拟化数电底层 目前已基本实现函数和结构体的面向对象化。 对象:以数电模块为单位(应该) 内部成员:线路,逻辑门,连接关系。以及虚拟化的输入端(调试用)。 方法: 建立线路(Line_create) 建立逻辑门(Gate_create) 连接输入端(Pin_attach) 连接元件(Attach) 模块充电(Power_on) 模块计算(CST) 改变输入(Update) 一.基本操作: 建立线路 实现框架: typedef _line* line; #define line_create(lptr) do { \ _line_create(&lptr); \ } while(0) main() { line l; line_create(l);   (...) } 其中: typedef struct _LINE { (...) } _line; #define MAXN 50000 _line _line__ALLOC_SPACE[MAXN]; _line* LAS_ptr = _line__ALLOC_SPACE; //initial is first address void _line_create(_line **ptr_addr) { //_line's pointer's address *ptr_addr = ++LAS_ptr; (...) } 效果