عکس پیش‌فرض نوشته

بلوک ها یک سازوکار تقسیم در VHDL می باشند که به طراح اجازه می دهند نواحی مدل را به طور منطقی گروه بندی کند. بلوک ها مشابه نقشه شماتیک در یک سیستم ورود شماتیک می باشند. در یک سیستم ورود شماتیک معمولی، سطح یا قسمتی از طرح را می توان با چند نقشه شماتیک نشان داد. دلیل تقسیم بندی طرح ممکن است استانداردهای طراحی C در مورد تعداد قطعات مجاز بر روی یک نقشه، یا تقسیم بندی قابل فهم تر از نظر طراح باشد.

learning VHDL

 

دستورات بلوکی نیز همین شباهت ها را دارند. ناحیه دستور معماری را می توان به چند ناحیه منطقی مجزا تفکیک کرد. برای نمونه، اگر یک CPU طراحی می کنید، بلوک ها می توانند ALU ، ثبات و یا شیفت دهنده باشند.

هر بلوک ناحیه کاملی از مدل را نشان می دهد. هر بلوک می تواند سیگنال های محلی، انواع، ثابت ها و غیره را اعلان کند. اشیاء قابل اعلان در بخش اعلان معماری را می توان در بخش اعلان بلوک اعلان کرد.

مثال زیر را در نظر بگیرید:

 

LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
PACKAGE bit32 IS
     TYPE tw32 IS ARRAY(31 DOWNTO 0) OF std_logic;
END bit32;

LABRARY IEEE;
USE IEEE.std_logic_1164.ALL;
USE WORK.bit32.ALL;
ENTTY cpu IS
     PORT ( clk, interrupt : IN std_logic;
            addr : OUT tw32; data : INPUT tw32 );
END cpu;

ARCHITECTURE cpu_blk OF cpu IS
     SIGNAL ibus, dbus : tw32;
BEGIN
     ALU : BLOCK
          SIGNAL qbus : tw32;
     BEGIN
     -- alu behavior statements
     END BLOCK ALU;

     REG8 : BLOCK
          SIGNAL zbus : tw32;
     BEGIN
          REG1 : BLOCK
               SIGNAL qbus : tw32;
          BEGIN
          -- reg1 behavioral statement;
          END BLOCK REG1;

          -- more REG8 statements
     END BLOCK REG8;
END cpu_blk;

 

CPU خارجی ترین اعلان موجودیت مدل است (این مدل کامل نیست). موجودیت CPU چهار درگاه اعلان می کند که به عنوان واسط مدل استفاده می شوند.

درگاه های clk و interrupt ورودی می باشند. addr یک درگاه خروجی و data یک درگاه ورودی/خروجی است. تمام این درگاه ها برای برای تمام بلوک های اعلان شده در معماری موجودیت CPU قابل مشاهده اند. از درگاه های ورودی می توان مقدار خواند و به درگاه های خروجی مقداری تخصیص داد.

سیگنال های ibus و dbus سیگنال های محلی اعلان شده در معماری cpu_clk می باشند. این سیگنال ها برای معماری cpu_blk محلی اند و از خارج معماری قابل ارجاع نیستند. با این وجود، هر بلوک داخل معماری می تواند به این سیگنال ها رجوع کند.

هر بلوک سطح پایین تر می تواند به سیگنال های سطح بالاتر رجوع کند اما بلوک های سطح بالاتر نمی توانند از سیگنال های محلی سطح پایین تر استفاده کنند.

سیگنال qbus در بخش اعلان بلوک ALU اعلان شده است. این سیگنال برای بلوک ALU محلی است و نمی تواند خارج از بلوک استفاده شود. تمام دستورات داخل بلوک ALU می توانند از qbus استفاده کنند، اما دستورات خارج از بلوک ALU نمی توانند از آن استفاده کنند.

دقیقا به همان سبک، سیگنال zbus برای بلوک REG8 محلی است. بلوک REG1 و تمام دستورات دیگر درون بلوک REG8 به سیگنال zbus دسترسی دارند.

در بخش اعلان بلوک REG1 سیگنال دیگری به نام qbus اعلان شده است. این سیگنال با سیگنال qbus اعلان شده در بلوک ALU همنام است. آیا این مشکلی ایجاد می کند؟

از نظر کامپایلر این دو سیگنال مجزا می باشند، و با وجود سردرگم کننده بودن، این کاربرد در VHDL مجزا است. دو سیگنال در دو ناحیه اعلانی مجزا اعلان شده اند و فقط در آن نواحی معتبرند، بنابراین به صورت دو سیگنال مجزا با یک نام درنظر گرفته می شوند. هر qbus فقط در بلوک حاوی اعلان سیگنال قابل استفاده است، مگر اینکه به صورت یک نام کامل توصیف شود.

 

در زیر مثال دیگری نشان داده شده است:

 

BLK1 : BLOCK
     SIGNAL qbus : tw32;
BEGIN

BLK2 : BLOCK
     SIGNAL qbus : tw32;
BEGIN
-- blk2 statements
END BLOCK BLK2;

-- blk1 statements
END BLOCK BLK1;

 

در این مثال، سیگنال qbus در دو بلوک اعلان شده است. ویژگی جالب توجه مدل این است که یکی از بلوک ها درون دیگری قرار دارد. به نظر می رسد که BLK2 به دو سیگنال qbus دسترسی دارد، اولی از اعلان محلی qbus در بخش اعلان BLK2 و دومی از بخش اعلان BLK1 . BLK1 بلوک والد BLK2 است.

با این وجود، BLK2 فقط سیگنال qbus اعلان شده در خودش را می بیند. سیگنال qbus بلوک BLK1 با اعلان همان نام در BLK2 خنثی می شود.

اگر نام سیگنال qbus بلوک BLK1 با نام بلوک مشخص شود، در داخل BLK2 قابل مشاهده است. برای نمونه در این مثال، جهت استفاده از سیگنال qbus اعلان شده در BLK1 از BLK1.qbus استفاده می شود.

در کل، این روش مدل سازی بسیار سردرگم کننده است. مشکل در این حقیقت ریشه دارد که بدون تحلیل دقیق کلیه اعلان ها هرگز نمی توان کاملا مطمئن شد که از کدام qbus استفاده می شود.

همانطور که قبلا اشاره شد، بلوک ها نواحی کاملی از مدل می باشند. اما، بلوک ها منحصر به فرد می باشند زیرا هر بلوک می تواند درگاه و ژنریک هایی داشته باشد. با این قابلیت طراح می تواند سیگنال ها و ژنریک های خارج از بلوک را به سیگنال ها و ژنریک های داخل بلوک تصویر کند.

 

این آموزش بیش از ۳ سال قبل ارسال شده و اکنون در لیست به‌روزرسانی‌های سایت قرار دارد. اگر پیشنهاد یا انتقادی برای بهبود آموزش دارید، خوشحال می‌شیم به ما اطلاع بدهید.