산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial Internet of Things >> 임베디드

CPU 제어 장치: 구성 요소 및 설계 구조 설명

제어 장치는 컴퓨터의 중앙 처리 장치(CPU)의 주요 구성 요소로, 프로세서/컴퓨터에 의한 프로그램 실행 중 연산을 지시합니다. 제어 장치의 주 기능은 컴퓨터 메모리에서 명령어를 가져와 실행하는 것입니다. 사용자로부터 입력 명령어/정보를 받아 제어 신호로 변환한 후 CPU에 전달하여 추가 실행을 수행합니다. 존 노이만이 개발한 폰 노이만 아키텍처의 일부로 포함됩니다. 타이밍 신호와 제어 신호를 제공하고 CPU에 의한 프로그램 실행을 지시합니다. 현대 컴퓨터에서 CPU의 내부 부분으로 포함됩니다. 이 글은 제어 장치에 대한 완전한 정보를 설명합니다.

제어 장치란?

사용자로부터 입력 신호/정보/명령어를 받아 CPU에서의 실행을 위한 제어 신호로 변환하는 구성 요소입니다. 메인 메모리, 산술 논리 장치(ALU), 입출력 장치를 제어하고 지시하며, 컴퓨터 CPU로 전송되는 명령어도 책임집니다. 프로세서의 메인 메모리에서 명령어를 가져와 프로세서 명령어 레지스터로 보내며, 여기에는 레지스터 내용이 포함됩니다.

CPU 제어 장치: 구성 요소 및 설계 구조 설명
제어 장치 블록 다이어그램

제어 장치는 입력을 제어 신호로 변환하여 프로세서에 보내고 프로그램 실행을 지시합니다. 수행해야 할 연산은 프로세서가 컴퓨터에서 지시합니다. 주로 중앙 처리 장치(CPU)와 그래픽 처리 장치(GPU)가 제어 장치를 내부 부품으로 필요로 합니다. 제어 장치의 블록 다이어그램은 위에 표시되어 있습니다.

제어 장치의 구성 요소

이 장치의 구성 요소는 명령어 레지스터, CPU 내 제어 신호, 버스 간 제어 신호, 제어 버스, 입력 플래그, 클록 신호입니다.

하드와이어드 제어 장치의 구성 요소는 명령어 레지스터(연산 코드와 주소 필드 포함), 타이밍 유닛, 제어 상태 생성기, 제어 신호 생성 매트릭스, 명령어 디코더입니다.
마이크로프로그래밍 제어 장치의 구성 요소는 차기 주소 생성기, 제어 주소 레지스터, 제어 메모리, 제어 데이터 레지스터입니다.

기능

제어 장치의 기능은 다음과 같습니다.

제어 장치 설계

다음을 포함하는 두 가지 제어 장치 유형으로 설계할 수 있습니다.

하드와이어드 제어 장치

하드와이어드 제어 장치의 기본 설계는 위에 나와 있습니다. 이 유형에서 제어 신호는 회로 구조 변경 없이 특수 하드웨어 로직 회로에 의해 생성됩니다. 여기서 생성된 신호는 프로세서에서 실행을 위해 수정될 수 없습니다.

연산 코드(명령어의 연산 코드) 기본 데이터가 디코딩을 위해 명령어 디코더로 전송됩니다. 명령어 디코더는 연산 코드 내 다양한 데이터 유형을 디코딩하는 디코더 집합입니다. 이는 활성 신호 값이 포함된 출력 신호를 생성하며, 이는 매트릭스 생성기에 입력으로 주어져 컴퓨터 프로세서에 의한 프로그램 실행을 위한 제어 신호를 생성합니다.

CPU 제어 장치: 구성 요소 및 설계 구조 설명
하드와이어드 기반 제어 장치

매트릭스 생성기는 제어 장치 상태와 프로세서로부터의 신호(인터럽트 신호)를 제공합니다. 매트릭스는 프로그래머블 로직 어레이로 구축됩니다. 매트릭스 생성기에서 생성된 제어 신호는 차기 생성기 매트릭스에 입력으로 주어지고 타이밍 유닛의 타이밍 신호(직사각형 패턴 포함)와 결합됩니다.

새 명령어 인출을 위해 제어 장치는 새 명령어 실행을 위한 초기 단계로 전환합니다. 타이밍 신호, 입력 신호, 컴퓨터 명령어 상태가 변경되지 않는 한 제어 장치는 초기 단계 또는 1단계에 머뭅니다. 생성된 신호 중 어느 것에서든 변화가 있으면 제어 장치 상태 변경이 발생할 수 있습니다.

외부 신호나 인터럽트가 발생하면 제어 장치는 다음 상태로 이동하여 인터럽트 신호 처리를 수행합니다. 플래그와 상태는 명령어 실행 사이클을 수행할 원하는 상태를 선택하는 데 사용됩니다.

마지막 상태에서 제어 장치는 다음 명령어를 인출하여 프로그램 카운터로 출력을 보내고, 메모리 주소 레지스터, 버퍼 레지스터, 명령어 레지스터로 거쳐 명령어를 읽습니다. 마지막으로 제어 장치가 인출한 마지막 명령어가 종료 명령어이면 프로세서의 운영 상태로 가서 사용자가 다음 프로그램을 지시할 때까지 대기합니다.

마이크로프로그래밍 제어 장치

이 유형에서는 프로그램 실행 중 인코딩된 제어 신호를 저장하기 위해 제어 저장소가 사용됩니다. 제어 신호는 마이크로프로그램이 제어 저장소에 주소 필드를 저장하기 때문에 즉시 생성되고 디코딩되지 않습니다. 전체 과정은 단일 레벨입니다.

마이크로 연산은 프로그램 내 마이크로 명령어 실행을 위해 수행됩니다. 마이크로프로그래밍 제어 장치의 블록 다이어그램은 위에 나와 있습니다. 다이어그램에서 마이크로 명령어의 주소는 제어 메모리 주소 레지스터에서 얻습니다. 제어 장치의 모든 정보는 ROM이라 불리는 제어 메모리에 영구 저장됩니다.

CPU 제어 장치: 구성 요소 및 설계 구조 설명
마이크로프로그래밍 기반 제어 장치

제어 메모리의 마이크로 명령어는 제어 레지스터에 보관됩니다. 마이크로 명령어가 제어 워드 형태(이진 제어 값 포함)로 되어 있어 데이터 처리를 위해 1개 이상의 마이크로 연산이 수행되어야 합니다.

마이크로 명령어 실행 중 차기 주소 생성기가 다음 마이크로 명령어 주소를 계산하여 제어 주소 레지스터로 보내 다음 마이크로 명령어를 읽습니다.
마이크로 프로그램의 마이크로 연산 시퀀스는 차기 주소 생성기에 의해 수행되며 마이크로프로그램 시퀀서 역할을 하여 시퀀스 주소, 즉 제어 메모리에서 읽은 주소를 얻습니다.

제어 장치 베릴로그 코드

제어 장치 베릴로그 코드는 아래와 같습니다.

`include "prj_definition.v"

module CONTROL_UNIT(MEM_DATA, RF_DATA_W, RF_ADDR_W, RF_ADDR_R1, RF_ADDR_R2, RF_READ, RF_WRITE, ALU_OP1, ALU_OP2, ALU_OPRN, MEM_ADDR, MEM_READ, MEM_WRITE, RF_DATA_R1, RF_DATA_R2, ALU_RESULT, ZERO, CLK, RST)

// 출력 신호
// 레지스터 파일용 출력

output [`DATA_INDEX_LIMIT:0] RF_DATA_W;
output [`ADDRESS_INDEX_LIMIT:0] RF_ADDR_W, RF_ADDR_R1, RF_ADDR_R2;
output RF_READ, RF_WRITE;

// ALU용 출력
output [`DATA_INDEX_LIMIT:0] ALU_OP1, ALU_OP2;
output [`ALU_OPRN_INDEX_LIMIT:0] ALU_OPRN;

// 메모리용 출력
output [`ADDRESS_INDEX_LIMIT:0] MEM_ADDR;
output MEM_READ, MEM_WRITE;

// 입력 신호
input [`DATA_INDEX_LIMIT:0] RF_DATA_R1, RF_DATA_R2, ALU_RESULT;
input ZERO, CLK, RST;

// 입출력 신호
inout [`DATA_INDEX_LIMIT:0] MEM_DATA;

// 상태 넷
wire [2:0] proc_state;

// 프로그램 카운터 값 보유, 현재 명령어 저장, 스택 포인터 레지스터

reg MEM_READ, MEM_WRITE;
reg MEM_ADDR;
reg ALU_OP1, ALU_OP2;
reg ALU_OPRN;
reg RF_ADDR_W, RF_ADDR_R1, RF_ADDR_R2;
reg RF_DATA_W;
reg [1:0] state, next_state;

PROC_SM state_machine(.STATE(proc_state),.CLK(CLK),.RST(RST));

always @ (posedge CLK)
begin
if (RST)
state <= RST;
else
state <= next_state;

end

always @ (state)
begin

MEM_READ = 1'b0; MEM_WRITE = 1'b0; MEM_ADDR = 1'b0;
ALU_OP1 = 1'b0; ALU_OP2 = 1'b0; ALU_OPRN = 1'b0;
RF_ADDR_R1 = 1'b0; RF_ADDR_R2 = 1'b0; RF_ADDR_W = 1'b0; RF_DATA_W = 1'b0;

case( state )

`PROC_FETCH : begin
next_state = `PROC_DECODE;
MEM_READ = 1'b1;
RF_ADDR_R1 = 1'b0; RF_ADDR_R2 = 1'b0;
RF_ADDR_W = 1'b1;
end

`PROC_DECODE : begin
next_state = `PROC_EXE;
MEM_ADDR = 1'b1;
ALU_OP1 = 1'b1; ALU_OP2 = 1'b1; ALU_OPRN = 1'b1;
MEM_WRITE = 1'b1;
RF_ADDR_R1 = 1'b1; RF_ADDR_R2 = 1'b1;
end

`PROC_EXE : begin
next_state = `PROC_MEM;
ALU_OP1 = 1'b1; ALU_OP2 = 1'b1; ALU_OPRN = 1'b1;
RF_ADDR_R1 = 1'b0;
end

`PROC_MEM: begin
next_state = `PROC_WB;
MEM_READ = 1'b1; MEM_WRITE = 1'b0;
end

`PROC_WB: begin
next_state = `PROC_FETCH;
MEM_READ = 1'b1; MEM_WRITE = 1'b0;
end
endcase

end
endmodule;

module PROC_SM(STATE,CLK,RST);
// 입력 리스트
input CLK, RST;
// 출력 리스트
output [2:0] STATE;

// 입력 리스트
input CLK, RST;
// 출력 리스트
output STATE;

reg [2:0] STATE;
reg [1:0] state;
reg [1:0] next_state;

reg PC_REG, INST_REG, SP_REF;

`define PROC_FETCH 3'h0
`define PROC_DECODE 3'h1
`define PROC_EXE 3'h2
`define PROC_MEM 3'h3
`define PROC_WB 3'h4

// 상태 초기화
initial
begin
state = 2'bxx;
next_state = `PROC_FETCH;
end

// 리셋 신호 처리
always @ (posedge RST)
begin
state = `PROC_FETCH;
next_state = `PROC_FETCH;
end
always @ (posedge CLK)
begin
state = next_state;
end
always @(state)
begin
if (state === `PROC_FETCH)
begin
next_state = `PROC_DECODE;

print_instruction(INST_REG);
end

if (state === `PROC_DECODE)
begin
next_state = `PROC_EXE;

end

if (state === `PROC_EXE)
begin
next_state = `PROC_MEM;

print_instruction(SP_REF);
end

if (state === `PROC_MEM)
begin
next_state = `PROC_WB;

end

if (state === `PROC_WB)
begin
next_state = `PROC_FETCH;

print_instruction(PC_REG);
end
end

task print_instruction;

input [`DATA_INDEX_LIMIT:0] inst;

reg [5:0] opcode;
reg [4:0] rs;
reg [4:0] rt;
reg [4:0] rd;
reg [4:0] shamt; reg [5:0] funct; reg [15:0] immediate; reg [25:0] address;

begin

// 명령어 파싱
// R-type

{opcode, rs, rt, rd, shamt, funct} = inst;

// I-type
{opcode, rs, rt, immediate } = inst;
// J-type
{opcode, address} = inst;
$write("@ %6dns -> [0X%08h] ", $time, inst);
case(opcode) // R-Type
6'h00 : begin
case(funct)

6'h20: $write("add r[%02d], r[%02d], r[%02d];", rs, rt, rd);
6'h22: $write("sub r[%02d], r[%02d], r[%02d];", rs, rt, rd);
6'h2c: $write("mul r[%02d], r[%02d], r[%02d];", rs, rt, rd);
6'h24: $write("and r[%02d], r[%02d], r[%02d];", rs, rt, rd);
6'h25: $write("or r[%02d], r[%02d], r[%02d];", rs, rt, rd);
6'h27: $write("nor r[%02d], r[%02d], r[%02d];", rs, rt, rd);
6'h2a: $write("slt r[%02d], r[%02d], r[%02d];", rs, rt, rd);
6'h00: $write("sll r[%02d], %2d, r[%02d];", rs, shamt, rd);
6'h02: $write("srl r[%02d], 0X%02h, r[%02d];", rs, shamt, rd);
6'h08: $write("jr r[%02d];", rs);
default: $write("");
endcase
end

// I-type

6'h08 : $write("addi r[%02d], r[%02d], 0X%04h;", rs, rt, immediate);
6'h1d : $write("muli r[%02d], r[%02d], 0X%04h;", rs, rt, immediate);
6'h0c : $write("andi r[%02d], r[%02d], 0X%04h;", rs, rt, immediate);
6'h0d : $write("ori r[%02d], r[%02d], 0X%04h;", rs, rt, immediate);
6'h0f : $write("lui r[%02d], 0X%04h;", rt, immediate);
6'h0a : $write("slti r[%02d], r[%02d], 0X%04h;", rs, rt, immediate);
6'h04 : $write("beq r[%02d], r[%02d], 0X%04h;", rs, rt, immediate);
6'h05 : $write("bne r[%02d], r[%02d], 0X%04h;", rs, rt, immediate);
6'h23 : $write("lw r[%02d], r[%02d], 0X%04h;", rs, rt, immediate);
6'h2b : $write("sw r[%02d], r[%02d], 0X%04h;", rs, rt, immediate);

// J-Type

6'h02 : $write("jmp 0X%07h;", address);
6'h03 : $write("jal 0X%07h;", address);
6'h1b : $write("push;");
6'h1c : $write("pop;");
default: $write("");
endcase
$write ("\n");
end
endtask
end module;

자주 묻는 질문

1). 제어 장치의 역할은?

제어 장치의 역할은 컴퓨터 프로세서에 의한 실행을 위해 데이터 또는 명령어 흐름을 지시하는 것입니다. 메인 메모리, ALU, 레지스터, 입력, 출력 장치를 제어, 관리, 조정합니다. 명령어를 가져오고 실행을 위한 제어 신호를 생성합니다.

2). 제어 메모리란?

제어 메모리는 보통 제어 레지스터의 주소와 데이터를 저장하는 RAM 또는 ROM입니다.

3). 윌크스 제어 장치란?

하드와이어드 제어 장치의 순차 및 조합 회로가 윌크스 제어 장치로 대체됩니다. 마이크로 프로그램의 명령어 시퀀스를 저장하는 저장 장치를 사용합니다.

4). 하드와이어드 제어 장치란?

하드와이어드 제어 장치는 회로의 물리적 변경 없이 매 클록 펄스마다 한 상태에서 다른 상태로 변경하여 제어 신호를 생성합니다. 제어 신호 생성은 명령어 레지스터, 디코더, 인터럽트 신호에 의존합니다.

5). 제어 메모리란?

제어 장치의 정보 또는 데이터가 일시적 또는 영구적으로 저장되는 제어 메모리입니다.
제어 메모리는 두 유형입니다: 랜덤 액세스 메모리(RAM)와 읽기 전용 메모리(ROM).

이상이 제어 장치의 정의, 구성 요소, 설계, 다이어그램, 기능, 유형에 대한 모든 것입니다. 여기 질문이 있습니다: "제어 주소 레지스터의 목적은 무엇인가요?"

임베디드

  1. CPU 제어 장치: 구성 요소 및 설계 구조 설명
  2. 임베디드 시스템 프로그래밍: 언어, 아키텍처 및 응용
  3. 수치 제어(NC) 개요: 자동화 공작 기계 작동의 기초
  4. 전기 제어 패널 설계 마스터: 핵심 원칙 및 모범 사례
  5. 케블라(Kevlar) 완벽 해설: 강도와 용도에 대한 종합 개요
  6. 건축 설계(Architecture Design) 이해: 원리, 실무, 영향과 진로
  7. 마이크로일렉트로닉스(Microelectronics) 이해: 초소형 전자공학의 과학
  8. 품질 관리(Quality Control) 완벽 가이드: 일관된 우수성 보장
  9. 3D 프린팅이 가공 및 산업 디자인을 혁신하는 방식
  10. 제품 개발에서 산업 디자인 시제품 제작의 중요한 역할