Chapter 2. ALU

Properties

πŸ“2023.09.04

μ£Όμš” κ°œλ…: μ΄μ§„μˆ˜, 이진 λ§μ…ˆ, 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진 μ½”λ“œλ‘œ λ³€ν™˜λ˜μ–΄ μ €μž₯λœλ‹€. 이 값을 화면에 ν‘œμ‹œ ν•˜λΌκ³  컴퓨터에 λͺ…λ Ή ν•˜λ©΄, 이런 과정을 거치게 λœλ‹€.

  1. 컴퓨터 μš΄μ˜μ²΄μ œλŠ” 10011이 λ‚˜νƒ€λ‚΄λŠ” 10μ§„μˆ˜λ₯Ό κ³„μ‚°ν•œλ‹€. β†’ 19

  2. μš΄μ˜μ²΄μ œλŠ” 이 μ •μˆ˜ 값을 두 개의 문자 1κ³Ό 9둜 λ³€ν™˜ν•œλ‹€.

  3. ν˜„μž¬ 글꼴을 쑰회 ν•˜μ—¬ 화면에 λ Œλ”λ§ ν•˜κΈ° μœ„ν•œ 두 개의 λΉ„νŠΈλ§΅ 이미지λ₯Ό λ§Œλ“ λ‹€.

  4. μš΄μ˜μ²΄μ œλŠ” 슀크린 λ“œλΌμ΄λ²„λ₯Ό 톡해 픽셀을 λ„κ±°λ‚˜ 켜고, 화면에 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개의 μ œμ–΄ λΉ„νŠΈ 각각이 독립적인 쑰건문과 μ—°κ΄€ λ˜μ–΄ μžˆμŒμ„ μ•Œ 수 μžˆλ‹€.

  1. λ¨Όμ € x, yλŠ” 0 λ˜λŠ” 1둜 μ„€μ •λœλ‹€.

  2. κ·Έ κ²°κ³Ό κ°’μ˜ λΆ€ν˜Έλ₯Ό λ°”κΎΈκ±°λ‚˜ 바꾸지 μ•ŠλŠ”λ‹€.

  3. 처리된 값에 λŒ€ν•΄ Add λ˜λŠ” And λ₯Ό κ³„μ‚°ν•œλ‹€.

  4. μ΅œμ’… κ²°κ³Ό κ°’μ˜ λΆ€ν˜Έλ₯Ό λ°”κΎΈκ±°λ‚˜ 바꾸지 μ•ŠλŠ”λ‹€.

β†’ 이 λ•Œ, μ—¬κΈ°μ„œ λ‚˜μ˜€λŠ” κ°’ μ„€μ •, λ°˜μ „, λ§μ…ˆ, 결합은 λͺ¨λ‘ 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