2025/04 23

[밑바닥부터] 8일차 - 2장 불 연산: ALU 구현 및 테스트

ALU 구현 및 테스트ALU구현6개의 제어 비트를 사용해야 한다. (zx, nx, zy, ny, f, no)책에 나와 있는 힌트로는, 16비트 값을 0으로 만들거나 반전하는 논리 설계를 먼저 하라고 한다. ⇒ zx, zy, nx, ny, no가 우선적으로 설정되어야 한다.zx, zy 등을 만들기 위해서는 고급 프로그래밍 언어의 if와 같이 조건을 설정해야 한다.하드웨어에서 조건을 만들려면 멀티플렉서를 사용한다.예를 들어, zx 비트가 1이면 x입력을 0으로 만들고, 0이면 원래 x값을 사용할 수 있도록 한다.그 다음으로는 f에 따라 + 연산과 And 연산을 선택하도록 하면 된다.이 주요 6기능이 제대로 동작하는지 확인 후 zr과 ng 출력에 필요한 기능을 이어서 구현한다.진리표zxnxzynyfnoout(..

[밑바닥부터] 7일차 - 2장 불 연산: 가산기와 증분기 구현

가산기와 증분기 구현가산기구현코드를 작성해보기 전에 가산기의 동작을 생각해보자.LSB는 반가산기를 통해서 더해주고, 나머지는 carry 비트가 추가적으로 필요하니 전가산기를 써주면 될 것 같다.HDL CHIP Add16 { IN a[16], b[16]; OUT out[16]; PARTS: HalfAdder(a= a[0], b= b[0], sum= out[0], carry= carry0); FullAdder(a= a[1], b= b[1], c= carry0, sum= out[1], carry= carry1); FullAdder(a= a[2], b= b[2], c= carry1, sum= out[2], carry= carry2); FullAdder(a= a[..

[밑바닥부터] 6일차 - 2장 불 연산: 반가산기, 전가산기 구현

반가산기, 전가산기 구현반가산기진리표abcarrysum0000100101011110진리표를 확인했을 때, carry는 and 연산이고 sum은 xor 연산임을 확인할 수 있다.HDL CHIP HalfAdder { IN a, b; // 1-bit inputs OUT sum, // Right bit of a + b carry; // Left bit of a + b PARTS: And(a = a, b = b, out = carry); Xor(a = a, b = b, out = sum); }전가산기진리표abccarrysum0000000101010010111010001101101101011111반가산기를 사용해서 구현해보자. a + b + c의 결..

[밑바닥부터] 5일차 - 2장 불 연산: 가산기 아키텍처, ALU 설계

가산기 아키텍처, ALU 설계명세가산기(adder)부터 산술 논리 장치(ALU)까지 칩들을 계층적으로 정의한다.칩이 무엇을 위해 설계되는지 추상화 레벨부터 살펴보고 칩을 어떻게 만드는지 자세한 구현을 학습한다.이번 장에서 학습 하는 내용은 음수, 0이상의 수, 부호가 섞인 수 모두 정상적으로 연산할 수 있다.가산기가산기는 간단하게 설명하면 다음과 같다.반가산기(half-adder)두 비트를 더한다.전가산기(full-adder)세 비트를 더한다.가산기(adder)두 개의 n비트 숫자를 더한다.증분기(incrementer)특수 목적용 가산기주어진 숫자에 1을 더한다.반가산기2진수 덧셈의 첫 단계로 두 비트를 더한다.입력(a, b)과 출력(carry, sum)에 대한 진리표abcarrysum0000100101..

[코딩자율학습단 스프링부트] 1일차 - 스프링부트 시작하기

스프링부트 시작하기스프링부트란스프링부트는 자바 웹 프로그램을 더 쉽고 빠르게 만들기 위한 도구이다.스프링을 개선해서 환경 설정을 간소화하고 WAS를 내장하여 jar로 쉽게 배포할 수 있도록 도와준다.스프링부트 개발 환경 설정하기스프링부트를 사용하려면 먼저 JDK를 설치해야 한다.Java로 코드를 작성하고 컴파일하고 실행시키려면 Java가 설치되어야 하기 때문이다.거기에 IDE를 설치한다.인텔리제이를 써도 되고, 비주얼스튜디오 코드나 이클립스를 사용해도 된다.나는 PC에는 인텔리제이, 노트북에는 vscode를 이미 설치해두었다.자동완성 같은 개발 편의성면에서는 프로젝트 자체를 메모리에 모두 올려서 사용하는 인텔리제이가 좋다. 그러나 하드웨어 성능을 고려하자. 노트북은 메모리가 적어서 vscode로 편집만 ..

[밑바닥부터] 4일차 - 2장 불 연산: 이진수 표현, 2의 보수법

2장 - 불 연산 목표2장에서는 숫자를 표현하고 산술 연산을 진행한다.우리는 1장에서 배운 논리 게이트를 활용하여 ALU(arithmetic logical unit, 산술 논리 연산 장치)를 완성하는 것으로 2장을 마무리한다.2진 코드, 불 산술 연산, 부호 정수 표시와 덧셈을 살펴보고,CPU의 핵심 계산 부품들을 확인하는 것으로 마무리한다.이진수 표현, 2의 보수법산술 연산범용 컴퓨터 시스템은 부호 있는 정수에 대해 최소한 다음의 산술 연산을 수행할 수 있어야 한다.덧셈부호 변환뺄셈비교곱셈나눗셈2진수의 덧셈을 통해서 다른 모든 연산을 표현할 수도 있다.2진수 덧셈이 하드웨어의 기본 연산을 이해하는 데 핵심이다.2진수우리는 평소에 10진수를 사용한다. 1000이라는 숫자를 예로 들면, 110^3 + 01..

[밑바닥부터] 3일차 - 1장 불 논리: 프로젝트

프로젝트목표1장에서 소개된 모든 논리 게이트를 구현한다. Nand 게이트를 조합해서 만들되, 밑바닥부터 만든 게이트들만 활용할 수 있다.자료NAND2Tetris 웹 IDE로 접속해서 HDL로 논리 게이트 코드를 작성하고 테스트해볼 수 있다.팁게이트마다 여러 방식으로 구현할 수 있으므로, 가능한 적은 수의 파트를 사용해서 단순하게 구현할 수 있도록 생각해보자.Builtin 토글을 활성화시키면 내장되어 있는 논리 게이트를 불러온다.당장 Not 게이트를 구현하지 못했어도 내장된 Not을 가져와서 다른 AND나 OR 등 여러 게이트를 구현할 수 있다.하드웨어 구현 정리이전 학습 정리에서 논리 게이트를 어떻게 구현할 지 작성했었다.그 내용을 토대로 직접 1장에 나왔던 모든 논리 게이트를 구현하고 제대로 동작하는지..

[밑바닥부터] 2일차 - 1장 불 논리: 논리 게이트와 HDL 소개

논리 게이트와 HDL 소개논리 게이트게이트(gate)는 간단한 불 함수를 구현한 물리적 장치를 의미한다.현재 우리 레벨(소프트웨어를 위해 간단하게 이해하는)에서는 칩과 게이트를 하나의 개념으로 봐도 좋다. 엄밀하게는 게이트는 칩을 구성하는 기본 요소다.오늘날 일반적인 경우는 실리콘에 식각(etching, 화학 반응을 이용하여 회로를 깎아내는 것)하여 칩, 게이트를 생산한다.논리 게이트를 구현하기 위해서는 스위치 기술을 적용할 수 있다면 어떤 물리적 기술을 사용해도 상관이 없다. 공기, 물, 전기 등 0/1이나 true/false 같은 2진수를 표현할 수 있다면 기술에 구애받지 않는다.우리 같은 컴공 소프트웨어 개발을 하는 사람은 하드웨어의 물리적 구현에 대해 추상화하고 논리와 불 대수에 대한 관심사만 살..