CPU--- ALU算数逻辑运算单元

2024-03-31 21:58

本文主要是介绍CPU--- ALU算数逻辑运算单元,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

算术逻辑单元 (Arithmetic Logic Unit, ALU)是中央处理器(CPU)的执行单元,是所有中央处理器的核心组成部分,由"And Gate" 和"Or Gate"构成的算术逻辑单元,主要功能是进行二进制的算术运算,如加减乘(不包括整数除法)。基本上,在所有现代CPU体系结构中,二进制都以二补数的形式来表示。


定义

  计算机中执行各种算术和逻辑运算操作的部件 运算器 的基本操作包括加、减、乘、除四则运算,与、或、非、异或等逻辑操作,以及移位、比较和传送等操作,亦称算术逻辑部件(ALU)。计算机运行时,运算器的操作和操作种类由控制器决定。运算器处理的数据来自存储器;处理后的结果数据通常送回存储器,或暂时寄存在运算器中。

A

数据运算器的处理对象是数据,所以数据长度和计算机数据表示方法,对运算器的性能影响极大。70年代 微处理器 常以1个、4个、8个、16个二进制位作为处理数据的基本单位。大多数通用计算机则以16、32、64位作为运算器处理数据的长度。能对一个数据的所有位同时进行处理的运算器称为并行运算器。如果一次只处理一位,则称为串行运算器。有的运算器一次可处理几位 (通常为6或8位),一个完整的数据分成若干段进行计算,称为串 并行运算器。运算器往往只处理一种长度的数据。有的也能处理几种不同长度的数据,如半字长运算、双倍字长运算、四倍字长运算等。有的数据长度可以在运算过程中指定,称为变字长运算。
  按照数据的不同表示方法,可以有二进制运算器、十进制运算器、十六进制运算器、定点整数运算器、定点小数运算器、浮点数运算器等。按照数据的性质,有地址运算器和字符运算器等。
  操作运算器能执行多少种操作和操作速度,标志着运算器能力的强弱,甚至标志着计算机本身的能力。运算器最基本的操作是加法。一个数与零相加,等于简单地传送这个数。将一个数的代码求补,与另一个数相加,相当于从后一个数中减去前一个数。将两个数相减可以比较它们的大小。
  左右移位是运算器的基本操作在有符号的数中,符号不动而只移数据位,称为算术移位若数据连同符号的所有位一齐移动,称为逻辑移位。若将数据的最高位与最低位链接进行逻辑移位,称为循环移位。
  运算器的逻辑操作可将两个数据按位进行与、或、异或,以及将一个数据的各位求非。有的运算器还能进行二值代码的16种逻辑操作。

寄存器连线面

乘、除法操作较为复杂。很多计算机的运算器能直接完成这些操作。乘法操作是以加法操作为基础的,由乘数的一位或几位译码控制逐次产生部分积,部分积相加得乘积。除法则又常以乘法为基础,即选定若干因子乘以除数,使它近似为1,这些因子乘被除数则得商。没有执行乘法、除法硬件的计算机可用程序实现乘、除,但速度慢得多。有的运算器还能执行在一批数中寻求最大数,对一批数据连续执行同一种操作,求平方根等复杂操作。

编辑本段运算方法

  实现运算器的操作,特别是四则运算,必须选择合理的运算方法。它直接影响运算器的性能,也关系到运算器的结构和成本。另外,在进行数值计算时,结果的有效数位可能较长,必须截取一定的有效数位,由此而产生最低有效数位的舍入问题。选用的舍入规则也影响到计算结果的精确度。

编辑本段结构

  运算器包括寄存器、执行部件和控制电路3个部分。
  在典型的运算器中有3个寄存器:接收并保存一个操作数的接收寄存器;保存另一个操作数和运算结果的 累加寄存器 ;在进行乘、除运算时保存乘数或商数的乘商寄存器。执行部件包括一个加法器和各种类型的输入输出门电路。控制电路按照一定的时间顺序发出不同的控制信号,使数据经过相应的门电路进入寄存器或加法器,完成规定的操作。
  为了减少对存储器的访问,很多计算机的运算器设有较多的寄存器,存放中间计算结果,以便在后面的运算中直接用作操作数。
  为了提高运算速度,某些大型计算机有多个运算器。它们可以是不同类型的运算器,如定点加法器、浮点加法器、乘法器等,也可以是相同类型的运算器。

编辑本段运算器

  由 算术逻辑单元 (ALU)、累加寄存器、 数据缓冲寄存器 和状态条件寄存器组成,它是数据加工处理部件。相对控制器而言,运算器接受控制器的命令而进行动作 ,即运算器所进行的全部操作都是由控制器发出的控制信号来指挥的所以它是执行部件。

编辑本段主要功能

  执行所有的算术运算;
  执行所有的逻辑运算,并进行逻辑测试,如零值测试或两个值的比较。

编辑本段下面举例8位ALU的两种设计方案

  使用原理图方法设计:
  使用VHDL方法设计:
  8-Bit ALU in VHDL
  This arithmetic logic unit accepts 8-bit inputs, but it can easily be modded to higher bits. It supports the addition, subtraction, set if less than, AND, and OR operations. The operation to perform is determined by the 3-bit address bus.
  library ieee;
  use ieee.std_logic_1164.all;
  use ieee.std_logic_unsigned.all;
  use ieee.std_logic_arith.all;
  ENTITY alu8bit IS
  port(a, b : in std_logic_vector(7 downto 0); -- a and b are busses
  op : in std_logic_vector(2 downto 0);
  zero : out std_logic;
  f : out std_logic_vector(7 downto 0));
  END alu8bit;
  architecture behavioral of alu8bit is
  begin
  process(op)
  variable temp: std_logic_vector(7 downto 0);
  begin
  case op is
  when "000" =>
  temp := a and b;
  when "100" =>
  temp := a and b;
  when "001" =>
  temp := a or b;
  when "101" =>
  temp := a or b;
  when "010" =>
  temp := a + b;
  when "110" =>
  temp := a - b;
  when "111" =>
  if a < b then
  temp := "11111111";
  else
  temp := "00000000";
  end if;
  when others =>
  temp := a - b;
  end case;
  if temp="00000000" then
  zero <= '1';
  else
  zero <= '0';
  end if;
  f <= temp;
  end process;
  end behavioral;
  以此我们可以推出4位、32位等等的ALU设计方法。

这篇关于CPU--- ALU算数逻辑运算单元的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/865446

相关文章

【Java中的位运算和逻辑运算详解及其区别】

Java中的位运算和逻辑运算详解及其区别 在 Java 编程中,位运算和逻辑运算是常见的两种操作类型。位运算用于操作整数的二进制位,而逻辑运算则是处理布尔值 (boolean) 的运算。本文将详细讲解这两种运算及其主要区别,并给出相应示例。 应用场景了解 位运算和逻辑运算的设计初衷源自计算机底层硬件和逻辑运算的需求,它们分别针对不同的处理对象和场景。以下是它们设计的初始目的简介:

Java程序到CPU上执行 的步骤

相信很多的小伙伴在最初学习编程的时候会容易产生一个疑惑❓,那就是编写的Java代码究竟是怎么一步一步到CPU上去执行的呢?CPU又是如何执行的呢?今天跟随小编的脚步去化解开这个疑惑❓。 在学习这个过程之前,我们需要先讲解一些与本内容相关的知识点 指令 指令是指导CPU运行的命令,主要由操作码+被操作数组成。 其中操作码用来表示要做什么动作,被操作数是本条指令要操作的数据,可能是内存地址,也

win10不用anaconda安装tensorflow-cpu并导入pycharm

记录一下防止忘了 一、前提:已经安装了python3.6.4,想用tensorflow的包 二、在pycharm中File-Settings-Project Interpreter点“+”号导入很慢,所以直接在cmd中使用 pip install -i https://mirrors.aliyun.com/pypi/simple tensorflow-cpu下载好,默认下载的tensorflow

定位cpu占用过高的线程和对应的方法

如何定位cpu占用过高的线程和对应的方法? 主要是通过线程id找到对应的方法。 1 查询某个用户cpu占用最高的进程号 top -u 用户名 2 查询这个进程中占用cpu最高的线程号 top –p 进程号-H    3 查询到进程id后把进程相关的代码打印到jstack文件 jstack -l pid > jstack.txt 4 在jstack文件中通过16进制的线程id搜索到

CPU亲和性设置 代码示例 sched_setaffinity sched_getaffinity

视频教程在这: cpu亲和性设置,NCCL,sched_setaffinity sched_getaffinity,CPU_ZERO、SET、ISSET、linux_哔哩哔哩_bilibili 一、CPU亲和性简介 CPU亲和性(CPU Affinity)设置是操作系统中一个重要的性能优化手段,它允许程序或进程被绑定到特定的CPU核心上运行。这样做的好处包括减少缓存未命中、降低线程迁移(co

ubuntu16.04 caffe(github源码cpu)+python3.5+opencv3.4.5安装编译

https://www.cnblogs.com/hanjianjian90/p/10604926.html

Ubuntu 标题栏实时显示网速CPU内存

1.用 wget 下载 indicator-sysmonitor,终端执行命令: $ wget -c https://launchpad.net/indicator-sysmonitor/trunk/4.0/+download/indicator-sysmonitor_0.4.3_all.deb2.安装依赖: sudo apt-get install python python-psu

木马导致inetinfo.exe进程占100% CPU的解决方法

电脑进程inetinfo.exe主要用于支持微软Windows IIS网络服务的除错。正常情况下,inetinfo.exe 是 IIS admin Service 或 world wide web publishing service 。这个程序对你系统的正常运行是非常重要的。inetinfo.exe进程属于系统组件,请不要试图停止和删除!   但是如果inetinfo.exe占用CPU 10

cisvc.exe进程占用大量内存和CPU的解决方法

推荐:用电脑尽情K歌、练歌,一展歌喉。打造自己的MTV音乐专辑,分享给所有网友   我的电脑现在反映非常的慢,打开任务管理器发现cisvc.exe这个进程占用了大量的内存和CPU,才导致变慢的。   上网查询之后得知,这是微软Windows 操作系统自带的一个程序,CIDAEMON.EXE和CISVC.EXE都不是木马程序,用来监测CIDAEMON.EXE内存信息的,防止可用内存太低

CPU大小端字节序的检测

机器的字节序有两种,即大端字节序和小端字节序。 大端字节序:在内存中,低地址存放数据的 高位,高地址存放数据的 低位 小端字节序:在内存中,低地址存放数据的 低位,高地址存放数据的 高位 如例:定义数据  a = 0x01020304 小端方式:01 02 03 04 大端方式:04 03 02 01 那么如何判断呢,方式如下--> 一、 指