首页 > 其他分享 >第二章、试着制造一台计算机吧(连载中)

第二章、试着制造一台计算机吧(连载中)

时间:2022-11-14 09:45:07浏览次数:43  
标签:第二章 引脚 连接 5V 试着 Z80 内存 连载中 CPU

热身问答

  • CPU是什么的缩写?
    Central Processing Unit 中央处理器
  • Hz是表示什么的单位?
    赫兹, 时钟频率, 1s会产生的脉冲次数。
    频率的单位
    • 解释:
    • 通常用 Hz 来表示驱动 CPU 运转的时钟信号的频率。1秒发出 1 次时钟信号就是 1Hz,所以 100MHz(兆赫兹)的话就是 100×100 万 = 1 亿次/秒。M(兆)代表100 万. 1GHz就是 1000 x 100万 = 10亿次/秒
  • Z80CPU是多少比特的CPU?
    Z80 CPU是8比特的CPU (Z80代表什么?)
    • 解释:
    • CPU 上数据总线的条数,或者 CPU 内部参与运算的寄存器的容量,都可以作为衡量 CPU 性能的比特数。在Z80 CPU 中,无论是数据总线的条数还是寄存器的容量都是 8 比特,所以 Z80 CPU 是一款 8 比特的 CPU。而在 Windows 个人计算机中广泛使用的 Pentium(奔腾) CPU 则是 32 比特的 CPU。

目标: 试着自己绘画一台微型计算机吧. 请一边想象着元件之间传输的信号的作用,一边用红铅笔描画出笔者所介绍的电路,以此来代替实际的布线环节。当所有的电路都描红了,微型计算机也就完成了

2.1 制作微型计算机所必须的元件

制作微型计算机的三个基础元件:

  1. CPU - 负责解释、执行程序
  2. 内存 - 负责存储程序和数据
  3. I/O(Input/Output) - 负责将计算机和外部设备连接在一起

这里我们使用Z80 CPU作为Micro Computer的CPU, TC5517作为内存, Z80 PIO作为I/O。

那么, Z80 CPU很古老, 普及在8比特计算机广泛应用的时代。 而TC5517是可以存储2K的8比特数据的内存, 因为1K = 2^10 = 1024, 所以2K = 8bit x 2 x 1024 = 16384 bit。 而Z80 PIO的I/O经常和Z80 CPU一起使用。 PIO是Parallel I/O 并行输入/输出的缩写, 可以在微型计算机和外部设备之间并行地输入输出8比特的数据。

现在我们有了三个基本组件, 那么为了驱动CPU运转, 我们需要称为“时钟信号”的电信号来每隔一段时间就变换一次电压的高低, 好像它自己带有一个时钟。 而输出时钟信号(电信号)的元件叫做“时钟发生器”。 时钟发生器中带有晶振, 会根据自身的频率(振动的次数)产生时钟信号。 而时钟信号的频率可以衡量CPU的运转速度。 这 里 使 用 的 是2.5MHz(兆赫兹)的时钟发生器

也就是说为了驱使CPU运作, 我们需要时钟发生器产生时钟信号。

晶振: 全名为晶体振荡器。 成分是石英, 可以产生高度稳定的信号(频率稳定)。

那么考虑到我们需要人为操作这个微型计算机, 输入程序是必不可少的。 这里我们使用由八个开关并排连在一起构成的元件“指拨开关”用来输入程序。 如图2.1. 相对应的输出程序执行结果的装置是8个LED(发光二极管)。

总结本次用到的元件:

其中74367和7404也是IC,用于提升连接外部设备时的稳定性。

集成电阻由8个电阻集成合成, 电阻是用于阻碍电流流动、降低电压值的元件。 电阻的单位是 Ω(欧姆)。电容是存储电荷的元件,衡量存储电荷能力的单位是 F(法拉)。要让微型计算机运转起来,5V(伏特)的直流电源是必不可少的。于是还需要使用一个叫作“开关式稳压电源”的装置,将 220V 的交流电变成 5V 的直流电

2.2 电路图的读法

怎么才能读懂电路图呢, 电路图中, 用连接着各种元件符号的直线表示如何布线。 而电路中有些地方有交叉, 但这不代表他们在交叉处构成通路, 只有在交叉处画上一个小黑点才表示构成通路。

本次制作的微型计算机工作在 +5V 的直流电下。虽然在实际的电路中要把 +5V 和 0V 连接到各个元件的各个引脚上,但是如果在电路图中也把这些地方都一一标示出来的话,就会因为到处都是 +5V 和 0V的布线而显得混乱不堪了。所以要使用如图 2.4 所示的两种电路图符号来分别表示电路连接到 +5V 和连接到 0V 的情况。

IC 的引脚(所谓引脚就是 IC 边缘露出的像蜈蚣腿一样的部分)按照逆时针方向依次带有一个从 1 开始递增的序号。数引脚序号时,要先把表示正方向的标志,比如半圆形的缺口,朝向左侧。举例来说,带有 14 个引脚的 7404,其引脚序号就如图 2.5 所示。

如果按照引脚序号的排列顺序来画 IC 的电路图符号,那么标示如何布线时就会很不方便。所以通常所绘制的电路图都不受引脚实际排布的限制A。画图时,在引脚的旁边写上引脚的序号,在表示 IC 的矩形符号中写上表明该引脚作用的代号。代号就是像 RD(Read)表示执行读取操作,WR(Write)表示执行写入操作这样的代表了某种操作的符号。各个代号的含义等到为引脚布线时再一一说明。

2.3 连接电源、数据和地址总线

补充:

  • 数字IC就是用来传递、加工、处理数字信号的。数字IC中每个引脚上的电压要么是0V、要么是+5V。

  • 模拟IC就是用来处理自然模拟信号的。

  1. 连接电源, 促使机器工作

  2. 因为VCC引脚和GND引脚用于为IC供电, 所以需要将+5V电源连接到各个IC的Vcc引脚上, 然后将0V电源连接到各个IC的GND引脚上。 再将+5V和0V连接到时钟发生器上。 那么因为已经接通了电源, 现在这些IC和时钟发生器就可以工作了。

    • 这里我们知道Vcc引脚和GND引脚给IC供电, 所以他们的电压是恒定不变的+5V和0V, 但是其他引脚上的电压会随着计算机的操作在+5V~0V之间不断变化。

    • 在数字 IC 中,每个引脚上的电压要么是 0V、要么是 +5V,通过这两个电压与其他的 IC 进行电信号的收发。

    • 因为数字IC用二进制数的形式收发信息, 所以0V表示数字0、+5V表示数字1. 计算机中信息的最小单位是1比特(1 bit), 而以一个二进制数字“0”或“1”所表示的信息叫做 1比特。 那么8个二进制数字就是1字节, 也就是 8 bit = 1 byte(比特是信息的最小单位,字节是信息的基本单位。这里制作的微型计算机是一台 8 比特微型计算机,因此是以 8 比特为一个单位收发信息的。)

  3. CPU是电脑的核心, CPU可以与内存或者I/O进行数据的输入输出, 所以我们需要指定输入输出数据时的源头或者目的地, 因此CPU上有“地址总线引脚”。

    • Z80CPU的地址总线引脚共有16个, 用代号A0~A15表示, A表示Address(地址), 0~15表示一个16位的二进制数中各个数字的位置, 0对应最后一位、15对应第一位。 而这16个地址总线引脚所能指定的地址共有65536个(2的16次方=65536)。 用二进制数表示的话就是 0000000000000000~1111111111111111。因此 Z80 CPU可以指定 65536 个数据存取单元(内存存储单元或 I/O 地址),进行信息的输入输出。
  4. 那么指定了存取数据的地址, 就可以使用“数据总线引脚”进行数据的输入输出了。

    • Z80 CPU的数据总线引脚共有8个, 用代号D0~D7表示, D代表Data(数据), 后面的数字0~7表示二进制数字中各个数字的位置, 0对应最后一位、7对应第一位。
    • 切分数据: 因为Z80 CPU一次性可以输入输出8比特的数据, 所以当我们需要输入输出位数大于8比特的数据时, 就需要以8比特为单位切分这个数据。
  5. 内存TC5517上也有地址总线引脚(A0~A10)和数据总线引脚(D0 ~ D7). D0~D7和CPU上的数据总线引脚D0 ~ D7相连, A0~A7和CPU上的A0 ~ A7相连。 因为共有11个地址总线引脚, 我们可以推算出一块TC5517上可以存储2048个8比特的数据(如下图)可是由于用于输入程序的指拨开关是以8比特一个单位指定内存地址的, 所以我们只使用A0~A7八个引脚, 也就是256个存储单元, 这稍微有些浪费。

  • 2的11次方 = 2048; 2的8次方=256

2.4 连接I/O

补充:

寄存器是位于CPU和I/O中的数据存储器, 相比于其他存储器如CPU Cache、内存、硬盘等, 寄存器是距离CPU最近、处理速度最快但也是最贵所以最小的存储器。

了解Z80 PIO的结构:

Z80 PIO(我们的I/O设备)共有4个寄存器, 分别是端口A控制, 端口A数据、端口B控制、端口B数据。 2个用来设定PIO本身的功能, 两个用于存储与外部设备进行输入输出的数据

  • 端口(Port)就是I/O与外部设备之间输入输出数据的场所,如图Z80 PIO有两个端口-端口A和端口B, 所以最多可以连接2个用于输入输出8比特数据的外部设备。

开始布线:

  1. 为了让CPU和PIO可以使用8个引脚(D0 ~ D7)交换数据, 我们将其连接至Z80 CPU的D0 ~ D7。

  2. 为了选择I/O中的寄存器, 我们将CPU地址总线的A0 和 A1 连接到Z80 PIO的B/A 和 C/D 引脚(A、D上有横线)。

    • 若表示IC引脚作用的代号上划有横线, 则表示通过赋予该引脚0(0V)可使之有效, 若没有横线,则表示通过赋予该引脚1(+5V)可以使之有效。

      • 因此若赋予 B/A (A上有横线)引脚 1 则表示, A无效, 选中 B,反之赋予 0 则表示选中 A, A生效。
      • 同样地,若赋予 C/D(D上有横线) 引脚 1 则表示选中的是 C(C 即 Control,表示控制模式);反之赋予 0 则表示选中的是 D(D 即 Data,表示数据模式)
    • A0 ~ A1(00 ~ 11)共四个地址连接到I/O的寄存器中。 而前面我们知道CPU的A0~A7(256个地址 00000000 ~ 11111111)连接到了内存中。

    • Z80 CPU 的 A8~A15 地址总线引脚尚未使用,所以什么都不连接。在电路图中可以用代号 NC(No Connection,未连接)表示引脚什么都不连接。

      • 因为IC 上的引脚有些只用于输出,有些只用于输入,还有些是输入输出两用的。对于只用于输出的引脚,不需要使用时的处理方法是这个引脚什么都不连接(NC);而对于只用于输入或输入输出两用的引脚,不需要使用时的处理方法则是把这个引脚上的电压固定成是 +5V 或 0V。

2.5 连接时钟信号

布线:

  1. 时钟信号是驱使CPU运转的必要组件, 而时钟发生器是输出时钟信号的元件, 所以我们需要把时钟发生器个CPU和I/O设备连接起来。 那么我们需要把时钟发生器的8号引脚和Z80 CPU的CLK(Clock,时钟)引脚、 Z80 PIO的CLK引脚分别连接起来。
    • 时钟发生器的 8 号引脚与 +5V 之间的电阻用于清理时钟信号。

2.6 连接用于区分读写对象是内存还是I/O的引脚

问题

  • 前面我们已经把Z80 CPU连接到了TC5517内存和Z80 PIO上, CPU的地址总线引脚A0 ~ A7都连接到了TC5517的A0~A7上为了指定输入输出数据时的源头或者目的地, 而CPU的地址总线引脚A0和A1也连接到了Z80 PIO的四个寄存器上(B/A、C/D), 这就导致了这两次连接都使用了地址总线引脚A0和A1, 那么这就导致了一个问题: 当地址的最后两位是00、01、10、11时, CPU就无法区分访问的是TC5517中的存储单元, 还是Z80 PIO中的寄存器了
  • 内存和I/O设备如何区分CPU是输入数据还是输出数据的?

解决

问题一:

  • Z80 CPU上的MREQ(即Memory Request内存请求)引脚IORQ(即I/O Request, I/O请求)引脚解决了这个问题。

    • 注: 两个引脚的四个字母上有横线
    • 当 Z80 CPU 和内存之间有数据输入输出时,MREQ 引脚上的值是 0,反之则是 1。
    • 当 Z80 CPU 和I/O 之间有数据输入输出时,IORQ 引脚上的值是 0,反之则是 1
  • Z80 CPU的MREQ引脚会连接到内存的CE(Chip Enable, 选通芯片)引脚, IORQ引脚会连接到Z80 PIO的CE引脚和IORQ引脚。

    • 若把TC5517的CE引脚设为0, 则TC5517在电路中被激活, 若设为1则从电路中隔离, 因为此时TC5517进入了高阻抗状态, 所以即使它上面的引脚接入了电路也不会接受任何电信号。
    • 在Z80 PIO中,我们需要通过将CE引脚和IORQ引脚同时设为0或者1来达到与内存的CE引脚相同的效果。 也就是同时为0, 则Z80 PIO在电路中被激活, 同时为1, 则从电路中隔离。

问题二;

  • 为了区分CPU在输入还是输出数据, 我们需要将Z80 CPU上的RD引脚和WR引脚和TC5517上的同名引脚连接起来, 再将CPU的RD引脚和Z80 PIO的RD引脚连接起来。
    • RD: Read, 输入, 为0时执行输入操作
    • WR: Write, 输出, 为0时执行输出操作
    • 虽然Z80 PIO上只有RD引脚, 但是由于数字IC引脚上的值非0即1, 所以只用一个引脚也可以区分是输入还输出, 0为输入, 1为输出。

2.7 连接剩余的控制引脚

CPU、内存、I/O中除了地址总线引脚、数据总线引脚, 还有其他引脚, 一般我们把这些引脚统称为“控制引脚”, 因为这些引脚上输入输出的电信号具有控制IC的功能。 看看我们的电路图, 现在应该只剩下9个控制引脚没有连接了。

  1. 将Z80 CPU的M1引脚和INT引脚与Z80 PIO上同名的引脚连接起来。

    • M1: Machine Cycle 1, 机器周期1。 用于同步的引脚
    • INT: Interrupt, 中断。 用于从Z80 PIO向Z80 CPU发出中断请求的引脚
      • 中断就是让 CPU 根据外部输入的数据执行特定的程序。
  2. Z80 CPU的RESET引脚用于重置CPU。 一旦RESET的值先设为0再还原成1, CPU就会被重置, 重新从内存0号地址上的指令开始顺序往下执行。

    • Reset, 重置

    • 重置 CPU 可以通过按键开关完成。按键开关需要经过电阻接在 +5V 和 0V 之间。

    • 观察这一部分的电路图, 可以看出平时默认RESET引脚上是+5V(即1), 按下按键开关时, RESET引脚就变为了0V(即0), 而放开按键开关后又会回到+5V。

      • 电阻是为了防止短路而加入的,否则一旦按下了按键开关,+5V 和 0V 就会直接接到一起发生短路。
    • 连接在 RESET 引脚上的电容,用于在电路接通电源时自动重置CPU。电容就好像一个充电电池,具有储存电荷的功能。在通电后的一刹那,由于电容正在充电,所以 RESET 引脚上的电压并不会立刻上
      升到 +5V。而完成充电后,RESET 引脚的电压会变为 +5V,这样就相当于 RESET 引脚上的值从 0 变成了 1,重置了一次 CPU。

  3. 总线是连接到CPU中数据引脚、地址引脚、控制引脚上的电路的统称。 而通过使用快动开关可以使BUSRQ的值可以在0和1之间切换, 若BUSRQ引脚的值为0, 则Z80 CPU从电路中隔离。 处于隔离状态的CPU就可以不经过CPU, 而是手动向内存写入程序了,而这种不经过CPU而是直接从外部设备读写内存的行为叫做DMA(Direct Memory Access)。 我们的笔记本中的硬盘需要读写内存时使用的就是DMA。

    • BUSRQ: Bus Request, 总线请求
    • DMA: Direct Memory Access, 直接存储器访问
  4. BUSRQ为0时, CPU从电路中隔离后, BUSAK引脚上的值就会变成0. 而BUSAK时进行DMA的第二关, 也就是只有把BUSRQ引脚上的值设为0之后, 再请确认BUSAK引脚上的值也变成了0后, 才能进行DMA。

    • BUSAK: Bus Acknowledge, 响应总线请求。
    • BUSAK引脚分别连接到4个74367的G1和G2引脚上。 (74367的作用在后文说明)
  5. Z80 CPU 的其他控制引脚并未使用。所以要把 WAIT 引脚和 NMI引脚上的值设为 1,即连接到 +5V 上。之所以在连接时加入电阻,是为了便于今后加入开关等元件。剩下的 HALT 引脚和 ASTB 引脚什么都不连接。

    • Pull-up: 上拉, 就是像这样通过加入电阻把元件的引脚和+5V连接起来。
  6. Z80 PIO的PA0~PA7以及PB0 ~ PB7用于与外部设备进行输入输出, 所以稍后要把他们分别连接到指拨开关和LED上。

    • PA: Port A; PB: Port B
  7. 剩下的引脚: 将 IEI 引脚上拉,IEO 引脚、ASTB 引脚、ARDY 引脚、BSTB 引脚和 BRDY 引脚则什么都不连接。

那么到此为止, 我们将Z80 CPU、TC5517、Z80 PIO以及时钟发生器上所有需要用到的引脚都接入电路了, 那么计算机主机系统的功能完成了。

小总结

完成主机系统的功能:

总结一下我们已经做了什么:

  1. 准备必要元件: CPU(Z80 CPU)、内存(TC5517)、I/O设备(Z80 PIO)、电阻、驱使这三个元件运转的时钟发生器, 以及用来输入程序的指拨开关和输出程序执行结果的8个LED。
  2. 连接各个IC元件上的引脚, 用于给IC供电。
    1. 将各个元件上的Vcc和GND引脚分别连接到+5V和0V上
    2. 为了实现CPU和内存活着I/O进行数据的输入输出, 我们首先要指定存取数据的地址, 所以我们将CPU的地址总线引脚A0~A7连接到内存TC5517的A0 ~ A7上, 将CPU的A0 ~ A1连接到Z80 PIO的A0 ~ A1. 然后就可以使用数据总线引脚D0~D7进行数据传输了, 所以CPU的D0~ D7和TC5517的D0 ~ D7相连, 也和Z80 PIO的D0~D7相连。
    3. 为了选择I/O中的寄存器, 我们将CPU地址总线的A0 和 A1 连接到Z80 PIO的B/A 和 C/D 引脚(A、D上有横线)
  3. 将CPU、I/O设备与时钟发生器连接起来, 因为时钟发生器是输出时钟信号的元件, 而时钟信号是驱使CPU运转的必要组件。于是我们把时钟发生器的8号引脚和Z80 CPU的CLK引脚、 Z80 PIO的CLK引脚分别连接起来。
  4. 为了区分读写对象是内存还是I/O的, 两次连接都使用了A0 ~ A1引脚, 所以我们将CPU的MREQ引脚连接到内存上, IORQ引脚连接到I/O上。
  5. 为了区分CPU在输入还是在输出数据, 我们将CPU的RD引脚和WR引脚和内存上的同名引脚连接起来, 然后将CPU的RD引脚和I/O的RD引脚连接起来。 (0为输入、1为输出)
  6. 用来控制IC的控制引脚:
    1. M1: CPU与I/O相连, 用于同步
    2. INT: 从I/O设备向CPU发起中断请求的引脚。
    3. RESET: 重置CPU
    4. BUSRQ: 总线请求
    5. BUSAK: 响应总线请求
      ······

总结一下计算机的工作原理

CPU在时钟信号的控制下解释、执行内存中存储的程序,按照程序中的指令从内存或 I/O 中把数据输入到 CPU 中,在 CPU 内部进行运算,再把运算结果输出到内存或 I/O 中。

2.8 连接外部设备, 通过DMA输入程序

将上面的主机系统和外部设备连接起来。

我们要使用 2 个指拨开关和 1 个按键开关,向地址总线引脚和数据总线引脚发送电信号,然后通过 DMA 将数据总线上的数据存储到内存。

复习: 不经过CPU而是直接从外部设备读写内存的行为叫做DMA Direct Memory Access

  1. 将其中一个指拨开关连接到内存5517的数据总线引脚D0 ~ D7上, 再将另一个指拨开关连接到内存的地址总线引脚A0 ~ A7上。 将第三个指拨开关通过电阻连接到+5V上这也通过拨动这个指拨开关就可以输入+5V或0V的信号了。
  2. 将用于控制内存写入的按键开关连接到内存的WE引脚上, 然后把CE引脚连接到0V上。
  3. 为了写入数据,还要将 TC5517 的 RD 引脚上拉起来,连接到 +5V上,然后把 CE 引脚连接到 0V 上。

把这些元件都连接起来以后,就可以拨动指拨开关,用二进制数设定地址总线引脚和数据总线引脚上的数据了。设定完后按下按键开关,数据就会被写入 TC5517 中。

  1. 但是为了不让开关的状态对电路产生影响, 我们要避免将这些开关直接连接到内存的各个引脚上, 所以我们要使用74367将开关从电路中隔离出来。
    • 74367: 三态总线缓冲器IC, 用三角形标志代表的缓冲器, 表示电信号从右向左直接通过。
    • 在 74367 的 G1 引脚和 G2引脚同时为 0 的时候,电信号才能通过。而当 G1 引脚和 G2 引脚同时为 1 时,74367 就会与电路隔离。
  2. 那么前面我们知道, 在打开了CPU的BUSRQ引脚连接的开关后, 我们可以通过CPU的BUSAK引脚输出0得知CPU进入了DMA状态, 这时我们可以把BUSAK引脚连接到4个74367的G1和G2引脚上, 就可以实现通过DMA向内存写入数据了

2.9 连接用于输入输出的外部设备

总结

练习

  1. 地址总线引脚的作用
  2. 数据总线的作用

标签:第二章,引脚,连接,5V,试着,Z80,内存,连载中,CPU
From: https://www.cnblogs.com/Natsumeno/p/16888038.html

相关文章