什么是控制单元:部件及其设计
控制单元是计算机中中央处理单元(CPU)的主要组件,它可以在处理器/计算机执行程序期间指导操作。控制单元的主要功能是获取和执行。。。
控制单元是计算机中中央处理单元(CPU)的主要组件,它可以在处理器/计算机执行程序期间指导操作。控制单元的主要功能是从计算机的存储器中获取并执行指令。它接收来自用户的输入指令/信息,并将其转换为控制信号,然后将其提供给CPU以供进一步执行。它是约翰·诺依曼开发的冯·诺依曼体系结构的一部分。它负责提供定时信号和控制信号,并指导CPU执行程序。在现代计算机中,它是CPU的内部部件。本文介绍了有关控制单元的完整信息。
什么是控制单元?
接收来自用户的输入信号/信息/指令并转换为控制信号以在CPU中执行的组件。它控制和指导主存储器、算术逻辑单元(ALU)、输入和输出设备,还负责发送到计算机CPU的指令。它从处理器的主存储器中获取指令,并将其发送到处理器指令寄存器,该寄存器包含寄存器内容。
控制单元将输入转换为控制信号,然后发送到处理器并指导程序的执行。必须执行的操作由计算机上的处理器指导。主要是中央处理单元(CPU)和图形处理单元(GPU)需要控制单元作为内部部件。控制单元的框图如上图所示。
控制单元的组件
该单元的组件是指令寄存器、CPU内的控制信号、去往/来自总线的控制信号,控制总线、输入标志和时钟信号。
硬接线控制单元的组件是指令寄存器(包含操作码和地址字段)、定时单元、控制状态生成器、控制信号生成矩阵和指令解码器。
微编程控制单元的组件是下一个地址生成器、控制地址寄存器、控制存储器和控制数据寄存器。
功能
这个控制单元的功能包括以下内容。
- 它指导处理器和其他设备之间的数据序列流。
- 它可以解释指令并控制处理器中的数据流。
- 它根据从指令寄存器接收的指令或命令生成控制信号序列。
- 它有责任控制计算机CPU中的执行单元,如ALU、数据缓冲器和寄存器。
- 它具有获取、解码、处理执行和存储结果的能力。
- 它无法处理和存储数据
- 为了传输数据,它与输入和输出设备通信,并控制计算机的所有单元。
控制单元的设计
这个设计可以使用两个控制单元的类型包括以下内容。
- 基于硬接线
- 基于微程序设计(单级和两级)
硬接线控制单元
硬接线控制单元的基本设计如上所示。在这种类型中,控制信号由特殊的硬件逻辑电路产生,而电路的结构没有任何变化。在这种情况下,生成的信号不能被修改以在处理器中执行。
操作码的基本数据(指令的操作码被发送到指令解码器进行解码。指令解码器是一组解码器,用于解码操作码中的不同类型的数据。这会产生包含有效信号值的输出信号,这些有效信号值被作为矩阵生成器的输入,以生成计算机处理器执行程序的控制信号。

矩阵生成器提供控制单元的状态和处理器输出的信号(中断信号)。矩阵被构建为可编程逻辑阵列。由矩阵生成器生成的控制信号被作为下一个生成器矩阵的输入,并且与包含矩形图案的定时单元的定时信号组合。
为了获取新指令,控制单元进入执行新指令的初始阶段。只要计算机的定时信号、输入信号和指令状态不变,控制单元就保持在初始阶段或第一阶段。如果所产生的任何信号发生任何变化,则可以引起控制单元的状态变化。
当外部信号或中断发生时,控制单元进入下一状态并执行中断信号的处理。标志和状态用于选择所需的状态以执行指令的执行周期。
在最后一种状态下,控制单元获取下一条指令,并将输出发送到程序计数器,然后发送到存储器地址寄存器,发送到缓冲寄存器,再发送到指令寄存器以读取指令。最后,如果最后一条指令(由控制单元获取)是结束指令,则它进入处理器的操作状态并等待,直到用户指示下一个程序。
微程序控制单元
在这种类型中,控制存储器用于存储在程序执行期间编码的控制信号。由于微程序将地址字段存储在控制存储器中,所以控制信号不会立即产生并解码。整个过程是一个单一的层次。
微操作是为了执行程序中的微指令而进行的。上面显示了微编程控制单元的框图。从该图中,微指令的地址是从控制存储器地址寄存器中获得的。控制单元的所有信息都永久存储在称为ROM的控制存储器中。

来自控制存储器的微指令由控制寄存器保持。由于微指令是控制字(包含二进制控制值)的形式,因此需要为数据处理执行1个或多个微操作。
在执行微指令期间,下一地址生成器计算微指令的下一地址,然后发送到控制地址寄存器以读取下一微指令。
微程序的微操作序列由下一个地址生成器执行,并充当微程序定序器以获得序列地址,即从控制存储器读取。
控制单元的Verilog代码
控制单元的Verilog代码如下所示。
`包括“prj_definition.v”
模块CONTROL_UNIT(MEM_DATA、RF_DATA_W、RF_ADDR_W、RF _ADDR_R1、RF_ADR_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)
//输出信号
//寄存器文件的输出
输出[`DATA_INDEX_LIMIT:0]RF_DATA_W;
输出[`ADDRESS_INDEX_LIMIT:0]RF_ADDR_W、RF_ADDR_R1、RF_ADR_R2;
输出RF_READ、RF_WRITE;
//ALU的输出
输出[`DATA_INDEX_LIMIT:0]ALU_OP1、ALU_OP2;
输出[`ALU_OPRN_INDEX_LIMIT:0]ALU_OPRN;
//内存输出
输出[`ADDRESS_IDEX_LIMIT:0]MEM_ADDR;
输出MEM_READ、MEM_WRITE;
//输入信号
输入[`DATA_INDEX_LIMIT:0]RF_DATA_R1、RF_DATA_R2、ALU_RESULT;
输入ZERO、CLK、RST;
//Inout信号
inout[`DATA_INDEX_LIMIT:0]内存数据;
//国家网络
连线[2:0]进程状态;
//保存程序计数器值,存储当前指令,堆栈指针寄存器
寄存器MEM_READ、MEM_WRITE;
寄存器MEM_ADDR;
寄存器ALU_OP1、ALU_OP2;
寄存器ALU_OPRN;
寄存器RF_ADDR_W、RF_ADDR_R1、RF_ADDR_R2;
寄存器RF_DATA_W;
reg[1:0]状态,next_state;
PROC_SM state_machine(.state(PROC_state)、.CLK(CLK)、.RST(RST));
始终@(姿态边缘CLK)
开始
如果(RST)
状态<=RST;
其他的
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;
终止
端盖
终止
端模;
模块PROC_SM(STATE、CLK、RST);
//输入列表
输入CLK、RST;
//输出列表
输出[2:0]STATE;
//输入列表
输入CLK、RST;
//输出列表
输出STATE;
reg[2:0]状态;
reg[1:0]状态;
reg[1:0]下一个状态;
寄存器PC_reg、INST_reg、SP_REF;
`定义PROC_FETCH 3'00
`定义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;
终止
始终@(姿态边缘CLK)
开始
state=下一个状态;
终止
始终@(状态)
开始
如果(状态===`PROC_FETCH)
开始
next_state=`PROC_DECODE;
打印指令(INST_REG);
终止
如果(state==`PROC_DECODE)
开始
next_state=`PROC_EXE;
终止
如果(状态===`PROC_EXE)
开始
next_state=`PROC_MEM;
打印指令(SP_REF);
终止
如果(状态===`PROC_MEM)
开始
next_state=`PROC_WB;
终止
如果(状态===`PROC_WB)
开始
next_state=`PROC_FETCH;
打印指令(PC_REG);
终止
终止
任务打印指令;
输入[`DATA_INDEX_LIMIT:0]inst;
reg[5:0]操作码;
注册[4:0]rs;
注册[4:0]rt;
注册[4:0]rd;
注册[4:0]羞辱;reg[5:0]函数;reg[15:0]立即;注册[25:0]地址;
开始
//解析指令
//R型
{操作码,rs,rt,rd,shamt,funct}=指令;
//I型
{操作码,rs,rt,immediate}=指令集;
//J型
{操作码,地址}=指令;
$write(“@%6dns->[0X%08h]”,$time,inst);
大小写(操作码)//R-类型
6点:开始
大小写(函数)
6'h20:$write(“添加r[%02d],r[%02d],r[%2d];”,rs,rt,rd);
6'h22:$write(“子r[%02d],r[%02d],r[%2d];”,rs,rt,rd);
6'h2c:$write(“mul r[%02d],r[%02d],r[%2d];”,rs,rt,rd);
6'h24:$write(“和r[%02d],r[%02d],r[%2d];”,rs,rt,rd);
6'h25:$write(“或r[%02d],r[%02d],r[%2d];”,rs,rt,rd);
6'h27:$write(“nor r[%02d],r[%02d],r[%2d];”,rs,rt,rd);
6'h2a:$write(“slt r[%02d],r[%02d],r[%2d];”,rs,rt,rd);
6'000:$write(“sll r[%02d],%2d,r[%02d];”,rs,shamt,rd);
6'h02:$write(“srl r[%02d],0X%02h,r[%02d];”,rs,shamt,rd);
6'08:$write(“jr r[%02d];”,rs);
默认值:$write(“”);
端盖
终止
//I型
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'00c:$write(“andi r[%02d],r[%02d],0X%04h;”,rs,rt,立即数);
6'00d:$write(“ori r[%02d],r[%02d],0X%04h;”,rs,rt,立即数);
6'hof:$write(“lui r[%02d],0X%04h;”,rt,立即);
6'00a:$write(“slti r[%02d],r[%02d],0X%04h;”,rs,rt,立即数);
6'004:$write(“beq r[%02d],r[%02d],0X%04h;”,rs,rt,立即数);
6'005:$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). 威尔克斯控制单元是什么?
硬接线控制单元的顺序电路和组合电路由威尔克斯控制单元代替。它使用存储单元来存储微程序的指令序列。
4). 什么是硬接线控制单元?
硬连线控制单元通过在每个时钟脉冲中从一种状态改变到另一种状态来产生控制信号,而电路中没有任何物理变化。控制信号的产生取决于指令寄存器、解码器和中断信号。
5). 什么是控制内存?
控制单元的信息或数据被临时或永久地存储在控制存储器中。
控制内存有两种类型。它们是随机存取存储器(RAM)和只读存储器(ROM)。
因此,这一切都与控制单元的定义、组件、设计、图表、功能和类型有关。这里有一个问题,“控制地址寄存器的用途是什么?”