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

انواع آرایه ای یک یا چند عنصر از یک نوع را با هم و به صورت یک تک شیء گروه بندی می کنند. به هر عنصر آرایه می توان یک یا چند شاخص آرایه دسترسی داشت.

عناصر می توانند یکی از انواع VHDL باشند. برای نمونه، یک آرایه می تواند آرایه ها یا رکوردها را به عنوان عناصر خود داشته باشد.

 
Learning VHDL
 

در یک آرایه، تمام عناصر از یک نوع می باشند، مثال زیر یک اعلان نوع برای آرایه ای تک بعدی از بیت ها را نشان می دهد:

TYPE data_bus IS ARRAY(0 TO 31) OF BIT;

 

این اعلان یک نوع داده با نام data_bus اعلان می کند که آرایه ای 32 بیتی است. تمام عناصر آرایه شبیه به هم می باشند. با استاده از یک شاخص آرایه می توان به عناصر آرایه دسترسی پیدا کرد. نحوه دسترسی به عناصر آرایه در مثال زیر نشان داده شده است:

 

VARIABLE X : data_bus;
VARIABLE Y : BIT;

Y := X(0);     --line 1
Y := X(15);    --line 2

 

این مثال یک قطعه کد VHDL را نشان می دهد نه یک مدل کامل را. در خط 1، به نخستین عنصر آرایه X دسترسی می شود و به متغیر Y تخصیص می یابد که از نوع بیت است.

نوع Y بایستی با نوع مبنای آرایه X یکی باشد تا تخصیص انجام شود. اگر نوع ها یکسان نباشد، کامپایلر یک خطا تولید می کند.

در خط 2، شانزدهمین آرایه X دستیابی می شود زیرا شاخص آرایه از 0 شروع می شود. عنصر 0 نخستین عنصر است، عنصر 1 دومین عنصر و به همین ترتیب.

در زیر مثال جامع تری از دستیابی به آرایه ارائه می کنیم:

PACKAGE array_example  IS
        TYPE data_bus  IS ARRAY(0 TO 31) OF BIT;
        TYPE small_bus IS ARRAY(0 TO 7) OF BIT;
END array_example;

USE WORK.array_example.ALL;
ENTITY extract IS
       PORT (data     : IN data_bus;
             Start    : IN INTEGER;
             data_out : OUT small_bus);
END extract;

ARCHITETURE test OF extract IS
BEGIN
    PROCESS(data , start)
    BEGIN
        FOR i IN 0 TO 7 LOOP
            data_out(i) <= data(i + start);
        END LOOP;
    END PROCESS;
END test;

 

این موجودیت یک عنصر آرایه 32 بیتی را به عنوان یک درگاه می گیرد و 8 بیت از عنصر را برمی گرداند. 8بیت برگشتی به مقدار شاخص start بستگی دارد. 8 بیت از طریق درگاه خروجی data_out برگردانده می شود.

تغییر در مقدار start یا data پروسس را برای اجرا تریگر می کند. حلقه FOR 8 بار تکرار می شود و هر بار یک تک بیت از درگاه data را به درگاه data_out کپی می کند.

نقطه شروع کپی در مقدار صحیح درگاه start رخ می دهد.هر بار در حلقه، به عنصر i ام data_out عنصر (i+start) ام داده تخصیص می یابد.

 

مثال های بالا آرایه ساده ای با انواع مبنای اسکالر داشته اند. در مثال زیر نوع مبنای آرایه، آرایه ای دیگر است:

LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
PACKAGE memory IS
    CONSTANT width   : INTEGER := 3;
    CONSTANT memsize : INTEGER := 7;

    TYPE data_out IS ARRAY(0 TO width) OF std_logic;
    TYPE mem_data IS ARRAY(0 TO memsize) OF data_out;
END memory;

LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
USE WORK.memory.ALL;
ENTTY rom IS
    PORT( addr : IN INTEGER;
      Data : OUT data_out;
      Cs   : IN std_logic);
END rom;

ARCHITECTURE basic OF rom IS
    CONSTANT z_state : data_out := (‘Z’ , ‘Z’ , ‘Z’ , ‘Z’);
    CONSTANT x_state : data_out := (‘X’ , ‘X’ , ‘X’ , ‘X’);
    CONSTANT rom_data : mem_data :=
           (    (‘0’ , ‘0’ , ‘0’ , ‘0’),
                (‘0’ , ‘0’ , ‘0’ , ‘1’),
                (‘0’ , ‘0’ , ‘1’ , ‘0’),
                (‘0’ , ‘0’ , ‘1’ , ‘1’),
                (‘0’ , ‘1’ , ‘0’ , ‘0’),
                (‘0’ , ‘1’ , ‘0’ , ‘1’),
                (‘0’ , ‘1’ , ‘1’ , ‘0’),
                (‘0’ , ‘1’ , ‘1’ , ‘1’)    );

BEGIN
    ASSERT addr <= memsize
        REPORT “addr out of range”
        SEVERITY ERROR;

        Data <= rom_data(addr) AFTER 10 ns WHEN cs = ‘1’ ELSE
        Z_state AFTER 20 ns WHEN cs = ‘0’ ELSE
        X_state AFTER 10 ns;
END basic;

 

بسته حافظه برای تعریف دو نوع داده ای که ساختارهای داده موجودیت rom را می سازند از دو ثابت استفاده می کند. با تغییر پهنای باند ثابت و کامپایل دوباره، می توان پهنای خروجی حافظه را تغییر داد. داده های اولیه ROM را نیز می توان برای انعکاس پهنای جدید تغییر داد.

انواع داده بسته حافظه برای تعریف انواع داده درگاه های موجودیت نیز استفاده می شوند. به خصوص، درگاه داده از نوع data_out تعریف می شود.

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