第三讲 算术逻辑单元(Arithmetic Logic Unit)

内容要点:逻辑运算,二进制加减法运算,ALU的实现

算术运算和逻辑运算

  • 加法指令的编码示例1:add $8,$9,$10 #$8=$9+$10

    • int f,g,h;
      ...
      //f->$8, g->$9, h->$10
      f = g + h;
      

      查指令编码表得:opcode=0,funct=20_{hex},shamt=0(非移位指令)

      根据指令操作数得:rd=8(目的操作数),rs=9(第一个源操作数),rt=10(第二个源操作数)

      R opcode rs rt rd shamt funct
      31 26 25 21 20 16 15 11 10 6 5 0
      00000 01001 01010 01000 00000 100000
  • 加法指令的编码示例1:addi $21,$22,-50 #$21=$22+(-50)

    • 查指令编码表得:opcode=8_{hex}

    • 分析指令得:rs=22(源操作数寄存器编号), rt=21(目的操作数寄存器编号),immediate=-50(立即数)

    I opcode rs rt Immediate
    31 26 25 21 20 16 15 0
    001000 10110 10101 1111 1111 1100 1110
  • 算术运算指令(MIPS Core Instruction Set)

    • R型
      • add rd, rs, rt #R[rd] = R[rs] + R[rt] [1]
      • addu rd, rs, rt #R[rd] = R[rs] + R[rt]
      • sub rd, rs, rt #R[rd] = R[rs] - R[rt] [1]
      • subu rd, rs, rt #R[rd] = R[rs] - R[rt]
    • I型
      • addi rt, rs, imm #R[rt] = R[rs] + SignExtImm [1][2]
      • addiu rt, rs, imm #R[rt] = R[rs] + SignExtImm [2]
  • 逻辑运算指令(MIPS Core Instruction Set)

    • R型
      • and rd, rs, rt #R[rd] = R[rs] & R[rt]
      • or rd, rs, rt #R[rd] = R[rs] |R[rt]
      • nor rd, rs, rt #R[rd] = ~(R[rs] | R[rt])
    • I型
      • andi rt, rs, imm #R[rt] = R[rs] & ZeroExtImm [3]
      • ori rt, rs, imm #R[rt] = R[rs] | ZeroExtImm [3]
  • 算术逻辑运算的需求

    • 算术运算
      • 两个32-bit数的加法,结果为一个32-bit数
      • 两个32-bit数的减法,结果为一个32-bit数
      • 检查加减法的结果是否溢出
    • 逻辑运算
      • 两个32-bit数的“与”操作,结果为一个32-bit数
      • 两个32-bit数的“或”操作,结果为一个32-bit数
      • 两个32-bit数的“或非”操作,结果为一个32-bit数

门电路的基本原理

  • 晶体管
    • 现代集成电路中通常使用MOS晶体管(Metal-Oxide-Semiconductor)
      • N型MOS管(Gate连接高电频时导通)
      • P型MOS管(Gate连接低电频时导通)
  • 非门(NOT gate)
  • 与门(AND gate)
  • 或门(OR gate)
  • 异或门(XOR gate)
    • 两个值不相同,异或结果为真;反之为假
    • A^B = (!A·B) + (A·!B)
  • 寄存器的基本原理
    • D触发器(D flip-flop,DFF)
      • 具有存储信息能力的基本单元
      • 由若干逻辑门构成,有多种实现方法
      • 主要有一个数据输入,一个数据输出和一个时钟输入
      • 在时钟clock的上升沿(0->1),采样输入D的值,传送到输出Q,其余时间输出Q的值不变
        • 照相机➕显示器 -> D触发器
        • 每10s按一次快门 -> clock频率为0.1Hz
        • 按快门后1s,显示器上显示照片 -> CLK-to-Q时间为1s
        • 按快门前后,待拍摄的画面不能有变化,否则画面会糊 -> Setup/Hold时间
    • 寄存器的构成:32个D触发器 -> 32-bit register -> CPU中的一个通用寄存器/PC/IR -> 相连得复杂的CPU

算术逻辑运算的实现(Arithmetic-Logical-Unit,ALU)

  • MUX 多选器
  • 加法和减法的实现
    • 半加器(Half Adder)
      • 输入端口A、B
      • 输出端口S(和 & XOR Gate)、C(进位 & AND Gate)
    • 全加器(Full Adder)
      • 由两个半加器组成
      • 输入端口A、B、C_{in}(进位输入)
      • 输出端口S(和)、C_{out}(进位输出)
    • 4-bit加法器
      • 两个4-bit二进制数相加
      • 由四个全加器构成
    • 检查加法运算结果是否溢出
      • “溢出”(overflow):运算结果超出了正常的表示范围
      • ”溢出“仅针对有符号数运算(有符号数是指最高位1是否代表负数)
        • 两个正数相加,结果为负数
        • 两个负数相加,结果为正数
      • 检查方法:”最高位的进位输入“ 不等于 ”最高位的进位输出“
      • 注意区分”进位“和”溢出“
        • 有”溢出“时,不一定有进位:0011 + 0101 = 01000
        • 有”进位“时,不一定有溢出:1110 + 1100 = 11010
    • ”溢出“的处理方法
      • MIPS
        • 将操作数看做有符号数,发生”溢出“时产生异常
        • 将操作数看做无符号数,不处理”溢出“
      • X86
        • 利用程序状态字寄存器中的OF位,发生”溢出“,设置OF=1
        • 利用程序状态字寄存器中的OF位,发生”溢出“,设置OF=1
    • 减法运算
      • 减法运算均可转换为加法运算
      • 补码表示的二进制数的相反数:按位取反,末尾加一
      • A - B = A + (-B) = A + (~B + 1)

加法器的优化

  1. 行波进位加法器(Ripple-Carry Adder,RCA)
    • 结构特点:低位全加器的C_{out}连接到高一位全加器C_{in}
    • 优点:电路布局简单,设计方便
    • 缺点:高位的运算必须等待低位的运算完成,延迟时间长
    • 4-bit RCA的关键路径(延迟最长的路径/关注Gate最多的路径)
      • T为门延迟
      • 总延迟时间:(T+T)*4 + T = 9T
  • 进位输出信号的分析
    • C_{i+1} = (A_i·B_i) + (A_i·C_i)+ (B_i·C_i)= (A_i·B_i) + (A_i+B_i)C_i
    • 设:
      • 生成(Generate)信号:G_i = A_i·B_i
      • 传播(Propagate)信号:P_i = A_i + B_i
    • 则:C_{i+1} = G_i + P_i·C_i
    • 计算C_{i+1} 时,无需等待C_i,直接将从C_0开始的式子不断带入,这样就可以实现提前计算”进位输出信号“
  • 提前计算C_4的电路实现
    • 优点:计算C_{i+1}的延迟时间固定为三级门延迟,与加法器的位数无关
    • 缺点:如果进一步拓宽加法器的位数,则电路变得非常复杂
  1. 超前进位加法器(Carry-Lookahead Adder, CLA)
  • 4-bit CLA: 计算C_3需要3级门延迟 + 最后一级全加器还需要1级门延迟 -> 总延迟时间为4级门延迟

    • 参考值:4-bit RCA的总延迟时间为9级门延迟
  • 32-bit加法器的实现

    • 如果采用RCA
      • 总延迟时间为65级门延迟:(T+T)*32 + T = 65T
    • 如果采用CLA
      • 理想的总延迟时间为4级门延迟
      • 实际上电路过于复杂,难以实现
      • 通常的实现方法:
        • 采用多个小规模的CLA拼接而成
        • 如,用4个8-bit的CLA连接成32-bit加法器

  1. May cause overflow exception

  2. SignExtImm = {16{imm[15]}, imm}

  3. ZeroExtImm = {16{1'b0}, imm}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,423评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,147评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,019评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,443评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,535评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,798评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,941评论 3 407
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,704评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,152评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,494评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,629评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,295评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,901评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,742评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,978评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,333评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,499评论 2 348

推荐阅读更多精彩内容