الدرس التاسع – بناء معالج بسيط – 16 بت (2)

سلسلة من الدروس في لغة توصيف العتاد الصلبVHDL

الدرس التاسع – بناء معالج بسيط – 16 بت (2)

CASE WHEN

تسمح لنا هذه الكتلة باختبار إشارة محددة و اتخاذ قرارات متعددة وفقاً لقيمها المختلفة. و هي كتلة تسلسلية توجد بالتالي في الـ Process.

CASE X IS

WHEN “xxx” => Y <= “yy”;

.

.

.

END CASE;

يجب الانتباه إلى ضرورة مناقشة جميع الحالات الممكنة و عدم إغفال أي قيمة و يمكن القيام بذلك باستخدام:

WHEN OTHERS  => Y <= “ZZ”;

توصيف المعالج بلغة VHDL

سنقوم بتوصيف الأجزاء المختلفة للمعالج بشكل منفصل و من ثم تجميعها مع بعضها لتشكيل البنية الكاملة للمعالج.

المسجلات

إن المسجلات جميعها لها بنية واحدة لذلك نقوم بتوصيف هذه البنية.

LIBRARY ieee;

USE ieee.std_logic_1164.all;

———————————-

ENTITY reg IS

PORT(R:IN STD_LOGIC_VECTOR(15 DOWNTO 0);

              Rin,Clock:IN STD_LOGIC;

              Q :OUT STD_LOGIC_VECTOR(15 DOWNTO 0));

END reg;

———————————-

ARCHITECTURE Behavioral OF reg IS

Begin

Process(Clock)

Begin

IF(Clock’EVENT AND Clock =’1′) THEN

IF (Rin = ‘1’) THEN

Q <= R;

END IF;

END IF;

END Process;

END Behavioral;

الناخب

LIBRARY ieee;

 USE ieee.std_logic_1164.all;

 ——————————————-

 ENTITY mux_10 IS

 PORT ( DIN, R0, R1, R2 ,R3 ,R4 ,R5 ,R6 ,R7 ,G: IN STD_LOGIC_VECTOR(15 DOWNTO 0);                                 

       sel: IN STD_LOGIC_VECTOR (9 DOWNTO 0);

         Q: OUT STD_LOGIC_VECTOR(15 DOWNTO 0));

END mux_10;

 ——————————————-

 ARCHITECTURE Behavioral OF mux_10 IS

 BEGIN

Q <=   DIN WHEN sel=”0000000001″ ELSE

            G   WHEN sel=”0000000010″ ELSE

           R0  WHEN sel=”0000000100″ ELSE

            R1  WHEN sel=”0000001000″ ELSE

            R2  WHEN sel=”0000010000″ ELSE

            R3  WHEN sel=”0000100000″ ELSE

            R4  WHEN sel=”0001000000″ ELSE

            R5  WHEN sel=”0010000000″ ELSE

            R6  WHEN sel=”0100000000″ ELSE

            R7  WHEN sel=”1000000000″ ELSE

“ZZZZZZZZZZZZZZZZ”;

 END Behavioral;

وحدة  الحساب و المنطق

LIBRARY ieee;

 USE ieee.std_logic_1164.all;

 USE IEEE.STD_LOGIC_arith.all;

 USE IEEE.STD_LOGIC_UNSIGNED.ALL;

 ——————————————-

 ENTITY alu_16 IS

 PORT ( IN1,IN2: IN STD_LOGIC_VECTOR(15 DOWNTO 0);

             op: IN STD_LOGIC_VECTOR (1 DOWNTO 0);

              Q: OUT STD_LOGIC_VECTOR(15 DOWNTO 0));

END alu_16;

 ——————————————-

 ARCHITECTURE Behavioral OF alu_16 IS

 BEGIN

Process(op,IN1,IN2)

Begin

CASE op IS

WHEN “00” => Q <= IN1 + IN2;

WHEN “01” => Q <= IN1 – IN2;

WHEN “10” => Q <= IN1 AND IN2;

WHEN “11” => Q <= IN1 OR IN2;

WHEN OTHERS =>  Q <= “ZZZZZZZZZZZZZZZZ”;

END Case;

END Process;

 END Behavioral;

وحدة التحكم

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

لتحديد إشارات التحكم اللازمة يجب تفصيل تنفيذ كل عملية، سنذكر الآن مثالاً مفصلاً وهو عملية جمع مسجلين add Ry , Rx.

لإنجاز هذا الجمع سنمر بالخطوات التالية و بالترتيب:      

1-    نقل محتوى المسجل Ry  إلى المسجل المراكم A.

2-    وضع محتوى المسجل Rxعلى الممر، و تحديد العملية المطلوبة من وحدة الحساب و المنطق على أنها جمع، و تمكين حفظ النتيجة.

3-    نقل النتيجة إلى المسجل Ry.

نلاحظ أن الخطوة الأولى لا يمكن تنفيذها سوية ً مع الخطوة الثانية لأن كلاهما بحاجة لممر النظام و كذلك الأمر بالنسبة للخطوة الثالثة فهي أيضاً بحاجة للممر، مما يعني ضرورة إنجاز عملية الجمع على مراحل. تنفيذ  العملية على مراحل يفرض علينا وجود آلية تعين وحدة التحكم على الانتقال بين المراحل. يمكن الاستعانة بعداد يتعاون مع وحدة التحكم لتحديد المراحل لإنجاز العملية بشكل كامل و صحيح. سيكون التعاون بحيث تصفّر وحدة التحكم قيمة العداد من خلال إشارة Clear  في بداية تنفيذ كل عملية،  و يقوم العداد بتزويد وحدة التحكم بخطوات عد متزايدة  تساعد وحدة التحكم على الانتقال بين مراحل التنفيذ و ضمان صحة تنفيذ  العملية.

العداد

LIBRARY ieee;

USE ieee.std_logic_1164.all;

USE IEEE.STD_LOGIC_arith.all;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

——————————

ENTITY upcount IS

PORT(Clear,Clock   :IN STD_LOGIC;

              Q              :OUT STD_LOGIC_VECTOR(1 DOWNTO 0));

END upcount;

——————————–

ARCHITECTURE Behavioral OF upcount IS

Begin

Process(Clock)

VARIABLE count :STD_LOGIC_VECTOR(1 DOWNTO 0):= “00”;

Begin

IF(Clock’EVENT AND Clock =’1′) THEN

IF (Clear = ‘1’) THEN

count := “00”;

ELSE

count := count + 1;

END IF;

END IF;

Q <= count;

END Process;

END Behavioral;

 

بالعودة إلى فكرة التنفيذ على مراحل نجد أننا في المراحل الثلاثة نحتاج إلى معرفة عناوين المسجلات و كذلك معرفة من هي العملية (الخانات الثلاثة الأولى من شيفرة التعليمة) حتى الخطوة الثانية، إذاً لا بدّ من الاحتفاظ بشيفرة التعليمة طول فترة تنفيذها و هذا يفرض وجود مسجل للاحتفاظ بهذه التعليمة. لتحقيق ذلك يوجد المسجل IR  بين مدخل التعليمة IIN و وحدة التحكم.


About زين العابدين

مهندس حواسيب - معهد IDA - جامعة Braunshweig التقنية.
هذا المنشور نشر في دروس تعليمية وكلماته الدلالية , , , . حفظ الرابط الثابت.

رد واحد على الدرس التاسع – بناء معالج بسيط – 16 بت (2)

  1. يقول Hani Al-danaf:

    السلام عليكم هل لي بسؤال من بعد اذن حضرتكم كيف يمكنن وصل ممر ب 4 بت مع ممرات كل منها 1 بت وذلك عند تصميم معالج باستخدام كل جزء ك بلوك

أضف تعليقاً

إملأ الحقول أدناه بالمعلومات المناسبة أو إضغط على إحدى الأيقونات لتسجيل الدخول:

WordPress.com Logo

أنت تعلق بإستخدام حساب WordPress.com. تسجيل خروج   / تغيير )

صورة تويتر

أنت تعلق بإستخدام حساب Twitter. تسجيل خروج   / تغيير )

Facebook photo

أنت تعلق بإستخدام حساب Facebook. تسجيل خروج   / تغيير )

Google+ photo

أنت تعلق بإستخدام حساب Google+. تسجيل خروج   / تغيير )

Connecting to %s