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

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

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

تطوير بيئة العمل

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

مواصفات الذاكرة

–         ذاكرة قراءة فقط ROM  غير متزامنة (ليس لها مدخل قدح clock).

–         128 بايت منظمة على شكل 64 سطر.

–         مدخل عنوان و خرج بيانات16 بت.

المتطلبات الإضافية

لابد من إيجاد آلية لتزويد الذاكرة المبنية بالعناوين المناسبة، نلاحظ أن العناوين متلاحقة بشكل متزايد و بالتالي سيفي عداد متزايد بالغرض.

ولكن متى سنقرأ التعليمة التالية؟

عند انتهاء التعليمة الحالية.

ستزوِّد وحدةُ التحكم في المعالج العدادَ بإشارة لزيادة الخرج بمقدار واحد، أي الانتقال إلى التعليمة التالية.هذا يعني تعديل بنية المعالج السابق بحيث يضاف إليه خرج RIM.

متى يتم سيتم تفعيل إشارة RIM  ؟

عندما سنقرأ التعليمة التالية أي عند انتهاء التعليمة الحالية، و بالتالي ستكون إشارة RIMهي نفسها إشارة Clear التي تذهب إلى العداد الداخلي upcount.

سنعدل توصيف المعالج من خلال إضافة الإشارة RIM

RIM : OUT STD_LOGIC;

RIM <= Clear;

توصيف العداد

LIBRARY ieee;

 USE ieee.std_logic_1164.all;

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

 ENTITY counter IS

 PORT ( enable: IN STD_LOGIC;

               digit: OUT INTEGER RANGE 0 TO 64);

 END counter;

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

 ARCHITECTURE behavioral OF counter IS

 BEGIN

                PROCESS(enable)

                VARIABLE temp : INTEGER RANGE 0 TO 65 := 0;

                BEGIN

                                IF (enable = ‘1’) THEN

                            temp := temp + 1;

                             IF (temp = 65) THEN temp := 1;

                             END IF;

                                END IF;

                                digit <= temp;

END PROCESS;

END behavioral;

توصيف الذاكرة

نلاحظ أن مجال العد في العداد من 1 إلى 64 لذلك سيكون خط العناوين للذاكرة ضمن هذا المجال ، و ستصمم الذاكرة بـ 65 حجرة بحيث تكون الحجرة رقم 0 فارغة.

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_ARITH.ALL;

USE IEEE.STD_LOGIC_SIGNED.ALL;

————————————–

ENTITY ROM IS

PORT( address : IN INTEGER RANGE 0 TO 64;

         read_data : OUT STD_LOGIC_VECTOR(15 DOWNTO 0 ));

END ROM;

————————————–

ARCHITECTURE behavioral OF ROM IS

  TYPE memArray IS ARRAY (0 TO 64) OF STD_LOGIC_VECTOR (15 DOWNTO 0);

  SIGNAL mem : memArray;

 BEGIN

             mem(1) <= X”0040″; — mvi R0,00FFh

             mem(2) <= X”0048″; — mvi R1,00FEh

             mem(3) <= X”00c8″; — sub R1,R0

             mem(4) <= X”0011″; — mv R2,R1

 PROCESS (address)

    BEGIN

                            read_data <= mem (address);

  END PROCESS;

END behavioral;

البنية الكاملة

يوضح الشكل التالي توصيل العناصر الثلاثة المعالج و الذاكرة و العداد.

LIBRARY ieee;

USE ieee.std_logic_1164.all;

USE ieee.std_logic_signed.all;

——————————————————————

ENTITY Processor IS

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

            Reset,Clock,Run         :IN         STD_LOGIC;

            Done                          :OUT     STD_LOGIC;

            BusWires                    :OUT     STD_LOGIC_VECTOR(15 DOWNTO 0));

END Processor;

ARCHITECTURE Structural OF Processor IS

——–COMPONENTS—————

COMPONENT  proc IS

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

            Reset,Clock,Run           :IN         STD_LOGIC;

            IIN                               :IN        STD_LOGIC_VECTOR(15 DOWNTO 0);

           Done,RIM                      :OUT     STD_LOGIC;

           BusWires                      :OUT     STD_LOGIC_VECTOR(15 DOWNTO 0));

END COMPONENT;

COMPONENT counter IS

 PORT ( enable: IN  STD_LOGIC;

                digit: OUT INTEGER RANGE 0 TO 63);

 END COMPONENT;

 COMPONENT ROM IS

PORT( address : IN  INTEGER RANGE 0 TO 63;

       read_data : OUT STD_LOGIC_VECTOR(15 DOWNTO 0 ));

END COMPONENT;

———SIGNALS—————-

SIGNAL counter_ROM  : INTEGER RANGE 0 TO 63;

SIGNAL Clear_enable   : STD_LOGIC;

SIGNAL ROM_IIN          : STD_LOGIC_VECTOR(15 DOWNTO 0);

————ARCHETUCTER———

BEGIN

counter_R:counter

PORT MAP(Clear_enable,counter_ROM);

Instruction_mem:ROM

PORT MAP(counter_ROM,ROM_IIN);

simple_processor:proc

PORT MAP(DIN,Reset,Clock,Run,ROM_IIN,Done,Clear_enable,BusWires);

END Structural;

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

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

أضف تعليقاً

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

WordPress.com Logo

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

صورة تويتر

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

Facebook photo

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

Google+ photo

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

Connecting to %s