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中查看函数运行时间和cpu运行时间

android开发调查性能问题中有一个现象,函数的运行时间远低于cpu执行时间,因为函数运行期间线程可能包含等待操作。native层可以查看实际的cpu执行时间和函数执行时间。在java中如何实现? 借助AI得到了答案 import java.lang.management.ManagementFactory;import java.lang.management.Threa

关于CPU的一点知识

首先说一下,CPU是干啥的: CPU所负责的就是解释和运行最终转换成机器语言的程序内容 我们需要知道的CPU结构:重点需要关注寄存器 运算器 简单说就是负责运算从内存读取到寄存器中的数据,可以看作一个数据加工厂,就是对寄存器中的数据做运算,这些运算包含基本的算术和逻辑运算。 算术逻辑单元(ALU) 这个是运算器中重要的一个组成,主要负责的就是对数据的处理,从而实现对数据的算术和

C++系统相关操作4 - 获取CPU(指令集)架构类型

1. 关键词2. sysutil.h3. sysutil.cpp4. 测试代码5. 运行结果6. 源码地址 1. 关键词 关键词: C++ 系统调用 CPU架构 指令集 跨平台 实现原理: Unix-like 系统: 可以通过 uname -m 命令获取 CPU 架构类型。Windows 系统: 可以通过环境变量 PROCESSOR_ARCHITECTURE 获取 CPU 架构类型。

SQL Plu计算算数表达式及SQL Plus下清屏快捷键

用PL/SQL数据库语言计算sqrt(58+25*3+(19-9)^2)的值 SQL Plus下清屏快捷键是host cls或者 clear screen PL/SQL计算乘方是2个*号:

什么是FIFO管理单元?(First-In-First-Out)

FIFO(First-In-First-Out,先进先出)管理单元是一种广泛用于数据处理和存储系统中的机制,其核心理念是确保最早进入系统的数据最早被处理或移出。这种管理方法类似于排队的方式,最早进入队列的项目会最先得到服务。         FIFO管理单元通常用于缓冲区(Buffer)设计、任务调度、内存管理等多个领域。在硬件和软件系统中,FIFO机制有助于保证数据的有序处理,

判断CPU的大小端

原文出处:http://blog.sina.com.cn/s/blog_54f82cc201012c1k.html 下面的两个程序均可判断CPU的大小端问题 int i=1;       char *p=(char *)&i;       if(*p==1)                printf("Little_endian");   //Little_endian     e

【深度学习系列】全面指南:安装TensorFlow的CPU和GPU版本

本博客旨在为初学者提供一份全面的指南,介绍如何根据个人电脑的配置选择并安装适合的TensorFlow版本。内容涵盖了如何查看电脑显卡型号以确定是安装CPU还是GPU版本的TensorFlow,创建Python虚拟环境,以及使用conda命令查找可用的TensorFlow版本。同时,文章还提供了安装过程中可能遇到的问题及其解决方法,确保读者能够顺利完成安装过程,并开始他们的机器学习或深度学习项目。

计组期末复习-第五章CPU(白中英教材)

目录 一、微指令、微程序、微命令关系 二、绘制指令周期流程图 ADD R2,R0 SUB R1,R3 STO R1,[R2]  LAR (R3),R0 三、数据通路微操作类型判断 四、微程序控制方式 1. 微命令编码两种方式: 2. 水平型微指令格式 3.计算下地址字段位数 4.控制存储器容量的计算 五、流水线 1. 吞吐率、加速比计算 2. 周期 3. 冒险

cpu漏洞修复

关于CPU相关漏洞的修复处理_cpu漏洞如何修复 vulnerability spec store bypass: vulnera-CSDN博客

openeuler一个服务异常占用cpu的排查过程

1 环境 硬件环境:LS1046A   arm64  系统环境:openEuler release 22.03 (LTS-SP1)  +  Linux kernel 4.19.26 2 问题说明 我的硬件平台需要适配一下 openEuler release 22.03 (LTS-SP1) 但是目前只能使用原来硬件平台的内核,在适配的过程中,发现 一个内核线程始终占用一个cpu资源。