Đơn vị điều khiển là gì: Các thành phần và thiết kế của nó

Hãy Thử Công Cụ CủA Chúng Tôi Để LoạI Bỏ Các VấN Đề





Khối điều khiển là thành phần chính của khối xử lý trung tâm (CPU) trong máy tính có thể chỉ đạo các hoạt động trong quá trình thực thi một chương trình bằng cách bộ xử lý /máy vi tính. Chức năng chính của thiết bị điều khiển là tìm nạp và thực thi các lệnh từ bộ nhớ của máy tính. Nó nhận hướng dẫn / thông tin đầu vào từ người dùng và chuyển nó thành tín hiệu điều khiển , sau đó được cấp cho CPU để thực thi thêm. Nó được bao gồm như một phần của kiến ​​trúc Von Neumann do John Neumann phát triển. Nó chịu trách nhiệm cung cấp các tín hiệu thời gian, tín hiệu điều khiển và chỉ đạo việc thực thi một chương trình của CPU. Nó được bao gồm như một phần bên trong của CPU trong các máy tính hiện đại. Bài viết này mô tả thông tin đầy đủ về thiết bị điều khiển.

Thiết bị Điều khiển là gì?

Thành phần nhận tín hiệu / thông tin / lệnh đầu vào từ người dùng và chuyển đổi thành tín hiệu điều khiển để thực thi trong CPU. Nó kiểm soát và chỉ đạo bộ nhớ chính, đơn vị số học & logic (ALU), các thiết bị đầu vào và đầu ra, đồng thời chịu trách nhiệm về các lệnh được gửi đến CPU của máy tính. Nó tìm nạp các hướng dẫn từ Bộ nhớ chính của bộ xử lý và được gửi đến thanh ghi lệnh của bộ xử lý, nơi chứa nội dung thanh ghi.




Sơ đồ khối đơn vị điều khiển

Sơ đồ khối đơn vị điều khiển

Khối điều khiển chuyển đổi đầu vào thành các tín hiệu điều khiển, sau đó được gửi đến bộ xử lý và chỉ đạo thực hiện một chương trình. Các hoạt động phải thực hiện được chỉ đạo bởi bộ xử lý trên máy tính. Chủ yếu là Bộ xử lý Trung tâm (CPU) và Đơn vị xử lý đồ họa (GPU) yêu cầu một bộ phận điều khiển làm bộ phận bên trong. Sơ đồ khối của khối điều khiển được hiển thị ở trên.



Các thành phần của Bộ điều khiển

Các thành phần của đơn vị này là hướng dẫn đăng ký , tín hiệu điều khiển trong CPU, tín hiệu điều khiển đến / đi bus, bus điều khiển, cờ đầu vào và tín hiệu xung nhịp.

Các thành phần của thiết bị điều khiển có dây cứng là thanh ghi lệnh (chứa trường opcode và địa chỉ), đơn vị thời gian, trạng thái điều khiển máy phát điện , ma trận tạo tín hiệu điều khiển, và bộ giải mã lệnh.
Các thành phần của bộ điều khiển được lập trình vi mô là bộ tạo địa chỉ tiếp theo, một thanh ghi địa chỉ điều khiển, bộ nhớ điều khiển và thanh ghi dữ liệu điều khiển.

Chức năng

Các chức năng của đơn vị điều khiển bao gồm những điều sau đây.


  • Nó định hướng luồng dữ liệu giữa bộ xử lý và các thiết bị khác.
  • Nó có thể giải thích các hướng dẫn và kiểm soát luồng dữ liệu trong bộ xử lý.
  • Nó tạo ra chuỗi tín hiệu điều khiển từ các lệnh hoặc lệnh nhận được từ thanh ghi lệnh.
  • Nó có trách nhiệm kiểm soát các đơn vị thực thi như ALU, bộ đệm dữ liệu và thanh ghi trong CPU của máy tính.
  • Nó có khả năng tìm nạp, giải mã, xử lý việc thực thi và lưu trữ kết quả.
  • Nó không thể xử lý và lưu trữ dữ liệu
  • Để truyền dữ liệu, nó giao tiếp với các thiết bị đầu vào và đầu ra và điều khiển tất cả các đơn vị của máy tính.

Thiết kế bộ điều khiển

Thiết kế của điều này có thể được thực hiện bằng cách sử dụng hai các loại thiết bị điều khiển bao gồm những điều sau đây.

  • Dựa trên hardwire
  • Dựa trên vi lập trình (một cấp và hai cấp)

Bộ điều khiển có dây cứng

Thiết kế cơ bản của bộ điều khiển có dây cứng được trình bày ở trên. Trong loại này, các tín hiệu điều khiển được tạo ra bởi một phần cứng đặc biệt mạch logic mà không có bất kỳ thay đổi nào trong cấu trúc của mạch. Do đó, tín hiệu được tạo ra không thể được sửa đổi để thực thi trong bộ xử lý.

Dữ liệu cơ bản của một opcode (mã hoạt động của một lệnh được gửi đến bộ giải mã lệnh để giải mã. Lệnh người giải mã là tập hợp các bộ giải mã để giải mã các loại dữ liệu khác nhau trong opcode. Điều này dẫn đến các tín hiệu đầu ra chứa các giá trị của tín hiệu hoạt động được đưa ra làm đầu vào cho bộ tạo ma trận để tạo ra các tín hiệu điều khiển để bộ xử lý của máy tính thực hiện chương trình.

Bộ điều khiển dựa trên dây cứng

Bộ điều khiển dựa trên dây cứng

Bộ tạo ma trận cung cấp trạng thái của khối điều khiển và các tín hiệu ra từ bộ xử lý (tín hiệu ngắt). Ma trận được xây dựng như mảng logic có thể lập trình . Các tín hiệu điều khiển do bộ tạo ma trận tạo ra được đưa ra làm đầu vào cho ma trận bộ tạo tiếp theo và kết hợp với các tín hiệu định thời của bộ định thời có chứa các mẫu hình chữ nhật.

Đối với việc tìm nạp lệnh mới, đơn vị điều khiển chuyển thành một giai đoạn ban đầu để thực hiện lệnh mới. Thiết bị điều khiển vẫn ở giai đoạn đầu hoặc giai đoạn đầu tiên miễn là tín hiệu thời gian, tín hiệu đầu vào và trạng thái lệnh của máy tính không thay đổi. Sự thay đổi trạng thái của thiết bị điều khiển có thể tăng lên nếu có bất kỳ thay đổi nào trong bất kỳ tín hiệu nào được tạo ra.

Khi xảy ra tín hiệu bên ngoài hoặc ngắt, khối điều khiển chuyển sang trạng thái tiếp theo và thực hiện xử lý tín hiệu ngắt. Các cờ và trạng thái được sử dụng để chọn các trạng thái mong muốn để thực hiện chu trình thực thi của lệnh.

Ở trạng thái cuối cùng, khối điều khiển tìm nạp lệnh tiếp theo và gửi đầu ra tới bộ đếm chương trình, sau đó tới thanh ghi địa chỉ bộ nhớ, tới thanh ghi bộ đệm, rồi tới thanh ghi lệnh để đọc lệnh. Cuối cùng, nếu lệnh cuối cùng (được thiết bị điều khiển tìm nạp) là lệnh kết thúc, thì nó sẽ chuyển đến trạng thái hoạt động của bộ xử lý và đợi cho đến khi người dùng chỉ thị chương trình tiếp theo.

Bộ điều khiển lập trình vi mô

Trong loại này, kho lưu trữ điều khiển được sử dụng để lưu trữ các tín hiệu điều khiển được mã hóa trong quá trình thực hiện một chương trình. Tín hiệu điều khiển không được tạo ra và giải mã ngay lập tức vì chương trình vi mô lưu trữ trường địa chỉ trong kho điều khiển. Toàn bộ quá trình là một cấp độ duy nhất.

Các hoạt động vi mô được thực hiện để thực hiện các lệnh vi mô trong chương trình. Sơ đồ khối của bộ điều khiển lập trình Micro được hiển thị ở trên. Từ sơ đồ, địa chỉ của lệnh vi mô được lấy từ thanh ghi địa chỉ bộ nhớ điều khiển. Tất cả thông tin của thiết bị điều khiển được lưu trữ vĩnh viễn trong bộ nhớ điều khiển được gọi là ROM.

Bộ điều khiển dựa trên vi lập trình

Bộ điều khiển dựa trên vi lập trình

Lệnh vi mô từ bộ nhớ điều khiển được giữ bởi thanh ghi điều khiển. Vì lệnh vi mô ở dạng từ điều khiển (chứa các giá trị điều khiển nhị phân) nên cần 1 hoặc nhiều hoạt động vi mô được thực hiện để xử lý dữ liệu.

Trong quá trình thực thi các lệnh vi mô, bộ tạo địa chỉ tiếp theo tính toán địa chỉ tiếp theo của lệnh vi mô và sau đó gửi đến thanh ghi địa chỉ điều khiển để đọc lệnh vi mô tiếp theo.
Trình tự các hoạt động vi mô của một chương trình vi mô được thực hiện bởi bộ tạo địa chỉ tiếp theo và hoạt động như bộ trình tự vi chương trình để lấy địa chỉ trình tự tức là đọc từ bộ nhớ điều khiển.

Mã Verilog cho Thiết bị Điều khiển

Mã Verilog cho Thiết bị Điều khiển được hiển thị bên dưới.

`bao gồm“ prj_definition.v ”

mô-đun 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, RFST_DATA_RES2, RFST_DATA_RES2, RFST_DATA_RES1, RFST_DATA_RES2, RFST

// Tín hiệu đầu ra
// Kết quả đầu ra cho tệp đăng ký

đầu ra [`DATA_INDEX_LIMIT: 0] RF_DATA_W
đầu ra [`ADDRESS_INDEX_LIMIT: 0] RF_ADDR_W, RF_ADDR_R1, RF_ADDR_R2
đầu ra RF_READ, RF_WRITE

// Kết quả đầu ra cho ALU
đầu ra [`DATA_INDEX_LIMIT: 0] ALU_OP1, ALU_OP2
đầu ra [`ALU_OPRN_INDEX_LIMIT: 0] ALU_OPRN

// Kết quả đầu ra cho bộ nhớ
đầu ra [`ADDRESS_INDEX_LIMIT: 0] MEM_ADDR
đầu ra MEM_READ, MEM_WRITE

// Tín hiệu đầu vào
đầu vào [`DATA_INDEX_LIMIT: 0] RF_DATA_R1, RF_DATA_R2, ALU_RESULT
đầu vào ZERO, CLK, RST

// Inout signal
inout [`DATA_INDEX_LIMIT: 0] MEM_DATA

// Lưới trạng thái
wire [2: 0] proc_state

// giữ giá trị bộ đếm chương trình, lưu trữ lệnh hiện tại, thanh ghi con trỏ ngăn xếp

đăng ký MEM_READ, MEM_WRITE
đăng ký MEM_ADDR
reg ALU_OP1, ALU_OP2
reg ALU_OPRN
reg RF_ADDR_W, RF_ADDR_R1, RF_ADDR_R2
reg RF_DATA_W
trạng thái reg [1: 0], next_state

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

always @ (posedge CLK)
bắt đầu
nếu (RST)
tiểu bang<= RST
khác
tiểu bang<= next_state

kết thúc

luôn luôn @ (trạng thái)
bắt đầu

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

trường hợp (trạng thái)

`PROC_FETCH: bắt đầu
next_state = `PROC_DECODE
MEM_READ = 1’b1
RF_ADDR_R1 = 1’b0 RF_ADDR_R2 = 1’b0
RF_ADDR_W = 1’b1
kết thúc

`PROC_DECODE: bắt đầu
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
kết thúc

`PROC_EXE: bắt đầu
next_state = `PROC_MEM
ALU_OP1 = 1’b1 ALU_OP2 = 1’b1 ALU_OPRN = 1’b1
RF_ADDR_R1 = 1’b0
kết thúc

`PROC_MEM: bắt đầu
next_state = `PROC_WB
MEM_READ = 1’b1 MEM_WRITE = 1’b0
kết thúc

`PROC_WB: bắt đầu
next_state = `PROC_FETCH
MEM_READ = 1’b1 MEM_WRITE = 1’b0
kết thúc
endcase

kết thúc
endmodule

mô-đun PROC_SM (STATE, CLK, RST)
// danh sách các đầu vào
đầu vào CLK, RST
// danh sách kết quả đầu ra
đầu ra [2: 0] STATE

// danh sách đầu vào
đầu vào CLK, RST
// danh sách đầu ra
đầu ra STATE

reg [2: 0] STATE
trạng thái reg [1: 0]
reg [1: 0] next_state

reg PC_REG, INST_REG, SP_REF

`xác định PROC_FETCH 3’h0
`xác định PROC_DECODE 3’h1
`xác định PROC_EXE 3’h2
`xác định PROC_MEM 3’h3
`xác định PROC_WB 3’h4

// bắt đầu trạng thái
ban đầu
bắt đầu
trạng thái = 2’bxx
next_state = `PROC_FETCH
kết thúc

// đặt lại xử lý tín hiệu
always @ (posedge RST)
bắt đầu
trạng thái = `PROC_FETCH
next_state = `PROC_FETCH
kết thúc
always @ (posedge CLK)
bắt đầu
state = next_state
kết thúc
luôn luôn @ (trạng thái)
bắt đầu
if (trạng thái === `PROC_FETCH)
bắt đầu
next_state = `PROC_DECODE

print_instruction (INST_REG)
kết thúc

if (trạng thái === `PROC_DECODE)
bắt đầu
next_state = `PROC_EXE

kết thúc

if (trạng thái === `PROC_EXE)
bắt đầu
next_state = `PROC_MEM

print_instruction (SP_REF)
kết thúc

if (trạng thái === `PROC_MEM)
bắt đầu
next_state = `PROC_WB

kết thúc

if (trạng thái === `PROC_WB)
bắt đầu
next_state = `PROC_FETCH

print_instruction (PC_REG)
kết thúc
kết thúc

task print_instruction

đầu vào [`DATA_INDEX_LIMIT: 0] inst

mã opcode reg [5: 0]
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] ngay lập tức địa chỉ

bắt đầu

// phân tích cú pháp lệnh
// Kiểu R

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

// I-type
{opcode, rs, rt, ngay} = inst
// Kiểu chữ J
{opcode, address} = inst
$ write (“@% 6dns -> [0X% 08h]“, $ time, inst)
case (opcode) // R-Type
6'h00: bắt đầu
trường hợp (chức năng)

6 giờ 20: $ ghi (“thêm 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 (“và r [% 02d], r [% 02d], r [% 02d]”, rs, rt, rd)
6 giờ 25: $ ghi (“hoặc r [% 02d], r [% 02d], r [% 02d]”, rs, rt, rd)
6’h27: $ write (“cũng không phải r [% 02d], r [% 02d], r [% 02d]”, rs, rt, rd)
6’h2a: $ write (“slt r [% 02d], r [% 02d], r [% 02d]”, rs, rt, rd)
6 giờ 00: $ 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)
mặc định: $ write (“”)
endcase
kết thúc

// I-type

6’h08: $ write (“add r [% 02d], r [% 02d], 0X% 04h”, rs, rt, ngay lập tức)
6’h1d: $ write (“muli r [% 02d], r [% 02d], 0X% 04h”, rs, rt, ngay lập tức)
6’h0c: $ write (“andi r [% 02d], r [% 02d], 0X% 04h”, rs, rt, ngay lập tức)
6’h0d: $ write (“ori r [% 02d], r [% 02d], 0X% 04h”, rs, rt, ngay lập tức)
6’h0f: $ write (“lui r [% 02d], 0X% 04h”, rt, ngay lập tức)
6’h0a: $ write (“slti r [% 02d], r [% 02d], 0X% 04h”, rs, rt, ngay lập tức)
6’h04: $ write (“beq r [% 02d], r [% 02d], 0X% 04h”, rs, rt, ngay lập tức)
6 giờ 05: $ ghi (“bne r [% 02d], r [% 02d], 0X% 04h”, rs, rt, ngay lập tức)
6’h23: $ write (“lw r [% 02d], r [% 02d], 0X% 04h”, rs, rt, ngay lập tức)
6’h2b: $ write (“sw r [% 02d], r [% 02d], 0X% 04h”, rs, rt, ngay lập tức)

// Loại J

6’h02: $ write (“jmp 0X% 07h”, địa chỉ)
6’h03: $ write (“jal 0X% 07h”, địa chỉ)
6’h1b: $ write (“đẩy”)
6’h1c: $ write (“pop”)
mặc định: $ write (“”)
endcase
$ write (“ n”)
kết thúc
kết thúc nhiệm vụ
mô-đun kết thúc

Câu hỏi thường gặp

1). Công việc của một đơn vị điều khiển là gì?

Công việc của khối điều khiển là định hướng luồng dữ liệu hoặc hướng dẫn thực hiện bởi bộ xử lý của máy tính. Nó điều khiển, quản lý và điều phối bộ nhớ chính, ALU, thanh ghi, các đơn vị đầu vào và đầu ra. Nó tìm nạp các hướng dẫn và tạo ra các tín hiệu điều khiển để thực hiện.

2). Bộ nhớ điều khiển là gì?

Bộ nhớ điều khiển thường là RAM hoặc ROM để lưu địa chỉ và dữ liệu của thanh ghi điều khiển.

3). Bộ điều khiển Wilkes là gì?

Tuần tự và mạch tổ hợp của bộ điều khiển có dây cứng được thay thế bằng bộ điều khiển Wilkes. Nó sử dụng một bộ lưu trữ để lưu trữ các chuỗi lệnh của một chương trình vi mô.

4). Thiết bị điều khiển có dây cứng là gì?

Bộ điều khiển có dây cứng tạo ra các tín hiệu điều khiển bằng cách thay đổi từ trạng thái này sang trạng thái khác trong mỗi xung đồng hồ mà không có bất kỳ thay đổi vật lý nào trong mạch. Việc tạo ra các tín hiệu điều khiển phụ thuộc vào thanh ghi lệnh, bộ giải mã và tín hiệu ngắt.

5). Bộ nhớ điều khiển là gì?

Thông tin của khối điều khiển hoặc dữ liệu được lưu trữ tạm thời hoặc vĩnh viễn trong bộ nhớ điều khiển.
Bộ nhớ điều khiển có hai loại. Đó là Bộ nhớ truy cập ngẫu nhiên (RAM) và Bộ nhớ chỉ đọc (ROM).

Vì vậy, đây là tất cả về định nghĩa, thành phần, thiết kế, sơ đồ, chức năng và các loại thiết bị điều khiển . Đây là một câu hỏi dành cho bạn, 'Mục đích của thanh ghi địa chỉ điều khiển là gì?'