计算逻辑单元(ALU)和存储单元
本节参考算术逻辑单元 ALU

一 ALU单元

arithmetic and logic unit 算术逻辑单元,简称ALU,是计算机的数学大脑,也就是计算机里负责运算的组件,比如把两个数相加。基本其他的组件都用到了ALU,它有两个 单元 一个算术单元,一个逻辑单元

1 算术单元

算术单元指完成加减基础运算的单元,例如简单的二进制加法运算电路即半加器,器电路原理图 如下所示。

其中SUMSUMSUM为加法本位值CHERRYCHERRYCHERRY为进位。
同时可以用两个半加器组合成全加器如下图。

然后进行封装可以为。

当很多个全加器叠加起来就可以实现多位的加法,如常见的计算机8位加法运算。

其他操作,可以使得输入

  • 加法(ADD)
  • 减法(SUBTRACT)
  • 增量+1(INCREMENT)
  • 减量-1(DECREMENT)

2 逻辑单元

顾名思义,逻辑单元在计算机内负责执行逻辑操作。比如之前说的“与”,“或”,“非”,“异或”。另外,它还能做简单的数值测试,比如利用许多个“或门”,来检测一个8位数字是否为“0”:

它接受两个操作数输入(InA,InBInA,InBInA,InB),以及1个表示要进行的是哪个运算的操作代码(Opcode),然后输出一个结果(Out)(Out)(Out)。
另外 ALU 还会有各种标志位(flag)(flag)(flag),来表示计算的状态。例如: 进位标志(CarryflagCarry flagCarryflag)表示这次计算有没有进位,0标志(ZeroflagZero flagZeroflag)表示这次计算的结果是不是为0,这样就可以方便地判断计算是否溢出,或者两个输入的数是否相等。高级的$ ALU$ 中,会有更多的标志位,可以帮助处理器更快更方便地运算。

软件部分(verilog)

加法
减法
有符号比较,小于置位
无符号比较,小于置位
按位与
按位或非
按位或
按位异或
逻辑左移
逻辑右移
算术右移
高位加载

`timescale 1ns / 1ps
//*************************************************************************
//   > 文件名: alu.v
//   > 描述  :ALU模块,可做12种操作
//   > 作者  : LOONGSON
//   > 日期  : 2016-04-14
//*************************************************************************
module alu(input  [11:0] alu_control, input  [31:0] alu_src1, input  [31:0] alu_src2,output   [31:0] alu_result );reg [31:0] alu_result;wire alu_add;   //加法wire alu_sub;   //减法wire alu_slt;   //有符号比较,小于置位wire alu_sltu;  //无符号比较,小于置位wire alu_and;   //按位与wire alu_nor;   //按位或非wire alu_or;    //按位或 wire alu_xor;   //按位异或wire alu_sll;   //逻辑左移wire alu_srl;   //逻辑右移wire alu_sra;   //算数右移wire alu_lui;   //高位加载assign alu_add  = alu_control[11];assign alu_sub  = alu_control[10];assign alu_slt  = alu_control[ 9];assign alu_sltu = alu_control[ 8];assign alu_and  = alu_control[ 7];assign alu_nor  = alu_control[ 6];assign alu_or   = alu_control[ 5];assign alu_xor  = alu_control[ 4];assign alu_sll  = alu_control[ 3];assign alu_srl  = alu_control[ 2];assign alu_sra  = alu_control[ 1];assign alu_lui  = alu_control[ 0];wire [31:0] add_sub_result; //加减结果,减法用加法来实现wire [31:0] slt_result;     //wire [31:0] sltu_result;    //wire [31:0] and_result;wire [31:0] nor_result;wire [31:0] or_result;wire [31:0] xor_result;wire [31:0] sll_result;wire [31:0] srl_result;wire [31:0] sra_result;     //wire [31:0] lui_result;wire signed [31:0] temp_src1;   //带符号数的临时变量assign temp_src1 = alu_src1;    //方便后面对alu_src1进行算数右移assign and_result = alu_src1 & alu_src2;        //按位与assign or_result  = alu_src1 | alu_src2;        //按位或assign nor_result = ~or_result;                 //或非assign xor_result = alu_src1 ^ alu_src2;        //异或assign lui_result = {alu_src2[15:0], 16'd0};    //高位加载,第二个操作数的低十六位加载到高十六位上assign sll_result = alu_src1 << alu_src2;       //逻辑左移assign srl_result = alu_src1 >> alu_src2;       //逻辑右移assign slt_result = adder_result[31] ? 1'b1 : 1'b0;   // 带符号数小于置位assign sltu_result = adder_cout ? 1'b0 : 1'b1;     //无符号数小于置位assign sra_result = temp_src1 >>> alu_src2;     //算数右移wire [31:0] adder_operand1;wire [31:0] adder_operand2;wire        adder_cin     ;wire [31:0] adder_result  ;wire        adder_cout    ;assign adder_operand1 = alu_src1; assign adder_operand2 = alu_add ? alu_src2 : ~alu_src2;     //默认进行减法,为slt和sltu服务assign adder_cin      = ~alu_add;  //巧妙到我都以为代码有bugadder adder_module(     //调用加法模块.operand1(adder_operand1),.operand2(adder_operand2),.cin     (adder_cin     ),.result  (adder_result  ),.cout    (adder_cout    ));
assign add_sub_result = adder_result;always@(*)beginif(alu_add | alu_sub)alu_result <= add_sub_result;else if(alu_slt)alu_result <= slt_result;else if(alu_sltu)alu_result <= sltu_result;else if(alu_and)alu_result <= and_result;else if(alu_nor)alu_result <= nor_result;else if(alu_or)alu_result <= or_result;else if(alu_xor)alu_result <= xor_result;else if(alu_sll)alu_result <= sll_result;else if(alu_srl)alu_result <= srl_result;else if(alu_sra)alu_result <= sra_result;else if(alu_lui)alu_result <= lui_result;end
endmodule

二 存储单元

1 静态存储器SRAM(Static Radom Access Memory)

SRAM主要用于主要用于二级快速缓存(Level2 C ache)。它利用晶体管来存储数据。与DRAM相比,SRAM的速度快,但在同样面积中SRAM的容量要比其它类型的内存小。

大部分FPGA器件採用了查找表(Look Up Table,LUT)结构。查找表的原理类似于ROM,其物理结构是静态存储器(SRAM),N个输入项的逻辑函数能够由一个2^N位容量的SRAM实现,函数值存放在SRAM中,SRAM的地址线起输入线的作用,地址即输入变量值,SRAM的输出为逻辑函数值。由连线开关实现与其它功能块的连接。

  • corecells array:存储单元阵列
  • decode:行列地址译码器
  • Sense Amplifier:灵敏放大器
  • conntrol circuit:控制电路
  • FFIO:缓冲/驱动电路

在图中,A0−Am−1A_{0}-A_{m-1}A0​−Am−1​为地址输入端,CSBCSBCSB、 WEBWEBWEB和OEBOEBOEB为控制端,控制读写操作,为低电平有效,I/O0−I/ON−1I/O_{0}-I/O_{N-1}I/O0​−I/ON−1​为数据输入输出端。存储阵列中的每个存储单元都与其他单元在行和列上共享电学连接,当中水平方向的连线称为“字线”,而垂直方向的数据流入和流出存储单元的连线称为“位线”。通过输入的地址可选择特定的字线和位线。字线和位线的交叉处就是被选中的存储单元。每个存储单元都是按这个方案被唯一选中,然后再对其进行读写操作。有的存储器设计成多位数据如4位或8位等同一时候输入和输出,这种话,就会同一时候有4个或8个存储单元按上述方法被选中进行读写操作。

SRAM六管电路结构

假设准备往图的6T存储单元写入“1”,先将某一组地址值输入到行、列译码器中,选中特定的单元,然后使写使能信号WE有效,将要写入的数据“1”通过写入电路变成“1”和“0”后分别加到选中单元的两条位线BL,BLB上,此时选中单元的WL=1,晶体管N0,N5打开,把BL,BLB上的信号分别送到Q,QB点,从而使Q=1,QB=0,这样数据“1”就被锁存在晶体管P2,P3,N3,N4构成的锁存器中。写入数据“0”的过程类似。
SRAM的读过程以读“1”为例,通过译码器选中某列位线对BL,BLB进行预充电到电源电压VDD,预充电结束后,再通过行译码器选中某行,则某一存储单元被选中,由于其中存放的是“1”,则WL=1、Q=1、QB=0。晶体管N4、N5导通,有电流经N4、N5到地,从而使BLB电位下降,BL、BLB间电位产生电压差,当电压差达到一定值后打开灵敏度放大器,对电压进行放大,再送到输出电路,读出数据。

计算逻辑单元(ALU)和存储单元相关推荐

  1. 计算机原理 逻辑单元,湘潭大学计算机原理 实验一 算术逻辑单元ALU实验报告

    <湘潭大学计算机原理 实验一 算术逻辑单元ALU实验报告>由会员分享,可在线阅读,更多相关<湘潭大学计算机原理 实验一 算术逻辑单元ALU实验报告(6页珍藏版)>请在人人文库网 ...

  2. 计算机组成原理实验报告 算术逻辑单元ALU实验(源代码全)

    算术逻辑单元ALU实验 一. 实验目的 二. 实验设备 三. 实验任务 四. 实验步骤 五.结果记录及分析 一. 实验目的 1.理解算术逻辑单元ALU的工作原理. 2.掌握算术逻辑单元ALU的设计方法 ...

  3. 2.4.1 算术逻辑单元ALU与加法器(串行加法器、并行加法器、全加器)

    文章目录 0.思维导图 1.ALU---算术逻辑单元 (1)ALU需要提供的功能 (2)ALU结构 (3)ALU芯片的组织 (4)基本的逻辑符号---与或非 (5)复合逻辑 2.加法器 (1)基本的一 ...

  4. 计算机组成原理-算术逻辑单元ALU

    先前的记录: 计算机组成原理-计算机硬件的基本组成 计算机组成原理-计算机的功能部件及层次结构 计算机组成原理-计算机性能指标 计算机组成原理-数制与编码(进制转换) 计算机组成原理-定点数的表示和运 ...

  5. 计算机组织与结构课程笔记

    计算机组织与结构个人总结 计组第一章 计算机体系结构architecture是指那些对程序员可见的系统属性,是直接影响程序的逻辑执行 计算机组成organization是实现结构规范的操作单元 及其相 ...

  6. 1.2.3存储结构:主存编址计算、主存编址的过程、存储单元、编址内容、存储总容量

    1.2.3存储结构:主存编址计算.主存编址的过程.存储单元.编址内容.存储总容量 主存编址的过程 存储单元主存编址 存储单元 编址内容 存储总容量 例题 主存编址的过程 计算机是一个机器,它能够识别的 ...

  7. 计算机机原理是什么意思,计算机工作原理及与工控机的区别

    计算机的基本原理是存储程序和程序控制.预先要把指挥计算机如何进行操作的指令序列(称为程序)和原始数据通过输入设备输送到计算机内存贮器中.每一条指令中明确规定了计算机从哪个地址取数,进行什么操作,然后送 ...

  8. 流水线的指令解读及相关计算

    前言 指令通常存储在主存中,默认情况下由程序计数器进行依次读取,除非遇到 JMP 命令才会进行跳转继续执行.而 执行一条指令的过程一般如下( 结合图片进行理解 ):        ①先根据程序计数器 ...

  9. 计算机组原理ppt,计算机组原理第三章.ppt

    计算机组原理第三章 计算机组成原理 毛典辉 北京工商大学计算机与信息工程学院 Email: amaode@ 进一步结论: 当最高有效位产生进位而符号位无进位时,产生上溢: 当最高有效位无进位而符号位有 ...

  10. 计算机中算术逻辑单元负责,算术逻辑单元

    算术逻辑单元(arithmetic and logic unit) 是能实现多组算术运算和逻辑运算的组合逻辑电路,简称ALU. 简介 算术逻辑单元(Arithmetic&logical Uni ...

最新文章

  1. 主席树 + 树上倍增 ---- codeforces 587C[树上倍增或者主席树]
  2. 根据 JS 自动定义页面缩放比(根据分辨率进行适配)
  3. 对现有代码的分析方法随想
  4. Spring Boot配置@spring.profiles.active配置
  5. 使用TCP可靠吗?为什么可靠?
  6. 信息安全工程师笔记-综合知识冲刺(四)
  7. Kubernetes 学习2 k8s基础概念
  8. 高通driver模块编译方法
  9. 【clion】实现类似自定义代码自动补全的功能(懒人利器)
  10. 将梯度下降运用到线性回归
  11. DIY一个正弦表计算器,用于单片机查表生成正弦波
  12. java到达时间后自动执行代码_java设置按时间自动执行
  13. 【论文阅读】Extract Free Dense Labels from CLIP
  14. 关于硬盘分区合并的事
  15. springboot--享学课堂
  16. 如何选一款适合企业的进销存软件?这款软件推荐给你
  17. 18种各式各样的loading,纯html5+css3无图片
  18. 无线投屏器有哪些分类,该如何挑选?
  19. 安装hisuite后,依然无法连接华为手机,驱动无法正确安装
  20. 地磁基本知识(一)地球磁场

热门文章

  1. Linux入坑手册(鸟哥的私房菜)
  2. 台式计算机网卡驱动不能正常使用,系统提示“您的网卡驱动程序不正常!”怎么办 是什么原因...
  3. 【什么是IaaS,PaaS,SaaS? DaaS又是什么?】
  4. 转载:如何给公司取英文名字
  5. Softing为艾默生提供AMS设备管理系统的连接解决方案
  6. 怎样写好git comment
  7. MySQL数据库--韩顺平老师课
  8. php实现钟表,用html5实现一个简单的钟表外观
  9. Java数据结构和算法-图
  10. Java多线程篇--原子包、阻塞队列和并行流