1 / 45

450 likes | 647 Views

How Computers Work. A brief review of EE306. Binary Representations. Unary Representation. “ One if by land, two if by sea ” (circa 1775) Three values for information: “land”, “sea”, “don’t know yet” Coded with 2 bits (No lights) — don’t know (One light) — by land

Download Presentation
## How Computers Work

**An Image/Link below is provided (as is) to download presentation**
Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.
Content is provided to you AS IS for your information and personal use only.
Download presentation by click this link.
While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.
During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

**How Computers Work**A brief review of EE306**Unary Representation**“One if by land, two if by sea” (circa 1775) • Three values for information: “land”, “sea”, “don’t know yet” • Coded with 2 bits • (No lights) — don’t know • (One light) — by land • (Two lights) — by sea • With n bits, code n+1 values**Binary Representation**• Place value numbers systems date from roughly 3rd century BC (India). Modern decimal systems date from roughly 6th century AD. • Binary is the simplest possible place-value notation. • 10011 = 19**Addition in Binary**• Just like regular arithmetic. Add each “bigit” and carry the 1s 011010 + 101011 1000101 26 43 69**Negative Numbers?**• Use leftmost bit to indicate sign (called 1s compliment notation). • Leftmost bit equal 1 — negative. • Leftmost bit equal 0 — positive • Not efficient (two ways to encode zero) • Twos compliment notation • Compliment bits and add 1 to negate • -(0101) = (1010 + 1) = 1011**10**010100+1 = -21 001010+1 = -11 Addition is Easy in 2s Compliment • Just add normally, the sign will take care of itself! 001010 + 101011 110101**2s Compliment is Fixed Precision**• Addition with negative numbers doesn’t always work out. Need to ignore carry out of last bigit position 011010 + 101011 1000101 26 -21 -59?**Overflow**• In any fixed-precision encoding, overflow (or underflow) is a potential problem • Overflow — the result is too big to encode • Underflow — the result is too small to encode • In 2s compliment addition: • Overflow is not possible unless signs match • Otherwise, overflow/underflow occurs when result’s sign is different from operands sign**Computers**• A computer consists of three things • Arithmetic and Logic Circuits • Memory • Control (sequencer) • First focus, basic operations • ADD • LOAD/STORE**Operands and the Register File**• We need two source operands and one destination operand. • Our computer (the LC2) will allow each of these operands to be selected from one of eight “general purpose” registers. • The registers are essentially a small memory! • 16-bits wide (values -32768..+32767) • 8 registers means 3-bit “address” to select**16**16 16 The ALU • With a little extra logic, a 16-bit adder can be configured to perform multiple functions: AND, OR, NOT, NEGATE, etc. • ALUs are usually represented with the following symbol: OPA OPB 3 control F**Register File (8x16bits)**16 16 16 • Dual port the register file (just double the multiplexers) • Can read two registers and write back a register each cycle • A total of 13 control signals 3 WE/SEL Select A 3 4 Select B 3**What About Load/Store**• To access memory, we need two quantities • Address • Value • Two special registers are used for this purpose • MAR (memory address register) • MDR (memory data register)**MDR**Memory Path MAR 16-bit wide memory address Need 1 bit (“load”) control for each MAR/MDR Need 1 bit (“WE”) control for memory**Sequence For LOAD**• Note that memory is always “ON”. We read memory by “latching” the values from the memory bus into MDR. • Load address into MAR • Latch memory contents into MDR • Latch MDR contents into register**Sequence for Store**• Latch value into MDR • Latch address into MAR • Activate WE signal to memory**Data Bus**• We frequently move data between • The ALU output • MDR or MAR • The register file • Let’s wire all these things together. • What if MDR is “1” when ALU is “0”? • We’ll put special switches on each output**Register File (8x16bits)**16 16 Tri-State Buffers Protect the Bus from conflicts 16-bit data bus MAR Added new control signals, one for each device that outputs to the bus MDR**Instructions and the PC**• The brilliance of the Von Neumann design was the realization that programs could be stored in memory. • All of the operations the computer can do are encoded into an instruction. • Instructions are stored in memory (along with data). • The computer reads the instructions one at a time and edits them. • A special register (the PC) points to the next instruction that will be executed.**Instruction Fetch**• When the computer is turned on, the first thing it does is fetch the next instruction: • PC is copied into MAR • MDR is latched (and holds the next instruction) • MDR’s contents are copied into a special register (IR) for safe keeping. • At the same time, the PC is incremented in preparation for the next instruction**Register File (8x16bits)**16 16 IR (used for control only) PC (a counter) MAR MDR**Decode**• All of the possible instructions are encoded as a bit pattern • LC2 uses 16-bit instructions • 4 bits for “opcode” • The remaining 12 bits depend on the type of instruction • e.g., up to 9 bits specify source/destination operand registers**Instruction Format for ADD**15 • In principle, instruction formats are arbitrary. • In practice, the control logic is much easier to build if there is method to the madness • Similar positions in the instruction tend to mean similar things across instructions (ADD, AND, NOT, etc). 0 0001 dest SR1 000 SR2 not used Opcode**Execute ADD**• Once IR has been loaded, execution takes only one more cycle • Connect SR1 and SR2 to SELA and SELB on register file • Send ALU the control signals to ADD. • Connect dest to WE/SEL on register file. • On next clock cycle, fetch the next instruction.**How Many Cycles to ADD?**• ADD is perhaps the fastest instruction on the LC2. The datapath is optimized for this (and similar) instructions. • Still, it takes four full clock cycles: • Copy PC to MAR • Latch MDR • Latch IR • Add and latch result in register file**Calculating an Address**• Our computer uses 16-bit addresses and 16-bit instructions. • Since four bits are used for the opcode, we have only 12 bits left. • At least 3 of those bits will specify the destination register (on load instructions) or source register (on store instructions). • How do we calculate a 16-bit address with only 9 bits? • PC relative addressing!**Direct Addressing Mode**15 0 • The address for a load instruction is formed by concatenating: • The 7 highest bits of the current PC • The 9 bits from the address field in the instruction • These 16 bits are written into MAR. 0010 dest 9 bits of address LD**How Many Cycles to Load?**• As with ADD, it takes 3 cycles to load IR. • Once IR has been loaded, MAR can be loaded on the next cycle. • On the 5th cycle, MDR is written. • On the 6th cycle, the value from MDR is copied into the destination register.**Store Instructions**• Similar instruction format as LD (different opcode). • 3 cycles to load IR • 4th cycle, load MAR • 5th cycle, load MDR (route through ALU by “adding 0”) • 6th cycle, write memory (turn on WE).**Writing a program**• The program will compute the sum of three numbers and store the result in memory • First problem: where do we store the program? • How about beginning at location 0. • Next: where do we store the data? • Input data at locations 100-102 • Output data at location 103**Hexadecimal Notation**• Binary is cumbersome • Decimal/Binary conversion is hard • Hexadecimal notation is base 16 • Use digits: 0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f • Hexadecimal/binary conversion is easy • 0x1234 = 0001 0010 0011 0100**The Program**• Load location 100 into register 0 • Load location 101 into register 1 • Add register 0 and register 1 store result in register 0 (yes, we can do that) • Load location 102 into register 1 • Add register 0 and register 1, store result in register 0 (again) • Store register 0 in location 103**Other Instructions**• From now on, we’ll use a C-like programming notation to describe each instruction. • We’ll refer to a memory location as M[x] • We’ll refer to a register as Rx • We’ll refer to numbers as #n • We’ll skip the instruction format (too hard to write machine code).**The AND Instruction**• Synopsis: AND Rd, Rs1, Rs2 • Behavior: Rd = Rs1 & Rs2 • NOTES: • “&” is the C-language symbol for logical AND • Each bit of Rs1 is ANDed with the corresponding bit from Rs2, the result is written into Rd • Neither Rs1 nor Rs2 are changed (unless they’re the same as Rd)**ADD with Immediate**• Synopsis: ADD Rd, Rs, #n • Behavior: Rd = Rs + n • NOTES: • n is a 5 bit 2s-compliment number • Related instructions • AND Rd, Rs, #n**LD/ST Instructions**• Synopsis: LD Rd, #n • Behavior: • t = PC & 0xFE00 // zero out the 9 least bits • MA = t | n // OR t and n • Rd = M[MA] • NOTES • n is 9 bits • This is called the “direct” addressing mode • Related instructions • ST Rs, #n**Branch Instructions**• A branch instruction loads a new value into the PC (instead of PC+1). • There are three 1-bit registers that are used for branch instructions • N, Z, P indicate if the last result was Negative, Zero or Positive respectively. • Set by every instruction that uses the ALU (e.g., AND, ADD, LD, ST, almost every instruction) • The branch instruction will load the PC only if the right combination of N, Z, and P are set to “1”.**Branch Instructions Continued**• Synopsis: BRc #n • Behavior: (“c” is some combination of N,Z and P) • target = (PC & 0xFE00) | n // just like LD/ST • take = 0 • If (c includes “N”) take = take | N • If (c includes “Z”) take = take | Z • If (c includes “P”) take = take | P • If (take) PC = target // else PC = PC + 1 like normal • NOTES: n is 9 bits, if c is “NZP” are all set, the branch becomes “unconditional”**Calculating 2n**• Location 100 holds N AND R0, R0, #0 // R0 = 0 ADD R0, R0, #1 // R0 = 1 LD R1, #100 // R1 = N Loop: BRz done // if N=0 stop ADD R0, R0, R0 // double R0 ADD R1, R1, #-1 // decr N BRnzp Loop // unconditional branch Done: ST R0, #101 // write result halt // stop the computer**Immediate Addressing Mode**• Useful to put an address into a register • Synopsis: LEA Rd, #n • Behavior: • Rd = (PC & 0xFE00) | n • NOTE: address calculated just like direct addressing mode, but memory is not accessed.**Indexed Addressing Mode**• Synopsis: LDR Rd, Rs, #n • Behavior: • MAR = Rs + n • Rd = M[MAR] • NOTES: • n must be positive and limited to 6 bits (0..63) • Related instructions • STR Rs1, Rs2, #n**Program to Sum a Vector**• Size of Vector (N) is in loc 100, vector elements follow in locs 101…. AND R0, R0, #0 // R0 = 0 LEA R1, #101 // R1 = 101 LD R2, #100 // R2 = N Loop: BRz done LDR R3, R1, #0 // R1 holds address ADD R0, R0, R3 // calculate sum ADD R1, R1, #1 ADD R2, R2, #-1 BRnzp Loop Done:

More Related