Today s Outline. CS152 Computer Architecture and Engineering Lecture 5. VHDL, Multiply, Shift

Similar documents
Review of Last lecture. Review ALU Design. Designing a Multiplier Shifter Design Review. Booth s algorithm. Today s Outline

Today s Outline. CS152 Computer Architecture and Engineering Lecture 5. VHDL, Multiply, Shift

Review from last time. CS152 Computer Architecture and Engineering Lecture 6. Verilog (finish) Multiply, Divide, Shift

Outline. EEL-4713 Computer Architecture Multipliers and shifters. Deriving requirements of ALU. MIPS arithmetic instructions

MIPS Integer ALU Requirements

COMP 303 Computer Architecture Lecture 6

361 div.1. Computer Architecture EECS 361 Lecture 7: ALU Design : Division

Tailoring the 32-Bit ALU to MIPS

EECS150 - Digital Design Lecture 13 - Combinational Logic & Arithmetic Circuits Part 3

Homework 3. Assigned on 02/15 Due time: midnight on 02/21 (1 WEEK only!) B.2 B.11 B.14 (hint: use multiplexors) CSCI 402: Computer Architectures

EEC 483 Computer Organization

ECE468 Computer Organization & Architecture. The Design Process & ALU Design

Arithmetic for Computers

CENG 3420 Lecture 05: Arithmetic and Logic Unit

Lecture 8: Addition, Multiplication & Division

CPS 104 Computer Organization and Programming

Integer Multiplication and Division

14:332:331. Computer Architecture and Assembly Language Fall Week 5

CENG3420 L05: Arithmetic and Logic Unit

Computer Architecture and Engineering Lecture 7: Divide, Floating Point, Pentium Bug

Number Systems and Computer Arithmetic

Review: MIPS Organization

Lecture Topics. Announcements. Today: Integer Arithmetic (P&H ) Next: The MIPS ISA (P&H ) Consulting hours. Milestone #1 (due 1/26)

Reduced Instruction Set Computer (RISC)

Number Systems and Their Representations

Reduced Instruction Set Computer (RISC)

CS/COE 0447 Example Problems for Exam 2 Spring 2011

EE260: Logic Design, Spring n Integer multiplication. n Booth s algorithm. n Integer division. n Restoring, non-restoring

EEM 486: Computer Architecture. Lecture 2. MIPS Instruction Set Architecture

Integer Arithmetic. Jinkyu Jeong Computer Systems Laboratory Sungkyunkwan University

Chapter 3 Arithmetic for Computers. ELEC 5200/ From P-H slides

The MIPS Instruction Set Architecture

NUMBER OPERATIONS. Mahdi Nazm Bojnordi. CS/ECE 3810: Computer Organization. Assistant Professor School of Computing University of Utah

Divide: Paper & Pencil

COMPUTER ORGANIZATION AND DESIGN

MIPS ISA. 1. Data and Address Size 8-, 16-, 32-, 64-bit 2. Which instructions does the processor support

CSE 141 Computer Architecture Summer Session Lecture 3 ALU Part 2 Single Cycle CPU Part 1. Pramod V. Argade

Math in MIPS. Subtracting a binary number from another binary number also bears an uncanny resemblance to the way it s done in decimal.

Lecture Topics. Announcements. Today: Integer Arithmetic (P&H ) Next: continued. Consulting hours. Introduction to Sim. Milestone #1 (due 1/26)

ECE331: Hardware Organization and Design

Computer Organization and Structure. Bing-Yu Chen National Taiwan University

Assembly Programming

Computer Architecture. The Language of the Machine

ECE232: Hardware Organization and Design. Computer Organization - Previously covered

ECE260: Fundamentals of Computer Engineering

ECE331: Hardware Organization and Design

Q1: /30 Q2: /25 Q3: /45. Total: /100

Fast Arithmetic. Philipp Koehn. 19 October 2016

ECE260: Fundamentals of Computer Engineering

Integer Multiplication and Division

ECE260: Fundamentals of Computer Engineering

Computer Architecture. Chapter 3: Arithmetic for Computers

Mark Redekopp, All rights reserved. EE 357 Unit 11 MIPS ISA

ECE 2035 Programming HW/SW Systems Fall problems, 7 pages Exam Two 23 October 2013

Computer Arithmetic Multiplication & Shift Chapter 3.4 EEC170 FQ 2005

Computer Architecture. MIPS Instruction Set Architecture

Chapter 3 Arithmetic for Computers (Part 2)

Chapter 3. Arithmetic Text: P&H rev

Mark Redekopp, All rights reserved. EE 352 Unit 3 MIPS ISA

Two-Level CLA for 4-bit Adder. Two-Level CLA for 4-bit Adder. Two-Level CLA for 16-bit Adder. A Closer Look at CLA Delay

ECE410 Design Project Spring 2013 Design and Characterization of a CMOS 8-bit pipelined Microprocessor Data Path

F. Appendix 6 MIPS Instruction Reference

Computer Architecture Experiment

ECE 2035 Programming HW/SW Systems Spring problems, 6 pages Exam One 4 February Your Name (please print clearly)

Chapter 3 Arithmetic for Computers

Lecture 3: Modeling in VHDL. EE 3610 Digital Systems

COMPUTER ARITHMETIC (Part 1)

CISC 662 Graduate Computer Architecture. Lecture 4 - ISA

Chapter 3 Arithmetic for Computers

CISC 662 Graduate Computer Architecture. Lecture 4 - ISA MIPS ISA. In a CPU. (vonneumann) Processor Organization

Computer Architecture Set Four. Arithmetic

Midterm I March 3, 1999 CS152 Computer Architecture and Engineering

By, Ajinkya Karande Adarsh Yoga

Thomas Polzer Institut für Technische Informatik

Computer Architecture Chapter 3. Fall 2005 Department of Computer Science Kent State University

Midterm I March 12, 2003 CS152 Computer Architecture and Engineering

More complicated than addition. Let's look at 3 versions based on grade school algorithm (multiplicand) More time and more area

CPE 335 Computer Organization. MIPS Arithmetic Part I. Content from Chapter 3 and Appendix B

ECE 2035 Programming HW/SW Systems Fall problems, 6 pages Exam One 22 September Your Name (please print clearly) Signed.

MIPS Instruction Set

EE 109 Unit 8 MIPS Instruction Set

ECE 2035 Programming HW/SW Systems Fall problems, 6 pages Exam One 19 September 2012

5DV118 Computer Organization and Architecture Umeå University Department of Computing Science Stephen J. Hegner. Topic 3: Arithmetic

6.004 Computation Structures Spring 2009

EE 109 Unit 13 MIPS Instruction Set. Instruction Set Architecture (ISA) Components of an ISA INSTRUCTION SET OVERVIEW

MIPS Assembly Language

software hardware Which is easier to change/design???

HW2 solutions You did this for Lab sbn temp, temp,.+1 # temp = 0; sbn temp, b,.+1 # temp = -b; sbn a, temp,.+1 # a = a (-b) = a + b;

Introduction to Digital Logic Missouri S&T University CPE 2210 Multipliers/Dividers

Abi Farsoni, Department of Nuclear Engineering and Radiation Health Physics, Oregon State University

Lecture 7: Instruction Set Architectures - IV

Hardware Description Language VHDL (1) Introduction

ECE 2035 Programming HW/SW Systems Spring problems, 6 pages Exam Two 11 March Your Name (please print) total

Final Project: MIPS-like Microprocessor

MIPS Instruction Format

CS/COE0447: Computer Organization

CS/COE0447: Computer Organization

Programming the processor

ECE331: Hardware Organization and Design

Boolean Algebra. Chapter 3. Boolean Algebra. Chapter 3 Arithmetic for Computers 1. Fundamental Boolean Operations. Arithmetic for Computers

Transcription:

Today s Outline CS152 Computer Architecture and Engineering Lecture 5 VHDL, Multiply, Shift Feb 8, 1999 John Kubiatowicz (http.cs.berkeley.edu/~kubitron) Review of Last lecture Intro to VHDL Administrative Issues on-line lab notebook Designing a Multiplier Booth s algorithm Shifters lecture slides: http://www-inst.eecs.berkeley.edu/~cs152/ Lec5.1 Lec5.2 Review: ALU Design Review: Elements of the Design Process Bit-slice plus extra on the two ends Overflow means number too large for the representation Carry-look ahead and other adder tricks signed-arith and cin xor co Ovflw a31 A b31 ALU31 co cin s31 32 S 32 B 32 a0 b0 ALU0 co cin s0 4 M C/L to produce select, comp, c-in Lec5.3 Divide and Conquer (e.g., ALU) Formulate a solution in terms of simpler components. Design each of the components (subproblems) Generate and Test (e.g., ALU) Given a collection of building blocks, look for ways of putting them together that meets requirement Successive Refinement (e.g., multiplier, divider) Solve "most" of the problem (i.e., ignore some constraints or special cases), examine and correct shortcomings. Formulate High-Level Alternatives (e.g., shifter) Articulate many strategies to "keep in mind" while pursuing any one approach. Work on the Things you Know How to Do The unknown will become obvious as you make progress. Lec5.4

Review: Summary of the Design Process Hierarchical Design to manage complexity Top Down vs. Bottom Up vs. Successive Refinement Importance of Design Representations: Block Diagrams Decomposition into Bit Slices Truth Tables, K-Maps Circuit Diagrams top down bottom up Review: Cost/Price and Online Notebook Cost and Price Die size determines chip cost: cost die size (α +1) Cost v. Price: business model of company, pay for engineers R&D must return $8 to $14 for every $1 invester On-line Design Notebook Open a window and keep an editor running while you work;cut&paste Refer to the handout as an example Former CS 152 students (and TAs) say they use on-line notebook for programming as well as hardware design; one of most valuable skills Other Descriptions: state diagrams, timing diagrams, reg xfer,... Optimization Criteria: Gate Count [Package Count] Area Logic Levels Fan-in/Fan-out Delay Power Pin Out Cost Design time Lec5.5 Lec5.6 Representation Languages Hardware Representation Languages: Block Diagrams: FUs, Registers, & Dataflows Register Transfer Diagrams: Choice of busses to connect FUs, Regs Flowcharts State Diagrams Fifth Representation "Language": Hardware Description Languages E.G., ISP VHDL Verilog Descriptions in these languages can be used as input to simulation systems Two different ways to describe sequencing & microoperations hw modules described like programs with i/o ports, internal state, & parallel execution of assignment statements "software breadboard" Simulation Before Construction "Physical Breadboarding" discrete components/lower scale integration preceeds actual construction of prototype verify initial design concept No longer possible as designs reach higher levels of integration! Simulation Before Construction high level constructs implies faster to construct play "what if" more easily limited performance accuracy, however synthesis systems generate hw from high level description "To Design is to Represent" Lec5.7 Lec5.8

Levels of Description Architectural Simulation Functional/Behavioral Register Transfer Logic Circuit models programmer s view at a high level; written in your favorite programming language more detailed model, like the block diagram view commitment to datapath FUs, registers, busses; register xfer operations are clock phase accurate model is in terms of logic gates; higher level MSI functions described in terms of these electrical behavior; accurate waveforms Schematic capture + logic simulation package like Powerview Less Abstract More Accurate Slower Simulation VHDL (VHSIC Hardware Description Language) Goals: Support design, documentation, and simulation of hardware Digital system level to gate level Technology Insertion Concepts: Design entity Time-based execution model. Design Entity == Hardware Component Interface == External Characteristics Special languages + simulation systems for describing the inherent parallel activity in hardware Lec5.9 Architecture (Body ) == Internal Behavior or Structure Lec5.10 Interface Externally Visible Characterisitcs Ports: channels of communication - (inputs, outputs, clocks, control) Generic Parameters: define class of components - (timing characterisitcs, size, fan-out) --- determined where instantiated or by default Internally Visible Characteristics Declarations: Assertions: constraints on all alternative bodies (i.e., implmentations) Interface Architecture view to other modules details of implementation Lec5.11 VHDL Example: nand gate ENTITY nand is PORT (a,b: IN VLBIT; y: OUT VLBIT) END nand ARCHITECTURE behavioral OF nand is BEGIN y <= a NAND b; END behavioral; Entity describes interface Architecture give behavior, i.e., function y is a signal, not a variable it changes when ever the inputs change drive a signal NAND process is in an infinite loop VLBit is 0, 1, X or Z Lec5.12

Modeling Delays ENTITY nand is PORT (a,b: IN VLBIT; y: OUT VLBIT) END nand ARCHITECTURE behavioral OF nand is BEGIN y <= a NAND b after 1 ns; END behavioral; Generic Parameters ENTITY nand is GENERIC (delay: TIME := 1ns); PORT (a,b: IN VLBIT; y: OUT VLBIT) END nand ARCHITECTURE behavioral OF nand is BEGIN y <= a NAND b AFTER delay; END behavioral; Model temporal, as well as functional behavior, with delays in signal statements; Time is one difference from programming languages y changes 1 ns after a or b changes This fixed delay is inflexible hard to reflect changes in technology Lec5.13 Generic parameters provide default values may be overidden on each instance attach value to symbol as attribute Separate functional and temporal models How would you describe fix-delay + slope * load model? Lec5.14 Bit-vector data type Arithmetic Operations ENTITY nand32 is PORT (a,b: IN VLBIT_1D ( 31 downto 0); y: OUT VLBIT_1D ( 31 downto 0) END nand32 ARCHITECTURE behavioral OF nand32 is BEGIN y <= a NAND b; END behavioral; ENTITY add32 is PORT (a,b: IN VLBIT_1D ( 31 downto 0); y: OUT VLBIT_1D ( 31 downto 0) END add32 ARCHITECTURE behavioral OF add32 is BEGIN y <= addum(a, b) ; END behavioral; VLBIT_1D ( 31 downto 0) is equivalent to powerview 32-bit bus Can convert it to a 32 bit integer addum (see VHDL ref. appendix C) adds two n-bit vectors to produce an n+1 bit vector except when n = 32! Lec5.15 Lec5.16

Control Constructs Administrative Matters entity MUX32X2 is generic (output_delay : TIME := 4 ns); port(a,b: in vlbit_1d(31 downto 0); DOUT: out vlbit_1d(31 downto 0); SEL: in vlbit); end MUX32X2; architecture behavior of MUX32X2 is begin mux32x2_process: process(a, B, SEL) begin if (vlb2int(sel) = 0) then DOUT <= A after output_delay; else DOUT <= B after output_delay; end if; end process; end behavior; Process fires whenever is sensitivity list changes Evaluates the body sequentially VHDL provide case statements as well broken-spim was online Saturday Final class list is online. On-line lab notebook is such a good idea, its required! (starting with Lab 3) Reading Chapter 4 now Lec5.17 Lec5.18 MIPS arithmetic instructions Instruction Example Meaning Comments add add $1,$2,$3 $1 = $2 + $3 3 operands; exception possible subtract sub $1,$2,$3 $1 = $2 $3 3 operands; exception possible add immediate addi $1,$2,100 $1 = $2 + 100 + constant; exception possible add unsigned addu $1,$2,$3 $1 = $2 + $3 3 operands; no exceptions subtract unsigned subu $1,$2,$3 $1 = $2 $3 3 operands; no exceptions add imm. unsign. addiu $1,$2,100 $1 = $2 + 100 + constant; no exceptions multiply mult $2,$3 Hi, Lo = $2 x $3 64-bit signed product multiply unsigned multu$2,$3 Hi, Lo = $2 x $3 64-bit unsigned product divide div $2,$3 Lo = $2 $3, Lo = quotient, Hi = remainder Hi = $2 mod $3 divide unsigned divu $2,$3 Lo = $2 $3, Unsigned quotient & remainder Hi = $2 mod $3 Move from Hi mfhi $1 $1 = Hi Used to get copy of Hi Move from Lo mflo $1 $1 = Lo Used to get copy of Lo MULTIPLY (unsigned) Paper and pencil example (unsigned): Multiplicand 1000 Multiplier 1001 1000 0000 0000 1000 Product 01001000 m bits x n bits = m+n bit product Binary makes it easy: 0 => place 0 ( 0 x multiplicand) 1 => place a copy ( 1 x multiplicand) 4 versions of multiply hardware & algorithm: successive refinement Lec5.19 Lec5.20

Unsigned Combinational Multiplier 0 0 0 0 How does it work? 0 0 0 0 0 0 0 B 0 B 0 B 1 B 1 B 2 B 2 B 3 B 3 P 7 P 6 P 5 P 4 P 3 P 2 P 1 P 0 P 7 P 6 P 5 P 4 P 3 P 2 P 1 P 0 Stage i accumulates A * 2 i if B i == 1 Q: How much hardware for 32 bit multiplier? Critical path? at each stage shift A left ( x 2) use next bit of B to determine whether to add in shifted multiplicand accumulate 2n bit partial product at each stage Lec5.21 Lec5.22 Unisigned shift-add multiplier (version 1) Multiply Algorithm Version 1 Start 64-bit Multiplicand reg, 64-bit ALU, 64-bit Product reg, 32-bit multiplier reg Multiplier0 = 1 1. Test Multiplier0 Multiplier0 = 0 Multiplicand Shift Left 1a. Add multiplicand to product & place the result in Product register 64-bit ALU Write Product Multiplier = datapath + control Multiplier Control Shift Right Lec5.23 Product Multiplier Multiplicand 0000 0000 0011 0000 0010 0000 0010 0001 0000 0100 0000 0110 0000 0000 1000 0000 0110 2. Shift the Multiplicand register left 1 bit. 3. Shift the Multiplier register right 1 bit. 32nd repetition? No: < 32 repetitions Yes: 32 repetitions Done Lec5.24

Observations on Multiply Version 1 MULTIPLY HARDWARE Version 2 1 clock per cycle => 100 clocks per multiply Ratio of multiply to add 5:1 to 100:1 1/2 bits in multiplicand always 0 => 64-bit adder is wasted 32-bit Multiplicand reg, 32 -bit ALU, 64-bit Product reg, 32-bit Multiplier reg Multiplicand 0 s inserted in left of multiplicand as shifted => least significant bits of product never changed once formed 32-bit ALU Multiplier Shift Right Instead of shifting multiplicand to left, shift product to right? Product Shift Right Write Control Lec5.25 Lec5.26 How to think of this? Simply warp to let product move right... Remember original combinational multiplier: 0 0 0 0 0 0 0 0 B 0 B 0 B 1 B 1 B 2 B 2 B 3 B 3 P 7 P 6 P 5 P 4 P 3 P 2 P 1 P 0 P 7 P 6 P 5 P 4 P 3 P 2 P 1 P 0 Multiplicand stay s still and product moves right Lec5.27 Lec5.28

Multiply Algorithm Version 2 Start Still more wasted space! Start Multiplier0 = 1 1. Test Multiplier0 Multiplier0 = 0 Multiplier0 = 1 1. Test Multiplier0 Multiplier0 = 0 1a. Add multiplicand to the left half of product & place the result in the left half of Product register Product Multiplier Multiplicand 0000 0000 0011 0010 1: 0010 0000 0011 0010 2: 0001 0000 0011 0010 3: 0001 0000 0001 0010 1: 0011 0000 0001 0010 2: 0001 1000 0001 0010 3: 0001 1000 0000 0010 1: 0001 1000 0000 0010 2: 0000 1100 0000 0010 3: 0000 1100 0000 0010 1: 0000 1100 0000 0010 2: 0000 0110 0000 0010 3: 0000 0110 0000 0010 0000 0110 0000 0010 2. Shift the Product register right 1 bit. 3. Shift the Multiplier register right 1 bit. 32nd repetition? No: < 32 repetitions Yes: 32 repetitions Done Lec5.29 1a. Add multiplicand to the left half of product & place the result in the left half of Product register Product Multiplier Multiplicand 0000 0000 0011 0010 1: 0010 0000 0011 0010 2: 0001 0000 0011 0010 3: 0001 0000 0001 0010 1: 0011 0000 0001 0010 2: 0001 1000 0001 0010 3: 0001 1000 0000 0010 1: 0001 1000 0000 0010 2: 0000 1100 0000 0010 3: 0000 1100 0000 0010 1: 0000 1100 0000 0010 2: 0000 0110 0000 0010 3: 0000 0110 0000 0010 0000 0110 0000 0010 2. Shift the Product register right 1 bit. 3. Shift the Multiplier register right 1 bit. 32nd repetition? No: < 32 repetitions Yes: 32 repetitions Done Lec5.30 Observations on Multiply Version 2 MULTIPLY HARDWARE Version 3 Product register wastes space that exactly matches size of multiplier => combine Multiplier register and Product register 32-bit Multiplicand reg, 32 -bit ALU, 64-bit Product reg, (0-bit Multiplier reg) Multiplicand 32-bit ALU Product (Multiplier) Shift Right Write Control Lec5.31 Lec5.32

Multiply Algorithm Version 3 Start Observations on Multiply Version 3 Multiplicand Product 0010 0000 0011 Product0 = 1 1. Test Product0 Product0 = 0 2 steps per bit because Multiplier & Product combined MIPS registers Hi and Lo are left and right half of Product 1a. Add multiplicand to the left half of product & place the result in the left half of Product register 2. Shift the Product register right 1 bit. 32nd repetition? No: < 32 repetitions Yes: 32 repetitions Done Lec5.33 Gives us MIPS instruction MultU How can you make it faster? What about signed multiplication? easiest solution is to make both positive & remember whether to complement product when done (leave out the sign bit, run for 31 steps) apply definition of 2 s complement - need to sign-extend partial products and subtract at the end Booth s Algorithm is elegant way to multiply signed numbers using same hardware as before and save cycles - can handle multiple bits at a time Lec5.34 Motivation for Booth s Algorithm Example 2 x 6 = 0010 x 0110: 0010 x 0110 + 0000 shift (0 in multiplier) + 0010 add (1 in multiplier) + 0010 add (1 in multiplier) + 0000 shift (0 in multiplier) 00001100 ALU with add or subtract gets same result in more than one way: 6 = 2 + 8 0110 = 00010 + 01000 = 11110 + 01000 For example 0010 x 0110 0000 shift (0 in multiplier) 0010 sub (first 1 in multpl.). 0000 shift (mid string of 1s). + 0010 add (prior step had last 1) 00001100 Lec5.35 Booth s Algorithm middle end of run of run 0 1 1 1 1 0 Current Bit Bit to the Right Explanation Example Op 1 0 Begins run of 1s 0001111000 sub 1 1 Middle of run of 1s 0001111000 none 0 1 End of run of 1s 0001111000 add 0 0 Middle of run of 0s 0001111000 none Originally for Speed (when shift was faster than add) beginning of run Replace a string of 1s in multiplier with an initial subtract when we first see a one and then later add for the bit after the last one 1 + 10000 01111 Lec5.36

Booths Example (2 x 7) Booths Example (2 x -3) Operation Multiplicand Product next? 0. initial value 0010 0000 0111 0 10 -> sub 1a. P = P - m 1110 + 1110 1110 0111 0 shift P (sign ext) 1b. 0010 1111 0011 1 11 -> nop, shift 2. 0010 1111 1001 1 11 -> nop, shift 3. 0010 1111 1100 1 01 -> add 4a. 0010 + 0010 0001 1100 1 shift 4b. 0010 0000 1110 0 done Operation Multiplicand Product next? 0. initial value 1a. P = P - m 0010 0000 1101 0 1110 + 1110 10 -> sub 1110 1101 0 shift P (sign ext) 1b. 0010 1111 0110 1 01 -> add + 0010 2a. 0001 0110 1 shift P 2b. 0010 0000 1011 0 10 -> sub + 1110 3a. 0010 1110 1011 0 shift 3b. 0010 1111 0101 1 11 -> nop 4a 1111 0101 1 shift 4b. 0010 1111 1010 1 done Lec5.37 Lec5.38 MIPS logical instructions Instruction Example Meaning Comment and and $1,$2,$3 $1 = $2 & $3 3 reg. operands; Logical AND or or $1,$2,$3 $1 = $2 $3 3 reg. operands; Logical OR xor xor $1,$2,$3 $1 = $2 $3 3 reg. operands; Logical XOR nor nor $1,$2,$3 $1 = ~($2 $3) 3 reg. operands; Logical NOR and immediate andi $1,$2,10 $1 = $2 & 10 Logical AND reg, constant or immediate ori $1,$2,10 $1 = $2 10 Logical OR reg, constant xor immediate xori $1, $2,10 $1 = ~$2 &~10 Logical XOR reg, constant shift left logical sll $1,$2,10 $1 = $2 << 10 Shift left by constant shift right logical srl $1,$2,10 $1 = $2 >> 10 Shift right by constant shift right arithm. sra $1,$2,10 $1 = $2 >> 10 Shift right (sign extend) shift left logical sllv $1,$2,$3 $1 = $2 << $3 Shift left by variable shift right logical srlv $1,$2, $3 $1 = $2 >> $3 Shift right by variable shift right arithm. srav $1,$2, $3 $1 = $2 >> $3 Shift right arith. by variable Shifters Two kinds: logical-- value shifted in is always "0" "0" msb lsb "0" arithmetic-- on right shifts, sign extend msb lsb "0" Note: these are single bit shifts. A given instruction might request 0 to to be shifted! Lec5.39 Lec5.40

Combinational Shifter from MUXes Basic Building Block A B sel 1 0 D 8-bit right shifter A 7 A 6 A 5 A 4 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 S 2 S 1 S 0 S 0 (0,1) S 1 (0, 2) S 2 (0, 4) General Shift Right Scheme using 16 bit example 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 R 7 What comes in the MSBs? How many levels for 32-bit shifter? What if we use 4-1 Muxes? R 6 R 5 R 4 R 3 R 2 R 1 R 0 Lec5.41 S 3 (0, 8) If added Right-to-left connections could support Rotate (not in MIPS but found in ISAs) Lec5.42 Funnel Shifter Barrel Shifter Instead Extract of 64. Y X Technology-dependent solutions: transistor per switch SR3 SR2 SR1 SR0 D3 Shift Right A6 D2 Shift A by i bits (sa= shift right amount) Logical: Y = 0, X=A, sa=i Y R X 32 32 A5 D1 Arithmetic? Y = _, X=_, sa=_ Rotate? Y = _, X=_, sa=_ Left shifts? Y = _, X=_, sa=_ Shift Right R 32 Lec5.43 A4 A3 A2 A1 A0 D0 Lec5.44

Divide: Paper & Pencil DIVIDE HARDWARE Version 1 1001 Quotient Divisor 1000 1001010 Dividend 1000 10 101 1010 1000 10 Remainder (or Modulo result) See how big a number can be subtracted, creating quotient bit on each step Binary => 1 * divisor or 0 * divisor Dividend = Quotient x Divisor + Remainder => Dividend = Quotient + Divisor 64-bit Divisor reg, 64-bit ALU, 64-bit Remainder reg, 32-bit Quotient reg Divisor 64-bit ALU Remainder Write Shift Right Quotient Control Shift Left 3 versions of divide, successive refinement Lec5.45 Lec5.46 Divide Algorithm Version 1 Takes n+1 steps for n-bit Quotient & Rem. Remainder Quotient Divisor 0000 0111 0000 0010 0000 2a. Shift the Quotient register to the left setting the new rightmost bit to 1. Remainder 0 1. Subtract the Divisor register from the Remainder register, and place the result in the Remainder register. Test Remainder Remainder < 0 2b. Restore the original value by adding the Divisor register to the Remainder register, & place the sum in the Remainder register. Also shift the Quotient register to the left, setting the new least significant bit to 0. 3. Shift the Divisor register right 1 bit. Start: Place Dividend in Remainder Observations on Divide Version 1 1/2 bits in divisor always 0 => 1/2 of 64-bit adder is wasted => 1/2 of divisor is wasted Instead of shifting divisor to right, shift remainder to left? 1st step cannot produce a 1 in quotient bit (otherwise too big) => switch order to shift first and then subtract, can save 1 iteration n+1 repetition? 2/8/99 UCB Done Spring 1999 No: < n+1 repetitions Yes: n+1 repetitions (n = 4 here) Lec5.47 Lec5.48

DIVIDE HARDWARE Version 2 32-bit Divisor reg, 32-bit ALU, 64-bit Remainder reg, 32-bit Quotient reg Divide Algorithm Version 2 Remainder Quotient Divisor 0000 0111 0000 0010 Start: Place Dividend in Remainder 1. Shift the Remainder register left 1 bit. 2. Subtract the Divisor register from the left half of the Remainder register, & place the result in the left half of the Remainder register. Divisor 32-bit ALU Shift Left Remainder Write Quotient Control Shift Left Lec5.49 3a. Shift the Quotient register to the left setting the new rightmost bit to 1. Remainder 0 2/8/99 UCB Done Spring 1999 Test Remainder Remainder < 0 3b. Restore the original value by adding the Divisor register to the left half of the Remainderregister, &place the sum in the left half of the Remainder register. Also shift the Quotient register to the left, setting the new least significant bit to 0. nth repetition? No: < n repetitions Yes: n repetitions (n = 4 here) Lec5.50 Observations on Divide Version 2 DIVIDE HARDWARE Version 3 Eliminate Quotient register by combining with Remainder as shifted left Start by shifting the Remainder left as before. Thereafter loop contains only two steps because the shifting of the Remainder register shifts both the remainder in the left half and the quotient in the right half The consequence of combining the two registers together and the new order of the operations in the loop is that the remainder will shifted left one time too many. Thus the final correction step must shift back only the remainder in the left half of the register 32-bit Divisor reg, 32 -bit ALU, 64-bit Remainder reg, (0-bit Quotient reg) Divisor 32-bit ALU HI LO Remainder (Quotient) Shift Left Write Control Lec5.51 Lec5.52

Divide Algorithm Version 3 Remainder Divisor 0000 0111 0010 3a. Shift the Remainder register to the left setting the new rightmost bit to 1. 2. Subtract the Divisor register from the left half of the Remainder register, & place the result in the left half of the Remainder register. Remainder 0 Start: Place Dividend in Remainder 1. Shift the Remainder register left 1 bit. Test Remainder Remainder < 0 3b. Restore the original value by adding the Divisor register to the left half of the Remainderregister, &place the sum in the left half of the Remainder register. Also shift the Remainder register to the left, setting the new least significant bit to 0. Observations on Divide Version 3 Same Hardware as Multiply: just need ALU to add or subtract, and 63-bit register to shift left or shift right Hi and Lo registers in MIPS combine to act as 64-bit register for multiply and divide Signed Divides: Simplest is to remember signs, make positive, and complement quotient and remainder if necessary Note: Dividend and Remainder must have same sign Note: Quotient negated if Divisor sign & Dividend sign disagree e.g., 7 2 = 3, remainder = 1 Possible for quotient to be too large: if divide 64-bit interger by 1, quotient is ( called saturation ) nth repetition? No: < n repetitions Yes: n repetitions (n = 4 here) 2/8/99 Done. Shift left UCB half of Spring Remainder 1999 right 1 bit. Lec5.53 Lec5.54 Summary To Get More Information Intro to VHDL a language to describe hardware - entity = symbol, architecture ~ schematic, signals = wires behavior can be higher level - x <= boolean_expression(a,b,c,d); Has time as concept Can activate when inputs change, not specifically invoked Inherently parallel Multiply: successive refinement to see final design 32-bit Adder, 64-bit shift register, 32-bit Multiplicand Register Booth s algorithm to handle signed multiplies There are algorithms that calculate many bits of multiply per cycle (see exercises 4.36 to 4.39 in COD) Chapter 4 of your text book: David Patterson & John Hennessy, Computer Organization & Design, Morgan Kaufmann Publishers, 1994. David Winkel & Franklin Prosser, The Art of Digital Design: An Introduction to Top-Down Design, Prentice-Hall, Inc., 1980. Kai Hwang, Computer Arithmetic: Principles, archtiecture, and design, Wiley 1979 Shifter: success refinement 1/bit at a time shift register to barrel shifter What s Missing from MIPS is Divide & Floating Point Arithmetic: 2/8/99 Next time the Pentium Bug UCB Spring 1999 Lec5.55 Lec5.56