Міністерство освіти і науки України
Національний університет “Львівська політехніка”
Кафедра ЕОМ
Лабораторна робота №6
Проектування постійного запам'ятовуючого пристрою
Мета роботи: Вивчити принципи роботи постійного запам'ятовуючого пристрою (ПЗП). Отримати навички застосування масивів при створенні проектів у Active-HDL.
Теоретична частина
В VHDL масив інтерпретується як тип, значення якого складається з ряду елементів єдиного підтипу. Кожен елемент масиву відрізняється своїм індексом або рядом індексів (в багатовимірних масивах). Індекс масиву повинен мати порядковий тип і знаходитись в області допустимих значень. Таким чином, перш ніж застосовувати масив у VHDL, необхідно задекларувати тип масиву, а потім задекларувати масив як об'єкт:
type array_type_name is array index_range of element_type;
variable array_name: array_type_name [:= initial_values];
Приклад одновимірного масиву:
type A is array (5 downto 0) of bit;
variable B : A := "011001";
Для багатовимірного масиву порядок і структура оголошення масиву залишаються така ж сама, наприклад
type A is array (1 to 3, 1 to 2) of integer;
variable B : A := ((0 , 1),(5 , 2),(7, 8));
У наведених прикладах замість ключового слова variable може стояти signal або constant.
При декларуванні типу масиву дозволяється не визначати його розмірність. Такі типи масивів називаються необмеженими. В цьому випадку розмірність вказується при декларуванні масиву, як об'єкта:
type arr_type is array (index_type range <>) of elements_type;
variable arr_name: arr_type (index_range) [:= initial_val];
де index_type - тип індексів масиву (integer, natural, і т.п.).
Багатовимірні необмежені масиви і їх типи оголошуються аналогічно. Наприклад:
type multy is array (integer range <>, bit range <>, ... , boolean range <>) of elements_type;
Тексти VHDL-кодів:
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.STD_LOGIC_UNSIGNED.all;
entity ROM is
port(
CEO : in STD_LOGIC;
Addr : in STD_LOGIC_VECTOR(3 downto 0);
Dout : out STD_LOGIC_VECTOR(3 downto 0)
);
end ROM;
--}} End of automatically maintained section
architecture ROM of ROM is
begin
process (Addr)
type ROM_array is array (15 downto 0) of STD_LOGIC_VECTOR(3 downto 0);
constant rom_mem:ROM_array := ("0000","0001","0010","0011",
"0100","0101","0110","0111",
"1000","1001","1010","1011",
"1100","1101","1110","1111");
begin
if CEO = '1' then
Dout <= rom_mem(Conv_Integer(Addr));
end if;
end process;
-- enter your statements here --
end ROM;
Часові діаграми роботи ПЗП:
Висновки: я вивчив принципи роботи постійного запам'ятовуючого пристрою (ПЗП). Отримав навички застосування масивів при створенні проектів у Active-HDL.