Chapter 2. ALU
μ£Όμ κ°λ : μ΄μ§μ, μ΄μ§ λ§μ , 2μ 보μλ², λ° λ§μ , μμ λ§μ , nλΉνΈ λ§μ , μΉ΄μ΄ν°, μ°μ λ Όλ¦¬ μ λ(ALU), μ‘°ν© λ Όλ¦¬.
Unit2.1 : Binary Numbers
0κ³Ό 1λ‘ λ¬΄μμ ν μ μμκΉ?
Binary
0
1
10
11
100
101
Decimal
0
1
2
3
4
5
Decimal β Binary
87μ μ λ ₯ λ°μλ€λ©΄ μ΄κ²μ μ΄μ§μλ‘ λ³ν ν μ μμ΄μΌνλ€.
87 = 64 + 16 + 4 + 2 + 1
β 1010111
μ΄λ κ² μ¬μ©μκ° μ λ ₯ν 10μ§μμ μ«μλ μ»΄ν¨ν° λ©λͺ¨λ¦¬μ μ΅μ’ μ μΌλ‘ μ μ₯ λ λ 2μ§ μ½λλ‘ λ³νλμ΄ μ μ₯λλ€. μ΄ κ°μ νλ©΄μ νμ νλΌκ³ μ»΄ν¨ν°μ λͺ λ Ή νλ©΄, μ΄λ° κ³Όμ μ κ±°μΉκ² λλ€.
μ»΄ν¨ν° μ΄μ체μ λ 10011μ΄ λνλ΄λ 10μ§μλ₯Ό κ³μ°νλ€. β 19
μ΄μ체μ λ μ΄ μ μ κ°μ λ κ°μ λ¬Έμ 1κ³Ό 9λ‘ λ³ννλ€.
νμ¬ κΈκΌ΄μ μ‘°ν νμ¬ νλ©΄μ λ λλ§ νκΈ° μν λ κ°μ λΉνΈλ§΅ μ΄λ―Έμ§λ₯Ό λ§λ λ€.
μ΄μ체μ λ μ€ν¬λ¦° λλΌμ΄λ²λ₯Ό ν΅ν΄ ν½μ μ λκ±°λ μΌκ³ , νλ©΄μ 19λΌλ μ΄λ―Έμ§κ° λνλλ€.
μ¬κΈ°κΉμ§ λͺ λ°±λΆμ 1μ΄λ μκ±Έλ¦°λ€.
κ³ μ λ¨μ΄ ν¬κΈ°
μ»΄ν¨ν°λ μ«μλ₯Ό νννλ λ° κ³ μ λ¨μ΄ ν¬κΈ°λ₯Ό μ¬μ©ν΄μΌ νλ μ νν κΈ°κ³λ€.
λ¨μ΄ν¬κΈ°(word size)λ
μ»΄ν¨ν°κ° κΈ°λ³Έ μ 보 λ¨μ(μ΄ κ²½μ°μλ μ μ κ°)λ₯Ό νννλ λ° μ¬μ© νλ λΉνΈ μλ₯Ό κ°λ¦¬ν¨λ€.
λ³΄ν΅ μ μλ₯Ό νν νλ λ° 8, 16, 32, 64 λΉνΈ λ μ§μ€ν°κ° μ¬μ© λ¨.
μμκ° μλ μ μλ§μ νν νλ €κ³ νμ λ μΌλ°μ μΌλ‘ nλΉνΈκ° μμΌλ©΄ 2^n - 1 κΉμ§ νν ν μ μλ€.
8bit) 2^8 - 1 = 256 -1 = 255
κ·Έλ λ€λ©΄ κ³ μ λ λ μ§μ€ν° ν¬κΈ°κ° νμ© νλ μ΅λ μ΅μ κ° λ³΄λ€ λ ν¬κ±°λ μμ κ°μ μ΄λ»κ² ννν κΉ?
β λͺ¨λ κ³ μμ€ μΈμ΄λ μ€μ μ°λ¦¬κ° μνλ λ§νΌ ν¬κ±°λ μμ μ«μλ₯Ό μ²λ¦¬ νλ μΆμν κΈ°λ²μ μ§μνλ€.
μ«μλ₯Ό νν νλ λ° νμν λ§νΌ nλΉνΈ λ μ§μ€ν°λ₯Ό λ¬Άλ λ°©μμΌλ‘ ꡬν λ¨
μ¬λ¬ λ¨μ΄λ‘ ꡬμ±λ μ«μμ μ°μ λ° λ Όλ¦¬ μ°μ°μ μ€ννλ κ²μ λλ¦° μμ μ΄λ€.
β κ·Έλ κΈ° λλ¬Έμ, λ§€μ° ν¬κ±°λ λ§€μ° μμ μ«μλ₯Ό μ²λ¦¬ ν λ λ§ μ΄ κΈ°λ²μ μ¬μ© νλ κ²μ΄ μ’μ
Unit2.2: Binary Addition
μ΄μ§ λ§μ μ μμ§μμ λ§μ κ³Ό κ°μ λ°©λ²μ μ¬μ©νλ€. 0κ³Ό 1λ§ μ‘΄μ¬ νλ μ΄μ§μμμ λνμ¬ 1μ μ΄κ³Ό νκ² λλ©΄ μ€λ¦μλ₯Ό λ°μ μν€κ³ , λ€μ μ리μμ μ€λ¦ μλ₯Ό μ΄μ΄ λ°μ μ°μ°μ νκ²λλ€.
κ°μ₯ μ€λ₯Έμͺ½ μ«μ = μ΅νμ λΉνΈ(LSB)
μ¬λ¦Ό μ«μ = μ리 μ¬λ¦Ό λΉνΈ(carry bit)
κ°μ₯ μΌμͺ½μ μμΉν μ«μ = μ΅μμ λΉνΈ (MSB)
π‘ κ°κ° μΌλ°μ μΈ κ³ μμ€ λ°μ΄ν° νμ μΈ Byte, Short, Int, Longμ ν΄λΉνλ€. μλ₯Ό λ€μ΄ κΈ°κ³ μμ€μ λͺ λ Ήμ΄λ‘ λ΄λ €κ°λ©΄ Short λ³μλ **16λΉνΈ λ μ§μ€ν°**λ‘ μ²λ¦¬λλ€. 16λΉνΈ μ°μ μ°μ°μ΄ 64λΉνΈ μ°μ μ°μ°λ³΄λ€ 4λ°° λΉ λ₯΄κΈ° λλ¬Έμ νλ‘κ·Έλλ¨Έλ λ μμ©νλ‘κ·Έλ¨μ μꡬμ¬νμ λ§λ κ°μ₯ κ°κ²°ν λ°μ΄ν° νμ μ μ¬μ© νλ κ²μ΄ μ’λ€.
β μ€λ²νλ‘λ₯Ό μ΄λ»κ² μ²λ¦¬ ν μ§λ κ²°μ μ λ°λ₯Έ λ¬Έμ λ‘, μ΄ κ°μμ μ°Έκ³ κ΅μ¬μμλ μ€λ²νλ‘λ₯Ό 무μνλ€.
Unit2.3: Negative Numbers
μμλ₯Ό λνλΌ λ 2^n - X μ΄λ©° μ΄ λ Xλ μμ μ μμ΄λ€.
Idea : $2^n - x = 1 + (2^n - 1) - x$
μ΄λ κ² μνμ 곡μμ μ΄μ© νμ¬ κ³μ° νλ κ² λ³΄λ€ λ νΈλ¦¬νκ³ , λΉ λ₯Έ κ·μΉμ΄ μ‘΄μ¬νλ€.
μ΄μ§μλ‘ νν λ μμ μ μλ₯Ό μ λΆ λ€μ§κ³ 1μ λνλ λ°©μμΌλ‘ νλ μμ ννλ°©λ²μ λ§μ΄ μ μ©λλ€.
π‘ μλ κ° λΆνΈκ° μλ μ«μλ₯Ό 2μ§ μ½λλ‘ νννκΈ° μν μ½λ© 체κ³κ° μ¬λΏ κ°λ° λμλ€. κ·Έ μ€μμ μ€λ λ κ±°μ λͺ¨λ μ»΄ν¨ν°μμ μ¬μ© λλ λ°©μμ 2μ 보μλ²(twoβs complement)μΌλ‘ κΈ°μμ 보μλ²(radix complement)μ΄λΌκ³ λ νλ€.
κ·μΉ μ μ©μ μμ
Input: 4
4 β 0100 = 1011
1011 + 1 = 1100
μνμ 곡μμ μ΄μ©ν νμ΄
Input: 4
1 + (15 - 1) - 4 = 12 = 1100
2μ 보μλ²μ΄ κ°μ 맀λ ₯μ μΈ μ±μ§
μ΄ μ²΄κ³λ -(2^n-1) λΆν° 2^n-1 -1 κΉμ§ 2^n κ°μ λΆνΈ μλ μ«μλ₯Ό νκΈ° ν μ μλ€.
μμ μλ μμ μ½λλ λͺ¨λ 0μΌλ‘ μμνλ€.
μμμ μ½λλ 1λ‘ μμνλ€.
xμ μ½λμμ -xμ μ½λλ₯Ό ꡬνλ €λ©΄, xμ μ΅νμ 0λΉνΈλ€κ³Ό μ²μμΌλ‘ λνλλ μ΅νμ 1λΉνΈλ κ·Έλλ‘ λκ³ , λλ¨Έμ§ λΉνΈλ₯Ό λͺ¨λ λ€μ§μΌλ©΄ λλ€ β 0μ 1, 1μ 0μΌλ‘ λ°κΎΌλ€)
λλ, xμ λͺ¨λ λΉνΈλ₯Ό λ€μ§κ³ κ·Έ κ²°κ³Όμ 1μ λν΄μ£Όλ©΄ λλ€.
π‘ κ³±μ λΆν° λλμ , μ κ³±κ·ΌκΉμ§ λͺ¨λ μ°μ μ°μ°μ 2μ§μ λ§μ μΌλ‘ ꡬνλλ€. λ°λΌμ, 2μ§ λ§μ μμμ κ΄λ²μν μ»΄ν¨ν° κΈ°λ₯μ ꡬνν μ μλ€λ μ¬μ€κ³Ό, 2μ 보μλ²μ μ΄μ©νλ©΄ λΆνΈ μλ μ«μλ€μ λ§μ κ³Ό λΊμ μ νΉλ³ν νλμ¨μ΄κ° νμμΉ μλ€λ μ¬μ€μ μ μ μλ€.
Unit2.4: Arithmetic Logic Unit
ALUλ 2κ°μ§ inputκ³Ό functionμ μ λ ₯ λ°κ³ , 미리 μ μ λ ν¨μμ κΈ°λ₯μ ν΅ν΄ ALUλ μ°μ°μ μννλ€.
Arithmetic operations
Logical operations
x: 16λΉνΈμ μ΄μ§μ
y: 16λΉνΈμ μ΄μ§μ
out: 미리 μ μ λ κΈ°λ₯μ ν΅κ³Ό νμ¬ κ²°κ³Ό κ° λμΆ
π‘ HACK ALUλ 2μ 보μλ²μΌλ‘ νν λ 2κ°μ 16λΉνΈ μ μ(x, y)μ μ¬μ― κ°μ μ μ΄λΉνΈ(control bit β κ°κ° 1λΉνΈ μ λ ₯)λ₯Ό μ λ ₯ λ°μ κ³μ°μ νλ€. μ΄ μ μ΄ λΉνΈλ€μ ALUμκ² μ΄λ€ ν¨μλ₯Ό κ³μ°ν μ§ βμλ €μ£Όλβ μν μ νλ€.
μμΌλ‘ ꡬν νλ ALUλ νμ¬ νλ‘μ νΈμ λ§μΆ° μ μλλ HACK ALUλ‘ 18κ°μ μ°μ λ Όλ¦¬ ν¨μλ₯Ό κ³μ° νλλ‘ μ€κ³ λμλ€.
κ·Έλ¦Όμ 맨 μ νμ 보면 6κ°μ μ μ΄ λΉνΈ κ°κ°μ΄ λ 립μ μΈ μ‘°κ±΄λ¬Έκ³Ό μ°κ΄ λμ΄ μμμ μ μ μλ€.
λ¨Όμ x, yλ 0 λλ 1λ‘ μ€μ λλ€.
κ·Έ κ²°κ³Ό κ°μ λΆνΈλ₯Ό λ°κΎΈκ±°λ λ°κΎΈμ§ μλλ€.
μ²λ¦¬λ κ°μ λν΄
Add
λλAnd
λ₯Ό κ³μ°νλ€.μ΅μ’ κ²°κ³Ό κ°μ λΆνΈλ₯Ό λ°κΎΈκ±°λ λ°κΎΈμ§ μλλ€.
β μ΄ λ, μ¬κΈ°μ λμ€λ κ° μ€μ , λ°μ , λ§μ , κ²°ν©μ λͺ¨λ 16λΉνΈ μ°μ°μ΄λ€.
ALU API
ALU μ€κ³ ν λ λ°λλ μ¬κ³ κ³Όμ
μ»΄ν¨ν°κ° μν ν κΈ°λ³Έ μ°μ°λ€μ λͺ©λ‘μ μ μ μ μΌλ‘ κ²°μ νλ€
λ€μμΌλ‘ μνλ μ°μ°μ μν νλ €λ©΄ x, y λ° outμ΄ 2μ§μλ‘ μ΄λ»κ² μ‘°μλμ΄μΌ νλμ§ μμΌλ‘ μΆλ‘ νλ€
6κ°μ μ μ΄ λΉνΈλ₯Ό κ°κ° κΈ°λ³Έ λ Όλ¦¬ κ²μ΄νΈλ‘ μ½κ² ꡬν ν μ μλ μ°μ°λ€μ μ§μ μ°κ²° μν€λ λ°©λ²μ΄ μ’κ² λ€λ κ²°λ‘ μ λλ€
κ·Έ κ²°κ³Ό νμ¬ API λͺ μΈμκ° λμλ€.
Unit2.5: Project2 Overview
HalfAdder
input: a,b
output: sum, carry
carrybit : logic gate - And
sum : logic gate - XOr
Tips
2κ°μ κΈ°λ³Έ λ Όλ¦¬ κ²μ΄νΈλ₯Ό μ΄μ© νμ¬ κ΅¬ν ν μ μμ΅λλ€.
β μ΄ λκ°μ§λ μμ κ°μ΄ κ°λ¨ν λ Όλ¦¬ κ²μ΄νΈλ‘ ꡬν ν μ μμ κ² κ°λ€.
FullAdder
input: a, b, c
output: sum, carry
Tips
λ°κ°μ°κΈ° 2κ°λ₯Ό μ΄μ© νμ¬ κ΅¬ν ν μ μλ€.
16-bit adder
Tips
n bit κ°μ°κΈ°λ n λΉνΈ λ§νΌμ λ°λ³΅μ μν νλ μ κ°μ°κΈ°λ₯Ό ꡬννλ©΄ λλ€.
carry bitλ μ€λ₯Έμͺ½ λΆν° μΌμͺ½ λ°©ν₯μΌλ‘ νμ΄νλΌμΈμ΄ μ°κ²° λλ κ² μ²λΌ ꡬν νλ©΄ λλ€.
μ΅μμ μΊλ¦¬ λΉνΈλ 무μλλ€.
16-bit incrementor
Tips
μ±κΈ λΉνΈ 0κ³Ό 1μ νλμ¨μ΄ νλ‘κ·Έλλ° μΈμ΄μμ
false
μtrue
λ‘ νν ν μ μλ€.
ALU
zx: zxκ° 1μ΄λ©΄ xλ 0μ μΈν νλ€.
nx: nxκ° 1μ΄λ©΄ Notλ‘ λ°μ μν¨λ€.
zy: zxμ λμΌ
ny: nxμ λμΌ
f: fκ° 1μ΄λ©΄ x+y λ₯Ό, 0μ΄λ©΄ x&y λ₯Ό μ€ννλ€.
no: noκ° 1μ΄λ©΄ κ²°κ³Ό κ°μ λ°μ μν¨λ€.
zr: outμ΄ 0μ΄λ©΄ 1μ κ°κ³ , μλλ©΄ 0μ κ°λλ€.
ng: outμ΄ μμ(0 λ³΄λ€ μμ μ)λ©΄ 1μ κ°κ³ , μλλ©΄ 0μ κ°λλ€.
Last updated