Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【自己动手画CPU】运算器设计

【自己动手画CPU】运算器设计

作者头像
SarPro
发布于 2024-02-20 10:48:13
发布于 2024-02-20 10:48:13
1.4K0
举报
文章被收录于专栏:【计网】Cisco【计网】Cisco

🌷1. 闯关目的

🌼第1关:8位可控加减法电路设计

(1) 掌握一位全加器的实现逻辑和多位可控加减法电路的实现逻辑;

(2) 熟悉 Logisim 平台基本功能,能在 logisim 中实现多位可控加减法电路。

🌼第2关:CLA182四位先行进位电路设计

(1) 掌握快速加法器中先行进位的原理,能利用相关知识设计4位先行进位电路;

(2) 利用设计的4位先行进位电路构造4位快速加法器,分析对应电路的时间延迟。

🌼第3关:4位快速加法器设计

(1) 掌握快速加法器中先行进位的原理,能利用相关知识设计4位先行进位电路;

(2) 利用设计的4位先行进位电路构造4位快速加法器,分析对应电路的时间延迟。

🌼第4关:16位快速加法器设计

(1) 理解成组进位产生函数,成组进位传递函数的概念,熟悉 Logisim 平台子电路的概念;

(2) 利用前述实验封装好的4位先行进位子电路以及4位快速加法器子电路构建16位、32位、64位快速加法器,并能利用相关知识分析对应电路的时间延迟,理解电路并行的概念。

🌼第5关:32位快速加法器设计

(1) 理解成组进位产生函数,成组进位传递函数的概念,熟悉 Logisim 平台子电路的概念;

(2) 利用前述实验封装好的4位先行进位子电路以及4位快速加法器子电路构建16位、32位、64位快速加法器,并能利用相关知识分析对应电路的时间延迟,理解电路并行的概念。

🌼第6关:5位无符号阵列乘法器设计

(1) 掌握阵列乘法器的实现原理;

(2) 分析5位阵列乘法器的性能,能在 Logisim 中绘制阵列乘法器电路。

🌼第7关:6位有符号补码阵列乘法器

(1) 掌握补码阵列乘法器的实现原理;

(2) 分析6位阵列乘法器的性能,能在 Logisim 中绘制阵列乘法器电路。

🌼第8关:乘法流水线设计

(1) 掌握运算流水线基本概念,理解将复杂运算步骤细分成子过程的思想;

(2) 实现简单的乘法运算流水线。

🌼第9关:原码一位乘法器设计

(1) 掌握原码一位乘法运算的基本原理;

(2) 熟练掌握 Logisim 寄存器电路的使用,能在 Logisim 平台中设计实现一个 8*8位的无符号数乘法器。

🌼第10关:补码一位乘法器设计

(1) 掌握补码一位乘法运算的基本原理;

(2) 熟练掌握 Logisim 寄存器电路的使用,能在 Logisim 平台中设计实现一个8*8 位的补码 Booth一位乘法器。

🌼第11关:MIPS运算器设计

(1) 理解算术逻辑运算单元(ALU)的基本构成,掌握 Logisim 中各种运算组件的使用方法;

(2) 熟悉多路选择器的使用,能利用前述实验完成的32位加法器、 Logisim 中的运算组件构造指定规格的 ALU 单元。


🌷2. 闯关内容

🌼第1关:8位可控加减法电路设计

在 Logisim 模拟器中打开 alu.circ 文件,在对应子电路中利用已经封装好的全加器设计8位串行可控加减法电路,用户可以直接使用在电路中使用对应的隧道标签,其中 X,Y 为两输入数,Sub 为加减控制信号,S 为运算结果输出,Cout 为进位输出,OF 为有符号运算溢出位。

🌼第2关:CLA182四位先行进位电路设计

在 Logisim 中打开 alu.circ 文件,在对应子电路中实现可级联的4位先行进位电路。其中 Gi,Pi 为进位生成函数和传递函数,Cin 为进位输入,C1~C4 为进位输出,G,P 为成组进位生成函数和成组进位传递函数。

🌼第3关:4位快速加法器设计

利用前一步设计好的四位先行进位电路构造四位快速加法器,其中 X,Y 为四位相加数,Cin 为进位输入,S 为和数输出,Cout 为进位输出,G,P 为 4 位成组进位生成函数和成组进位传递函数。

🌼第4关:16位快速加法器设计

在 Logisim 中打开 alu.circ 文件,在对应的子电路中利用四位先行进位电路和四位快速加法器构造十六位组间先行进位,组内先行进位快速加法器,并验证其功能是否正常。其中 X,Y 为16位相加数,Cin 为进位输入,S 为和数输出,Cout 为进位输出,G,P 为16位成组进位生成函数和成组进位传递函数。

🌼第5关:32位快速加法器设计

利用16位快速加法器以及先行进位电路构建32位快速加法器,并探讨其时间延迟。可能方案:

(1)2个16位加法器直接串联,C16 信号采用下层的进位输出;

(2)2个16位加法器直接串联,C16 进位输入采用上层的进位输出;

(3)在16位快速加法器的基础上再增加一级组间先行进位电路,类似64位快速加法器的方法;分别分析3种不同方案可能的总延迟,选择速度最快的方案实现32位快速加法器,并分析其时间延迟。其中 X,Y 为32位相加数,Cin 为进位输入,S 为和数输出,Cout 为进位输出,Overflow 为有符号加法运算溢出信号。

🌼第6关:5位无符号阵列乘法器设计

在 Logisim 中打开 alu.circ 文件,在5位阵列乘法器中实现斜向进位的阵列乘法器,其中 X,Y 为5位被乘数和乘数,P 为乘积输出,阵列乘法所需的25按位与的乘积项已经通过辅助电路生成,所有乘积项均通过隧道标签给出,用户只需要在已给出的电路框架中进行简单连线即可完成5位阵列乘法器。

🌼第7关:6位有符号补码阵列乘法器

在 Logisim 中打开 alu.circ 文件,在6位补码阵列乘法器中利用5位阵列乘法器以及求补器等部件实现补码阵列乘法器,实验框架如图2-1所示:

图2-1

🌼第8关:乘法流水线设计

在 Logisim 中打开 alu.circ 文件,在6位补码阵列乘法器中利用5位阵列乘法器以及求补器等部件实现补码阵列乘法器,实验框架如图2-2所示:

图2-2

🌼第9关:原码一位乘法器设计

在 alu.circ 文件中的原码一位乘法器子电路中,增加控制电路和数据通路,使得该电路能自动完成8位无符号数的一位乘法运算。再设置引脚初始值,然后驱动时钟自动仿真,电路可自动完成运算。运算结束,结果传输到输出引脚。运算结束时,实验框架如图2-3所示:

图2-3

🌼第10关:补码一位乘法器设计

在 alu.circ 文件中的补码一位乘法器子电路中,增加控制电路和数据通路,使得该电路能自动完成8位补码一位乘法运算。再设置引脚初始值,然后驱动时钟自动仿真,电路可自动完成运算。运算结束,结果传输到输出引脚。运算结束时,电路应该自动停止,实验框架如图2-4所示:

图2-4

🌼第11关:MIPS运算器设计

利用前面实验封装好的32位加法器以及 Logisim 平台中现有运算部件,构建一个32位算术逻辑运算单元(禁用 Logisim 系统自带的加法器,减法器),可支持算术加、减、乘、除,逻辑与、或、非、异或运算、逻辑左移、逻辑右移、算术右移运算,支持常用程序状态标志(有符号溢出 OF 、无符号溢出 UOF ,结果相等 Equal ),ALU 功能以及输入输出引脚见后表,在主电路中详细测试自己封装的 ALU ,并分析该运算器的优缺点,实验框架如图2-所示:

图2-5

🌷3. 闯关步骤

🌼第1关:8位可控加减法电路设计

图2-6

🌼第2关:CLA182四位先行进位电路设计

图2-7

🌼第3关:4位快速加法器设计

图2-8

🌼第4关:16位快速加法器设计

图2-9

🌼第5关:32位快速加法器设计

图2-10

🌼第6关:5位无符号阵列乘法器设计

图2-11

🌼第7关:6位有符号补码阵列乘法器

图2-12

🌼第8关:乘法流水线设计

图2-13

🌼第9关:原码一位乘法器设计

图2-14

🌼第10关:补码一位乘法器设计

图2-15

🌼第11关:MIPS运算器设计

图2-16

🌷4. 闯关总结

🌼第1关:8位可控加减法电路设计

1. 并行加法器:进位输出仅与最低位进位输入C0有关(Cn=Gn+PnGn-1+PnPn-1Gn-2+PnPn-1Pn-2Gn-3 …+PnPn-1…P1C0),而不是依赖于低位进位(Cn= Gn + Pn Cn-1)。

2. 硬件实现:可控反相异或门。配合异或门,Sub通过置0置1,既能实现Y和非Y,同时还能作为Cin的0、1信号输入;OF为溢出标志位,溢出输出1(这里1为高电平)。判断有符号数加减运算是否溢出的硬件实现:最高有效位的进位⊕符号位的进位,1表示溢出。

🌼第2关:CLA182四位先行进位电路设计

实验原理:在 Logisim 模拟器中打开 alu.circ 文件,在对应子电路中利用已经封装好的全加器设计8位串行可控加减法电路,可以直接使用在电路中使用对应的隧道标签,其中 X,Y 为两输入数,Sub 为加减控制信号,S 为运算结果输出,Cout 为进位输出,OF为有符号运算溢出。

🌼第3关:4位快速加法器设计

解题思路:利用第2关设计好的四位先行进位电路构造四位快速加法器, X,Y 为四位相加数,Cin 为进位输入,S 为和数输出,Cout 为进位输出,G,P 为 4 位成组进位生成函数和成组进位传递函数。

🌼第4关:16位快速加法器设计

1. 全加器的原理:全加器是能够计算低位进位的二进制加法电路。与半加器相比,全加器不只考虑本位计算结果是否有进位,也考虑上一位对本位的进位,可以把多个一位全加器级联后做成多位全加器.

2. 实验原理:将4个四位全加器对两个多位二进制数进行加法运算,同时产生进位。当两个二进制数相加时,较高位相加时必须加入较低位的进位项。

🌼第5关:32位快速加法器设计

实验原理:将2个16位全加器对两个多位二进制数进行加法运算,同时产生进位。当两个二进制数相加时,较高位相加时必须加入较低位的进位项。

🌼第6关:5位无符号阵列乘法器设计

实验原理:数字逻辑是现场可编程门阵列,它在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点,用乘数的每一位去乘被乘数,然后将每一位权值直接去乘被乘数得到部分积,并按位列为一行每一行部分积末位与对应的乘数数位对齐,体现对应数位的权值,将各次部分积求和得到最终的对应数位的权值。

🌼第7关:6位有符号补码阵列乘法器

实验原理:对于输入的X、Y,若都是正数则把符号位去了,把绝对值输入进5位阵列乘法器。都是负数就先把XY送进求补器,得到的就是X和Y的绝对值,然后输入进5位阵列乘法器。

🌼第8关:乘法流水线设计

此次试验较为简单,其流程如图2-17所示

图2-17

🌼第9关:原码一位乘法器设计

1. 位移次数控制:采用计数器+比较器的硬件实现,控制右移9次即可(题目中有提示),LOAD在=0时,给到1信号;将b送入右侧寄存器中,其他时候都=0就按照位移情况对右侧寄存器开展更新

2. 位移的实现:采用上下四组8位宽分离器实现,左边高位右边低位,乘积右移,最高位有八位加法器的进位输入得到,右移弹出的数据用于数据选择器部署下次是+0还是+a。

🌼第10关:补码一位乘法器设计

1. 选择器进行实现判断Yn+1Yn的数据,从而判断在所求和的基础上加0、[x]补还是[-x]补:选择器的选择输入端为Yn+1Yn,在该选择器的第0和第3位都连接0,而第一位输入对应的是[x]反,在ADD这个加法器中当Yn+1Yn=01时,进位输入为1,此时实现加[-x]补,在选择器的第2位输入的是x。

2. 移位控制:此时得到算数右移,去掉最低位,最高位复制原来的最高位可以采用分线器实现。右移后的16位数据,左边8位为部分积,存入部分积寄存器中;右边八位为右移过来的低位积+y的几位高位数据(低位数据随着时钟驱动后的每次计算,被移出去),存入Y寄存器中。

🌼第11关:MIPS运算器设计

1. 通关设计:利用前面实验封装好的 32 位加法器以及 logisim 平台中现有运算部件构建一个 32 位算术逻辑运算单元,通过多路选择器处理,将加、减、乘、除,逻辑与、或、非、异或运算、逻辑左移、逻辑右移、算术右移分别进行运算并得到结果,通过多路选择器将所选运算方式对应的结果给Result,乘除运算时将高位结果或者余数给Result2,其余情况下Result2结果为0。

2. 使用移位器实现逻辑左移、右移、算数右移运算。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-01-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【自己动手画CPU】控制器设计(二)
(2) 熟悉 Logisim 平台基本功能,能在 logisim 中实现多位可控加减法电路。
SarPro
2024/02/20
1.9K0
【自己动手画CPU】控制器设计(二)
数据的表示和运算
这期本来是想写hashMap的,但是里面哈希和扩容之类的,很多都是位运算,不太熟悉的同学看着会很难受,所以先补充一些计算机组成的知识。
三哥
2020/01/17
1K0
数据的表示和运算
计算机组成原理实验解析
回忆:偶校验就是为了让数里面1的个数为偶数,做法是所有数位.奇校验就是让数里面1的个数为奇数
用户7267083
2022/12/08
8570
计算机组成原理实验解析
五分钟搞不定系列- 1+1=?
甄建勇,高级架构师(某国际大厂),十年以上半导体从业经验。主要研究领域:CPU/GPU/NPU架构与微架构设计。感兴趣领域:经济学、心理学、哲学。
Linux阅码场
2021/12/09
1.3K0
五分钟搞不定系列- 1+1=?
『计算机的组成与设计』-计算机的算数运算
要注意: 在执行立即数加法时,imm 是 16 位。而寄存器是 32 位,这就出现转换的问题。在手册中是使用 imm 的符号扩展,也就是将高 16 位采用低 16 位的最高位复制 16 次进行填充。(符号扩展不会改变原数值)。
1ess
2021/10/29
1K0
『计算机的组成与设计』-计算机的算数运算
计算机组成原理:第二章 运算法和运算器
将数据分为纯整数和纯小数两类,用n+1位表示一个定点数,x_n为符号位,放在最左边,0表示正号,1表示负号。故一个数 x 可以表示为 x = x_nx_{n-1}…x_1x_0
Here_SDUT
2022/08/08
4K0
计算机组成原理:第二章 运算法和运算器
定点数运算法则及其电路设计
随着数字信号处理和嵌入式系统的发展,定点数运算在各类应用中逐渐展现出其重要性。相比浮点数运算,定点数运算以其更高的效率和更低的存储需求在实时计算和数据处理领域占据了不可或缺的地位。
一条晒干的咸鱼
2024/11/19
3110
定点数运算法则及其电路设计
基于Verilog HDL的超前进位全加器设计
       通常我们所使用的加法器一般是串行进位,将从输入的ci逐位进位地传递到最高位的进位输出co,由于电路是有延迟的,这样的长途旅行是需要时间的,所以为了加快加法器的运算,引入了超前进位全加器。
NingHeChuan
2018/04/18
2.7K0
基于Verilog HDL的超前进位全加器设计
组合逻辑硬件建模设计(二)算术电路
加法和减法等算术运算在处理器逻辑的设计中起着重要作用。任何处理器的算术逻辑单元(ALU)都可以设计为执行加法、减法、增量、减量运算。算法设计由RTL Verilog代码描述,以实现最佳区域和较少关键路径。本节用等效的Verilog RTL描述描述执行算术运算的重要逻辑块。
碎碎思
2022/03/11
1.2K0
组合逻辑硬件建模设计(二)算术电路
重学计算机组成原理(十二)- 加法器
这些基本的门电路,是我们计算机硬件端的最基本的“积木” 包含十亿级别晶体管的现代CPU,都是由这样一个一个的门电路组合而成的。
JavaEdge
2022/11/30
1K0
重学计算机组成原理(十二)-  加法器
计算机如何进行加减乘除计算—算术逻辑单元(一)
上节,我们谈了如何用二进制表示数字,比如二进制 00101010 是十进制的 42,表示和存储数字是计算机的重要功能,但真正的目标是计算,有意义的处理数字。比如把两个数字相加,这些操作由计算机的 "算术逻辑单元 "处理。但大家会简称:ALU。
硬核编程
2019/08/19
2.8K0
教你自己制作一个ALU
1970年,第一个封装在单个芯片内的完整ALU——英特尔74181诞生,这在当时是惊人的工程壮举!
小柔
2022/10/09
1.2K0
教你自己制作一个ALU
【计算机组成原理】加法器原理及其优化
这章在王道书里好像没有专门讲,估计不是考纲 但觉得对后面的理解还是有帮助的 故记录学习
苏泽
2024/04/21
1700
【计算机组成原理】加法器原理及其优化
数字电路实验(三)——加法器、运算器
1、实验步骤: A全加器: 1个vhd文件,用来定义顶层实体 1个vwf文件,用来进行波形仿真,将验证的波形输入 1、新建,编写源代码。 (1).选择保存项和芯片类型:【File】-【new project wizard】-【next】(设置文件路径+设置project name为【C:\Users\lenovo\Desktop\笔记\大二上\数字电路\实验课\实验三\全加器】)-【next】(设置文件名【gg】)-【next】(设置芯片类型为【cyclone-EP1CT144C8】)-【finish】 (2).新建:【file】-【new】(【design file-VHDL file】)-【OK】 2、写好源代码,保存文件(gg.vhd)。 3、编译与调试。确定源代码文件为当前工程文件,点击【processing】-【start compilation】进行文件编译。编译结果有一个警告,文件编译成功。 4、波形仿真及验证。新建一个vector waveform file。按照程序所述插入jinwei0,jiashu1,jiashu2,jieguo,jinwei1五个节点(jinwei0,jiashu1,jiashu2为输入节点,jieguo,jinwei1为输出节点)。(操作为:右击 -【insert】-【insert node or bus】-【node finder】(pins=all;【list】)-【>>】-【ok】-【ok】)。任意设置jinwei0,jiashu1,jiashu2的输入波形…点击保存按钮保存。(操作为:点击name(如:jinwei0))-右击-【value】-【count】(如设置binary;start value=0;end value=1;count every=10ns),同理设置name jiashu1,jiashu2(如0,1,5),保存)。然后【start simulation】,出name jieguo,jinwei1的输出图。 5、功能仿真,即没有延迟的仿真,仅用来检测思路是否正确。
全栈程序员站长
2022/09/14
1.2K0
CPU中的程序是怎么运行起来的
最近一位朋友问我,开发的代码是怎么在芯片运行起来的,我就开始给他介绍代码的预编译、汇编、编译、链接然后到一般的文件属性,再到代码运行。但是大佬问了我一句,CPU到底是怎么执行到每一个逻辑的,就讲了哈CPU的架构。这是时候真的有些迷了,虽然有模电数电的底子,但是自己都说迷糊了,汇编怎么对应到机器码再到怎么执行每一个逻辑。
用户1605515
2020/12/17
1.2K0
CPU中的程序是怎么运行起来的
国庆期间,我造了台计算机
今天我就和大家一起来探索一下底层的奥秘,但是术业有专攻,我们大致的了解一下即可,很多细节不清晰也不影响。
程序员小浩
2020/10/26
5980
国庆期间,我造了台计算机
八位“Booth二位乘算法”乘法器
之前介绍了几篇无符号乘法器或加法器的写法,当然,稍作修改也就可以改成符合有符号数的乘法器或加法器。
huofo
2022/03/17
1.1K0
八位“Booth二位乘算法”乘法器
【自己动手画CPU】计算机数据表示
(1) 掌握汉字机内码、区位码,最终利用相关工具批量获取一段文字的 GB2312 机内码,并利用简单电路实现 GB2312 编码与区位码的转换;
SarPro
2024/02/20
6300
【自己动手画CPU】计算机数据表示
你觉得用不上的位运算里,隐藏着 CPU 实现的秘密
我们学 JS 的时候都会了解下位运算,在 React、Typescript 等源码中也频繁见到位运算的踪影,但在业务代码中从来不会这么写,它好像离我们很遥远。
神说要有光zxg
2021/10/14
7300
在《我的世界》里从零打造一台计算机有多难?复旦本科生大神花费了一年心血
单枪匹马造出一个CPU乃至完整的电脑需要多长时间?有位大牛在《我的世界》游戏里用实际行动回答了这个问题:可能要花费一年多。
量子位
2019/05/21
8550
相关推荐
【自己动手画CPU】控制器设计(二)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档