存储器和晶体管


2

我问这个问题是一个早期的计算机科学专业的学生,​​他开始对真正的低水平的东西/计算机/电气工程更感兴趣。我对硬件非常不熟悉,即使看了很多视频并阅读了大量文章,我仍然无法理解。

你编写一个程序,编译它,它被加载到内存中,然后...... ???

我知道晶体管可以存储一位数据。好的,够公平的......

但是当你将程序加载到内存中时,发生了什么?我熟悉逻辑门和所有这些,但它在...内存中意味着什么?

如果你有一个程序加载到内存中,它的机器代码是计算机可读格式并正在处理,这些值如何从“在内存中”转换为晶体管开启和关闭?根据我的理解,程序计数器正在将这些数据读入您的内存中,所以当您在内存中时,这是否自动意味着这个开关流程正在进行?这是最后一步吗?物理硬件芯片如何“读取”内存中的这些数据?

我认为让我失望的是,我所看到的每个视频代表晶体管如何存储一些数据,这表明一个人将电线切换到电路板上的不同孔中,以证明它。但是电脑周围没有一个小人在转换电线。这个过程是如何进行的?

请帮帮我,我无知,想学习。


这个博客有一个交互式ALU模拟和一个非常好的整体解释,从这个东西仍然是人类可以理解的规模。Ken Shirriff的博客。它解释了摩托罗拉74181 ALU。我接受训练的唯一ALU是从1957年开始的,大小与冰箱相当。它仍然在使用,我在1990年左右接受过训练。只有2k的内存,你必须真正有效率。预计编码员平均每天会产生4或5条指令。但他们也在设计CPU电路的一些部分。
Phil Sweet

Answers:


0

当演示中的某个人“切换线路”时,他真正在做的是将不同的电压(表示逻辑“0”和“1”电平)应用到电路中的某个点。在典型的存储器电路中,存在“写使能”控制电压以及“数据输入”电压。

当“写入使能”信号“接通”时,存储器电路将根据其输入是否应用“0”或“1”来改变其内部状态。当“写入启用”为“关闭”时,存储器忽略对输入的任何更改,并保持相同状态 - 即它“记住”最后一次输入是什么。

你可能会发现通过直接达到每个晶体管的工作水平更容易理解这一点,而是学习如何通过实现简单逻辑功能的构建模块(通常称为“逻辑门”)来设计和构建数字电路。 “和”,“或”和“不”。

在计算机科学术语中,这是可用于设计电路的一组“数字功能” 的接口,而晶体管正在做的细节是每个功能的实现

大多数关于数字电子学的优秀书籍和网络课程将分离关于问题的设计和实施方面的教学。许多电路设计人员永远不会关注实现的细节 - 完全相同的方式,许多计算机程序员使用函数库的API,而不知道(或需要知道!)究竟是如何编写的。

当然,存储器电路的使用量非常大,并且需要尽可能高效(快速,低功耗,物理尺寸小等),因此使用晶体管或其他半导体器件的设计通常是高度“优化的”。就像在计算机编程中一样,这可能使他们的内部操作难以理解,但它并没有改变它的使用方式 - 即它的界面。

与计算机科学中的其他主题一样,这里的一个重要概念是在不同的“抽象层次”中工作。一个完整的,功能强大的CPU是“仅”(大!)晶体管集合,用于创建逻辑门,用于创建更复杂的子组件(例如寄存器,加法器,乘法器等)...... “CPU”的级别。事实上,您的CS学位课程可能会有一个课程,详细介绍了整个过程,简单的CPU设计。但要理解一个简单的CPU(仅由“数千个晶体管而不是数百万个晶体管构建”),试图了解每个晶体管正在做什么不是 最好的方法 - 正如你不会试图通过分别查看每行代码来理解包含数千行代码的计算机程序,并忽略单个行被组织成几个嵌套的“抽象层”这样的事实语句组,函数,类,设计模式等


如果你需要的只是非常简单的话,你可能会拿走一千个晶体管。
joojaa

0

你必须明白,即使是一台愚蠢的简单计算机,至少有数百个晶体管被分成几十个独立的功能。即使这样,有问题的计算机几乎没用,因为它没有像键盘或USB端口那样的外围设备。

由于其中许多都需要使用某些软件。因此,关键问题是如何管理计算机,而每个部分都没有到位,以及如何在有任何外围设备之前进行编程。

现在,如果您正在关注Ben Eater的8位计算机,您必须观看每一个视频,直到它是一台计算机。即便如此,因为它没有键盘,他必须通过手动加载每个存储库来初始化存储器,之后计算机工作正常。现在这看起来有点反效果,因为实际上手动输入比手工编程的东西慢,但他没有其他输入设备。

因此,如果我们假设arcitecture是某种面向微步进延迟的处理器,为了便于理解。然后它在概念上如下工作:

激活系统每个部分的控制逻辑触发:

  1. 时钟导致程序计数器复制到指令寄存器。
  2. 微步时间移动一个单位
  3. 这使得控制逻辑在控制系统中获取/切换指令的第一微步。这会将控制信号转换为模块。
  4. 增加微步计数器
  5. 获取第二个微步控制模式
  6. 增量微步计数器
  7. ...
  8. 零微步计数器,递增程序,计数器循环开始。

所以,是的,控制逻辑是连接电线的人。但是它还有很长的路要走,在你达到这个阶段之前,事情需要很长时间才能验证。即使这样,系统也需要以某种方式进行编程,才能做任何事情。

并且这并不会毫无疑问地涉及编译器,因为它可能不存在,直到您设计了所有操作码。


0

第一:晶体管充当开关放大器。Base获得令牌电量 - 发射器开始发射与放入收集器一样多的电量。

连接两个晶体管 - (1)的集电极,(1)的发射极到(2)的集电极。(2)的发射器是“输出”。向两者的基极施加电压,并通过电流,产生“1”。但删除任何,它是“0”。这是一个AND门。

现在改为并行连接它们。两个收集器供电,两个发射器一起输出。其中任何一个都会将电流输出到输出线。您必须禁用它们才能生成“0”。那是OR。

现在在电源和地之间连接一个电阻和一个晶体管。点击晶体管和电阻之间的点作为“输出”。如果向基极施加电压,晶体管将“输出”上的所有电流和电压降至零,通过开路晶体管接地。无论通过电阻器传递什么,都会通过阻力最小的路径逃逸。正输入时输出为零。现在去掉基极电压和晶体管的电阻猛增。现在,电阻器从电源线驱动足够的电流,以在输出端产生清晰的“1”。那不是。

您现在可以将这些连接输出与输入相结合,组合成一大堆其他输出。NAND =不是A而不是B. XOR:A而不是B,或B而不是A. XNOR:(A和B)或(不是A而不是B)。等等。

在X中连接两个XNOR门:每个门的一个输入引脚作为输入,另一个连接到另一个的输出。

在此输入图像描述

在那里,这是一点记忆。写作相当繁琐(S = 1:设置为1,R = 1:设置为0,S = 0,R = 0 - 保持值,S = 1,R = 1 - 火焰爆发,或者至少产生无意义的噪音)但是在输入和输出上有几个其他门可以使它变得更加明智。在输入上连接NAND和AND,每个输入来自'in',另一个输入来自'write'。在输出上连接一个3态缓冲器,第三个状态(高阻抗)输入标记为“读”。现在你可以按需写入或读取它,没有“读取”它不会触及你连接它的总线,没有“写入”它不会改变状态,无论“输入”出现什么。您可以将“in”和“out”连接到同一行。如果'write'处于活动状态,它将读取并记住该行上的内容。如果'read'处于活动状态,

那是一个完全可用的内存。

连续8个,每个输出到一行。8条线是数据总线。你有一个字节的数据。

获取其他8行(从现在开始称为地址总线)并将它们连接到多路分解器。这是大量的AND和NAND门的构造,它将8条线的状态的每种可能组合转换成256条不同的输出线。

现在将重复8位的行重复256次,每行在专用于它的多路分解器的一条专用输入线与单个全局“写入”之间得到一个AND,并在同一个多路复用器和“读”之间得到一个AND。 。而且你有一个8KB的内存。在地址总线上设置正确的8位组合,表明您的意图:'read = 1'或'write = 1',您将以给定字节存储数据总线的状态,或将其输出到数据总线上从那个字节。

在所有输入和输出上添加三态缓冲器(到目前为止有18个,8个数据,8个地址,1个读取,1个写入),并通过第19个输入激活它们:芯片使能。将其打包到集成电路中,您就拥有8KB RAM芯片。

想要更多内存?控制多个芯片的“芯片启用”的解复用器将允许您在多个芯片之间切换。

然后,在CPU中,当内部序列移动到“READ COMMAND”时,一个名为Program Counter的寄存器(只是一个字节,8个RS触发器,专用于特殊用途)连接到地址线。读取已激活。通过数据线,与新命令对应的位集返回CPU。它转到'命令解码器' - 这只是另一个解复用器。并且该解复用器激活一条线路,该线路激活CPU的子系统的整个动物园的特定子系统 - 负责该特定指令。

说,指令是JMP。跳转到程序中的其他位置,在命令后立即用内存中的值标记。通过命令解码器激活的门组将按顺序激活以下操作:首先,使程序计数器前进。然后将其输出到地址总线上。激活“读取”,然后将数据总线的输出填充到程序计数器中。命令完成。控制返回读取下一个命令 - 除了刚刚被修改的程序计数器指出'next'。这就是JMP命令的工作原理。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.