프로젝트 3 - 4bit CPU 구조 이해

4bit CPU 구조 이해 개요

바쁜 취준생 2025. 2. 5. 10:05

본 내용은 IDEC 강의 중 CPU 설계 및 응용

https://www.idec.or.kr/vod/apply/view/?pay=&search_val=cpu&no=273

 

반도체설계교육센터

강의제목 CPU 설계 및 응용 구분 부산대 / 설계강좌 / 초급/중급 / 이론+실습 강의시간 13시간 열람기간 16일 이용료(일반) 무료 이용료(학생) 무료 강의개요 SoC 설계를 위해서 CPU를 설계하고 응용할

www.idec.or.kr

이 강의의 내용을 학습하고 실습해본 내용입니다.

 

주요 개념으로는

- 저장

Register - 클럭 단위로 동작하는 Flip Flop을 기반으로  데이터를 임시로 저장하는 부분

 

- 연산

Accumulator(ACC) - 특수한 구조를 가진 레지스터, 외부로부터 입력 받거나 ALU 연산 결과를  저장한다.

Arithmatic Logic Unit(ALU) - 기본적인 사칙연산과 AND 연산등을 담당한다.

 

- 명령어 제어

Program Counter (PC) - 다음에 실행할 명령이 들어있는 주소를 저장하는 특수한 구조의 레지스터, 자동으로 1이 증가하거나, 다른 주소로 변경할 수 있게 외부 입력을 받을 수 있는 구조가 추가됨

 

- 데이터 통신 및 동작 제어

Control Block

|- Decoder - 입력 받은 기계어 명령어가 정확이 어떤 것인지 판단 후 해당 명령에 해당하는 신호 출력

|- Ring Counter - 연산 실행시 Fetch, Decode, Operand fetch , Execution의 과정을 거치는데, 이를 정해진 타이밍에 실행되게 만드는 클럭에 따른 시간을 알려주는 카운터

|- Control Signal  - 명령어에 따라 어떤 부분과 어떤 부분이 서로 데이터를 주고 받을지 input_enable, output_enable 신호를 줘서 버스를 통해 데이터를 전달하고, 특정 기능을 동작시키는 제어 신호를 출력하는 모듈

|- Bus system(Address Bus, Data Bus)

- 각각의 기능들을 별도로 연결하면 너무 많은 선이 필요하니까, 하나의 커다란 선에 모든 모듈을 연결하고

필요에 따라 해당하는 모듈만 작동해서 서로 데이터를 주고 받아 시간에 따라 데이터를 다른 곳으로 옮길 수 있는 구조

수로와 비슷한 구조이다. 기본적으로 큰 강이 있으나, 평소에는 각 모듈별로 입구를 닫아두다가, 데이터 전달이 필요할 때만, 

통신을 원하는 두 모듈만 입구를 열고 데이터를 보내고 데이터를 받아들이는 구조, 이후 통신이 끝나면 한 클럭 지나면, 다시 문을 닫고 다른 통신이 가능하게 만드는 구조

 

- HEX2DEC - 입력받은 HEX 16진법 데이터를 DEC 10진법중 BCD로 바꿔서 출력하는 구조

여기서는 순수한 조합회로 (논리 게이트를 통한 클럭없이 동작하는 회로)로 제작하여, 카르노 맵을 통해서 사용 게이트 수를 줄임

 

- 여기서 정한 기계어 명령어를 바탕으로 한 프로그램 작성법 -  작성 완료

결국 연산 회로는 시작 신호가 들어오면 자동으로 계산해서 결과를 ACC에 저장한다.

출력 회로도 특정 레지스터(OUTREG)에 들어온 데이터대로 바로 출력한다.

따라서 우리가 프로그램 하는 것은 메모리 간의 데이터 전달과 회로의 동작을 프로그래밍한다.

회로를 껏다 켰다 하고 레지스터간에 데이터를 어디로 전달할지 결정하는 것이 프로그래밍이다.

 

다만 이제 전용의 CPU를 제작했기에, 전용 명령어 체계 Instruction set architecture(ISA)를 가지다 보니

컴파일러가 없어서 어셈블리로 코드를 짜야 된다.

이를 통해서 컴파일러와 링커가 어떻게 동작하는지 이해할 수 있다.

 

표현으로는

Mnemonic Code - ADD, AND, NOP

Binary Code - 01010000, 01010100, 00000000

Hex Code - 50, 54, 00

등으로 표현하면회로에서는 Opcode란 이름으로 입력 받는다.

 

이후 각각의 기능별로 글을 작성하여 해당 개념을 다룰 예정이다.