徒手画一个加法器吧

没学过<<数电模电>>,第一次深入的了解到计算机是怎么组成的,感觉非常生气。世界上最好的学习方法就是分享,此次就分享一下怎么徒手画一个加法器吧。emmmm....没画之前也不知道需要多大的地方。直接开始吧。

一、电子管到晶体管

1. 继电器

继电器是一种小电流控制大电路的自动开关。分为控制电路和工作电路,控制电路接通后,电流通过线圈,会在电路的线圈处产生电磁感应,吸附衔铁使右侧的工作电路接通。控制电路电压较低,工作电路电压较高,通过这个继电器装置,就实现了小电流控制大电路的装置。

电流在传输过程中,随着距离越来越长,会衰减的越来越多,此时,就可以通过继电器,放大电流,使得电流传输更远的距离。

2.非门

继电器的作用的间接控制另一个电路的通短。在上面的继电器中,控制电路输入电流,工作电路就会产生电流,工作电路和控制电路状态使同步的。把控制电路看作输入,工作电路看作输出,那么上面的继电器就是输入等于输出的。我们把控制电路标记为A端,工作电路标记为F端。再看另一种继电器。

在这个继电器中,电路结构与之前的基本类似,唯一的区别在于A端未输入电流时,F端的开关是闭合的,是有电流输出的,当A端有电流输入时,F端就会变成开路。此时的继电器,输入和输出相反,我们称此装置为非门。

3.与门

在第一个继电器中,A端的输入直接影响到F端。把门把此继电器进行改造,如下图所示,A端有两个控制电路,控制B端的两个开关的闭合,只有A端的两个电路都有电流时,F端才会有电流。这种串联的电路结构,就是与门。

4.或门

串联为与门,那么并联就是或门了,A端的控制电路中,只要有一个有电流,F端就会有电流。

5.异或门

异或门开始电路就没上面那么简单了,异或门由两个非门,两个与门一个或门组成。要说清楚可能需要去解释数理逻辑和电路之间的关系。更详细的可能还得用到真值表。鉴于我只是想画一画电路图,就不进行细说了。
我们用下面三个图示来表示与门,或门和非门。

异或是这样的。A和B两个输入,F为输出。只有A和B由一个为真是,F才为真。即A为真并且B为假时F为真,A为假并且B为真时F为真。如果A和B同时为真,则F为假,A和B同时为假,F也为假。
所以F为真,只有两种情况,A为真并且B为假 和 A为假并且B为真

我们用一个电路表示A为真B为假的情况,用另一个电路表示A为假B为真的情况。但是异或门的输入只有A和B,你没办发让输入即有电流,又没电流。所以我们需要把A的输入转换成两部分,一部分还是初始的输入,另一部分通过非门转换成相反的输入。所以A和B输入后通过非门大概是这个样子。

本来我因为像这样,画一个丑陋并且难以看懂的电路图,奈何并未真的学过电路。其实继电器左边的电路都是从输入电流到线圈,然后都回到了电源的负极。我们电流的流入方向表示为电流的输入,然后电流的流出表示为接地。继电器右边的电路,都是一个或多个开关,开关的上面为电流信号的输出,下边为右边电路电流的输入,我们用V表示电流的输入。所以上面丑陋的电路图被简化为下面这样。用A和B表示真,!A和!B表示假。

两面的电路只是一个输入点,我们还需要同样的电路作为另一个输入点。如下图所示,A和B输入转换成了A,!A,B,!B四个输出。然后把A和!B作为一个与门的输入,!A和B作为另一个与门的输入。两个与门的输出,作为一个或门的两个输入。经过或门得到F值。如果把此电路联通。当给A或B任意一个电路输入电流,另一个不输入电流时,F就是有电流输出的。如果A和B同时没电流,或同事有电流。则F没有电流输出。这就是一个完整的异或门。

异或门或许是最后一个用简化电路画出来的电路图了。后面基本就用门符号来表示4种逻辑门了。因为实在是太复杂了。

6.全加器

一口是吃不了一个胖子的。要画一个加法器,我们得一步一步的画。比如我们要计算5+5等于多少。对于我们人类来说,一眼就能看出5+5是10.在复杂一点的,15+15等于多少。这个时候我们可能需要列一个竖式来计算。计算过程是这样的。5+5得到10,个位得到0,然后向十为进1,然后在计算十位。1+1再加上个位进上来的1,十位的结果为3。所以16+16的结果是30.
但是在计算机的世界里。只有开关的闭合。用数字表示就是0和1.所以计算机的世界都是2进制的数字。15在计算机里面存为1111,1111+1111的过程和十进制类似。二进制从右边往左依次是0位,1位,2位等等。0位的1+1得10,0位为0,向1位进一位,计算1位,1+1再加上进上来的1,得11,1位位1,在向2位进1.依次这样计算得到最后的结果。
所以计算一个大的数字,无论是十进制还是二进制。都是计算被加数,加数的位和进位的和。得到的结果有当前位的结果和进位。所以对一位作加法,我们需要三个输入,2个输出。用A表示被加数,B表示加数,C1表示输入的进位,S表示结果,C0表示输出的进位。有个这3个输入和2个输出我们就可以计算二进制中,任意单个数字位的加法。这种计算单个位加法的电路就是全加器。

这样一个复杂的逻辑电路,可以分为两个部分。通过A,B,C1得到S和通过A,B,C1得到C0.具体的分析过程需要通过真值表进行归纳。我们用A.B的形式表示A和B相与,可以简化为AB,用A+B的形式表示A和B相或。所以通过A,B,C1使得S为1,有一下四种情况。
!A.!B.C1
!A.B.!C1
A.!B.!C1
A.A.A
通过A,B,C1使得C0为1,有一下四种情况。
!A.B.C1
A.!B.C1
A.B.!C1
A.B.C1
我们把所有所有让S为1的情况作或运算。即四个情况,又一个满足,S就为1.C0同理。可以得到两个公式。
S = !A.!B.C1 + !A.B.!C1 + A.!B.!C1 + A.A.A
C0 = !A.B.C1 + A.!B.C1 + A.B.!C1 + A.B.C1

这样我们就通过A,B,C1三个输入得到了S和C0的值。我们把逻辑表达式转换为电路,就能得到一个全加器了。全加器中的与门有3个输入,或门有4个输入。

br/>整个全加器中用到了3个非门,7个与门,2个或门。整个全加器一共用了32了继电器。当然这是相当复杂的。我门可以通过数理逻辑推导把上面的公式转换成下面的形式。@表示异或
S = [email protected]@C1
C0 = C1([email protected])+AB
此公式对应的电路图如下所示。

此时的全加器,需要两个与门,2各异或门,1各或门,且都是2各输入的。
与门和或门,每个门需要2个继电器。异或门需要8个继电器,所以一共是22个继电器。
异或门的继电器,其实可以进一步简化为6个继电器。毕竟没学过数电模电,电路图看起来有点吃力,就不画了。
全加器可以计算一个位的加法。如果我们相计算多个位的加法,可以把多个全加器连起来。就成了本文的目标电路:加法器。

徒手画一个加法器吧

原文地址:https://blog.51cto.com/xiaofengfeng/2422960

时间: 2024-10-20 06:30:47

徒手画一个加法器吧的相关文章

Effective前端3:用CSS画一个三角形

三角形的场景很常见,打开一个页面可以看到各种各样的三角形: 由于div一般是四边形,要画个三角形并不是那么直观.你可以贴一张png,但是这种办法有点low,或者是用svg的形式,但是太麻烦.三角形其实可以用CSS画出来.如上图提到,可以分为两种三角形,一种是纯色的三角形,第二种是有边框色的三角形,先介绍最简单的纯色三角形. 1. 三角形的画法 三角形可以用border画出来,首先一个有四个border的div应该是这样的: 然后把它的高度和宽度去掉,剩下四个border,就变成了: 再把bord

自己画一个ActivityIndicatorView-b

苹果的UI控件中有一个UIActivityIndicatorView,俗称菊花.→_→现在我们仿照它来制作一个其它样式的指示器,如下: ActivityView.png 自定义指示器 首先画一个白色的扇形.创建一个MyLayer类继承自CALayer,重写它的绘图方法- (void)drawInContext:(CGContextRef)ctx: - (void)drawInContext:(CGContextRef)ctx {        CGContextSetRGBFillColor(c

Directx11学习笔记【十二】 画一个旋转的彩色立方体

上一次我们学习了如何画一个2D三角形,现在让我们进一步学习如何画一个旋转的彩色立方体吧. 具体流程同画三角形类似,因此不再给出完整代码了,不同的部分会再说明. 由于我们要画彩色的立方体,所以顶点结构体中加入颜色变量 struct Vertex { XMFLOAT3 pos; XMFLOAT4 color; }; 着色器代码 1 cbuffer cbPerObject 2 { 3 float4x4 gWorldViewProj; 4 }; 5 6 struct VertexIn 7 { 8 flo

001: 徒手建立一个JavaWeb应用

不借助IDE,我们徒手建立一个JavaWeb应用. web.xml: 1 <?xml version="1.0" encoding="ISO-8859-1"?> 2 <web-app xmlns="http://java.sun.com/xml/ns/javaee" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLoca

[原创]css3简单几步画一个乾坤图

效果如上,鼠标移上去会有动画. 代码如下非常简单: 1 <html> 2 <head> 3 <style> 4 .outer{height:100px;width:200px;border-radius:100px 100px 0px 0px;border:solid 1px #666;border-bottom:none; margin:0 auto;background:#fff;overflow:hidden;} 5 .inner{width:300px;heig

智慧城市,在中国的北海边再画一个圈——大连“中国首届智慧城市协同创新峰会”请你带好笔

这可能是中国第二次大规模地改变城市印象.从1979年,"在中国的南海边画了一个圈",用三十多年的时间,中国完成了从传统城市到现代城市的跨越,繁荣.机会.财富.梦想演变成激动人心的中国奇迹和城市骄傲.但随之而来,城市化进程也引发诸多的问题,社会保险.医疗.就业.安防.交通--所有的这些问题都为生活于此的每个城居者带来困扰. 现代化的中国城市需要改变,城市的管理需要提升,所有人都在发问,城市未来的发展空间在哪,围绕城市建设,商机在哪?如果城市已经拥有了摩天大楼.地铁公交.城际轻轨.繁华商铺

看opengl 写代码(4) 画一个圆

opengl 编程指南 P30 下面代码 是 用 直线 连起来 画一个圆. // circle.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <gl/glut.h> #include <cmath> #define LENGTH 100 #define PI 3.1415926 void init(){ glClearColor(0,0,0,0); } void display(){ glColor3f

php画一个背景透明,且开始处旋转到在圆的正下方处的一个圆饼统计图

/* * _survey 得到一个投票的圆饼图 * @access public 表示函数对外公开 * @param $_agree 同意票数 * @param $_disagree 反对票数 * return 一张统计圆饼图 * */ function _vote($_agree,$_disagree){ //处理参数 if($_agree==0&&$_disagree==0){ $_vote = 270; } if($_agree==0&&$_disagree!=0){

手把手带你画一个动态错误提示 Android自定义view

嗯..再差1篇就可以获得持之以恒徽章了,今天带大家画一个比较简单的view. 转载请注明出处:http://blog.csdn.net/wingichoy/article/details/50477108 废话不多说,看效果图: 首先 构造函数 测量... 这里就一笔带过了. public ErrorView(Context context) { this(context, null); } public ErrorView(Context context, AttributeSet attrs