이번에 작성하는 내용은 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
더 자세한 내용은 동영상 강의와 함께 강의록이 첨부되어 있으니 참고하시기 바랍니다.
일단 프로그램 카운터에 대해 알아보겠습니다.
프로그램 카운터는 기본적으로 레지스터입니다.
즉 값을 저장합니다.
그런데 그 값이 중요한 값이라 별도의 이름이 붙었습니다.
다음에 실행할 명령어의 주소를 저장하는 레지스터이고
이를 위해서 단순 저장만이 아닌 추가적인 회로가 붙어서
주변 회로와 레지스터를 합쳐서 프로그램 카운터라 부릅니다.
여기서 카운터는 왜 들어갔냐 하면, 결국 CPU는 명령어를 순서대로 실행하는 회로입니다.
결국 실행할 명령어는 기본적으로 순차적으로 저장됩니다.
따라서 현재 명령어 주소에 1을 더하면 다음에 실행할 명령어 주소입니다.
그래서 Adder가 필요합니다. 이 Adder를 통해 현재 값에 1을 더한 값을 계산하고
이 값을 다시 레지스터에 저장할 수 있는 구조이기에 카운터라는 이름이 붙었습니다.
그런데 이것만으로는 그저 정해진 대로만 명령어를 순차적으로 실행합니다.
하지만, C언어에서 if, for와 같은 조건문, 반복문이 있습니다.
이는 해당 구문 안에 있는 명령어를 처음으로 다시 돌아가서 실행하게 만듭니다.
이는 명령어로 따지면, 특정 명령어 위치로 돌아가서 다시 순서대로 명령어를 실행하는 것입니다.
이를 JMP 명령어라 부르고, 다음에 실행할 명령어의 주소를 프로그램 카운터에 넣는 동작입니다.
그런데, 앞서 말했다 싶이 기본적으로 주소를 1씩 더해서 다시 저장하기도 하고
특정 주소를 프로그램 카운터 레지스터에 넣기도 한다고 했습니다.
따라서 입력이 2개입니다. 이를 위해서 MUX를 통해 다음에 실행될 명령어의 주소가
어디서 입력되는지를 선택할 수 있습니다.
이것이 합쳐진 것이 프로그램 카운터입니다.
그럼 회로를 보겠습니다.
이것이 프로그램 카운터의 구조입니다.
REG8이라고 적혀있는 것이 프로그램 카운터 레지스터입니다. 다음에 실행할 명령어의 주소가 저장됩니다.
가장 왼쪽에 8비트 half adder가 있습니다. 이것이 다른 조건이 없을 때 프로그램 카운터에 저장된 주소를 1씩 증가시키는 회로입니다.
중간에 노란색으로 RTL_MUX라 되어있습니다. 이것이 주소를 +1증가시킬지, 아니면 pc_input[7:0] 이라 적힌 입력 값을 레지스터에 넣을지 결정합니다.
마지막으로 레지스터 출력 data_out[7:0]을 보면 바로 출력되지 않고 중간에 하나 붙어서 출력되는 것을 볼 수 있습니다.
이것은 BUS의 입출력 제어 신호에 따라 출력 상태를 변경할 수 있는 Tri-state Buffer입니다.
이는 BUS의 특성 때문에 추가된 것인데,
Bus는 기본적으로 CPU구조 상에 수많은 레지스터들을 다 1대1로 연결할 수 없으므로 비슷한 데이터를 전달하는 것 끼리 묶어둔 데이터 통로입니다. 일종의 고속도로라 볼 수 있습니다.
그래서 여러 레지스터간에 BUS에 연결해두면 선의 개수를 줄일 수 있습니다.
이때 두 레지스터간에 데이터를 전달하려면 한쪽에서는 출력을 하고 한쪽에서는 입력을 받아야 합니다. 그리고, 나머지는 출력이 없어야 합니다. 이때 나머지는 High Z(높은 저항, 따라서 전류가 흐르지 못한다., 끊겨있다.)를 출력해서통해서 데이터 통신에 영향을 주면 안됩니다. 이때 이 High Z를 출력할 수 있는 것이 Tri-state Buffer입니다. 삼상태 버퍼라고도 부릅니다.
이를 통해서 데이터 전송이 허용될 때만 레지스터 값을 pc_out[7:0]을 통해 출력하고 나머지 상태는 High Z를 출력해서 선이 끊긴 것 처럼 동작합니다.
이것이 프로그램 카운터의 구조입니다.
'프로젝트 3 - 4bit CPU 구조 이해' 카테고리의 다른 글
어셈블리의 이해 및 CPU 프로그래밍하기 (0) | 2025.02.06 |
---|---|
4bit CPU 구조 이해 개요 (1) | 2025.02.05 |