제어 장치 란 무엇입니까 : 구성 요소 및 설계

문제를 제거하기 위해 도구를 사용해보십시오





제어 장치는 컴퓨터의 중앙 처리 장치 (CPU)의 주요 구성 요소로, 프로그램을 실행하는 동안 작업을 지시 할 수 있습니다. 프로세서 /컴퓨터. 제어 장치의 주요 기능은 컴퓨터의 메모리에서 명령을 가져와 실행하는 것입니다. 사용자로부터 입력 지시 / 정보를 받아 제어 신호 , 추가 실행을 위해 CPU에 제공됩니다. John Neumann이 개발 한 Von Neumann 아키텍처의 일부로 포함됩니다. 타이밍 신호 및 제어 신호를 제공하고 CPU에 의한 프로그램 실행을 지시합니다. 최신 컴퓨터의 CPU 내부 부분으로 포함되어 있습니다. 이 문서에서는 제어 장치에 대한 전체 정보를 설명합니다.

제어 장치는 무엇입니까?

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




제어 장치 블록 다이어그램

제어 장치 블록 다이어그램

제어 장치는 입력을 제어 신호로 변환 한 다음 프로세서로 전송하여 프로그램 실행을 지시합니다. 수행해야하는 작업은 컴퓨터의 프로세서에 의해 지시됩니다. 주로 중앙 처리 장치 (CPU) 및 그래픽 처리 장치 (GPU)는 내부 부품으로 제어 장치가 필요합니다. 제어 장치의 블록 다이어그램은 위에 나와 있습니다.



제어 장치의 구성 요소

이 장치의 구성 요소는 지침입니다. 레지스터 , CPU 내의 제어 신호, 버스와의 제어 신호, 제어 버스, 입력 플래그 및 클럭 신호.

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

기능

그만큼 제어 장치의 기능 다음을 포함하십시오.


  • 프로세서와 다른 장치 간의 데이터 시퀀스 흐름을 지시합니다.
  • 명령어를 해석하고 프로세서의 데이터 흐름을 제어 할 수 있습니다.
  • 수신 된 명령 또는 명령 레지스터의 명령에서 일련의 제어 신호를 생성합니다.
  • 컴퓨터 CPU에있는 ALU, 데이터 버퍼 및 레지스터와 같은 실행 단위를 제어하는 ​​책임이 있습니다.
  • 가져 오기, 디코딩, 실행 처리 및 결과 저장 기능이 있습니다.
  • 데이터를 처리하고 저장할 수 없습니다.
  • 데이터를 전송하기 위해 입력 및 출력 장치와 통신하고 컴퓨터의 모든 장치를 제어합니다.

제어 장치의 설계

이것의 디자인은 두 가지를 사용하여 할 수 있습니다 제어 장치의 유형 다음을 포함합니다.

  • 하드 와이어 기반
  • 마이크로 프로그램 기반 (단일 레벨 및 2 레벨)

유선 제어 장치

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

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

하드 와이어 기반 제어 장치

하드 와이어 기반 제어 장치

매트릭스 생성기는 제어 장치의 상태와 프로세서에서 나오는 신호 (인터럽트 신호)를 제공합니다. 매트릭스는 프로그래밍 가능한 로직 어레이 . 매트릭스 생성기에 의해 생성 된 제어 신호는 다음 생성기 매트릭스에 대한 입력으로 제공되며 직사각형 패턴을 포함하는 타이밍 유닛의 타이밍 신호와 결합됩니다.

새로운 명령을 가져 오기 위해 제어 장치는 새로운 명령 실행을위한 초기 단계로 전환됩니다. 제어 장치는 컴퓨터의 타이밍 신호, 입력 신호 및 명령 상태가 변경되지 않는 한 초기 단계 또는 첫 번째 단계에 있습니다. 생성 된 신호에 변화가있는 경우 제어 장치의 상태 변화가 발생할 수 있습니다.

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

마지막 상태에서 제어 장치는 다음 명령어를 가져 와서 프로그램 카운터, 메모리 주소 레지스터, 버퍼 레지스터, 명령어 레지스터로 출력을 전송하여 명령어를 읽습니다. 마지막으로 마지막 명령 (제어 장치에서 가져온 명령)이 종료 명령이면 프로세서의 작동 상태로 이동하여 사용자가 다음 프로그램을 지시 할 때까지 기다립니다.

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

이 유형에서 제어 저장소는 프로그램 실행 중에 인코딩되는 제어 신호를 저장하는 데 사용됩니다. 제어 신호는 마이크로 프로그램이 제어 저장소에 주소 필드를 저장하기 때문에 즉시 생성되고 디코딩되지 않습니다. 전체 프로세스는 단일 수준입니다.

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

마이크로 프로그램 기반 제어 장치

마이크로 프로그램 기반 제어 장치

제어 메모리의 마이크로 명령어는 제어 레지스터에 보관됩니다. 마이크로 명령어는 데이터 처리를 위해 1 개 이상의 마이크로 연산을 수행해야하는 제어 단어 (이진 제어 값 포함)의 형태이기 때문입니다.

마이크로 명령어를 실행하는 동안 다음 주소 생성기는 마이크로 명령어의 다음 주소를 계산 한 다음 제어 주소 레지스터로 전송하여 다음 마이크로 명령어를 읽습니다.
마이크로 프로그램의 마이크로 작업 시퀀스는 다음 주소 생성기에 의해 수행되고 마이크로 프로그램 시퀀서로 작동하여 시퀀스 주소를 가져옵니다. 즉, 제어 메모리에서 읽습니다.

제어 장치 용 Verilog 코드

Control Unit의 Verilog 코드는 아래와 같습니다.

`include 'prj_definition.v'

모듈 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_R1, RF_DATA_R1

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

출력 [`DATA_INDEX_LIMIT : 0] RF_DATA_W
출력 [`ADDRESS_INDEX_LIMIT : 0] RF_ADDR_W, RF_ADDR_R1, RF_ADDR_R2
출력 RF_READ, RF_WRITE

// ALU에 대한 출력
출력 [`DATA_INDEX_LIMIT : 0] ALU_OP1, ALU_OP2
출력 [`ALU_OPRN_INDEX_LIMIT : 0] ALU_OPRN

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

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

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

// 상태 그물
와이어 [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] 상태, next_state

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

항상 @ (posedge CLK)
시작하다
if (RST)
상태<= RST
그밖에
상태<= next_state

종료

항상 @ (상태)
시작하다

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

케이스 (상태)

`PROC_FETCH : 시작
next_state =`PROC_DECODE
MEM_READ = 1’b1
RF_ADDR_R1 = 1’b0 RF_ADDR_R2 = 1’b0
RF_ADDR_W = 1’b1
종료

`PROC_DECODE : 시작
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
종료

`PROC_EXE : 시작
next_state =`PROC_MEM
ALU_OP1 = 1’b1 ALU_OP2 = 1’b1 ALU_OPRN = 1’b1
RF_ADDR_R1 = 1’b0
종료

`PROC_MEM : 시작
next_state =`PROC_WB
MEM_READ = 1’b1 MEM_WRITE = 1’b0
종료

`PROC_WB : 시작
next_state =`PROC_FETCH
MEM_READ = 1’b1 MEM_WRITE = 1’b0
종료
엔드 케이스

종료
endmodule

PROC_SM (STATE, CLK, RST) 모듈
// 입력 목록
입력 CLK, RST
// 출력 목록
출력 [2 : 0] STATE

// 입력 목록
입력 CLK, RST
// 출력 목록
출력 상태

reg [2 : 0] 상태
reg [1 : 0] 상태
reg [1 : 0] next_state

reg PC_REG, INST_REG, SP_REF

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

// 상태 시작
머리 글자
시작하다
상태 = 2’bxx
next_state =`PROC_FETCH
종료

// 신호 처리 재설정
항상 @ (posedge RST)
시작하다
상태 =`PROC_FETCH
next_state =`PROC_FETCH
종료
항상 @ (posedge CLK)
시작하다
상태 = next_state
종료
항상 @ (상태)
시작하다
if (상태 ===`PROC_FETCH)
시작하다
next_state =`PROC_DECODE

print_instruction (INST_REG)
종료

if (상태 ===`PROC_DECODE)
시작하다
next_state =`PROC_EXE

종료

if (상태 ===`PROC_EXE)
시작하다
next_state =`PROC_MEM

print_instruction (SP_REF)
종료

if (상태 ===`PROC_MEM)
시작하다
next_state =`PROC_WB

종료

if (상태 ===`PROC_WB)
시작하다
next_state =`PROC_FETCH

print_instruction (PC_REG)
종료
종료

작업 print_instruction

입력 [`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] 즉시 reg [25 : 0] 주소

시작하다

// 명령어 구문 분석
// R 형

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

// I 형
{opcode, rs, rt, 즉시} = inst
// J 형
{opcode, address} = inst
$ write (“@ % 6dns-> [0X % 08h]“, $ time, inst)
case (opcode) // R- 유형
6'h00 : 시작
케이스 (기능)

6시 20 분 : $ write ( 'add r [% 02d], r [% 02d], r [% 02d]', rs, rt, rd)
6시 22 분 : $ write ( 'sub r [% 02d], r [% 02d], r [% 02d]', rs, rt, rd)
6시 2 분 : $ write ( 'mul r [% 02d], r [% 02d], r [% 02d]', rs, rt, rd)
6시 24 분 : $ write ( '및 r [% 02d], r [% 02d], r [% 02d]', rs, rt, rd)
6시 25 분 : $ write ( '또는 r [% 02d], r [% 02d], r [% 02d]', rs, rt, rd)
6시 27 분 : $ write ( 'nor r [% 02d], r [% 02d], r [% 02d]', rs, rt, rd)
6시 2 분 : $ write ( 'slt r [% 02d], r [% 02d], r [% 02d]', rs, rt, rd)
6시 00 분 : $ write ( 'sll r [% 02d], % 2d, r [% 02d]', rs, shamt, rd)
6’h02 : $ write ( 'srl r [% 02d], 0X % 02h, r [% 02d]', rs, shamt, rd)
2008 년 6 월 : $ write ( 'jr r [% 02d]', rs)
기본값 : $ write (“”)
엔드 케이스
종료

// I 형

2008 년 6 월 : $ write ( 'addi r [% 02d], r [% 02d], 0X % 04h', rs, rt, 즉시)
6’h1d : $ write ( 'muli r [% 02d], r [% 02d], 0X % 04h', rs, rt, 즉시)
6’h0c : $ write ( 'andi r [% 02d], r [% 02d], 0X % 04h', rs, rt, 즉시)
6’h0d : $ write ( 'ori r [% 02d], r [% 02d], 0X % 04h', rs, rt, 즉시)
6’h0f : $ write ( 'lui r [% 02d], 0X % 04h', rt, 즉시)
6’h0a : $ write ( 'slti r [% 02d], r [% 02d], 0X % 04h', rs, rt, 즉시)
6’h04 : $ write ( 'beq r [% 02d], r [% 02d], 0X % 04h', rs, rt, 즉시)
6’h05 : $ write ( 'bne r [% 02d], r [% 02d], 0X % 04h', rs, rt, 즉시)
6시 23 분 : $ write ( 'lw r [% 02d], r [% 02d], 0X % 04h', rs, rt, 즉시)
6’h2b : $ write ( 'sw r [% 02d], r [% 02d], 0X % 04h', rs, rt, 즉시)

// J- 타입

6’h02 : $ write ( 'jmp 0X % 07h', 주소)
6’h03 : $ write ( 'jal 0X % 07h', 주소)
6시 1 분 : $ write ( 'push')
6시 1 분 : $ write ( 'pop')
기본값 : $ write (“”)
엔드 케이스
$ write ( ' n')
종료
최종 작업
끝 모듈

자주 묻는 질문

1). 제어 장치의 작업은 무엇입니까?

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

2). 제어 메모리는 무엇입니까?

제어 메모리는 일반적으로 제어 레지스터의 주소와 데이터를 저장하는 RAM 또는 ROM입니다.

삼). Wilkes 제어 장치는 무엇입니까?

순차 및 조합 회로 하드 와이어 컨트롤 유닛은 Wilkes 컨트롤 유닛으로 대체됩니다. 마이크로 프로그램의 명령어 시퀀스를 저장하기 위해 저장 장치를 사용합니다.

4). 유선 제어 장치는 무엇입니까?

하드 와이어 컨트롤 유닛은 회로의 물리적 변화없이 모든 클럭 펄스에서 한 상태에서 다른 상태로 변경하여 제어 신호를 생성합니다. 제어 신호의 생성은 명령어 레지스터, 디코더 및 인터럽트 신호에 따라 다릅니다.

5). 제어 메모리는 무엇입니까?

제어 장치 또는 데이터의 정보는 제어 메모리에 임시 또는 영구적으로 저장됩니다.
제어 메모리는 두 가지 유형이 있습니다. RAM (Random Access Memory)과 ROM (Read-Only Memory)입니다.

따라서 이것은 정의, 구성 요소, 디자인, 다이어그램, 기능 및 제어 장치의 유형 . '제어 주소 레지스터의 용도는 무엇입니까?'라는 질문이 있습니다.