首页 > 其他分享 >CPU

CPU

时间:2023-03-07 11:45:48浏览次数:39  
标签:触发器 取反 电路 输入 测试 CPU 进位

缘分

为了知晓了CPU的实现原理,在B站搜索CPU实现后,找到了一个非常好的视频教程叫做一个8位二进制CPU的设计和实现

看了之后不仅解开了心中的疑惑,也更加了解熟悉CPU了,感谢UP主踌躇月光的分享。

故本节内容多参考以上视频内容,可理解为笔记整理。

CPU的组成

CPU全称为central processing unit,又称中央处理器,芯片样式如下图:

其组成部分如下图:

可以分为运算器和控制器,还有一些缓存(目前工艺多为3级缓存):

  • 运算器
    • 算术逻辑单元 ALU
    • 寄存器(暂存寄存器、累加寄存器、通用寄存器组、标志寄存器等)
  • 控制器
    • 程序计数器 PC
    • 指令寄存器 IR
    • 指令译码器
    • 时序信号发生器(时钟频率)
    • 微程序控制器
    • ...

前置条件

需要具备如下技能:

  • 数字逻辑基础 知道3大逻辑门(与And、或Or、非Not)
  • 数字电路软件 Logic Circuit

组合逻辑电路

半加器

定义

半加器电路是指对两个输入数据位相加,输出一个结果位和进位,没有进位输入的加法器电路。

参数说明

  • 输入
    • A:数值a
    • B:数值b
  • 输出
    • S:结果sum
    • C:进位carry

真值表

A B S C
0 0 0 0
0 1 1 0
1 0 1 0
1 1 0 1

公式

S = A^B (A异或B)
C = A&B (A与B)

电路实现

电路测试

全加器

定义

全加器英语名称为full-adder,是用门电路实现两个二进制数相加并求出和的组合线路,称为一位全加器。一位全加器可以处理低位进位,并输出本位加法进位。多个一位全加器进行级联可以得到多位全加器。

参数说明

  • 输入
    • A:数值a
    • B:数值b
    • CI:进位输入
  • 输出
    • S:结果sum
    • C:进位carry

真值表

A B CI S C
0 0 0 0 0
0 0 1 1 0
0 1 0 1 0
0 1 1 0 1
1 0 0 1 0
1 0 1 0 1
1 1 0 0 1
1 1 1 1 1

公式

S = A ^ B ^ CI (A 异或 B 异或 CI)
C = A&B + CI&(A^B) (A与B 或上 CI与(A异或B))

电路实现

电路测试

8位加法器

定义

在有了1位全加器之后,通过组合8个位实现8位的加法器。

[!WARNING]
注意:该加法器暂未支持负数。

参数说明

  • 输入
    • A:数值a
    • B:数值b
    • CI:进位输入
  • 输出
    • S:结果sum
    • C:进位carry

电路实现

电路测试

[!TIP]
注意:其中数字组件叫做探测器,显示的是16进制。

8位取反器

定义

计算机中是通过补码来做减法运算的,所以需要封装带开关的8位取反器。

参数说明

  • 输入
    • EN:开启取反开关
    • A:数值A
  • 输出
    • S:结果

电路实现

1位的取反器电路如下:

将8个1位的取反器按下图电路组合得到8位取反器:

电路测试

ALU(支持加法和减法)

支持减法

在8位加法器基础上,支持减法,并处理进位。

计算机中减法原理:
A - B = A + B的补码
B的补码=B取反 + 1

进位的处理

真值表如下:

CI C CO
0 0 0
0 1 1
1 0 0
1 1 0

当CI为0时表示做加法,有进位则保留;当CI为1时表示做减法,抛弃进位。

CO = CI取反 & C,也就是ALU组件中处理进位的电路。

电路优化

如下ALU电路改进支持加法和进位处理:

其中,8BN组件是当EN位真时,8位输入取反输出到S。DE为开启减法标准位,连接到CI和EN上,表示开启加法,且在取法后给进位为1的值,巧妙地用电路表达了取法加1(补码)。

ALU测试

7段数码管之1灯16进制显示

定义

利用7段数码管显示数值,可以显示16进制数,从0-f。

参数说明

显示的是16进制数,故共16个数,需要一个4个2进制位的输入。

电路实现

(改电路被封装为1L的组件,方便后续扩展)

通过测试可以找出各个数值对应的二进制,如下图8对应的二进制为0111 1111

利用ROM来做数值显示,依次测试可知对应数值的二进制,然后转为16进制写入ROM即可。

数值 二进制 16进制
0 0011 1111 3F
1 0011 0000 30
2 0101 1011 5B
3 0100 1111 4F
4 0110 0110 66
5 0110 1101 6D
6 0111 1101 7D
7 0000 0111 7
8 0111 1111 7F
9 0110 1111 6F
A 0111 0111 77
b 0111 1100 7C
C 0011 1001 39
d 0101 1100 5E
E 0111 1001 79
F 0111 0001 71

电路测试

7段数码管之8位16进制显示

定义

将一个8位的2进制数,利用2个7段数码管显示。

电路实现

电路测试

7段数码管之8位10进制显示

定义

将一个8位的2进制数,利用3个7段数码管显示。

电路实现

注意:

  • 8位的2进制数(整数),范围是0-255,故需要3个7段数码管。
  • 1个数码管需要4位输入,则3个需要12位输入,则ROM数据位宽为12。
  • 输入的是8位数,则ROM地址位宽为8。

如上数据需填写0-255到ROM数据矩阵中,利用python生成需要的二进制文件。

with open('test.bin', 'wb') as f:
    for i in range(256):
        var = str(i)
        var = int(var, base=16)
        byte = var.to_bytes(2, byteorder='little')
        print(byte)
        f.write(byte)

电路测试

[!WARNING]

提出问题:如何让001显示为1?想知道答案请查看21选择器章节。

21选择器

定义

有2个输入,分别为A和B,以及一个有效位。

有效输出A,无效输出B。

参数说明

  • 输入
    • A: 值a
    • B: 值b
    • EN: 有效位
  • 输出
    • S:结果

真值表

EN A B S
0 0 0 0
0 0 1 1
0 1 0 0
0 1 1 1
1 0 0 0
1 0 1 0
1 1 0 1
1 1 1 1

公式

S  = EN&A + !EN&B (EN与A 或上 非EN与B)

电路实现

电路测试

---

8位21选择器

定义

将8个1位的21选择器组合后得到8位的21选择器。

电路实现

电路测试

7段数码管增强

定义

将上面封装的7段数码管组件增加有效才显示(基于8位21选择器实现),无效不显示功能。

参数说明

在原来基础上新增是否有效输入。

电路实现

电路测试

7段数码管8位10进制显示增强

定义

显示时无效0不显示,如:

  • 001 显示为1
  • 091 显示为91
  • 102 显示为102

电路实现

其中4BN为4位取反组件。

  • 百位有效条件:ROM出来的4位值不能位0000,则先取反再与上1111,等到1则为有效。
  • 十位有效条件:ROM出来的4位值不能位0000或者百位有效。

电路测试

同理16进制显示增强

电路增强如下:

测试如下:

时序逻辑电路

R-S触发器

定义

R-S触发器又名复位-置位触发器(R-复位RESET,S-置位SET。),基本结构是由两个与非门(or或非门)的输入、输出端交叉连接而成。

参数说明

  • 输入
    • R:复位Reset标志
    • S:置位Set标志
  • 输出
    • Q:值
    • Q‘:值的反

真值表

R S Q Q’
0 0 Q Q‘
0 1 1 0
1 0 0 1
1 1 0 0

电路实现

电路测试

D触发器

定义

D触发器是一个具有记忆功能的,具有两个稳定状态的信息存储器件,是构成多种时序电路的最基本逻辑单元,也是数字逻辑电路中一种重要的单元电路。

D触发器能存储1位的数据,在内存中。(可以用做寄存器)

参数说明

  • 输入
    • EN:是否有效
    • Data:数据
  • 输出
    • Q:存储的值
    • Q’:值的反

电路实现

电路测试

当EN=1时,Q存储的是D的值。

D边沿触发器

定义

让计算机在上升沿存储数据,在下降沿做其他事情。能够存储一位的信息。

参数说明

  • 输入
    • D:数据
    • CP:时钟上升沿
  • 输出
    • Q:存储的值
    • Q‘:值的取反

电路实现

2个D触发器组合,再CP=1时存储D的值到Q中。

电路测试

当CP变为1时,会将D中的值设置到Q中。

[!WARNING]
注意:目前为止,触发器每次启动时的Q的值是无序的,需要新增清零和预置状态来优化。

触发器优化

定义

以上触发器每次在启动时Q的值都是随机的,为了解决这个问题,需要新增清零和预置状态来优化。

优化思路

R-S触发器增加清零Clear和预置Preset标准,连到3位的或非门上。

R-S触发器优化

D触发器优化

D边沿触发器优化

D边沿触发器优化后测试

D边沿触发器实现跑马灯

T触发器

定义

T触发器是在数字电路中,凡在CP时钟脉冲控制下,根据输入信号T取值的不同,具有保持和翻转功能的触发器,即当T=0时能保持状态不变,当T=1时一定翻转的电路。

电路实现

电路测试

在时钟上升沿时翻转输出值。

行波计数器

定义

基于T触发器,实现计数器。

电路实现

电路测试

标签:触发器,取反,电路,输入,测试,CPU,进位
From: https://www.cnblogs.com/wish-dj/p/17187508.html

相关文章

  • 公司某资料子系统定期cpu过高的诊断
    背景公司里的某负责保存用户文档的子系统有时会忽然cpu很高,过了大约5分钟后又恢复正常水平。领导协调让我帮看一下(我心里是:不熟悉这个子系统里面的代码,我尽力哈......
  • CPU调速器schedutil原理分析
    1.CPU电源管理简介如果我们的能源是无限制的,那可能也不需要做现在这样复杂的电源管理控制,尤其是在嵌入式设备如手机上,在追求极致性能的同时,还要追求续航时间,二者是一对相......
  • 线程的优先级(最终还是要看cpu)
    packagecom.Java;//线程优先级调度//注意:不是调整了优先级就一定会被cpu先执行只是提高了执行概率一切还是要看cpu调度publicclassTestPriority{publicstatic......
  • top单核与32C--CPU爆表
      linux的cpu使用频率是根据cpu个数和核数决定的top,然后你按一下键盘的1,这就是单个核心的负载,不然是所有核心的负载相加,自然会超过100  单核为100%,服务器是32核的......
  • CPU/内存分析
    一、概念理解程序运作原理:一个请求发送到服务器,首先经过网卡,然后通知cpu有待处理任务,CPU去运行操作系统指令,根据请求的端口号,找到对应的应用程序代码,安排线程去处理;由于程......
  • CPU持续100%分析并解决
    背景接到客户电话,说某系统数据库服务器CPU利用率从上午8点开始到现在基本上都是100%的情况,影响到了业务。让给看看是什么原因导致的,怎么紧急处理一下。现象查看CPU利......
  • 记录一个cpu彪高的BUG处理--jvm调优
    业务场景:游戏行业,N个服务器,要进行大批量的合服处理,玩家数据会上升,从新整理和服务器的分配情况和逻辑处理,正常开发后,当天白天正常,然后晚上高峰期开始玩家频繁反馈无法登录~~......
  • 记一次CPU占用持续上升问题排查(Nacos动态路由引起)
    1、问题描述在整个项目安装完成测试后一个周的时间里,IC服务(我们自己的服务名称)从刚开始CPU占用百分之一涨到了百分之六十左右,而且在持续上升,只有重启IC服务才会降下去,但是......
  • Linux下如何排查CPU及内存占用过多
    CPU使用top命令,然后按shift+p按照CPU排序,找到占用CPU过高的进程pid。使用top-H-ppid命令,找到进程中消耗资源最高的线程ppid。使用echo‘obase=16;ppid’|bc或者p......
  • CPU L1,L2,L3多级缓存的基本作用
    基本作用加快CPU与主内存之间的数据交换。区别缓存类型L1L2L3位置最靠近CPU核心次之再次之容量一般几十KB~几百KB几百KB~几MB几MB~几十MB速度......