工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial Internet of Things >> 埋め込み

コントロールユニットとは:コンポーネントとその設計

制御装置は、コンピューターの中央処理装置(CPU)の主要コンポーネントであり、プロセッサー/コンピューターによるプログラムの実行中に操作を指示できます。コントロールユニットの主な機能は、コンピュータのメモリから命令をフェッチして実行することです。ユーザーから入力命令/情報を受け取り、それを制御信号に変換し、CPUに渡してさらに実行します。これは、ジョンノイマンによって開発されたフォンノイマンアーキテクチャの一部として含まれています。タイミング信号と制御信号を提供し、CPUによるプログラムの実行を指示します。これは、最近のコンピューターのCPUの内部部分として含まれています。この記事では、コントロールユニットに関する完全な情報について説明します。


コントロールユニットとは何ですか?

ユーザーからの入力信号/情報/命令を受信し、CPUで実行するための制御信号に変換するコンポーネント。これは、メインメモリ、算術論理演算装置(ALU)、入力および出力デバイスを制御および指示し、コンピュータのCPUに送信される命令にも責任を負います。プロセッサのメインメモリから命令をフェッチし、レジスタの内容を含むプロセッサ命令レジスタに送信します。

コントロールユニットブロック図

制御ユニットは、入力を制御信号に変換してからプロセッサに送信し、プログラムの実行を指示します。実行する必要のある操作は、コンピューター上のプロセッサーによって指示されます。主に中央処理装置(CPU)とグラフィック処理装置(GPU)は、内部部品として制御装置を必要とします。コントロールユニットのブロック図を上に示します。

コントロールユニットのコンポーネント

このユニットのコンポーネントは、命令レジスタ、CPU内の制御信号、バスとの間の制御信号、制御バス、入力フラグ、およびクロック信号です。

ハードワイヤード制御ユニットのコンポーネントは、命令レジスタ(オペコードとアドレスフィールドを含む)、タイミングユニット、制御状態ジェネレータ、制御信号生成マトリックス、および命令デコーダです。
マイクロプログラム制御ユニットのコンポーネントは、次のアドレスです。ジェネレータ、制御アドレスレジスタ、制御メモリ、および制御データレジスタ。

機能

コントロールユニットの機能 以下を含めてください。

コントロールユニットの設計

この設計は、2つのタイプのコントロールユニットを使用して行うことができます。 これには次のものが含まれます。

ハードワイヤードコントロールユニット

ハードワイヤードコントロールユニットの基本設計は上に示されています。このタイプでは、制御信号は、回路の構造を変更することなく、特別なハードウェア論理回路によって生成されます。この場合、生成された信号を変更してプロセッサで実行することはできません。

オペコードの基本データ(命令の操作コードは、デコードのために命令デコーダーに送信されます。命令デコーダーは、オペコード内のさまざまなタイプのデータをデコードするデコーダーのセットです。これにより、アクティブな信号の値を含む出力信号が生成されます。これは、コンピューターのプロセッサーによるプログラムの実行のための制御信号を生成するためのマトリックスジェネレーターへの入力として与えられます。

ハードワイヤーベースコントロールユニット

マトリックスジェネレータは、制御ユニットの状態とプロセッサから出力される信号(割り込み信号)を提供します。マトリックスは、プログラマブルロジックアレイとして構築されています。行列生成器によって生成された制御信号は、次の生成行列への入力として与えられ、長方形のパターンを含むタイミングユニットのタイミング信号と結合されます。

新しい命令をフェッチするために、コントロールユニットは新しい命令を実行するための初期段階になります。制御ユニットは、タイミング信号、入力信号、およびコンピュータの命令状態が変化しない限り、初期段階または第1段階に留まります。生成された信号のいずれかに変化があった場合、コントロールユニットの状態の変化を上げることができます。

外部信号または割り込みが発生すると、コントロールユニットは次の状態になり、割り込み信号の処理を実行します。フラグと状態は、命令の実行サイクルを実行するために必要な状態を選択するために使用されます。


最後の状態では、制御ユニットは次の命令をフェッチし、出力をプログラムカウンターに送信し、次にメモリアドレスレジスタ、バッファレジスタ、次に命令レジスタに送信して命令を読み取ります。最後に、最後の命令(コントロールユニットによってフェッチされる)が終了命令である場合、それはプロセッサの動作状態になり、ユーザーが次のプログラムを指示するまで待機します。

マイクロプログラム制御ユニット

このタイプでは、制御ストアは、プログラムの実行中にエンコードされる制御信号を格納するために使用されます。マイクロプログラムはアドレスフィールドを制御ストアに格納するため、制御信号はすぐには生成されず、デコードされません。プロセス全体が単一のレベルです。

マイクロオペレーションは、プログラム内のマイクロ命令を実行するために実行されます。マイクロプログラム制御ユニットのブロック図を上に示します。この図から、マイクロ命令のアドレスは制御メモリアドレスレジスタから取得されます。コントロールユニットのすべての情報は、ROMと呼ばれるコントロールメモリに永続的に保存されます。

マイクロプログラムベースコントロールユニット

制御メモリからのマイクロ命令は、制御レジスタによって保持されます。マイクロ命令は制御ワード(バイナリ制御値を含む)の形式であるため、データ処理のために1つ以上のマイクロ操作を実行する必要があります。

マイクロ命令の実行中に、次のアドレスジェネレータがマイクロ命令の次のアドレスを計算し、次に制御アドレスレジスタに送信して次のマイクロ命令を読み取ります。
マイクロのマイクロ操作のシーケンス-プログラムは次のアドレスジェネレータによって実行され、マイクロプログラムシーケンサとして機能して、シーケンスアドレスを取得します。つまり、制御メモリから読み取ります。

コントロールユニットの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_OPRN、MEM_ADDR、MEM_READ、MEM_WRITE、RF_DATA_R1、RF_DATA_R2、ALU_RES

//出力信号
//レジスタファイルの出力

出力[`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の出力
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シグナル
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]状態、next_state;

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

常に@(posedge CLK)
begin
if(RST)
state <=RST;
else
state <=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: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);
//入力のリスト
入力CLK、RST;
//出力のリスト
出力[2:0] STATE;

//入力リスト
入力CLK、RST;
//出力リスト
出力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

//状態の開始
初期
開始
状態=2’bxx;
next_state =`PROC_FETCH;
終了

//信号処理をリセット
常に@(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;

終了

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

print_instruction(SP_REF);
end

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

終了

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

print_instruction(PC_REG);
end
end

タスクprint_instruction;

input [`DATA_INDEX_LIMIT:0] inst;

reg [5:0]オペコード;
reg [4:0] rs;
reg [4:0] rt;
reg [4:0] rd;
reg [ 4:0]シャムト; reg [5:0]関数; reg [15:0]即時; reg [25:0]アドレス;

開始

//命令を解析します
// 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(“または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タイプ

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 、即時);
6'h05:$ write(“ bne r [%02d]、r [%02d]、0X%04h;”、rs、rt、即時);
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タイプ

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)。制御メモリとは何ですか?

コントロールユニットの情報やデータは、一時的または恒久的にコントロールメモリに保存されます。
コントロールメモリには2種類あります。それらは、ランダムアクセスメモリ(RAM)と読み取り専用メモリ(ROM)です。

したがって、これはすべて、コントロールユニットの定義、コンポーネント、設計、図、機能、およびタイプに関するものです。 「制御アドレスレジスタの目的は何ですか?」という質問があります。


埋め込み

  1. コントロールユニットとは:コンポーネントとその設計
  2. 組み込みシステムプログラミングとその言語とは
  3. オペレーティングシステムとそのコンポーネントとは
  4. 数値制御[NC]とは何ですか?
  5. コントロールパネルの設計の基本
  6. ケブラーとは何ですか?ショートガイド
  7. アーキテクチャ設計とは?
  8. マイクロエレクトロニクスとは?
  9. 品質管理とは?
  10. 3D プリント:機械加工と工業デザインへの影響は?
  11. 工業デザインのプロトタイピングとは?