330 likes | 493 Views
Homework Due. Book work chapter 4 How is the palindrome program coming along?. Logic Microoperations. Counter-part to the arithmetic microoperations we looked at last week
E N D
Homework Due • Book work chapter 4 • How is the palindrome program coming along? CSC321
Logic Microoperations • Counter-part to the arithmetic microoperations we looked at last week • Similar to Boolean functions (expressions) except that the operands are registers (bit strings) rather than individual Boolean variables • This is exactly what you implemented in code CSC321
01101011 01101011 R1 R1 R2 01001110 01001110 01001110 R1 R1 R2 10010001 01001010 01101111 R1 R2 Register Transfer Language • We need some new symbols to avoid (or cause) confusion Bitwise AND Bitwise OR Bitwise NOT CSC321
Context will always be a bitwise AND microop. will always be a bitwise OR microop. will always be a single bit AND will be a single bit OR in a Boolean function (never a bitwise OR microop.) will be an arithmetic ADD in an arithmetic function CSC321
What operation is this? What operation is this? What operation is this? Context P + Q: R1 R1 R2, R3 R4 R5 CSC321
Logical Microoperations • Given two binary variables there are 16 different logical microoperations that can be performed • How can this be given that there are only 4 combinations of input values? CSC321
Logical Microoperations CSC321
Logical Microoperations • Some of them are not intuitive (or useful) • They can all be created using AND, OR, NOT, and XOR functions • You should be able to create the table of functions (page 110, Table 4-6) • How would you go about doing this? CSC321
Hardware Implementation • We know how to implement Boolean functions using combination logic • How do we implement them to perform bitwise microoperations? CSC321
S0 S1 4x1 MUX Ai 0 Bi Fi 1 2 3 Hardware Implementation • …with a lot of logic gates! • If you need n-bit microoperations (n-bit registers) you have n of these circuits CSC321
Hardware Implementation • But doesn’t that MUX only implement 4 expressions? • What about the other 12? • We can use a bigger MUX or realize that many of the other 12 are useless and the ones that are useful can be derived from the 4 that we implemented, keeping hardware costs down CSC321
But Why? • What can be done with logic microoperations? • Most useful when we consider the bits of a given register as separate signals CSC321
Logic Microoperations • In Java if we need 8 boolean variables we generally do something like this… • This may be very inefficient dependent on how the Java compiler generates the byte code • boolean b7 = false; • boolean b6 = false; • … • boolean b0 = false; • OR • boolean b[] = new boolean[8]; • for (int i = 0; i < 8; ++i) { • b[i] = false; • } CSC321
Logic Microoperations • A more memory efficient way to represent the same information would be… • This is referred to as “bit packing” • But how do we get to the individual bits within the byte? • byte b = 0; CSC321
Logic Microoperations • Through bitwise logic operations • Selective-set • Selective-complement • Selective-clear • Mask • Insert • Clear CSC321
01101010 ? 11110000 11111010 Selective-Set • We want to set certain bits to 1 while leaving the others unchanged • Any ideas? • Bitwise OR CSC321
01101010 ? 11110000 10011010 Selective-Complement • We want to complement (invert) certain bits while leaving the others unchanged • Any ideas? • Bitwise XOR CSC321
01101010 ? 11110000 00001010 Selective-Clear • We want to clear (0) certain bits while leaving the others unchanged • Any ideas? • Bitwise A AND B’ CSC321
01101010 ? 11110000 01100000 Mask • Similar to Selective-clear but the “selection” is done with 0’s rather than 1’s • Any ideas? • Bitwise AND CSC321
01101010 ? 1101xxxx 11011010 Insert • Insert (replace) a group of bits into the existing bit string while leaving other bits unchanged • Any ideas? • Mask followed by bitwise OR CSC321
01101010 ? 01101010 00000000 Clear • Compare the two values and if they are equal, produce a string of 0’s • Any ideas? • Bitwise XOR with self CSC321
Usage • These types of operations are especially useful when designing hardware • But, they are also heavily used in software • Device drivers (s/w that talks to h/w) • Embedded systems (small programmable h/w devices) • High speed applications such as games or other video applications CSC321
Shift Microoperations • Serial modification/transfer of bits similar to the shift registers we looked at previously • Three basic types of shift • Logical shift • Circular shift (often called rotation) • Arithmetic shift CSC321
Logical Shift • Acts like a shift register with a 0 shifted in to the vacated bit position • Shifts can be to the left or the right • Bits that are shifted “off the end” are lost R1 ← shl R1 11010100 11101010 R1 ← shr R1 01110101 CSC321
Circular Shift • Acts like a shift register with the end bit shifted in to the vacated bit position • Shifts can be to the left or the right • No information is lost R1 ← cil R1 11010101 R1 ← rotl R1 11101010 R1 ← cir R1 01110101 R1 ← rotr R1 CSC321
Arithmetic Shift • Shifts are performed with special attention paid to the MSB (the sign bit – 2’s complement notation) • Left arithmetic shifts correspond to integer divide by powers of 2 • Division must leave the sign bit unchanged • Division cannot causes an overflow • Right arithmetic shifts correspond to integer multiply by powers of 2 • Multiplication must leave the sign bit unchanged • Multiplication must be overflow aware CSC321
Arithmetic Shift Right • Leaves the sign bit unchanged and shifts the number (including the sign bit) to the right • Did it work as expected? 10101010 R1 ← ashr R1 11010101 CSC321
Arithmetic Shift Left • Inserts 0 into LSB (why?) • If MSB changes after the shift an overflow has occurred (why?) • Can predict overflow by comparing MSB (bit n-1) to next bit (bit n-2) • Did it work as expected? • Did it work as expected? 11101010 R1 ← ashl R1 11010100 01101010 R1 ← ashl R1 11010100 CSC321
Arithmetic Shift Left • What is the “overflow rule”? • How can you implement it? • Check before performing the shift • Bn-1 XOR Bn-2 • If 0 there is no overflow, if 1 there is an overflow with a sign reversal CSC321
Implementation • The arithmetic, logic, and shift microoperations are generally implemented in a single “unit” – the ALU (Arithmetic-Logic Unit) • The ALU is generally made up of combinational circuits (as opposed to sequential circuits) • Why should this be the case? CSC321
ALU Block DiagramStage i S3 S2 • Combinational circuits that we looked at previously are inserted into the boxes Cin S1 Arithmetic Circuit Stage i S0 4x1 MUX select Cout 0 Fi 1 Logic Circuit Stage i 2 3 Bi Ai shr Ai-1 Ai+1 shl CSC321
Table of Microoperations CSC321
Homework • 4-12, 4-17, 4-18, 4-19, 4-20, 4-21, 4-22 • Read chapter 5 CSC321