ما هي وحدة التحكم: مكوناتها وتصميمها

جرب أداة القضاء على المشاكل





وحدة التحكم هي المكون الرئيسي لوحدة المعالجة المركزية (CPU) في أجهزة الكمبيوتر التي يمكنها توجيه العمليات أثناء تنفيذ البرنامج بواسطة المعالج /الحاسوب. تتمثل الوظيفة الرئيسية لوحدة التحكم في جلب التعليمات من ذاكرة الكمبيوتر وتنفيذها. يتلقى تعليمات الإدخال / المعلومات من المستخدم ويحولها إلى إشارات التحكم ، والتي يتم منحها بعد ذلك إلى وحدة المعالجة المركزية لمزيد من التنفيذ. تم تضمينه كجزء من عمارة فون نيومان التي طورها جون نيومان. وهي مسؤولة عن توفير إشارات التوقيت وإشارات التحكم وتوجيه تنفيذ البرنامج بواسطة وحدة المعالجة المركزية. يتم تضمينه كجزء داخلي من وحدة المعالجة المركزية في أجهزة الكمبيوتر الحديثة. توضح هذه المقالة معلومات كاملة حول وحدة التحكم.

ما هي وحدة التحكم؟

المكون الذي يستقبل إشارة الإدخال / المعلومات / التعليمات من المستخدم ويتحول إلى إشارات تحكم للتنفيذ في وحدة المعالجة المركزية. يتحكم ويوجه الذاكرة الرئيسية ووحدة الحساب والمنطق (ALU) وأجهزة الإدخال والإخراج ، كما أنه مسؤول عن التعليمات التي يتم إرسالها إلى وحدة المعالجة المركزية للكمبيوتر. يجلب التعليمات من الذاكرة الرئيسية من المعالج وإرساله إلى سجل تعليمات المعالج ، والذي يحتوي على محتويات السجل.




مخطط كتلة وحدة التحكم

مخطط كتلة وحدة التحكم

تقوم وحدة التحكم بتحويل الإدخال إلى إشارات تحكم ثم إرسالها إلى المعالج وتوجيه تنفيذ البرنامج. يتم توجيه العمليات التي يجب إجراؤها بواسطة المعالج الموجود على الكمبيوتر. وحدة المعالجة المركزية (CPU) و وحدة المعالجة الرسومية (GPU) تتطلب وحدة تحكم كجزء داخلي. يظهر الرسم التخطيطي لوحدة التحكم أعلاه.



مكونات وحدة التحكم

مكونات هذه الوحدة هي تعليمات السجلات ، وإشارات التحكم داخل وحدة المعالجة المركزية ، والتحكم في الإشارات من / إلى الحافلة ، وحافلة التحكم ، وأعلام الإدخال ، وإشارات الساعة.

مكونات وحدة التحكم Hardwired هي سجل التعليمات (يحتوي على رمز التشغيل وحقل العنوان) ، ووحدة التوقيت ، وحالة التحكم مولد كهرباء ، مصفوفة توليد إشارة التحكم ، وفك تشفير التعليمات.
مكونات وحدة التحكم المبرمجة Micro هي مولد العنوان التالي وسجل عنوان التحكم وذاكرة التحكم وسجل بيانات التحكم.

المهام

ال وظائف وحدة التحكم تشمل ما يلي.


  • يوجه تدفق تسلسل البيانات بين المعالج والأجهزة الأخرى.
  • يمكنه تفسير التعليمات والتحكم في تدفق البيانات في المعالج.
  • يولد تسلسل إشارات التحكم من التعليمات أو الأوامر المستلمة من سجل التعليمات.
  • تتحمل مسؤولية التحكم في وحدات التنفيذ مثل ALU ومخازن البيانات والسجلات في وحدة المعالجة المركزية للكمبيوتر.
  • لديه القدرة على جلب وفك تشفير ومعالجة التنفيذ وتخزين النتائج.
  • لا يمكن معالجة وتخزين البيانات
  • لنقل البيانات ، يتواصل مع أجهزة الإدخال والإخراج ويتحكم في جميع وحدات الكمبيوتر.

تصميم وحدة التحكم

يمكن تصميم هذا باستخدام اثنين أنواع وحدة التحكم والتي تشمل ما يلي.

  • هاردوير على أساس
  • تعتمد على البرمجة الدقيقة (مستوى واحد ومستوىان)

وحدة تحكم سلكية

يظهر التصميم الأساسي لوحدة التحكم السلكية أعلاه. في هذا النوع ، يتم إنشاء إشارات التحكم بواسطة جهاز خاص دائرة المنطق دون أي تغيير في هيكل الدائرة. في هذا ، لا يمكن تعديل الإشارة المولدة للتنفيذ في المعالج.

البيانات الأساسية لرمز التشغيل (يتم إرسال رمز التشغيل الخاص بالتعليمات إلى وحدة فك ترميز التعليمات لفك التشفير. التعليمات فك هي مجموعة من أجهزة فك التشفير لفك تشفير أنواع مختلفة من البيانات في كود التشغيل. ينتج عن ذلك إشارات خرج تحتوي على قيم للإشارات النشطة التي يتم تقديمها كمدخل لمولد المصفوفة لتوليد إشارات تحكم لتنفيذ برنامج بواسطة معالج الكمبيوتر.

وحدة التحكم القائمة على الأسلاك الصلبة

وحدة التحكم القائمة على الأسلاك الصلبة

يوفر مولد المصفوفة حالات وحدة التحكم والإشارات الخارجة من المعالج (إشارات المقاطعة). تم بناء ماتريكس باسم مجموعة منطق قابلة للبرمجة . يتم إعطاء إشارات التحكم التي تم إنشاؤها بواسطة مولد المصفوفة كمدخل لمصفوفة المولد التالية وتتحد مع إشارات التوقيت لوحدة التوقيت التي تحتوي على أنماط مستطيلة.

لجلب التعليمات الجديدة ، تتحول وحدة التحكم إلى مرحلة أولية لتنفيذ التعليمات الجديدة. تظل وحدة التحكم في المرحلة الأولية أو المرحلة الأولى طالما أن إشارات التوقيت وإشارات الإدخال وحالات تعليمات الكمبيوتر لم تتغير. يمكن رفع التغيير في حالة وحدة التحكم إذا كان هناك أي تغيير في أي من الإشارات المولدة.

عند حدوث إشارة خارجية أو مقاطعة ، تنتقل وحدة التحكم إلى الحالة التالية وتقوم بمعالجة إشارة المقاطعة. يتم استخدام الأعلام والحالات لتحديد الحالات المرغوبة لأداء دورة تنفيذ التعليمات.

في الحالة الأخيرة ، تجلب وحدة التحكم التعليمات التالية وترسل الإخراج إلى عداد البرنامج ، ثم إلى سجل عنوان الذاكرة ، إلى سجل المخزن المؤقت ، ثم إلى سجل التعليمات لقراءة التعليمات. أخيرًا ، إذا كانت التعليمات الأخيرة (التي تم جلبها بواسطة وحدة التحكم) هي التعليمات النهائية ، فإنها تنتقل إلى حالة تشغيل المعالج وتنتظر حتى يوجه المستخدم البرنامج التالي.

وحدة تحكم مبرمجة

في هذا النوع ، يتم استخدام مخزن التحكم لتخزين إشارات التحكم التي يتم تشفيرها أثناء تنفيذ البرنامج. لا يتم إنشاء إشارة التحكم على الفور وفك تشفيرها لأن البرنامج المصغر يخزن حقل العنوان في مخزن التحكم. العملية برمتها هي مستوى واحد.

تتم العمليات الدقيقة لتنفيذ التعليمات الدقيقة في البرنامج. يظهر الرسم التخطيطي لوحدة التحكم المبرمجة الدقيقة أعلاه. من الرسم التخطيطي ، يتم الحصول على عنوان التعليمات الدقيقة من سجل عنوان ذاكرة التحكم. يتم تخزين جميع معلومات وحدة التحكم بشكل دائم في ذاكرة التحكم تسمى ROM.

وحدة التحكم القائمة على البرمجة الدقيقة

وحدة التحكم القائمة على البرمجة الدقيقة

يتم الاحتفاظ بالتعليمات الدقيقة من ذاكرة التحكم بواسطة سجل التحكم. نظرًا لأن التعليمات الجزئية في شكل كلمة تحكم (تحتوي على قيم تحكم ثنائية) تحتاج إلى 1 أو أكثر من العمليات الصغيرة ليتم تنفيذها لمعالجة البيانات.

أثناء تنفيذ التعليمات المصغرة ، قام منشئ العنوان التالي بحساب العنوان التالي للتعليمات المصغرة ثم إرساله إلى سجل عنوان التحكم لقراءة التعليمات المصغرة التالية.
يتم تنفيذ تسلسل العمليات الصغيرة لبرنامج مصغر بواسطة مولد العنوان التالي ويعمل كمسلسِل برنامج صغير للحصول على عنوان التسلسل ، أي القراءة من ذاكرة التحكم.

كود فيريلوج لوحدة التحكم

يتم عرض رمز 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 ، RF2DURATA_

// إخراج الإشارات
// المخرجات لملف التسجيل

الإخراج [`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
إدخال صفر ، CLK ، RST

// إشارة Inout
دخل [`DATA_INDEX_LIMIT: 0] MEM_DATA

// شبكات الدولة
سلك [2: 0] proc_state

// يحمل قيمة عداد البرنامج ، يخزن التعليمات الحالية ، سجل مؤشر المكدس

reg MEM_READ ، MEM_WRITE
ريج MEM_ADDR
reg ALU_OP1 ، ALU_OP2
تسجيل ALU_OPRN
reg RF_ADDR_W ، RF_ADDR_R1 ، RF_ADDR_R2
ريج RF_DATA_W
reg [1: 0] state، next_state

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

دائما @ (posedge CLK)
يبدأ
إذا (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
نهاية
النهاية

نهاية
نهاية

وحدة PROC_SM (STATE ، CLK ، RST)
// قائمة المدخلات
إدخال CLK ، RST
// قائمة النواتج
الإخراج [2: 0] STATE

// قائمة الإدخال
إدخال CLK ، RST
// قائمة الإخراج
إخراج STATE

reg [2: 0] STATE
ريج [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
نهاية
دائما @ (الدولة)
يبدأ
إذا (الحالة === `PROC_FETCH)
يبدأ
next_state = `PROC_DECODE

print_instruction (INST_REG)
نهاية

إذا (الحالة === `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)
نهاية
نهاية

مهمة print_instruction

الإدخال [`DATA_INDEX_LIMIT: 0] inst

ريج [5: 0] كود التشغيل
ريج [4: 0] روبية
ريج [4: 0] RT
ريج [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

// انا اطبع
{opcode، rs، rt، Instant} = inst
// J- نوع
{كود التشغيل ، العنوان} = inst
$ write ('@٪ 6dns -> [0X٪ 08h]'، $ time، inst)
حالة (كود التشغيل) // R-Type
6'h00: ابدأ
حالة (وظيفة)

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 ('or r [٪ 02d]، r [٪ 02d]، r [٪ 02d]'، rs، rt، rd)
6’h27: $ write ('ولا 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 ('')
النهاية
نهاية

// انا اطبع

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 (“push”)
6’h1c: $ write (“pop”)
الافتراضي: $ write ('')
النهاية
$ write (' n')
نهاية
إنهاء المهمة
وحدة النهاية

أسئلة وأجوبة

1). ما هو عمل وحدة التحكم؟

يتمثل عمل وحدة التحكم في توجيه تدفق البيانات أو التعليمات للتنفيذ بواسطة معالج الكمبيوتر. يتحكم ويدير وينسق الذاكرة الرئيسية ، ALU ، والتسجيلات ، والإدخال ، ووحدات الإخراج. يجلب التعليمات ويولد إشارات التحكم للتنفيذ.

2). ما هي ذاكرة التحكم؟

عادة ما تكون ذاكرة التحكم RAM أو ROM لتخزين عنوان وبيانات سجل التحكم.

3). ما هي وحدة التحكم ويلكس؟

المتسلسلة و الدوائر التوافقية تم استبدال وحدة التحكم السلكية بواسطة وحدة التحكم Wilkes. يستخدم وحدة تخزين لتخزين تسلسل تعليمات برنامج صغير.

4). ما هي وحدة التحكم السلكية؟

تولد وحدة التحكم السلكية إشارات التحكم عن طريق التغيير من حالة إلى حالة أخرى في كل نبضة على مدار الساعة دون أي تغيير مادي في الدائرة. يعتمد توليد إشارات التحكم على تسجيل التعليمات ، وفك التشفير ، وإشارات المقاطعة.

5). ما هي ذاكرة التحكم؟

يتم تخزين معلومات وحدة التحكم أو البيانات بشكل مؤقت أو دائم في ذاكرة التحكم.
ذاكرة التحكم من نوعين. هما ذاكرة الوصول العشوائي (RAM) وذاكرة القراءة فقط (ROM).

وبالتالي ، فإن هذا كله يتعلق بالتعريف والمكونات والتصميم والرسم البياني والوظائف و أنواع وحدات التحكم . إليك سؤال لك ، 'ما الغرض من تسجيل عنوان التحكم؟'