什么是控制单元:组件及其设计

控制单元是计算机中的中央处理单元(CPU)的主要组件,可以在执行程序期间指导操作处理器/电脑。控制单元的主要功能是从计算机的存储器中获取和执行指令。它从用户接收输入指令/信息并将其转换为控制信号,然后给予CPU以进一步执行。它包含在John Neumann开发的von Neumann架构的一部分。它负责提供定时信号和控制信号并通过CPU执行程序的执行。它包含在现代计算机中CPU的内部部分。本文介绍了有关控制单元的完整信息。

什么是控制单元?

从用户接收输入信号/信息/指令并转换为CPU中执行的控制信号的组件。它控制并指导主存储器,算术和逻辑单元(ALU),输入和输出设备,也负责发送到计算机CPU的指令。它从中获取了指示主记忆处理器并发送到处理器指令寄存器,其中包含寄存器内容。


控制单元框图
控制单元框图

控制单元将输入转换为控制信号,然后发送到处理器并指示程序的执行。必须执行的操作由计算机上的处理器引导。主要是中央处理单元(CPU)和图形处理单元(GPU)要求控制单元作为内部部分。上面示出了控制单元的框图。

控制单元的组件

本机的组件是指令寄存器,CPU内的控制信号,控制信号到/来自总线,控制总线,输入标志和时钟信号。

硬连线控制单元的组件是指令寄存器(包含操作码和地址字段),定时单元,控制状态发电机,控制信号生成矩阵和指令解码器。
微编程控制单元的组件是下一个地址发生器,控制地址寄存器,控制存储器和控制数据寄存器。

职能

控制单元的功能包括以下这些。


  • 它引导处理器和其他设备之间的数据序列流。
  • 它可以解释指令并控制处理器中的数据流。
  • 它从来自指令寄存器的接收指令或命令生成控制信号的序列。
  • 它有责任控制计算机的CPU中的执行单元,如ALU,数据缓冲区和寄存器。
  • 它有能力获取,解码,处理执行和存储结果。
  • 它无法处理和存储数据
  • 要传输数据,它会与输入和输出设备通信,并控制计算机的所有单元。

控制单元设计

这可以使用两个控制单元的类型其中包括以下内容。

  • 硬连线基
  • 基于微生物(单级和两级)

硬连线控制单元

硬连线控制单元的基本设计如上所示。在这种类型中,控制信号由特殊硬件生成逻辑电路没有电路结构的任何变化。在此,不能修改生成的信号以便在处理器中执行。

操作码的基本数据(指令的操作代码被发送到指令解码器以进行解码。指令解码器是解码OPCODE中的不同类型数据的解码器集。这导致输出信号包含作为矩阵发生器的输入给出的活动信号的值,以通过计算机的处理器生成用于执行程序的控制信号。

基于HardWire的控制单元
基于HardWire的控制单元

矩阵发生器提供控制单元的状态和从处理器(中断信号)输出的信号。矩阵是建立的可编程逻辑阵列。由矩阵发生器生成的控制信号作为输入到下一个发生器矩阵的输入,并与包含矩形图案的定时单元的定时信号组合。

为了获取新指令,控制单元将变为初始阶段,以执行新指令。只要定时信号,输入信号和计算机的指令状态不变,控制单元保持在初始阶段或第一阶段。如果任何生成的信号中有任何变化,则可以提高控制单元的状态的变化。

当发生外部信号或中断时,控制单元进入下一个状态并执行中断信号的处理。标志和状态用于选择所需的状态以执行指令的执行周期。

在最后一个状态下,控制单元获取下一个指令并将输出发送到程序计数器,然后将输出发送到存储器地址寄存器到缓冲寄存器,然后到指令寄存器读取指令。最后,如果最后一个指令(由控制单元获取)是结束指令,则它进入处理器的操作状态,并等待直到用户指示下一个程序。

微型编程控制单元

在这种类型中,控制存储器用于存储在执行程序期间编码的控制信号。由于微生物图在控制商店中存储地址字段,因此不会立即生成并解码控制信号。整个过程是单一级别。

进行微型操作以执行程序中的微型指令。上面示出了微编程控制单元的框图。从图中,从控制存储器地址寄存器获得微指令的地址。控制单元的所有信息永久存储在名为ROM的控制存储器中。

基于微生物的控制单元
基于微生物的控制单元

来自控制存储器的微指令由控制寄存器保持。由于微指令以控制字(包含二进制控制值)的形式,因此需要对数据处理执行1或更多微型操作。

在执行微型指令期间,下一个地址发生器计算了微指令的下一个地址,然后发送到控制地址寄存器以读取下一个微指令。
微程的微程序列由下一个地址发生器执行,并充当微集形记录器以获取序列地址I.E.,从控制存储器读取。

控制单元的Verilog代码

控制单元的Verilog代码如下所示。

`包括“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_opn,mem_addr,mem_read,mem_adrite,rf_data_r1,rf_data_r2,alu_result,Zero,Clk,RST)

//输出信号
//寄存器文件的输出

输出[`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_prn_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;
输入零,CLK,RST;

// Insut信号
Inout [`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));

总是@(提出包装)
开始
if(rst)
state <= RST;
其他
state <= next_state;

结束

总是@(州)
开始

mem_read = 1'b0;mem_write = 1'b0;mem_addr = 1'b0;
ALU_OP1 = 1'B0;ALU_OP2 = 1'B0;Alu_Aprn = 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_Aprn = 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_Aprn = 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;
结束
终结

结束
末端;

模块proc_sm(州,clk,第一个);
//输入列表
输入CLK,RST;
//输出列表
输出[2:0]状态;

//输入列表
输入CLK,RST;
//输出列表
输出状态;

reg [2:0]状态;
reg [1:0]状态;
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

//启动国家
初始
开始
州= 2'bxx;
next_state =`proc_fetch;
结束

//重置信号处理
总是@(Posedge RST)
开始
state =`proc_fetch;
next_state =`proc_fetch;
结束
总是@(提出包装)
开始
state = next_state;
结束
总是@(州)
开始
if(state ===`proc_fetch)
开始
next_state =`proc_decode;

print_instruction(inst_reg);
结束

if(state ===`proc_decode)
开始
next_state =`proc_exe;

结束

if(state ===`proc_exe)
开始
next_state =`proc_mem;

print_instruction(sp_ref);
结束

if(state ===`proc_mem)
开始
next_state =`proc_wb;

结束

if(state ===`proc_wb)
开始
next_state =`proc_fetch;

print_instruction(pc_reg);
结束
结束

任务print_instruction;

输入[`data_index_limit:0] inst;

reg [5:0]操作码;
reg [4:0]卢比;
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,Shmt,Funct} = Inst;

// i-type
{Opcode,RS,RT,即时} = Inst;
// j型
{OPCODE,地址} = INST;
$ write(“@%6dns - > [0x%08h]”,$ time,Inst);
案例(操作码)// r型
6'H00:开始
案例(Funct)

6'H20:$ write(“添加r [%02d],r [%02d],r [%02d];”,RS,RT,RD);
6'h22:$ write(“子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(“和r [%02d],r [%02d],r [%02d];”,RS,RT,RD);
6'h25:$ write(“或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);
默认值:$ write(“”);
终结
结束

// i-type

6'h08:$ 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'h23:$ 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'h1b:$ write(“推动;”);
6'h1c:$ write(“pop;”);
默认值:$ write(“”);
终结
$ write(“\ n”);
结束
结束任务
结束模块;

常见问题解答

1)。控制单元的工作是什么?

控制单元的工作是通过计算机的处理器指导数据流或执行指令。它控制,管理和协调主存储器,ALU,寄存器,输入和输出单元。它获取指令并生成用于执行的控制信号。

2)。什么是控制记忆?

控制存储器通常是RAM或ROM以存储控制寄存器的地址和数据。

3)。什么是威尔克斯控制单元?

顺序和组合电路硬连线控制单元由Wilkes控制单元代替。它使用存储单元来存储微程的指令序列。

4)。什么是硬连线控制单元?

硬连线控制单元通过在每个时钟脉冲中从一个状态改变到另一个状态而没有电路中的任何物理变化,通过从一个状态改变来产生控制信号。控制信号的产生取决于指令寄存器,解码器和中断信号。

5)。什么是控制记忆?

控制单元或数据的信息暂时或永久地存储在控制存储器中。
控制内存具有两种类型。它们是随机存取存储器(RAM)和只读存储器(ROM)。

因此,这是关于定义,组件,设计,图表,功能和的控制单元的类型。这是一个问题,“控制地址寄存器的目的是什么?”

添加评论