05.09.2015 Views

更 加 细 化 的 框 图

乘法&移位

乘法&移位

SHOW MORE
SHOW LESS
  • No tags were found...

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

先 行 进 位 <strong>的</strong> 理 论 基 础 ( 续 )<br />

° 使 用 新 定 义 <strong>的</strong> 两 个 术 语 :<br />

• 第 i 位 产 生 <strong>的</strong> 进 位<br />

gi = Ai & Bi<br />

• 通 过 第 i 位 <strong>的</strong> 传 播 进 位 pi = Ai or Bi We can rewrite:<br />

• Cin1 = g0 | (p0 & Cin0)<br />

• Cin2 = g1 | (p1 & g0) | (p1 & p0 & Cin0)<br />

• Cin3 = g2 | (p2 & g1) | (p2 & p1 & g0) | (p2 & p1 & p0 & Cin0)<br />

° 进 入 第 3 位 <strong>的</strong> 进 位 是 1, 如 果<br />

• 在 第 2 位 , 产 生 了 进 位 (g2)<br />

• 或 者 在 第 1 位 产 生 了 进 位 (g1) 并 且<br />

第 2 位 传 播 了 这 个 进 位 (p2 & g1)<br />

• 或 者 在 第 0 位 产 生 了 进 位 (g0) 并 且<br />

第 1 位 和 第 2 位 都 传 播 了 这 个 进 位 (p2 & p1 & g0)<br />

• 或 者 在 第 0 位 有 输 入 进 位 (Cin0) 并 且<br />

第 0 位 、 第 1 位 和 第 2 位 都 传 播 了 这 个 进 位 (p2 & p1 & p0 & Cin0)<br />

北 京 大 学 计 算 机 科 学 技 术 系<br />

计 算 机 系 统 结 构 教 研 室


道 管 : 先 行 进 位 <strong>的</strong> 类 比<br />

g0<br />

p0<br />

c0<br />

c1<br />

g0<br />

p0<br />

c0<br />

g1<br />

p1<br />

g0<br />

p0<br />

c0<br />

c2<br />

g1<br />

p1<br />

g2<br />

p2<br />

g3<br />

p3<br />

北 京 大 学 计 算 机 科 学 技 术 系<br />

c4<br />

计 算 机 系 统 结 构 教 研 室


设 计 过 程 <strong>的</strong> 要 素<br />

° 分 治 Divide and Conquer (e.g., ALU)<br />

• 针 对 较 简 单 <strong>的</strong> 部 件 , 阐 明 解 决 方 案 .<br />

• 设 计 每 个 部 件 ( 子 问 题 )<br />

° 产 生 并 测 试 Generate and Test (e.g., ALU)<br />

• 给 出 一 组 构 件 , 如 何 将 它 们 组 装 起 来 , 并 满 足 需 求<br />

° 逐 步 求 精 Successive Refinement (e.g., carry lookahead)<br />

• 解 决 “ 大 多 数 ” 问 题 ( 即 , 忽 视 一 些 约 束 或 特 殊 情 况 ), 检 查<br />

并 修 改 不 足<br />

° 阐 明 可 供 选 择 <strong>的</strong> 高 级 方 案 Formulate High-Level Alternatives (e.g.,<br />

carry select)<br />

• 当 选 择 任 何 一 种 方 案 时 , 都 要 考 虑 多 种 策 略<br />

° 做 已 知 如 何 做 <strong>的</strong> 事 情 Work on the Things you Know How<br />

to Do<br />

• 在 不 断 前 进 中 , 未 知 <strong>的</strong> 事 情 将 越 来 越 明 显 。<br />

北 京 大 学 计 算 机 科 学 技 术 系<br />

计 算 机 系 统 结 构 教 研 室


设 计 过 程 小 结<br />

采 用 层 次 式 设 计 处 理 复 杂 性<br />

自 顶 向 下 vs. 自 底 向 上 vs. 逐 步 求 精<br />

设 计 表 达 <strong>的</strong> 重 要 性 :<br />

• 基 本 模 块 (Block Diagrams)<br />

• 分 解 为 位 片 ( Bit Slices)<br />

• 真 值 表 、 K-Maps<br />

• 电 路 <strong>图</strong><br />

top<br />

down<br />

bottom<br />

up<br />

mux design<br />

meets at TT<br />

• 其 他 描 述 : 状 态 <strong>图</strong> 、 时 序 <strong>图</strong> , 寄 存 器 传 输 , . . .<br />

优 <strong>化</strong> 标 准 :<br />

门 数<br />

[ 封 装 数 ]<br />

面 积<br />

Logic Levels<br />

Fan-in/Fan-out<br />

Delay<br />

Power<br />

管 教 输 出<br />

Cost<br />

Design time<br />

北 京 大 学 计 算 机 科 学 技 术 系<br />

计 算 机 系 统 结 构 教 研 室


上 讲 总 结<br />

° 设 计 过 程 概 述<br />

• 设 计 是 一 个 不 断 反 复 <strong>的</strong> 过 程 -- 逐 步 求 精<br />

• 无 需 等 到 洞 察 一 切 后 才 开 始 设 计<br />

° 二 进 制 算 术 绪 论<br />

• 使 用 补 码 表 示 , 易 于 实 现 减 法<br />

°ALU 设 计<br />

• 设 计 一 个 简 单 <strong>的</strong> 4 位 ALU<br />

• 其 他 构 建 ALU <strong>的</strong> 技 术<br />

°ISA 驱 动 <strong>的</strong> ALU 设 计<br />

北 京 大 学 计 算 机 科 学 技 术 系<br />

计 算 机 系 统 结 构 教 研 室


本 讲 提 纲<br />

° 上 一 讲 复 习<br />

° 根 据 指 令 系 统 和 移 位 , 设 计 ALU<br />

° 乘 法<br />

北 京 大 学 计 算 机 科 学 技 术 系<br />

计 算 机 系 统 结 构 教 研 室


对 ALU 进 行 需 求 分 析<br />

° 从 指 令 系 统 体 系 结 构 开 始 : 必 须 能 够 完 成 ISA<br />

中 <strong>的</strong> 所 有 操 作<br />

° 根 据 出 现 频 率 和 硬 件 预 算 , 对 成 本 和 性 能 进<br />

行 权 衡<br />

° MIPS ISA<br />

北 京 大 学 计 算 机 科 学 技 术 系<br />

计 算 机 系 统 结 构 教 研 室


MIPS <strong>的</strong> 算 术 指 令<br />

指 令 示 例 含 义 注 释<br />

add add $1,$2,$3 $1 = $2 + $3 3 operands; exception possible<br />

subtract sub $1,$2,$3 $1 = $2 -$3 3 operands; exception possible<br />

add immediate addi $1,$2,100 $1 = $2 + 100 + constant; exception possible<br />

add unsigned addu $1,$2,$3 $1 = $2 + $3 3 operands; no exceptions<br />

subtract unsigned subu $1,$2,$3 $1 = $2 -$3 3 operands; no exceptions<br />

add imm. unsign. addiu $1,$2,100 $1 = $2 + 100 + constant; no exceptions<br />

multiply mult $2,$3 Hi, Lo = $2 x $3 64-bit signed product<br />

multiply unsigned multu$2,$3 Hi, Lo = $2 x $3 64-bit unsigned product<br />

divide div $2,$3 Lo = $2 ÷$3, Lo = quotient, Hi = remainder<br />

Hi = $2 mod $3<br />

divide unsigned divu $2,$3 Lo = $2 ÷$3, Unsigned quotient & remainder<br />

Hi = $2 mod $3<br />

Move from Hi mfhi $1 $1 = Hi Used to get copy of Hi<br />

Move from Lo mflo $1 $1 = Lo Used to get copy of Lo<br />

北 京 大 学 计 算 机 科 学 技 术 系<br />

计 算 机 系 统 结 构 教 研 室


乘 法 ( 无 符 号 数 )<br />

° 从 纸 和 笔 做 乘 法 ( 无 符 号 数 ):<br />

被 乘 数 Multiplicand 1000<br />

乘 数 x 1001<br />

Multiplier 1000<br />

0000<br />

0000<br />

1000<br />

乘 积 Product 1001000<br />

° 如 果 忽 略 符 号 位 ,m 位 x n 位 = m+n 位 乘 积<br />

° 二 进 制 , 使 得 乘 法 <strong>更</strong> 易 实 现 :<br />

• 0 => 0 ( 0 x 被 乘 数 )<br />

• 1 => 被 乘 数 ( 1 x 被 乘 数 )<br />

°4 种 乘 法 硬 件 / 算 法<br />

• 循 序 渐 进<br />

北 京 大 学 计 算 机 科 学 技 术 系<br />

计 算 机 系 统 结 构 教 研 室


无 符 号 组 合 乘 法 器<br />

0 0 0 0<br />

A 3 A 2 A 1 A 0<br />

A 3 A 2 A 1 A 0<br />

A 3 A 2 A 1 A 0<br />

A 2 A 1 A 0<br />

P 7 P 6 P 5 P 4 P 3 P 2 P 1 P 0<br />

A 3<br />

B 1<br />

° 如 果 B i == 1, 那 么 , 第 i 级 累 计 A * 2 i<br />

° 问 题 : 32 位 乘 法 器 需 要 多 少 硬 件 ? 关 键 路 径 ?<br />

B 0<br />

B 2<br />

B 3<br />

北 京 大 学 计 算 机 科 学 技 术 系<br />

计 算 机 系 统 结 构 教 研 室


上 述 乘 法 器 如 何 工 作 ?<br />

P 7<br />

0<br />

P 6<br />

0<br />

A 3<br />

2<br />

P 5<br />

0<br />

A 3<br />

A 2<br />

1<br />

P 4<br />

0<br />

A 3<br />

A 2<br />

A 1 A<br />

A 0<br />

P 3<br />

0<br />

A 2<br />

A 1<br />

0<br />

P 2<br />

0<br />

A 1<br />

A 0<br />

P 1<br />

0<br />

A 0<br />

P 0<br />

A A<br />

A 3<br />

B 1<br />

B 0<br />

B 2<br />

B 3<br />

° 每 级 都 对 A 进 行 左 移 ( x 2)<br />

° 使 用 B <strong>的</strong> 下 一 位 来 判 断 是 否 <strong>加</strong> 上 左 移 后 <strong>的</strong> 被 乘 数<br />

° 每 级 都 累 计 2n 位 <strong>的</strong> 部 分 积<br />

北 京 大 学 计 算 机 科 学 技 术 系<br />

计 算 机 系 统 结 构 教 研 室


第 一 种 无 符 号 移 位 - <strong>加</strong> 法 乘 法 器<br />

°64 位 被 乘 数 寄 存 器 、64 位 ALU、64 位 乘 积 寄 存 器 、32 位 乘 数 寄 存 器<br />

Multiplicand<br />

64 bits<br />

Shift Left<br />

64-bit ALU<br />

Multiplier<br />

Shift Right<br />

32 bits<br />

Product<br />

64 bits<br />

Write<br />

Control<br />

乘 法 器 = 数 据 通 路 + 控 制<br />

北 京 大 学 计 算 机 科 学 技 术 系<br />

计 算 机 系 统 结 构 教 研 室


第 一 种 乘 法 算 法<br />

Start<br />

Multiplier0 = 1<br />

1. Test<br />

Multiplier0<br />

Multiplier0 = 0<br />

1a. Add multiplicand to product &<br />

place the result in Product register<br />

° 乘 积 乘 数 被 乘 数<br />

° 0000 0000 0011 0000 0010<br />

°0000 0010 0001 0000 0100<br />

°0000 0110 0000 0000 1000<br />

°0000 0110<br />

北 京 大 学 计 算 机 科 学 技 术 系<br />

2. Shift the Multiplicand register left 1 bit.<br />

3. Shift the Multiplier register right 1 bit.<br />

32nd<br />

repetition?<br />

No: < 32 repetitions<br />

Yes: 32 repetitions<br />

Done<br />

计 算 机 系 统 结 构 教 研 室


上 述 乘 法 器 如 何 工 作 ?<br />

P 7<br />

0<br />

P 6<br />

0<br />

A 3<br />

2<br />

P 5<br />

0<br />

A 3<br />

A 2<br />

1<br />

P 4<br />

0<br />

A 3<br />

A 2<br />

A 1 A<br />

A 0<br />

P 3<br />

0<br />

A 2<br />

A 1<br />

0<br />

P 2<br />

0<br />

A 1<br />

A 0<br />

P 1<br />

0<br />

A 0<br />

P 0<br />

A A<br />

A 3<br />

B 1<br />

B 0<br />

B 2<br />

B 3<br />

° 每 级 都 对 A 进 行 左 移 ( x 2)<br />

° 使 用 B <strong>的</strong> 下 一 位 来 判 断 是 否 <strong>加</strong> 上 左 移 后 <strong>的</strong> 被 乘 数<br />

° 每 级 都 累 计 2n 位 <strong>的</strong> 部 分 积<br />

北 京 大 学 计 算 机 科 学 技 术 系<br />

计 算 机 系 统 结 构 教 研 室


第 一 种 乘 法 <strong>的</strong> 启 示<br />

° 每 个 周 期 1 个 时 钟 => 每 次 乘 法 大 约 100(323) 个 时 钟<br />

• 乘 法 与 <strong>加</strong> 法 <strong>的</strong> 出 现 频 率 比 5:1 ~ 100:1<br />

° 64 位 被 乘 数 中 1/2 <strong>的</strong> 位 数 总 是 为 0<br />

=> 使 用 64 位 <strong>加</strong> 法 器 , 太 浪 费 !!!<br />

° 在 被 乘 数 左 移 <strong>的</strong> 过 程 中 , 在 左 边 插 入 0<br />

=> 一 旦 产 生 了 乘 积 <strong>的</strong> 最 小 位 , 它 就 永 远 不 变 !!!<br />

° 用 乘 积 右 移 替 代 被 乘 数 左 移 ?<br />

北 京 大 学 计 算 机 科 学 技 术 系<br />

计 算 机 系 统 结 构 教 研 室


如 何 进 一 步 改 进 ?<br />

0 0 0 0<br />

A 3<br />

A 0<br />

A 2<br />

A 1<br />

A 0<br />

B 0<br />

A 3<br />

A 0<br />

A 2<br />

A 1<br />

B 1<br />

B 2<br />

A 3<br />

A 0<br />

A 2<br />

A 1<br />

A 3<br />

A 2<br />

A 1<br />

B 3<br />

P 7<br />

P 6<br />

P 5<br />

P 4<br />

P 3<br />

P 2<br />

P 1<br />

P 0<br />

° 被 乘 数 固 定 不 动 , 乘 积 右 移<br />

北 京 大 学 计 算 机 科 学 技 术 系<br />

计 算 机 系 统 结 构 教 研 室


第 二 种 乘 法 硬 件<br />

°32 位 被 乘 数 寄 存 器 、32 位 ALU、64 位 乘 积 寄 存 器 、32 位 乘 数 寄 存 器<br />

Multiplicand<br />

32 bits<br />

32-bit ALU<br />

Product<br />

64 bits<br />

Shift Right<br />

Write<br />

Multiplier<br />

Shift Shift Right Right<br />

32 bits<br />

Control<br />

北 京 大 学 计 算 机 科 学 技 术 系<br />

计 算 机 系 统 结 构 教 研 室


第 二 种 乘 法 算 法<br />

Start<br />

Multiplier0 = 1<br />

1. Test<br />

Multiplier0<br />

Multiplier0 = 0<br />

1a. Add multiplicand to the left half of product &<br />

place the result in the left half of Product register<br />

Product Multiplier Multiplicand<br />

0000 0000 0011 0010<br />

1: 0010 0000 0011 0010<br />

2: 0001 0000 0011 0010<br />

3: 0001 0000 0001 0010<br />

1: 0011 0000 0001 0010<br />

2: 0001 1000 0001 0010<br />

3: 0001 1000 0000 0010<br />

1: 0001 1000 0000 0010<br />

2: 0000 1100 0000 0010<br />

3: 0000 1100 0000 0010<br />

1: 0000 1100 0000 0010<br />

2: 0000 0110 0000 0010<br />

3: 0000 0110 0000 0010<br />

0000 0110 0000 0010<br />

北 京 大 学 计 算 机 科 学 技 术 系<br />

2. Shift the Product register right 1 bit.<br />

3. Shift the Multiplier register right 1 bit.<br />

32nd<br />

repetition?<br />

No: < 32 repetitions<br />

Yes: 32 repetitions<br />

Done<br />

计 算 机 系 统 结 构 教 研 室


第 二 种 乘 法 算 法<br />

仍 然 浪 费 很 多 资 源 !<br />

Multiplier0 = 1<br />

Start<br />

1. Test<br />

Multiplier0<br />

Multiplier0 = 0<br />

1a. Add multiplicand to the left half of product &<br />

place the result in the left half of Product register<br />

Product Multiplier Multiplicand<br />

0000 0000 0011 0010<br />

1: 0010 0000 0011 0010<br />

2: 0001 0000 0011 0010<br />

3: 0001 0000 0001 0010<br />

1: 0011 0000 0001 0010<br />

2: 0001 1000 0001 0010<br />

3: 0001 1000 0000 0010<br />

1: 0001 1000 0000 0010<br />

2: 0000 1100 0000 0010<br />

3: 0000 1100 0000 0010<br />

1: 0000 1100 0000 0010<br />

2: 0000 0110 0000 0010<br />

3: 0000 0110 0000 0010<br />

0000 0110 0000 0010<br />

北 京 大 学 计 算 机 科 学 技 术 系<br />

2. Shift the Product register right 1 bit.<br />

3. Shift the Multiplier register right 1 bit.<br />

32nd<br />

repetition?<br />

No: < 32 repetitions<br />

Yes: 32 repetitions<br />

Done<br />

计 算 机 系 统 结 构 教 研 室


第 二 种 乘 法 <strong>的</strong> 启 示<br />

° 乘 积 寄 存 器 浪 费 <strong>的</strong> 空 间 正 好 与 乘 数 中 无 用 <strong>的</strong> 空 间 相<br />

同<br />

=> 联 合 使 用 乘 数 寄 存 器 和 乘 积 寄 存 器<br />

北 京 大 学 计 算 机 科 学 技 术 系<br />

计 算 机 系 统 结 构 教 研 室


第 三 种 乘 法 硬 件<br />

°32 位 被 乘 数 寄 存 器 、32 位 ALU、64 位 乘 积 寄 存 器 ( 没 有 乘 数 寄 存 器 )<br />

Multiplicand<br />

32 bits<br />

32-bit ALU<br />

Product (Multiplier)<br />

64 bits<br />

Shift Right<br />

Write<br />

Control<br />

北 京 大 学 计 算 机 科 学 技 术 系<br />

计 算 机 系 统 结 构 教 研 室


第 三 种 乘 法 算 法<br />

Start<br />

Multiplicand Product<br />

0010 0000 0011<br />

Product0 = 1<br />

1. Test<br />

Product0<br />

Product0 = 0<br />

1a. Add multiplicand to the left half of product &<br />

place the result in the left half of Product register<br />

°Product<br />

0000 0011<br />

Multiplicand<br />

0010<br />

°0001 0001 0010<br />

2. Shift the Product register right 1 bit.<br />

°0001 1000 0010<br />

°0000 1100 0010<br />

°0000 0110 0010<br />

32nd<br />

repetition?<br />

No: < 32 repetitions<br />

北 京 大 学 计 算 机 科 学 技 术 系<br />

Yes: 32 repetitions<br />

Done<br />

计 算 机 系 统 结 构 教 研 室


第 三 种 乘 法 <strong>的</strong> 启 示<br />

° 由 于 乘 数 和 乘 积 结 合 在 一 起 , 每 位 需 要 2 步<br />

°MIPS 中 寄 存 器 Hi 和 Lo 是 乘 积 <strong>的</strong> 左 半 部 和 右 半 部<br />

° 提 供 了 MIPS 指 令 MultU<br />

° 如 何 进 一 步 改 进 该 算 法 <strong>的</strong> 速 度 ?<br />

° 有 符 号 数 乘 法 如 何 ?<br />

• 简 单 地 策 略 是 假 设 两 个 源 操 作 数 都 位 正 数 , 在 运 算 结 束 时 在 对<br />

乘 积 进 行 修 正 ( 不 算 符 号 位 , 运 算 31 步 )<br />

• 使 用 补 码<br />

- 需 要 对 部 分 乘 积 进 行 符 号 扩 展 , 在 最 后 再 进 行 减 法<br />

• Booth 算 法 是 一 种 利 用 上 述 硬 件 进 行 有 符 号 数 乘 法 <strong>的</strong> 优 秀 算 法<br />

- 可 同 时 处 理 多 位<br />

北 京 大 学 计 算 机 科 学 技 术 系<br />

计 算 机 系 统 结 构 教 研 室


Booth 算 法 <strong>的</strong> 动 机<br />

° 示 例 : 2 x 6 = 0010 x 0110:<br />

0010<br />

x 0110<br />

0000 移 位 ( 乘 数 运 算 位 为 0)<br />

+ 0010 <strong>加</strong> 法 ( 乘 数 运 算 位 为 1)<br />

+ 0100 <strong>加</strong> 法 ( 乘 数 运 算 位 为 1)<br />

+ 0000 移 位 ( 乘 数 运 算 位 为 0)<br />

00001100<br />

° 具 有 <strong>加</strong> 法 或 减 法 <strong>的</strong> ALU 可 以 采 用 多 种 方 式 计 算 相 同 <strong>的</strong> 结 果 :<br />

6= -2 + 8 或 者 0110 = -0010+ 1000<br />

° 乘 数 中 <strong>的</strong> 1 串 可 以 用 看 到 第 一 个 1 时 , 进 行 一 次 减 法 , 在 处 理 完 最 后 一 个 1 后 , 再 <strong>加</strong> !<br />

0010<br />

x 0110<br />

0000 移 位 ( 乘 数 运 算 位 为 0)<br />

- 0010 sub ( 乘 数 中 <strong>的</strong> 第 一 个 1)<br />

+ 0000 shift (1 串 <strong>的</strong> 中 部 )<br />

+ 0010 add ( 最 后 1 <strong>的</strong> 前 步 )<br />

00001100<br />

北 京 大 学 计 算 机 科 学 技 术 系<br />

计 算 机 系 统 结 构 教 研 室


Booth 算 法 探 奥<br />

运 行 尾 部<br />

(end of run)<br />

将 乘 数 中 间 <strong>的</strong> 1 串 用<br />

运 行 中 部 (middle of run)<br />

0 1 1 1 1 0<br />

当 前 位 右 边 位 解 释 示 例<br />

1 0 1 串 运 行 <strong>的</strong> 首 部 0001111000<br />

1 1 1 串 运 行 <strong>的</strong> 中 部 0001111000<br />

0 1 1 串 运 行 <strong>的</strong> 尾 部 0001111000<br />

0 0 0 串 运 行 <strong>的</strong> 中 部 0001111000<br />

早 期 , 由 于 移 位 比 <strong>加</strong> 法 速 度 <strong>更</strong> 快 , 采 用 该 算 法 主 要 为 了 速 度<br />

运 行 首 部<br />

(beginning of run)<br />

在 第 一 次 看 见 1 时 <strong>的</strong> 一 次 初 始 减 法 和 在 最 后 一 个 1 后 <strong>的</strong> 一 次 <strong>加</strong> 法 代 替 。<br />

北 京 大 学 计 算 机 科 学 技 术 系<br />

计 算 机 系 统 结 构 教 研 室


Booth 算 法<br />

1. 依 赖 于 当 前 和 以 前 <strong>的</strong> 位 , 进 行 下 述 步 骤 之 一 :<br />

00: a. 0 串 <strong>的</strong> 中 部 , 不 进 行 任 何 运 算 操 作 .<br />

01: b. 1 串 <strong>的</strong> 结 束 , 将 被 乘 数 <strong>加</strong> 到 乘 积 <strong>的</strong> 左 半 部 .<br />

10: c. 1 串 <strong>的</strong> 首 部 , 从 乘 积 <strong>的</strong> 左 半 部 减 去 被 乘 数 .<br />

11: d. 1 串 <strong>的</strong> 中 部 , 不 进 行 任 何 运 算 操 作 .<br />

2. 象 第 三 种 乘 法 算 法 一 样 , 将 乘 积 算 术 右 移 1 位 .<br />

被 乘 数 乘 积 (2 x 3)<br />

0010 0000 0011 0<br />

被 乘 数 乘 积 (2 x -3)<br />

0010 0000 1101 0<br />

北 京 大 学 计 算 机 科 学 技 术 系<br />

计 算 机 系 统 结 构 教 研 室


Booth 算 法 探 奥<br />

a i a i-1 Operation<br />

0 0 Do Nothing<br />

0 1 Add b<br />

1 0 Subtract b<br />

1 1 Do Nothing<br />

对 于 a i-1 - a i:<br />

0: do nothing<br />

+1: add b<br />

- 1: subtract b<br />

北 京 大 学 计 算 机 科 学 技 术 系<br />

计 算 机 系 统 结 构 教 研 室


( a<br />

<br />

<br />

Booth 算 法 探 奥<br />

1<br />

( a<br />

( a<br />

...<br />

0<br />

1<br />

<br />

a<br />

<br />

<br />

0<br />

a<br />

a<br />

) b<br />

<br />

1<br />

2<br />

2<br />

0<br />

) b<br />

2<br />

) b<br />

2<br />

1<br />

2<br />

<br />

( a<br />

30<br />

<br />

a<br />

31<br />

) b<br />

<br />

2<br />

31<br />

<br />

a<br />

i<br />

i1<br />

i<br />

i<br />

i<br />

i<br />

2<br />

ai<br />

2<br />

( ai<br />

2ai<br />

) 2<br />

( 2ai<br />

ai<br />

) 2<br />

ai<br />

2<br />

a 1<br />

0<br />

<br />

b(( a<br />

31<br />

2<br />

31<br />

) <br />

( a<br />

30<br />

<br />

2<br />

30<br />

) <br />

... <br />

( a<br />

1<br />

<br />

2<br />

1<br />

) <br />

( a<br />

0<br />

<br />

2<br />

0<br />

)<br />

<br />

ba<br />

北 京 大 学 计 算 机 科 学 技 术 系<br />

计 算 机 系 统 结 构 教 研 室


Booths 示 例 (2 x 7)<br />

Operation Multiplicand Product next?<br />

0. initial value 0010 0000 0111 0 10 sub<br />

1a. P = P - m 1110 +1110 1110 0111 0 shift P (sign ext)<br />

1b. 0010 1111 0011 1 11 nop, shift<br />

2. 0010 1111 1001 1 11 nop, shift<br />

3. 0010 1111 1100 1 01 add<br />

4a. 0010 +0010 0001 1100 1 shift<br />

4b. 0010 0000 1110 0 done<br />

北 京 大 学 计 算 机 科 学 技 术 系<br />

计 算 机 系 统 结 构 教 研 室


Booths 示 例 (2 x -3)<br />

Operation Multiplicand Product next?<br />

0. initial value 0010 0000 1101 0 10 sub<br />

1a. P = P - m 1110 +1110 1110 1101 0 shift P (sign ext)<br />

1b. 0010 1111 0110 1 01 add<br />

+ 0010<br />

2a. 0001 0110 1 shift P<br />

2b. 0010 0000 1011 0 10 sub<br />

+1110<br />

3a. 0010 1110 1011 0 shift<br />

3b. 0010 1111 0101 1 11 nop<br />

4a 1111 0101 1 shift<br />

4b. 0010 1111 1010 1 done<br />

北 京 大 学 计 算 机 科 学 技 术 系<br />

计 算 机 系 统 结 构 教 研 室


MIPS <strong>的</strong> 逻 辑 指 令<br />

指 令 示 例 含 义 注 释<br />

and and $1,$2,$3 $1 = $2 & $3 3 reg. operands; Logical AND<br />

or or $1,$2,$3 $1 = $2 | $3 3 reg. operands; Logical OR<br />

xor xor $1,$2,$3 $1 = $2 $3 3 reg. operands; Logical XOR<br />

nor nor $1,$2,$3 $1 = ~($2 |$3) 3 reg. operands; Logical NOR<br />

and immediate andi $1,$2,10 $1 = $2 & 10 Logical AND reg, constant<br />

or immediate ori $1,$2,10 $1 = $2 | 10 Logical OR reg, constant<br />

xor immediate xori $1, $2,10 $1 = ~$2 &~10 Logical XOR reg, constant<br />

shift left logical sll $1,$2,10 $1 = $2 > 10 Shift right by constant<br />

shift right arithm. sra $1,$2,10 $1 = $2 >> 10 Shift right (sign extend)<br />

shift left logical sllv $1,$2,$3 $1 = $2 > $3 Shift right by variable<br />

shift right arithm. srav $1,$2, $3 $1 = $2 >> $3 Shift right arith. by variable<br />

北 京 大 学 计 算 机 科 学 技 术 系<br />

计 算 机 系 统 结 构 教 研 室


比 较 并 转 移<br />

° 比 较 并 转 移<br />

• BEQ rs, rt, offset if R[rs] == R[rt] then PC-relative branch<br />

• BNE rs, rt, offset <br />

° 与 零 比 较 并 转 移<br />

• BLEZ rs, offset if R[rs] <br />

• BLT <<br />

• BGEZ >=<br />

• BLTZAL rs, offset If R[rs] < 0 then branch and link (into R 31)<br />

• BGEZAL >=<br />

° 几 乎 所 有 <strong>的</strong> 比 较 都 是 与 进 行 比 较 !<br />

北 京 大 学 计 算 机 科 学 技 术 系<br />

计 算 机 系 统 结 构 教 研 室


MIPS 对 ALU <strong>的</strong> 需 求<br />

° Add, AddU, Sub, SubU, AddI, AddIU<br />

=> 带 溢 出 检 测 和 反 向 器 <strong>的</strong> 补 码 <strong>加</strong> 法 器<br />

° SLTI, SLTIU (set less than)<br />

=> 带 反 向 器 <strong>的</strong> 补 码 <strong>加</strong> 法 器 , 检 测 结 果 <strong>的</strong> 符 号<br />

° BEQ, BNE (branch on equal or not equal)<br />

=> 带 反 向 器 <strong>的</strong> 补 码 <strong>加</strong> 法 器 , 检 测 结 果 是 否 为 零<br />

° And, Or, AndI, OrI<br />

=> 逻 辑 或 、 逻 辑 与<br />

° 上 一 讲 介 绍 <strong>的</strong> ALU 支 持 这 些 操 作<br />

北 京 大 学 计 算 机 科 学 技 术 系<br />

计 算 机 系 统 结 构 教 研 室


MIPS 对 ALU <strong>的</strong> 其 他 需 求<br />

°Xor, Nor, XorI<br />

=> 逻 辑 异 或 、 逻 辑 或 非 或 者 两 步 策 略 :<br />

° (A OR B) XOR 1111....1111<br />

°Sll, Srl, Sra<br />

=> 需 要 进 行 0~31 位 <strong>的</strong> 左 移 、 右 移 、 算 术 右 移 运 算<br />

°Mult, MultU, Div, DivU<br />

=> 需 要 有 符 号 、 无 符 号 <strong>的</strong> 32 位 乘 法 和 除 法<br />

北 京 大 学 计 算 机 科 学 技 术 系<br />

计 算 机 系 统 结 构 教 研 室


对 ALU 增 <strong>加</strong> 异 或 功 能<br />

° 扩 展 多 路 选 择 器<br />

CarryIn<br />

A<br />

B<br />

1-bit<br />

全 <strong>加</strong> 器<br />

多 路 选 择 器<br />

结 果<br />

CarryOut<br />

北 京 大 学 计 算 机 科 学 技 术 系<br />

计 算 机 系 统 结 构 教 研 室


三 种 移 位 器<br />

逻 辑 (logical) 移 入 <strong>的</strong> 数 值 总 是 "0"<br />

"0" msb lsb "0"<br />

算 术 (arithmetic) 在 右 移 时 , 进 行 符 号 扩 展<br />

msb lsb "0"<br />

循 环 (rotating) 移 出 <strong>的</strong> 位 又 从 另 一 端 移 入 ( 在 MIPS 中 不 支 持 )<br />

msb<br />

left<br />

lsb<br />

right<br />

msb<br />

lsb<br />

注 : 需 要 一 位 移 动 。 特 定 指 令 可 能 要 求 进 行 032 位 移 动 !<br />

北 京 大 学 计 算 机 科 学 技 术 系<br />

计 算 机 系 统 结 构 教 研 室


使 用 多 路 选 择 器 <strong>的</strong> 组 合 移 位 器<br />

基 本 单 元<br />

A B<br />

sel 1 0<br />

8 位 右 移 器<br />

D<br />

A 6<br />

A 5<br />

A 4<br />

A 3<br />

A 2<br />

A 1<br />

A 0<br />

S 2 S 1 S 0<br />

1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0<br />

1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0<br />

1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0<br />

R 7<br />

A 7<br />

R 0<br />

R 6<br />

R 5<br />

R 4<br />

R 3<br />

R 2<br />

R 1<br />

°MSBs <strong>的</strong> 输 入 如 何 ?<br />

°32 位 移 位 器 需 要 多 少 级 ?<br />

° 如 果 使 用 4-1 多 路 选 择 器 , 结 果 如 何 ?<br />

北 京 大 学 计 算 机 科 学 技 术 系<br />

计 算 机 系 统 结 构 教 研 室


SHR:<br />

Q3<br />

0<br />

Q2<br />

Q3<br />

Q1<br />

Q2<br />

Q0<br />

Q1<br />

多 路 选 择 器 / 移 位 器<br />

0<br />

1<br />

0<br />

1<br />

0<br />

1<br />

0<br />

1<br />

SHR/<br />

don't<br />

shift<br />

D3<br />

D2<br />

D1<br />

D0<br />

( 5 inputs)<br />

Q3<br />

0<br />

0<br />

0<br />

Q2<br />

Q3<br />

0<br />

0<br />

Q1<br />

Q2<br />

Q3<br />

0<br />

Q0<br />

Q1<br />

Q2<br />

Q3<br />

0<br />

1<br />

2<br />

3<br />

0<br />

1<br />

2<br />

3<br />

0<br />

1<br />

2<br />

3<br />

0<br />

1<br />

2<br />

3<br />

SHR 0, 1, 2, 3 bits:<br />

D3<br />

D2<br />

D1<br />

D0<br />

Q3<br />

0<br />

Q2<br />

Q3<br />

Q1<br />

Q2<br />

Q0<br />

Q1<br />

0<br />

1<br />

0<br />

1<br />

0<br />

1<br />

0<br />

1<br />

0<br />

0<br />

0<br />

1<br />

0<br />

1<br />

0<br />

1<br />

0<br />

1<br />

x 1 x 2<br />

8 x 2:1 Mux<br />

2 stages<br />

D3<br />

D2<br />

D1<br />

D0<br />

算 术 右 移 如 何 做 ?<br />

shift amount<br />

(0,1,2,3)<br />

4 x 4:1 Mux<br />

1 stage<br />

北 京 大 学 计 算 机 科 学 技 术 系<br />

计 算 机 系 统 结 构 教 研 室


通 用 右 移 策 略 (16 位 )<br />

S 0<br />

(0,1)<br />

S 1<br />

(0, 2)<br />

S 2<br />

(0, 4)<br />

S 3<br />

(0, 8)<br />

如 果 增 <strong>加</strong> 自 右 至 左 <strong>的</strong> 连 接 , 就 可 以 支 持 循 环 移 位<br />

北 京 大 学 计 算 机 科 学 技 术 系<br />

计 算 机 系 统 结 构 教 研 室


32 位 移 位 器<br />

使 用 上 述 配 置 对 32 位 数 据 进 行 0~31 位 移 位 将 导 致 :<br />

如 果 使 用 2:1 多 路 选 择 器 , 那 么 需 要 5 级 多 路 选 择 器 (x1, x2, x4,<br />

x8, x16)<br />

32 位 x 5 级 = 160 个 2:1 多 路 选 择 器 !<br />

如 果 使 用 2 级 4:1 多 路 选 择 器 和 1 级 2:1 多 路 选 择 器 , 那 么 需 要 3 级 多<br />

路 选 择 器<br />

32 x 4:1 + 32 x 4:1 + 32 x 2:1<br />

如 果 使 用 1 级 8:1 多 路 选 择 器 和 1 级 4:1 多 路 选 择 器 , 那 么 需 要 2 级 多<br />

路 选 择 器<br />

32 x 8:1 + 32 x 4:1<br />

北 京 大 学 计 算 机 科 学 技 术 系<br />

计 算 机 系 统 结 构 教 研 室


多 位 移 位<br />

复 合 策 略 , 每 次 循 环 完 成 多 位 <strong>的</strong> 多 重 控 制 循 环<br />

31 位 移 位 :<br />

使 用 0、1 位 移 位 器<br />

使 用 0、1、2、3 位 移 位 器<br />

使 用 0、1、2、3、4、5、6、7 位 移 位 器<br />

使 用 015 位 移 位 器<br />

31 次 迭 代<br />

11 次 迭 代<br />

5 次 迭 代<br />

3 次 迭 代<br />

实 际 上 , 大 多 数 移 位 都 比 较 短 ( 通 常 , 实 现 0-3)<br />

非 常 复 杂 : 目 前 , 只 能 进 行 右 移<br />

北 京 大 学 计 算 机 科 学 技 术 系<br />

计 算 机 系 统 结 构 教 研 室


漏 斗 移 位 器 (Funnel Shifter)<br />

代 替 从 64 位 中 抽 取 32 位 .<br />

Y<br />

X<br />

右 移<br />

°A 右 移 i 位 ( sa = shift right amount )<br />

° 逻 辑 : Y = 0, X=A, sa=i<br />

° 算 术 : Y = sign(A), X=A<br />

° 循 环 : Y=A, X=A<br />

° 左 移 : Y=A, X=0, sa= 32 - i<br />

R<br />

32 32<br />

右 移<br />

32<br />

北 京 大 学 计 算 机 科 学 技 术 系<br />

计 算 机 系 统 结 构 教 研 室


桶 式 移 位 器 (Barrel Shifter)<br />

依 赖 于 技 术 工 艺 <strong>的</strong> 解 决 方 案 : 每 个 开 关 一 个 晶 体 管<br />

SR3<br />

SR2<br />

SR1<br />

SR0<br />

D3<br />

A6<br />

D2<br />

A5<br />

D1<br />

A4<br />

D0<br />

A3 A2 A1 A0<br />

北 京 大 学 计 算 机 科 学 技 术 系<br />

计 算 机 系 统 结 构 教 研 室


总 结<br />

° 指 令 系 统 驱 动 ALU 设 计<br />

° 移 位 器 : 从 每 次 1 位 到 桶 式 移 位 器 逐 步 完 善<br />

° 乘 法 : 逐 步 完 善<br />

• 32 位 <strong>加</strong> 法 器 、64 位 移 位 寄 存 器 、32 被 乘 数 寄 存 器<br />

• 可 处 理 有 符 号 数 <strong>的</strong> Booth 算 法<br />

° 可 以 设 计 出 每 次 运 算 多 位 <strong>的</strong> 乘 法 算 法<br />

° 移 位 器 : 每 次 1 位 <strong>的</strong> 寄 存 器 、 桶 式 移 位 器<br />

北 京 大 学 计 算 机 科 学 技 术 系<br />

计 算 机 系 统 结 构 教 研 室

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!